{"version":3,"sources":["comps/ScrollToTop/index.js","StylesheetComps/Colors/index.js","MobileComponents/Divs/index.js","MobileComponents/Images/index.js","MobileComponents/Text/index.js","StylesheetComps/Cont/index.js","StylesheetComps/Imgs/Icons/index.js","StylesheetComps/UserRoles/index.js","comps/MobileSlideMenu/index.js","comps/ActionMenu/index.js","comps/IconButton/index.js","comps/ChangePass/index.js","StylesheetComps/LandscapeForm/index.js","API_Functions/CaseQuote_Functions/index.js","StylesheetComps/AuthSheet/index.js","StylesheetComps/Menu/index.js","StylesheetComps/Titles/index.js","API_Functions/Utility_Functions/index.js","API_Functions/Store_Functions/index.js","comps/Windows/AddProjectOBO/index.js","comps/MenuComps/Menu/index.js","comps/Input/index.js","MobileComponents/Buttons/index.js","MobileComponents/Inputs/index.js","comps/UpdateProfile/index.js","StylesheetComps/Quote/index.js","pages/Profile/index.js","StylesheetComps/OverlayCont/index.js","comps/Estimate Form/ConfirmSave/index.js","Lottie.js","StylesheetComps/Div/index.js","comps/Estimate Form/Drafted/index.js","comps/Estimate Form/Landscape Desc/index.js","comps/Estimate Form/Personal Info/index.js","StylesheetComps/Imgs/Images/index.js","StylesheetComps/Components/index.js","comps/Windows/PhotoUpload/index.js","comps/Estimate Form/Photo Upload/index.js","comps/Estimate Form/Project Area/index.js","comps/Estimate Form/Project Budget/index.js","comps/Estimate Form/Project Overview/index.js","comps/Estimate Form/Project Path/index.js","comps/Estimate Form/Project Scope/index.js","comps/Estimate Form/Project Style/index.js","comps/Estimate Form/ProjectDescType/index.js","comps/Estimate Form/Submitted/index.js","comps/MenuComps/TopMenu/index.js","pages/Estimate/index.js","StylesheetComps/Projects/index.js","comps/CaseCard/index.js","comps/ManagerCard/index.js","comps/Windows/AddManager/index.js","StylesheetComps/Cont/RightView/index.js","pages/ManagerList/index.js","comps/StoreSupplierCard/index.js","comps/Windows/EditSupplier/index.js","comps/Windows/NewRole/index.js","pages/RoleList/index.js","comps/MetroCatCard/index.js","comps/Windows/New Metro/index.js","comps/Windows/DeleteMetro/index.js","comps/Windows/EditMetro/index.js","pages/MetroCat/index.js","comps/RoleCatCard/index.js","pages/RoleCat/index.js","comps/Windows/EditStore/index.js","StylesheetComps/Inputs/index.js","comps/DropdownMenu/index.js","API_Functions/CatProduct_Functions/index.js","comps/StoreCard/index.js","API_Functions/Tool_Functions/index.js","pages/Store/index.js","comps/MetroCityCard/index.js","comps/MetroStoreCard/index.js","comps/MetroTaxCard/index.js","comps/Windows/AddStore/index.js","comps/Windows/Delete This/index.js","comps/Windows/DeleteCity/index.js","comps/Windows/DeleteTax/index.js","comps/Windows/EditCity/index.js","comps/Windows/EditTax/index.js","comps/Windows/New City/index.js","comps/Windows/NewTax/index.js","pages/SingleMetro/index.js","comps/CategoryCard/index.js","RelatedProduct.svg","RelatedTool.svg","comps/ProductCard/index.js","comps/Windows/CategoryAdd/index.js","comps/Windows/CategoryEdit/index.js","comps/Windows/DeleteCat/index.js","pages/ProductCat/index.js","comps/Windows/ZoneCity/index.js","comps/Windows/ZoneCityCard/index.js","comps/Windows/ZoneSupplier/index.js","comps/ZoneSupplierCard/index.js","pages/SingleZone/index.js","MobileComponents/StaffProjectCard/index.js","comps/Windows/DeleteProduct/index.js","pages/Cases/index.js","comps/Windows/ConfirmWIndow/index.js","comps/CategoryContentList/index.js","comps/ProductAddOns/index.js","comps/Windows/EditProductSupplier/index.js","comps/ProductInfoCard/index.js","comps/productRel/index.js","comps/ProductRelTools/index.js","comps/Windows/ProductWindow/index.js","comps/Windows/MoveToFolder/index.js","pages/ProductList/index.js","comps/ToolCard/index.js","comps/ToolInfoCard/index.js","comps/ToolkitCard/index.js","comps/Windows/EditTool/index.js","comps/Windows/NewTool/index.js","comps/Windows/SubToolKitAdd/index.js","comps/Windows/SubToolKitEdit/index.js","comps/Windows/ToolRelProducts/index.js","pages/ToolList/index.js","StylesheetComps/CategoryTypes/index.js","comps/Quote Form/AccessArea.js","pages/Quote/index.js","comps/Windows/DeleteZone/index.js","comps/Windows/EditZone/index.js","comps/Windows/NewZone/index.js","comps/ZoneCatCard/index.js","pages/ZoneList/index.js","comps/StoreManagerCard/index.js","pages/StoreManager/index.js","comps/StoreAdminCard/index.js","pages/StoreListAdmin/index.js","manager.svg","phone.svg","pages/StoreAdmin/index.js","pages/Activate/index.js","comps/MenuComps/TopMenuQuoteView/index.js","comps/Windows/Calculators/index.js","comps/Windows/Tag/index.js","comps/Windows/QuoteItemWindow/index.js","comps/InteractiveLoadingBar/index.js","comps/Windows/QuoteAddOnSelection/index.js","comps/Quote Form/MaterialSelection.js","comps/QuoteGrandTotal/index.js","comps/QuoteTableItems/index.js","comps/QuoteTableTops/index.js","comps/QuoteTable/index.js","comps/QuoteTableDeliveryItems/index.js","comps/QuoteTableDelivery/index.js","comps/QuoteTableToolItems/index.js","comps/QuoteTableTools/index.js","comps/Windows/NewQuoteTool/index.js","comps/Windows/QuotePhotoUpload/index.js","comps/ToolCardQuote/index.js","comps/Windows/ToolSelectionCard/index.js","Stored_Values/index.js","comps/ProposalComment/index.js","pages/ViewQuote/index.js","pages/ViewQuotePage/index.js","pages/UpdateCase/index.js","pages/UpdateCasePage/index.js","comps/Windows/DeleteCancelAppointment/index.js","comps/EditAppointment/index.js","pages/MyCalendar/index.js","pages/StoreCalendar/index.js","comps/EditSchedule/index.js","pages/StoreSchedule/index.js","comps/InstallerCard/index.js","pages/StoreInstallers/index.js","comps/WorkerCard/index.js","pages/StoreWorkers/index.js","pages/InstallerAvailability/index.js","comps/CreateSchedule/index.js","pages/MySchedule/index.js","comps/ClockIn/index.js","pages/ClockInOut/index.js","comps/ClockList/index.js","pages/ClockSchedule/index.js","comps/CreateAppointment/index.js","comps/Windows/AvailableDates/index.js","pages/InstallerCalendar/index.js","pages/AcceptOrder/index.js","pages/RejectOrder/index.js","comps/StoreListInstallerCard/index.js","pages/StoreListInstallers/index.js","comps/StoreListCalendarCard/index.js","pages/StoreCalendarList/index.js","pages/InstallersAvailableOn/index.js","comps/ConfirmCancel/index.js","pages/InstallerPersonalCalendar/index.js","pages/ClockScheduleSummary/index.js","pages/StoreScheduleDay/index.js","comps/StoreEstimateListCard/index.js","pages/StoreEstimateList/index.js","pages/PaySuccess/index.js","pages/PaySuccessTransit/index.js","pages/PayFail/index.js","comps/InstallerQuoteAppCard/index.js","comps/Windows/ConfirmBiddingDateWindow/index.js","pages/QuoteAppointment/index.js","pages/UserCases/index.js","comps/Windows/ToolKitAdd/index.js","comps/Windows/ToolKitEdit/index.js","pages/Toolkits/index.js","pages/AuthPages/Login/index.js","pages/AuthPages/SignUp/index.js","pages/AuthPages/InstallerRegister/index.js","comps/CaseStatusButton/index.js","comps/CalendlyWidget/index.js","pages/Dashboard/index.js","comps/CaseCardUser/index.js","UserProjectPages/MyProjects/index.js","comps/ProposalCardUser/index.js","comps/Windows/DeleteProject/index.js","comps/Windows/RequestProjectCancel/index.js","StylesheetComps/CaseStatus/index.js","UserProjectPages/ViewProjectUser/index.js","comps/Windows/SaveRevisionGuide/index.js","comps/MenuComps/TopMenuProposalView/index.js","comps/Windows/UpdateBubble/index.js","comps/QuoteItemEstimator/index.js","comps/QuoteItem/index.js","comps/Windows/ImageEnlargementWindow/index.js","comps/Windows/RevisionInstructions/index.js","MobileComponents/MobileQuoteItem/index.js","comps/EstimateFooter/index.js","UserProjectPages/ViewProposalUser/index.js","comps/Windows/ChangeBidAmount/index.js","comps/BidItem/index.js","Bidding/BidQuotePage/index.js","pages/Billing/index.js","comps/ProposalCardGuide/index.js","comps/Windows/AddInvoice/index.js","comps/Windows/DeleteInvoice/index.js","comps/Windows/DeleteProposal/index.js","comps/Windows/GuideCancelProject/index.js","comps/Windows/SitemapOverlay/index.js","sitemappercomps/accessPopup/index.js","comps/ProjectPhotoUploadPreviewWindow/index.js","comps/EstimateReadReceipts/index.js","ProjectGuideView/ViewStoreProject/index.js","UserProjectPages/PaymentOptions/index.js","pages/PayPending/index.js","pages/MyAccount/index.js","pages/DashboardWelcome/index.js","comps/InvoiceItem/index.js","comps/InvoiceItemCombo/index.js","comps/InvoiceToolItem/index.js","InvoicePages/InvoiceGenerator/index.js","UserProjectPages/ProjectBidList/index.js","comps/CircularRing/index.js","comps/AnimatedCheckmark/index.js","comps/QuoteItemTimesheet/index.js","MobileComponents/MobileQuoteItemTimesheet/index.js","comps/TagProgressBar/index.js","MobileComponents/MobileEstimateQuoteItem/index.js","comps/CrewHourModal/index.js","UserProjectPages/ConstructionView/index.js","sitemappercomps/itempopup/index.js","comps/Windows/ConfirmationDialog/index.js","comps/Windows/GridOverlay/index.js","comps/DraggableSlider/index.js","comps/Windows/QuoteLineItem/index.js","comps/Windows/EmailWindow/index.js","comps/DuplicateProgress/index.js","UserProjectPages/ViewProposalEstimate/index.js","comps/SiteMapper/index.js","UserProjectPages/ViewProjectAccountant/index.js","UserProjectPages/ViewOnlyEstimate/index.js","pages/SitemapDesktop/index.js","pages/Inventory/index.js","FRSPages/CreateForm/index.js","FRSPages/ViewForm/index.js","FRSPages/FormStatistics/index.js","App.js","reportWebVitals.js","serviceWorkerRegistration.js","index.js"],"names":["ScrollToTop","pathname","useLocation","useEffect","window","scrollTo","ColorPalette","MobileMenuLinkDiv","styled","div","BackgroundColorDiv","props","width","bgcolor","padding","FixedItemPropertyDiv","MyAccountCardDiv","mobileflexdirection","FlexColumnDiv90vw","WhiteTopRoundedDivAutoHeight","display","WhiteTopRoundedDiv","TopDiv40vh","MobileSpaceAroundDiv","GreenBorderColumnDiv","TopDivWhite","AuthPageCont","Div100vw20vh","Div100vw10vh","SignupItemContWithEffects","MobileLogo30x30px","img","MobileLogo50x50px","TopImage15vh","TopImage20vh","TopImage40vh","LogoRelative","LogoRelativeLeft","MobileMenuLinkText","p","WhiteAvenirHeader","WhiteLeagueHeader","GreenLeagueText","RegularGreenLeagueText","fontsize","MobileBodyText","MenuHeader","LeagueHeader14px","LeagueHeader12px","UnderlinedBoldTitle16px","ErrorMessage12px","FlexColumnCont80vwAutoHeight","minheight","height","QuoteItemCont","margin","alignitems","justifycontent","opacity","borderbottom","mobilewidth","mobileheight","FlexColumnCont95x30Percent","FlexColumnCont100xAutoPercent","FlexRowContFullWidth","border","hoverbgcolor","hovermargin","marginleft","marginright","margintop","marginbottom","FlexColumnCont75x80Percent","FlexColumnCont70x100Percent","FlexColumnCont90x95Percent","AutoSizeOverflowY","FlexContDashboard","boxshadow","flexdirection","FlexListOverflowPropDiv","paddingtop","paddingbottom","maxheight","FlexColumnContAutoHeightLeftAlign","FlexColumnLeftAlign","overflowy","FlexColumnLeftAlignMaxHeight","FlexColumnContGreyBorders","FlexColumnContGreenBorders","FlexColumnContRedBorderTopRounded","FlexColumnContGreenBorderTopRounded","LeftItemWindowFixed","actualheight","left","top","minwidth","FlexColumnContGreenBorderTopRounded550pxHeight","FlexColumnCont250pxGreenBorderTopRounded","FlexColumnCont98xAutoFlexEnd","FlexColumnContFullWidthOverflowY","FlexColumnCont80x100Percent","FlexRowCont100x8PercentSpaceAround","FlexRowCont55x15Percent","FlexRowCont100x50Percent","FlexRowContAutox100Percent","flexwrap","mobiledisplay","FlexRowContAutox100PercentMobileColumn","FlexColumnCont98x50PercentJustifyLeft","FlexColumnCont80x10PercentAlignLeft","FlexColumnCont70x18PercentAlignLeft","FlexRowCont55x15PercentPropBorderBottom","FlexRowContPropWidth","mobilejustifycontent","FlexRowContFlexStartAutoHeight","FlexRowContFlexStart","position","mobilepaddingbottom","FlexRowContFlexStartMobileColumn","FlexRowCont70PercentSpaceBetween","FlexRowCont100PercentSpaceBetween","mobilebgcolor","FlexRowCont100PercentFlexEnd","FlexRowCont70PercentFlexStart","FlexRowCont60PercentSpaceEvenly","FlexRowCont60PercentFlexStart","FlexRowCont300x200","FlexRowCont","bottom","right","cursor","borderradius","wordwrap","zIndex","tabletflexdirection","tabletalignitems","mobilemargin","mobileborderbottom","mobilealignitems","mobilepadding","mobilemarginbottom","mobileborder","mobilemarginleft","mobileoverflowy","mobileposition","mobiletop","mobilebottom","mobileleft","mobileright","FlexRowContHalfHeight","FlexRowContHalfHeightFlexStart","FlexRowContBoxShadow","FlexContSpaceEvenly","RelativeFlexContAutoWidth13vh","FlexContFullWidthHeightJustifyCenter","FlexContFullWidthJustifyCenter","FlexContzIndex1","FlexColumnContCenterAlign","FlexContCenterAlign","ContAutoWidth5vh","Cont450pxAutoHeight","GridCont1000px","Cont85vwAutoHeight","ContMargin20px","Cont400x575pxNoMargin","Cont60PercentMargin20px","Cont100Percent100Percent","ContPadding10pxMargin20px","FlexCont300x150px","FlexCont90PercentAutoHeight","Cont100PercentMobile100Percent","Cont100Percent4Percent","GreyCont100Percent4PercentDisplayProp","displayProp","Cont100Percent4PercentDisplayProp","Cont100PercentMobileOpt","RelativeCont100Percent","FlexFixedCont","animated","FixedContHeight120vh","FlexCont70PercentAuto","Cont50Percent100Percent","Cont50Percent100PercentFlexEnd","Cont100Percent50Percent","RelativeCont100vwPropBottom","contbottom","FlexCont80PercentAutoHeightPadding","Cont82vw21vh","FlexCont76PercentMobile","Cont82vw15vh","FlexColumnPropWidth","FlexColumnFullWidth","textalign","overflowx","DivWithDisplay","fontweight","fontfamily","Grid_300Div","FlexColumnFullWidthMargins","Div70PerWidth7PerHeight","FlexCont80PercentMobileOpt","Cont100Percent80PercentOverflowY","Cont400x575px","Cont400x500px","FlexCont5vhMobile88x5","Cont400x400px","Cont400x400pxFixed","Cont500x850px","Cont500x200px","Cont500x200pxFixed","Cont500x200pxFixedNoMobile","StickyCont400x400px","ImageContGallery","AbsoluteCont","AbsoluteCalculatorCont","FlexContMobileColumn","FullWidthMobileCont100vw100vh","FlexContMobileTopVH","FlexCont100vw100vh","FlexDiv","FlexColumn81vwLightGrey","minheightmobile","LeftCont","RightCont","Icon80x80Percent","Icon40x40Percent","RelativeIconBottom70Percent","Icon30x40pxPointer","Icon30x40pxPointerNoMargin","Icon35px100Perc","Icon30x30","Icon15x15","Icon120x120","Icon100x100","Icon200x200","objfit","Icon60x60","zindex","Icon45x45","Icon20x20","UserRole","MobileSlideMenu","open","useState","setIdForUser","roleNum","setRoleNum","userId","setUserId","userName","setUserName","storeId","setStoreId","metroId","setMetroId","history","useHistory","GetSessionInfo","a","JSON","parse","sessionStorage","getItem","Metro_Id","Store_Id","Role","Id","Name","Logout","axios","post","$DBURL","status","onClick","push","src","defaultProps","onChange","onPreview","onFormComplete","onCloseMenu","ActionMenu","mobilePageProp","moreToggle","setMoreToggle","iconToggle","setIconToggle","menuSRC","setMenuSRC","addEventListener","e","$deferredPrompt","ChangeIcon","toggle","$ISMOBILE","profileurl","AddtoHomeScreenIOS","AddtoHomeScreenAndroid","StyledIconButton","color","lineheight","pointerevent","hoveropacity","Icon","iconheight","iconwidth","TextContainer","span","IconButton","alt","text","children","fadeInUp","keyframes","Container","Heading","h2","Divider","Label","label","StyledInput","input","FieldRow","ErrorText","ButtonRow","MobileContainer","button","cancel","ChangePass","passSwitch","onClose","onPasswordChanged","oldPass","setOldPass","newPass","setNewPass","confirmNewPass","setConfirmNewPass","errorText","setErrorText","ContainerEl","htmlFor","id","type","placeholder","value","target","ProgressBar","ProgressBarWidth","EstimatePageMainFlexCont","EstimatePageRightCont","EstimatePageRightView","Section1","EstimatorDiv","FormDivs","TextAreaRegular","textarea","TextAreaLarge","LandscapePara","mobilefontsize","TextAreaAutoResize","TextAreaMobile","TextAreaAutoResizeNoBorder","GreyNavigationButton","hovercolor","hoverborder","GreenNavigationButton","mobilemargintop","TextInputRegular","inputwidth","inputheight","inputborderradius","inputbgcolor","inputborderstyle","inputbordercolor","inputborderwidth","inputdisplay","mobilemarginright","TextInputReusable","TextInput72Percent","TextInput100Percent","TextSelect72Percent","select","SelectField","TextArea72Percent","DatalistMedium","DatalistOption","option","SmallHeaderLeagueSpartan","maxwidth","textdecoration","SecDivPersonalInfoMarginLeft","FormContPersonalInfo","FlexColumnGreenSelectables","MediumStyledImage","ImageFullWidth","Image300x200","Image300x200GreenBorder","Image375px","MediumStyledImage80Opacity","SmallIconDisplayNone","displaytransition","FlexDivSpaceAround","FlexDivMarginTop","FlexContBottomGrey","WideFlexInfoCont","FlexInfoCont","FlexDivFlexStartCenter","PhotoContExtra","QuoteStatus","CaseStatus","BidStatus","GetUserCases","user_id","get","resp","data","GetCaseById","AddCase","newcase","Case","UpdateACase","put","AssignCase","case_id","SetCaseTo_Submit","cas_id","SetCaseTo_Accept","SetCaseTo_Processed","SetCaseTo_Close","SetCaseTo_Cancel","SetCaseTo_CancelRequested","GetQuoteById","GetQuoteByIdForUserDisplay","AddQuote","quote","Quote","AddQuoteRevision","UpdateQuote","SetQuoteTo_Notify","quote_id","SetQuoteTo_Expire","SetQuoteTo_Created","SetQuoteTo_Buy","SetQuoteTo_Buy_Install","SetQuoteTo_Bid","GetStoreBiddingQuotes","storeid","quotes","GetQuoteItem","item_id","AddQuoteItem","item","Item","UpdateQuoteItem","DeleteQuoteItemByEstimator","delete","AddQuoteTool","Quote_Id","Tool_Id","RentalLength","Quant","UpdateQuoteTool","GetQuoteTool","DeleteQuoteTool","AddQuote_AccessArea","Case_Id","Width","Length","Elevation","Obstruct","UpdateQuote_AccessArea","GetQuoteObject","GetCaseObject","GetInvoice","Invoice","AddInvoice","invoice","DeleteInvoiceById","GetInvoiceObject","DeleteCaseById","DeleteQuoteById","GetInvoicesByUser","Invoices","ReverseQuant_QuoteItem","quantity","AddQuotePhoto","photo","Caption","File","newphoto","GetQuotePhoto","DeleteQuotePhoto","AddCasePhoto","GetCasePhoto","DeleteCasePhoto","AddQuoteTag","tag","TagName","newtag","UpdateQuoteTag","GetQuoteTag","DeleteQuoteTag","AddItemRelation","primaryitemid","secondaryitemid","description","Item_Id","RelatedItem_Id","Description","AuthCont","LeftAuthCont","backgroundimg","LeftItemsCont","Logo","Header","headercolor","BodyPara","bodycolor","RightAuthCont","RightItemsCont","RightBarDiv","LinkText","TextInput300x50","inputmargintop","inputmarginleft","inputmargintopmobile","inputmarginleftmobile","TextInputProp","SmallTextInput","RadioButtonInput100x30","RedirectDiv","InputDiv","GreenButtonWidth12VWHeight40","LargeResponsiveButton","mobilelineheight","MediumGreenButton","MediumWhiteButton","SelectableMediumLongButton","PrivacyPolicy","StickyTopMenuCont","MenuCont","TopMenuCont","TopMenuCont_AutoHeight","TopMenuContAutoHeightSticky","MenuNRCLogo","FlexColumnCont","paddingleft","paddingright","FlexColumnContBoxShadow","FlexColumnContBoxShadow19Percent","CircularImage125px","Icon20x80Percent","SmallHeader","StyledHR","hr","fadeIn","SmallHeaderOpenSansBold","SmallHeaderOpenSans","MediumHeaderMarginLeft","Futura25PercentWidth","txtLine","RegularTextBoldRed","LeagueSpartanLarge","whitespace","LeagueSpartanRegular","fontSize","LeagueSpartanRegularMinWidth","LeagueSpartanExtraLargeBold","LeagueSpartanExtraLargeWidth200px","SmallHeaderLeagueSpartanWidth100Percent","LeagueFontSize100Percent","LeagueSpartanTiny","LeagueSpartanTinyMargins","LeagueSpartanHeaderSmall","MediumHeader100PercentWidthWhiteText","RegularTextWithMargins","RegularGreenText","RegularText","marginTopMobile","marginBottomMobile","TinyTextItalics","GreyTinyTextItalics","RegularTextBold","SmallTitleBold","SmallTitleBoldWithWidth","RegularTextSmallWithWidth","RegularTextAutoMargin","TitleFontSize100Percent","RegularTextMobileSmall","TitleFontSize100PercentPointer","PropDiv","divdisplay","BlueUnderlinePointerPara","ExtraLargeTextMobileRegular","LargeText","ExtraLargeText","LargeHeaderBold","font_size","font_color","MediumHeader100PercentWidth","SmallGreenLeagueText","TinyHeaderDarkGrey","overflow","MediumHeaderDarkGrey","MediumHeader","SmallText","SmallTextPadding","StyledHRGreyBreak","StyledHRPropColour","StyledHRGreenBreak","StyledHRGreenBreakDashed","StyledHRGreenBreakThick","GetMetroList","metros","GetCityList","metroid","cities","SetHeaderAuthorization","token","defaults","headers","common","AddImageToCloud","image","pics","UploadFileToCloud","file","formdata","FormData","append","GetMetroTaxes","metro_id","tax","MakeStripePay","amt","currency","name","transactionid","store_id","userauthtoken","invoiceid","amount","Amt","CurrencyCode","ProductName","SuccessUrl","CancelUrl","checkout","GetCurrentTime","d","Date","fullyear","getFullYear","month","getMonth","slice","day","getDate","hour","getHours","time","getMinutes","seconds","getSeconds","curtime","decimalHoursToTimeString","decimalHours","hours","parseFloat","isNaN","toFixed","GetStoreInfo","store","GetTaxesForStore","tx","GetTaxesForMetro","AddStore","Store","UpdateStore","GetStoreByMetro","stores","AddStaffToStore","SpinnerContainer","Spinner","ModalOverlay","ModalContainer","AppleHeading","FormRow","FormColumn","AppleLabel","AppleInput","AppleSelect","QuickProjectForm","onNext","onBack","onPersonalInfo","setIsModalOpen","useParams","cityList","setCityList","metroList","setMetroList","ErrorMsg","setErrorMsg","isSubmitting","setIsSubmitting","newProjectObj","useRef","FullName","Email","StreetAddress","City","City_Id","Region","Phone","PropertyType","Details","RequestName","GetLocationInfo","metrodata","citydata","current","UpdateCityList","DefinePersonalInfo","automationData","console","error","selectedMetro","find","o","Number","SelectMetro","map","metro","selected","selectedCity","SelectCity","city","fullName","addressofUser","emailofUser","phoneofUser","Menu","Link","profileIconUrl","setProfileIconUrl","displayMetro","setDisplayMetro","setDisplayStoreCalendar","setDisplayInstallers","setDisplayWorkers","setDisplayClocksum","setDisplayschedule","displayStoreProjects","setDisplaystoreprojects","displayStoreManagement","setDisplaystoremanagement","setDisplaybidding","displayHoursetup","setDisplayHoursetup","setDisplayClockinout","setDisplayClockrecord","setDisplayMyschedule","displayQuickProject","setDisplayQuickProject","displayQuickProjectButton","setDisplayQuickProjectButton","removeItem","user","Username","Image","$IMGURL","style","InputStyle","Input","checked","defaultChecked","maxLength","autoComplete","defaultValue","Filter","setUn","setPass","MobileSmallGreenButton","MobileGreenButton","MobileWideGreenButton","MobileWideGreenButtonRelative","MobileInput","LeftFormField","FormLabel","ProfilePara","UpdateProfileButton","buttonborderradius","buttonbgcolor","buttoncolor","UpdatePass","SecDiv","PhotoCont","photoprops1","FormDivider","FileUpload","ProfileHR","EditDiv","displayprop","UpdateProfile","CallProfileAgain","onProfileUpdated","address","email","phone","role","updated","editprofile","emailValue","setEmailValue","NameValue","setNameValue","AddressValue","setAddressValue","PhoneValue","setPhoneValue","editDisplay","setEditDisplay","emailValue2","setEmailValue2","NameValue2","setNameValue2","AddressValue2","setAddressValue2","PhoneValue2","setPhoneValue2","ChangePropMetro","setChangePropMetro","ChangePropCity","setChangePropCity","ChangePropName","setChangePropName","ChangePropEmail","setChangePropEmail","ChangePropPhone","setChangePropPhone","ChangePropAddress","setChangePropAddress","ChangePropImage","setChangePropImage","ChangePropNameDisplay","setChangePropNameDisplay","ChangePropEmailDisplay","setChangePropEmailDisplay","ChangePropPhoneDisplay","setChangePropPhoneDisplay","ChangePropAddressDisplay","setChangePropAddressDisplay","ChangePropImageDisplay","setChangePropImageDisplay","ChangePropCityDisplay","setChangePropCityDisplay","ChangePropMetroDisplay","setChangePropMetroDisplay","ImgUrl","setImgUrl","profileDefaultUrl","setProfileDefaultUrl","photoDisplay","setPhotoDisplay","changeTextDisplay","setChangeTextDisplay","locationErrorText","setLocationErrorText","GetProfileInfo","Street","Metro","userobj","ContactInfo","React","UpdateMetroUIChanges","contactinfo","UpdateMetroAndCity","UpdateCityUIChanges","UpdateCity","handleUpload","event","Url","files","UploadFile","pic","i","log","reader","FileReader","onloadend","readAsDataURL","Backdrop","CircularProgress","buttonwidth","accept","ProfileName","imgurl","HundredPercentFlexDiv","HundredPercentFlexDivCenterItems","ItemSelectionContainer","TwentyPercentWidthCont","Cont100PercentWidth","CategoryCont","bgcolorprops","CategoryCenterInnerDiv","AvenirCategoryLabelWide","GridCont100PercentDisplayProps","Icon30px20pxPointer","Icon30px30pxPointer","slideDown","hoverTransition","css","MainContainer","ContentCard","SectionSeparator","HorizFlex","HiddenContent","isVisible","HeaderDiv","SmallSpacer","ProfileHeader","userinfo","roleName","onEdit","ProfileActions","onChangePassword","DesktopHeaderPlaceholder","ProfileCard","isMobile","passView","onClosePass","onPreviewPassword","onTogglePassView","editProfile","onUpdateProfile","userProps","onPreviewProfile","ProfileScreen","setPassSwitch","setEditProfile","setPassView","setUserinfo","setRoleName","UsernameValue","setUsernameValue","CityValue","setCityValue","MetroValue","setMetroValue","EmailValue","setcpCurrentUsername","setcpOldPass","setcpNewPass","setcpConfirmNewPass","setItem","stringify","HandlePasswordChangePreview","currentUsername","ChangePasswordFunc","UserName","OldPassword","NewPassword","Password","resplogin","Session","AuthToken","baseURL","HandleProfileUpdatePreview","UpdateAccount","StickyOverlayDiv160vwAutoHeight","FixedOverlayRegular","FixedOverlay1000vh","FixedOverlay200vh","OverlayCont300pxAutoHeight","OverlayCont450pxAutoHeight","AbsoluteOverlayDivFullWidth","OverlayDiv200vh400vw","FlexOverlayDivFullWidth","SaveProjectWindow","saveOpen","onSaveCase","SaveCase_ChangeStatusToSubmit","submitted","setSubmitted","SaveCase","LottieAnimation","lotti","defaultOptions","loop","autoplay","animationData","rendererSettings","preserveAspectRatio","options","MobileMainCont","MenuMainCont","SummaryContainerItems","SummaryContainer","mobileWidth","FlexDivMargins","FlexEndDivAutox15Percent","Div70Percent","FlexColumnDivSpaceBetween","Div30Percent","FlexDiv50Percent","FlexDivSpaceBetween","Div300x400pxMargin30px","BlankDiv","FlexDivLeftAlign","FlexCenterDiv100PercentSpaceBetween","FlexCenterDiv100PercentCenter","FlexDiv90PercentMargins","GridDivMobileFlexDiv","GridDiv80xAutoPercent","FlexDiv70x7Percent","FullWidthDivPropDisplay","vacationdisplayprop","FlexColumnStartDiv45Percent","FlexDivCenter","FlexDivFlexEnd","Div400x75px","Div450x175px","Div300pxMargin30px","FlexColumnDiv","QuadContainer","QuadDeleteTitle","QuoteQuadMedium","bottomrightborder","QuoteQuadHeaderBorderTopLeft","QuoteQuadHead","QuoteQuadHeadMedium","QuoteQuadHeaderBorderTopRight","FullWidthDivFlexStart","FlexDivCentered45Percent","FlexColumnDivCentered20Percent","FlexibleEstimateDiv35Percent","FlexibleEstimateDiv15Percent","borderright","GreyFlexibleEstimateDiv15Percent","FlexibleEstimateDiv5Percent","FlexContainerPhotos","FlexContainerItem","GridContainer3Wide","GridContainer2Wide","InlineGridContainer","Div175px","Div80px","Div150pxMobile250px","Div150pxMobileDisplayNone","StyledDiv","mobileDisplay","Submitted","grow","basis","shrink","Balloons","LandscapeDesc","preDesc","setDescription","characterLimitState","setCharacterLimitState","CheckLandscapeDescription","landscapeText","length","onStoreDescriptionLocal","PersonalInfo","params","projectInfoMargin","Title","setTitle","firstName","lastName","undefined","CityId","setFirstName","setLastName","OverrideEmbedImage","OverrideEmbedDiv","InboxProfileImage","RoundedImageFullWidth","Image200x200pxContain","CenteredGridImage","Image40x40px","Image80x100px","Image60x50Percent","EditFormContainer","EditFormColumn","EditFieldRow","EditFieldLabel","EditTextInput","EditSelect","EditActionButtonsRow","RegularResponsiveButton","FixedIconToTop","BackTopTopArrow","Select16px","SelectionInputRegular","Option16px","CasePhotoUploadPreviewWindow","CloseWindow","CancelUpload","previewsrc","imgtype","caseObj","AssignIdToImage","previewImage","setPreviewImage","imageCaption","setImageCaption","buttonDisplay","uploadBoolean","setUploadBoolean","AddPhotoToCase","caseid","caption","ChangeUIToPreventDoubles","uploadboolean","includes","PhotoUploadComp","onPhotoUpload","streetView","setStreetView","accessTo","setAccessTo","panorama","setPanorama","areaOfWork","setAreaOfWork","extraPhoto","setExtraPhoto","streetViewId","setStreetViewId","accessToId","setAccessToId","panoramaId","setPanoramaId","areaOfWorkId","setAreaOfWorkId","previewImageWindowDisplay","setPreviewImageWindowDisplay","PhotoPreview","streetViewPreview","setStreetViewPreview","accessAreaPreview","setAccessAreaPreview","panoramaPreview","setPanoramaPreview","workAreaPreview","setWorkAreaPreview","PhotoAddIcon","streetViewButton","setStreetViewButton","accessAreaButton","setAccessAreaButton","panoramaButton","setPanoramaButton","workAreaButton","setWorkAreaButton","photoType","setPhotoType","imgArray","setImgArray","ImageId","inputFileExtra","PDFMap","videoMap","onInputClick","DeleteImgFromCloud_AndLocal","DeleteImg","splice","CheckIfPhotosPresent","UploadPhoto","setPhoto","inputFile","inputFile2","inputFile3","inputFile4","onStreetViewButtonClick","click","onAccessAreaButtonClick","onPanoramaButtonClick","onWorkAreaButtonClick","GetImgUrl_PushToLocal","pullArrayAgain","ResetImage","ref","controls","rel","href","ProjectArea","onSelectProjectArea","frontcolor","setFrontColor","frontborder","setFrontBorder","frontselected","setFrontSelected","backcolor","setBackColor","backborder","setBackBorder","backselected","setBackSelected","sidecolor","setSideColor","sideborder","setSideBorder","sideselected","setSideSelected","entertainmentcolor","setEntertainmentColor","entertainmentborder","setEntertainmentBorder","entertainmentselected","setEntertainmentSelected","drivewaycolor","setDrivewayColor","drivewayborder","setDrivewayBorder","drivewayselected","setDrivewaySelected","othercolor","setOtherColor","otherBorder","setOtherBorder","otherSelected","setOtherSelected","displayOtherDiv","setDisplayOtherDiv","otherAreaText","setOtherAreaText","setFrontBoxColor","originalcolor","setBackBoxColor","setSideBoxColor","setEntertainmentBoxColor","setDriveWayBoxColor","setOtherBoxColor","DefineProjectArea","ProjectBudget","onSelectProjectBudget","maxbudget","setMaxBudget","DefineProjectBudget","ProjectOverview","area","scope","budget","imgs","pdfs","onOpenSaveCase","onSubmitCase","onSetCaseInformation","imgMap","setImgMap","setPDFMap","NameDisplay","setNameDisplay","PhoneDisplay","setPhoneDisplay","EmailDisplay","setEmailDisplay","AddressDisplay","setAddressDisplay","setCityDisplay","setMetroDisplay","NameLabelDisplay","setNameLabelDisplay","PhoneLabelDisplay","setPhoneLabelDisplay","EmailLabelDisplay","setEmailLabelDisplay","AddressLabelDisplay","setAddressLabelDisplay","setCityLabelDisplay","setMetroLabelDisplay","ProjectAreaDisplay","setProjectAreaDisplay","ProjectScopeDisplay","setProjectScopeDisplay","ProjectTypeDisplay","setProjectTypeDisplay","ProjectStyleDisplay","setProjectStyleDisplay","ProjectBudgetDisplay","setProjectBudgetDisplay","ProjectAreaLabelDisplay","setProjectAreaLabelDisplay","ProjectScopeLabelDisplay","setProjectScopeLabelDisplay","ProjectTypeLabelDisplay","setProjectTypeLabelDisplay","ProjectStyleLabelDisplay","setProjectStyleLabelDisplay","ProjectBudgetLabelDisplay","setProjectBudgetLabelDisplay","statusButtonText","editContactText","setEditContactText","editContactBGColor","setEditContactBGColor","editDetailsText","setEditDetailsText","editDetailsBGColor","setEditDetailsBGColor","ErrorTextDetails","setProjectArea","ProjectScope","setProjectScope","ProjectType","setProjectType","ProjectStyle","setProjectStyle","setProjectBudget","developerMetroId","ProjectDescription","setProjectDescription","filter","EditProjectContactInfo","Address","EditProjectDetails","onDrafted","onSaveDraft","ProjectPath","onSelectSurveyPath","onSelectProjectScope","renovationcolor","setRenovationColor","renovationborder","setRenovationBorder","renovationselected","setRenovationSelected","addoncolor","setAddOnColor","addonborder","setAddOnBorder","addonselected","setAddOnSelected","seasonalcolor","setSeasonalColor","seasonalborder","setSeasonalBorder","seasonalselected","setSeasonalSelected","otherborder","otherselected","otherScopeOfWork","setOtherScopeOfWork","setRenovationBoxColor","setAddOnBoxColor","setSeasonalBoxColor","DefineProjectScope","fullRenovation","addOn","seasonalCleanup","other","onSelectProjectStyle","modern","setModern","english","setEnglish","japanese","setJapanese","contemporary","setContemporary","modernDisplay","setModernDisplay","englishDisplay","setEnglishDisplay","japaneseDisplay","setJapaneseDisplay","contemporaryDisplay","setContemporaryDisplay","modernOpacity","setModernOpacity","englishOpacity","setEnglishOpacity","japaneseOpacity","setJapaneseOpacity","contemporaryOpacity","setContemporaryOpacity","ShowModernDisplayCheckmark","ShowEnglishDisplayCheckmark","ShowJapaneseDisplayCheckmark","ShowContemporaryDisplayCheckmark","DefineProjectStyle","ProjectDescType","onSelectProjectType","plantingcolor","setPlantingColor","plantingborder","setPlantingBorder","planting","setPlanting","fencingcolor","setFencingColor","fencingborder","setFencingBorder","fencing","setFencing","walkwaycolor","setWalkwayColor","walkwayborder","setWalkwayBorder","walkway","setWalkway","retainingcolor","setRetainingColor","retainingborder","setRetainingBorder","retaining","setRetaining","lawncolor","setLawnColor","lawnborder","setLawnBorder","lawn","setLawn","patiocolor","setPatioColor","patioborder","setPatioBorder","patio","setPatio","driveway","setDriveway","yardstructurecolor","setYardStructureColor","yardstructureborder","setYardStructureBorder","yardstructure","setYardStructure","waterfeaturecolor","setWaterFeatureColor","waterfeatureborder","setWaterFeatureBorder","waterfeature","setWaterFeature","setOther","otherTypeOfWork","setOtherTypeOfWork","TypeOfWorkChecked","DefineProjectType","caseNumber","pageProp","hackmyyardbottom","dashboardbottom","projectsbottom","calendarbottom","billingbottom","EstimateScreen","setCaseObj","userInfo","setUserInfo","personalInfoOpen","setPersonalInfoOpen","projectPathOpen","setProjectPathOpen","projectAreaOpen","setProjectAreaOpen","projectScopeOpen","setProjectScopeOpen","projectDescTypeOpen","setProjectDescTypeOpen","landscapeDescOpen","setLandscapeDescOpen","projectStyleOpen","setProjectStyleOpen","projectBudgetOpen","setProjectBudgetOpen","photoUploadOpen","setPhotoUploadOpen","reviewOpen","setReviewOpen","submittedOpen","setSubmittedOpen","draftedOpen","setDraftedOpen","saveCaseOpen","setSaveCaseOpen","title","surveyPath","setSurveyPath","projectArea","projectScope","projectType","projectStyle","projectBudget","allImgsArray","setAllImgsArray","pdfArray","setPDFArray","metroIdOfUser","setMetroIdOfUser","storeIdOfUser","setStoreIdOfUser","GetPersonalInfo","SetCaseInformation","Tittle","CreateTime","UpdateLocalProjectInfo","SetDescription","PushImgsToArray","requiredImages","concat","CreateCase","caseobj","UpdateCase","updatecase","ChangeDisplayToDrafted","SubmitCase","ChangeDisplayToSubmitted","SelectSurveyPath","surveypath","SelectProjectArea","projectareatext","SelectProjectScope","projectscopetext","SelectProjectType","projectdesctype","SelectProjectStyle","projectstylestring","SelectProjectBudget","projectbudgetstring","GetCaseObjectStructure","DetermineSurveyPath","direction","onReset","Drafted","Cont","positionmobile","ContentCont77vw","paddingTop","ContentCont44Percent","ContentContQuote","ContentContPropWidth","CaseCardCont","CaseCardContainer","isOdd","CaseCard","index","CaseNumber","DateText","ClientName","Status","CaseId","StatusText","onDel","StatusColor","EstimatorName","projectpath","moment","format","TimeText","DefaultColor","ManagerCard","ManagerName","StoreLocationName","roleID","MetroName","AddManagerWindow","managerName","setManagerName","managerUsername","setManagerUsername","managerEmail","setManagerEmail","managerPhone","setManagerPhone","managerPass","setManagerPass","RightViewFullWidth","RightView_FlexFullWidth_Column","ManagerListScreen","managerArray","setManagerArray","isNewManagerOpen","setIsNewManagerOpen","newStoreId","newMetroId","GetManagers","managers","HandleFormComplete","HandleManagerDel","HandleNewManager","manager","AddManager","StoreSupplierCard","SupplierNameText","EditSupplier","supplierID","RoleNameProp","NameProp","EmailProp","PhoneProp","roleFullName","setRoleFullName","roleEmail","setRoleEmail","rolePhone","setRolePhone","NewRoleWindow","setError","roleUsername","setRoleUsername","rolePassword","setRolePassword","confirmPass","setConfirmPass","RoleListScreen","RoleName","roles","setRoles","suppId","setSuppId","setNameProp","setEmailProp","setPhoneProp","roleOpen","setRoleOpen","editSuppOpen","setEditSuppOpen","idForUser","IDFORROLE","setroleFullName","setroleUsername","setroleEmail","setrolePhone","setrolePassword","GetRoleInfo","Object","values","HandleRoleDel","key","HandleSupplierDel","HandleFormUpdate","HandleNewRole","catch","handleErrors","err","Message","request","response","HandleUpdateSupp","NewRole","StoreName","User_Id","MetroCatCard","MetroID","DelMetro","EditMetro","to","textDecoration","MetroUrl","NewMetroWindow","storeNewMetro","setStoreNewMetro","DeleteMetroWindow","deleteOpen","closeDel","onDeleteFunction","EditMetroWindow","onMetroComplete","editMetro","setEditMetro","MetroCatScreen","getMetroList","isOpen","setIsOpen","delMetroOpen","setDelMetroOpen","editMetroOpen","setEditMetroOpen","storeMetroId","setStoreMetroId","DeleteMetroFunc","GetMetro","HandleEditMetro","newMetroName","HandleNewMetro","newMetro","DeleteMetro","RoleCatCard","RoleCatScreen","rolesMerge","setRolesMerge","GetRoles","RoleID","RoleType","EditStoreWindow","storeobj","UpdateStoreInformation","Minimum_Deposit","Minimum_Labor","StoreID","InputField","BlankOption","DropdownContainer","DropdownMenu","show","DropdownLink","Dropdown","currentPage","notifyProposal","executeCallback","deleteProposal","quoteId","iconSrc","duplicateProposal","addOns","deleteItem","saveAndSend","saveEstimate","changeTag","archiveProposal","unArchiveProposal","acceptProposal","resetProposal","showMenu","setShowMenu","staffDisplay","setStaffDisplay","dropdownRef","handleClickOutside","contains","links","url","caseId","callback","confirm","getLinksForPage","document","removeEventListener","link","preventDefault","GetStoreCategories","GetCategory","catid","cate","DeleteCategory","GetProduct","product","GetStoreProducts","GetStoreTools","AddProduct","Product","UpdateProduct","AddCategory","category","Category","newcate","AddProductAddon","productid","cateid","addons","DeleteProductAddon","StoreCard","StoreCardHeader","StoreCardImgUrl","GetTool","tool_id","tool","GetToolObject","AddTool","newtool","Tool","UpdateTool","GetToolKit","kit_id","toolkit","GetToolKitObject","AddToolKit","newkit","ToolKit","UpdateToolKit","kit","GetStoreToolKits","DeleteToolKit","DeleteTool","StoreScreen","storeObj","setStoreObj","originalProductData","setOriginalProductData","productData","setProductData","originalToolData","setOriginalToolData","toolData","setToolData","originalStaffData","setOriginalStaffData","staffData","setStaffData","originalZoneData","setOriginalZoneData","zoneData","setZoneData","toolkitData","setToolkitData","isEditOpen","setIsEditOpen","productSelected","setProductSelected","toolSelected","setToolSelected","staffSelected","setStaffSelected","zoneSelected","setZoneSelected","GetStore","sortByName","b","startsWithNumberA","test","startsWithNumberB","localeCompare","sensitivity","sortedProductData","products","sort","sortedToolData","tools","sortedStaffData","sortedZoneData","zones","GetSuppliers","suppliers","InputLabel","searchText","trim","textArray","toLowerCase","split","filterData","dataList","keyToFilter","toUpperCase","every","word","handleSearch","Category_Id","UnitPrice","Supplier","supplier","SupplierName","Unit","toolKitName","toolKit","ToolKit_Id","MetroCityCard","CityNameText","CityID","EditCity","onSetEdit","MetroStoreCard","onDeleteStore","EditStore","MetroTaxCard","TaxNameText","TaxRateText","TaxID","EditTax","NewStoreWindow","AddNewStore","DeleteWindow","DeleteCityWindow","DeleteTaxWindow","EditCityWindow","storeNewCity","setStoreNewCity","EditTaxWindow","Rate","taxName","setTaxName","taxPercent","setTaxPercent","NewCityWindow2","NewTaxWindow","ViewSplitCont","MetroIDScreen","metroName","getMetroName","metroStores","getMetroStoresList","metroTax","getMetroTax","metrocities","getMetroCities","managerName1","isTaxOpen","setIsTaxOpen","isCityOpen","setIsCityOpen","isEditTaxOpen","setIsEditTaxOpen","isEditCityOpen","setIsEditCityOpen","delOpen","setDelOpen","delTaxOpen","setDelTaxOpen","delCityOpen","setDelCityOpen","setNewTaxName","setNewTaxRate","setStoreName","setStoreAddress","setStorePhone","editTaxName","setEditTaxName","editTaxRate","setEditTaxRate","editCityName","setEditCityName","storeDelId","taxDelId","setTaxId","cityDelId","setCityId","setEditStoreID","setMetroInfo","GetMetroStores","GetMetroCities","GetStaff","DeleteStore","DeleteTax","DeleteCity","storeName","storeAddress","storePhone","HandleNewCity","newCity","HandleEditCity","HandleNewTax","newTaxName","newTaxRate","TaxCode","HandleEditTax","GetStoreInformation","StoreId","NewTax","CategoryCard","CatHeadText","EditCat","DelCat","catId","onView","selectedCategory","userInfoString","setSelectedIndex","ProductCard","ProdHeadText","ProdPrice","ProdUrl","relProduct","relTool","relAddOn","onSelect","RelatedProduct","RelatedTool","ProdParaText","ProdButtonText","ProdId","ProdSuppliers","ProductSupplierArray","CategoryAdd","onCategoryAdd","CatPosProp","parentId","hiddenFileInput","CombineInstructionDisplay","setCombineInstructionDisplay","categoryObj","ImageUrl","CateType","Position","Parent_Id","Combine","CombineName","maxlength","for","class","onSetFile","onReleaseFile","CategoryEdit","callCategoryAgain","CateTypeReference","catDefaultUrl","setCatDefaultUrl","type1","type2","type3","type4","type5","type6","UpdateCategory","onImgDelete","DeleteCatWindow","ProductCategoryScreen","unfilteredProducts","setUnfilteredProducts","productList","setProductList","inputValue","setInputValue","storeCategories","getStoreCategories","isEditCatOpen","setisEditCatOpen","isAddCatOpen","setisAddCatOpen","setCatId","delCatOpen","setDelCatOpen","maxPos","setMaxPos","setCategory","GetStoreCategoriesFunc","category_id","Math","max","apply","GetSingleCat","setStoreProducts","DeleteCategoryFunc","HandleNewCat","categoryobj","productlist","inputborderadius","DeleteCat","categoryId","CatName","CatParaText","CatUrl","CityList","ZoneCityWindow","zoneOpen","metroCities","GetCities","zoneId","respcurrentcities","openDaysSync","ZoneCityCard","delCityFromZone","ZoneSupplierWindow","zoneSuppliers","getZoneSuppliers","posInput","setPosInput","addName","setAddName","positionSupp","setPositionSupp","supplierId","setSupplierId","ZoneSupplierCard","SupplierId","RemoveFromZone","SupplierPosition","supplierPos","UpdatePosOfSupplier","blur","ZoneScreen","getZone","zoneCities","getZoneCities","zoneName","getZoneName","cityIdDeletion","setZoneDelId","positionSuppProp","GetZone","zone","AddCityToZone","AddSupplierToZone","HandleFormCityId","cityId","HandleFormSupplierId","HandleSupplierRemove","HandleCityRemove","addCityOpen","onAddCityOpen","addSupplierOpen","onAddSupplierOpen","ZoneSupplier","User","ZoneCity","ZoneName","CardContainer","InfoGroup","HeaderGroup","CardHeader","h1","MobileHeader","StatusButton","DetailsGroup","DetailItem","StaffCaseCardMobile","homeowner","getStatusDetails","MobileFlexColumnCont","MobileDivContainer","MobileButton","DeleteConfirmWindow","InputContainer","DropdownOption","Wrapper","DropdownLabel","CasesScreen","cases","setCases","setCaseId","storeCases","setStoreCases","deleteCase","setDeleteCase","bottomBorderConst","assignedBorder","setAssignedBorder","setAllBorder","newBorder","setNewBorder","setAcceptedBorder","setProcessedBorder","setPayPendingBorder","setInProgressBorder","cancelRequestedBorder","setCancelRequestedBorder","cancelledBorder","setCancelledBorder","closedBorder","setClosedBorder","handleSortChange","selectedOption","caseOptions","sortFunction","SortCaseAccordingToStatus","caseStatus","setBorder","GetCases","Cases","HandleCaseDel","SortMyCases","FilterCase","ResetBorderUI","Estimator_Id","Estimator","head_text","ConfirmWindow","confirmtext","leftbuttontext","rightbuttontext","leftbuttoncolor","rightbuttoncolor","LeftFunction","RightFunction","CategoryContentList","categoryid","productObj","RefreshCategoryList","subCategories","setSubCategories","setCategoryObj","confirmWindowOpen","setIsConfirmWindowOpen","setParentId","GetCurrentCategories","SubCategories","AddNewProductAddOnCategory","productId","cateId","Addons","ProductAddOn","RefreshAddOnList","categoryContentVisible","setIsCategoryContentVisible","isConfirmDeleteVisible","setIsConfirmDeleteVisible","deleteId","setDeleteId","RemoveAddon","ResetView","SupplierCont","EditSupplierCard","RefreshSupplierList","SupplierArray","itemName","setItemName","AddSupplierToProduct","product_id","supplier_id","defaultName","ProductInfoCard","onDelete","EditProd","RefreshProductInfoCard","deleteProduct","setDeleteProduct","editSupplierDisplay","setEditSupplierDisplay","supplierList","setSupplierList","CreateDuplicateProduct","SetSupplierOptions","supplierlist","SalesTax","OriginalPrice","Markup","InstallSpeed","Allowance","SetupTime","Minimum","Convert","Denominator","DisplayUnit","ProductID","ProductAdd","ProductRelation","GetRelationsAgain","onRelationId","RelatedProducts","UpdateRFactor","onDelRelation","RhFactor","setRhFactor","setPosition","storeProducts","allProductsInStore","setAllProductsInStore","ProductRelationId","setProductRelationId","InputDisplay","setInputDisplay","RFactorDisplay","setRFactorDisplay","addItemDisplay","setAddItemDisplay","editItemDisplay","setEditItemDisplay","ItemName","rFactorDisplayPropCont","setRFactorDisplayPropCont","secondaryProdCateType","setSecondaryProdCateType","relatedId","setRelatedId","RFactorValue","setRFactorValue","PositionValue","setPositionValue","rfactorText","setRfactorText","positionText","setPositionText","productText","setProductText","confirmDelete","setConfirmDelete","rfactorDisplayProp","setRfactorDisplayProp","positionDisplayProp","setPositionDisplayProp","deleteItemId","setDeleteItemId","GetAllStoreProducts","GetStoreCategoriesFunct","Get_SubCategory_Product","Products","HandleAddRelation","prod_id","relatedprod_id","rfactor","Related_Id","RFactor","ShowEditRelatedItemUI","CloseAndResetWindow","reset","ShowLinkNewProductUI","SelectCategory","SelectProduct","ShowRFactorInfo","ShowPositionInfo","AddRelatedProduct","relatedid","alert","ResetAddUI","relatedProductId","UpdatePosition","ProductToolRelation","UpdateRelatedTool","RelatedTools","storeToolkits","setStoreToolkits","storeTools","setStoreTools","allToolsInStore","setAllToolsInStore","subToolKitHeader","setSubToolKitHeader","categoryName","setCategoryName","editTriggerInputDisplay","setEditTriggerInputDisplay","editTriggerLabelDisplay","setEditTriggerLabelDisplay","editTriggerId","setEditTriggerId","triggerValue","setTriggerValue","isNewToolDeliveryChecked","setIsNewToolDeliveryChecked","triggerDisplayProp","setTriggerDisplayProp","toolsDisplayProp","setToolsDisplayProp","GetStoreToolKitsFunc","GetToolsOfKit","kitId","Tools","SubKits","Product_Id","Trigger","ListAsDelivery","UpdateCheckbox","checkboxCheck","inputmargin","toollist","ProductWindow","updateProp","productID","onUpdated","taxbordercolor","setProdcutObj","editTaxDisplay","setEditTaxDisplay","taxMap","setTaxMap","productUrlDisplay","setProductUrlDisplay","installSpeedDisplayProp","setInstallSpeedDisplayProp","installSpeedDisplayPropContainer","setInstallSpeedDisplayPropContainer","RoundupInstructionDisplay","setRoundupInstructionDisplay","RestockInstructionDisplay","setRestockInstructionDisplay","reStockDisplayProp","setReStockDisplayProp","convertUnitDisplayProp","setConvertUnitDisplayProp","convertUnitInstructionDisplay","setConvertUnitInstructionDisplay","denominatorInstructionDisplay","setDenominatorInstructionDisplay","displayUnitInstructionDisplay","setDisplayUnitInstructionDisplay","roundYes","RoundUp","roundNo","convertYes","convertNo","reStockYes","ReStock","reStockNo","roundToHalfYes","RoundToHalf","roundToHalfNo","GetProductInfo","SetTaxOptions","taxlist","taxid","forEach","element","Tax_Id","AddProductTax","SaveProduct","Calculateunitprice_Originalprice_change","calculation","CalculateUnitPrice_Markup_change","Initialize_Instruction_Display","Notes","Disclaimer","ProductLink","Code","Stock","PackSize","Charge_Rate","deletephotoprops","x","RemoveImg","UpdateTaxData","packSizeProp","chargeRateProp","reStockProp","ListContainer","SleekRowContainer","isSelected","ItemTitle","MoveToFolder","movedItemName","movedItemObject","categories","setCategories","selectedItemIndex","setSelectedItemIndex","setSelectedCategory","currentParentId","setCurrentParentId","GetAllStoreFolders","handleDoubleClick","subcategories","Array","isArray","MoveToNewCategory","newcategoryobj","handleBackClick","parentCategory","onDoubleClick","IconBar","IconWrapper","Tooltip","ProductListScreen","getSubCategories","productRelations","setProductRelations","productToolRelations","setProductToolRelations","isEditProductOpen","setIsEditProductOpen","isProductOpen","setIsProductOpen","isProductRelOpen","setIsProductRelOpen","isProductToolRelOpen","setIsProductToolRelOpen","isProductAddOnRelOpen","setIsProductAddOnRelOpen","supplierCallSwitch","productCallSwitch","setProductCallSwitch","setProdListDisplayState","setProductObj","setCatType","catName","setCatName","productNameRel","setProductName","ProdInfoName","setImageUrl","setProductID","setPreviousCatId","previousParentId","setPreviousParentId","setTaxesVar","isAddSubCatOpen","setisAddSubCatOpen","catePos","setCatePos","getInfo","setSelectedCategoryName","showFolderOptions","setShowFolderOptions","showMoveToFolderWindow","setShowMoveToFolderWindow","selectedItem","setSelectedItem","selectedItemName","setSelectedItemName","NewRelatedProductId","AddProductForCategory","RefreshProductList","GetStoreProductsFunc","RefreshProductOnUpdated","GetProductTaxInfo","GetRelatedProducts","GetProductInfoTool","related_id","GetProductInfoToolAgain","GetProductInfoSupplier","GetProductsOfSameCategory","HandleDelete","HandleRelationId","HandleRelationDel","HandleUpdateRelationship","UpdateRelationship","UpdateRelatedToolInfo","HandleRelationIdTool","HandleRelationDelTool","editSupp","ProductURL","ProdInfoHead","ToolCard","ToolHeadText","relToolProd","ToolParaText","ToolId","ToolUrl","ToolInfoCard","deleteTool","setDeleteTool","RentalRate","RUnit","VideoUrl","Capacity","CapUnit","Height","Weight","MinRental","MoveCost","LoadTime","UnloadTime","Speed","SpeedUnit","Taxes","ToolID","ToolkitCard","KitHeadText","EditKit","KitUrl","DelKit","KitParaText","KitButtonText","InnerCont","LeftInfoCont","TaxesP","taxborderstyle","ButtonDiv","SectionCont","ItemCont","HeaderCont","TaxInner","TaxHeaderCont","AddTaxesCont","addtaxdisplay","ExplainerPara","QuestionMarkImg","DividingHR","EditToolWindow","toolId","onUpdatedTool","setTool","rentalRateInstructionDisplay","setRentalRateInstructionDisplay","tooltax_id","GetUpdatedToolTaxes","AddToolTax","tax_id","SetTaxes_ForStore","GetToolInfo","SaveToolInfo","UseWithObstruct","NewToolWindow","onNewTool","toolObj","setToolObj","GetToolObjectStructure","SetTaxForStore","AddNewTool","toolobj","kitName","taxcode","taxrate","findIndex","HandleTaxes","SubToolKitAdd","onNewSubToolkit","toolkitObj","setToolkitObj","ToolKitImgDisplay","setToolKitImgDisplay","GetSubkitObjectStructure","AddNewSubToolkit","onToolKitAdd","ToolKitPosProp","SubToolKitEdit","onUpdatedSubtoolkit","subtoolkitobj","ToolKitDefaultUrl","setToolKitDefaultUrl","UpdateSubtoolKit","subtoolkit","ToolProductRelation","RelatedProductTools","getStoreProducts","successMessage","setSuccessMessage","deleteProductId","setDeleteProductId","relatedProducts","setRelatedProducts","deleteRelatedProduct","setDeleteRelatedProduct","Get_Subcategory_Products","ToolListScreen","kitTools","setKitTools","subkits","setSubkits","subtoolkitObj","setSubToolkit","isNewToolOpen","setIsNewToolOpen","isEditToolOpen","setIsEditToolOpen","isViewToolOpen","setIsViewToolOpen","isNewSubkitOpen","setIsNewSubkitOpen","isEditSubkitOpen","setIsEditSubkitOpen","isToolProductRelOpen","setIsToolProductRelOpen","setToolID","isDeleteToolKitOpen","setIsDeleteToolKitOpen","ToolKitID","setToolKitID","toolkitname","setToolkitname","GetRelatedProductsOfTool","toolid","AsyncGetRelatedProductsOfTool","GetKitTools","GetToolKitInfo","HandleRelatedProductCallback","DeleteRelatedProductFromTool","DeleteKitById","DeleteToolById","NewTool","CategoryTypes","Material","Addon","Labor","Access","Removal","Open","AccessAreaQuote","ReturnToPage","quoteid","GetQuoteInfo","desiredpage","accessCat","setAccessCat","setCheckboxCheck","accessObj","setAccessObj","GetQuote","AccessArea","GetQuoteStructure","GetCaseImgs","Photos","GetAccessCat","PassValuesAsProps","productname","productcatetype","productunitprice","AddAccessItemToLocalArray","AddAccessAreaItemToQuote","Items","CreateOrUpdateQuoteAccessArea","accessobj","GetAccessItemInfo","Checkbox","QuoteScreen","quoteObj","setQuoteObj","accessAreaOpen","setAccessAreaOpen","setQuoteId","HandleAccessForm","AddNewQuote","quoteobj","addtime","GetNewQuoteProposalNumber","proposal","AddTime","Proposal","Quotes","GetBlankQuoteObj","ReturnToQuote","DeleteZoneWindow","EditZoneWindow","editZone","setEditZone","NewZoneWindow","storeNewZone","setStoreNewZone","ZoneCatCard","ZoneID","ZoneListScreen","zoneListMap","getZoneListMap","isDelOpen","setIsDelOpen","storeStoreId","setStoreStoreId","GetZoneList","HandleNewZone","HandleDeleteZone","NewZone","DeleteZone","EditZone","StoreManagerCard","CatButtonText","ViewListOfStoresScreen","storeList","setStoreList","GetStoreList","StoreAdminCard","CatFlexDiv","StoreAdminListScreen","idForMetro","idForStore","resp2","StoreText","StoreAddressDiv","StoreInfoDiv","IconInfoDiv","InfoIcon","ErrorTextPara","StoreAdminScreen","setStoreInfo","setStoreCategory","setManagerNameStore","GetStoreCategory","HandleFormCompleteStore","HandleEditStore","newStoreName","newStoreAddress","newStorePhone","PhoneIcon","ManagerIcon","StoreImgUrl","StoreAddressText","PhoneNumber","ActivateScreen","ActivateAccount","activateCode","activate","ActionMenuQuoteView","firstlink","secondlink","thirdlink","fourthlink","SwitchToUserView","fifthlink","ReturnToProject","ConversionWindow","ConversionContent","Select","Button","ResultText","DescriptionText","CalculatorWindow","squareFeetProp","setIsVisible","setSquareFeetProp","squareFeet","setSquareFeet","selectedConversion","setSelectedConversion","depth","setDepth","conversionResult","setConversionResult","conversions","cubicFeet","conversionFunction","val","cubicYards","squareYards","shouldShowDepthInput","result","handleConversion","min","TagWindow","tagObj","RefreshTaglist","isLoading","setIsLoading","Save","ContinueRevising","newCreatedRevision","RefreshProjectUI","MaterialFields","productobj","itemObj","iconCount","siteMapper","squareFeetSM","setIsUserInput","inputMode","RemovalFields","removalArea","setRemovalArea","removalDepth","setRemovalDepth","LaborFields","OpenFields","TagField","taglist","setAddTagWindowVisible","setTagObj","Tag_Id","QuoteItemWindow","onCloseNoAdd","itemId","RefreshItemList","RefreshUpdatedItem","perimeterSM","cubicFeetTotal","setCubicFeetTotal","setTaglist","calculatorsVisible","setCalculatorsVisible","managerNotes","setManagerNotes","setItemObj","addTagWindowVisible","isUserInput","GetItem","itemid","GetQuoteTaglist","Tags","ResetCalculator","AddNewItemToQuote","newItem","UpdateItemOnQuote","existingItem","SaveItem","objToSave","Tag","unitForProduct","GetQuoteInfoById","LoadingBar","LoadingIndicator","activeRequests","setActiveRequests","totalRequests","setTotalRequests","setShow","lastScrollY","pageYOffset","updateVisibilityOnScroll","currentScrollY","handleRequestFinish","prev","requestInterceptor","interceptors","use","config","Promise","reject","responseInterceptor","eject","progress","StyledOptionWindow","QuoteAddOnSelection","RefreshQuoteItems","shapeData","CloseForPlotting","isAddOnPlottingSelected","addonCategory","setAddonCategory","categoryIndex","setCategoryIndex","materialWindowToggle","setMaterialWindowToggle","promptWindowToggle","setPromptWindowToggle","SetProductsofCategory","setFilteredAddons","GetInformationForProduct","CreateNewQuoteAddOnItem","SetAddonCategoryAndProducts","addon","ReturnToPreviousAddon","ContinueToNextAddon","runningAdOns","setRunningAddOns","filteredAddons","filteredData","prevAddOns","pointer","boolean","perimeter","AddToRunningAddOns","MaterialSelection","onBackToQuote","returnCateType","productObject","setProductObject","setStoreCategories","categoryProducts","setCategoryProducts","categorySubCategories","setCategorySubcategories","emptyProductMsg","setEmptyProductMsg","loadingPrompt","setLoadingPrompt","quoteItemWindowToggle","setQuoteItemWindowToggle","arrowSrc","setArrowSrc","itemsDisplayProp","setItemsDisplayProp","displayCategories","setDisplayCategories","currentQuoteItemsArray","setCurrentQuoteItemsArray","currentQuoteLaborArray","setCurrentQuoteLaborArray","currentQuoteRemovalArray","setCurrentQuoteRemovalArray","isAddOnsWindowVisible","setIsAddOnsWindowVisible","setProductId","setItemId","setPrimaryItemId","GetCurrentQuoteItems","filterCategory","categorytype","bgcolorvalue","GetProduct_Subcat_ofCategory","cat_id","OpenUpdateQuoteItemWindow","DeleteItem","itemlist","indexOf","setItems","items","FilterProducts","output","char","ResetInputFilter","UpdateArrowUI","CheckIfProductHasAddons","added","QuoteGrandTotal","grandTotal","grand","toString","replace","QuoteTableItems","quoteItemObj","onItemChange","noChange","expand","setExpand","roleType","setRoleType","txtLineState","setTxtLineState","setDescriptionDisplay","arrowSRC","setArrowSRC","itemNotePara","setItemNote","setDeleteItem","deleteRelatedItemWindow","setDeleteRelatedItemWindow","relatedDeleteItemId","itemQuantity","setItemQuantity","showSave","setShowSave","showUnit","setShowUnit","relatedDisplayProp","setRelatedDisplayProp","showQuantInput","setShowQuantInput","showQuantText","setShowQuantText","UpdateItem","quoteitem","quant","SetProductDescriptionNotes","SetItemNotes","notes","Toggle_Display","AssessQuant","SetQuantDisplay","nochange","ExecuteUpdate","fetchRoleAndQuant","RelatedItems","onFocus","Price","NoChange","QuoteTableTops","cateType","subtotal","total","quoteTax","DisplayNotes","Total","Amount","QuoteTable","quoteItems","quoteTotalsArray","EditTagWindow","DeleteTag","primaryItems","setPrimaryItems","handleItemChange","useCallback","filterRelatedItems","Material_Id","itemRemoval","prevItems","primaryItemsNoTag","useMemo","primaryItemsWithTags","t","j","QuoteTableDeliveryItems","youtubeLinkProp","setYoutubeLinkProp","displayView","setDisplayView","rate","match","ToolName","QuoteTableDelivery","QuoteTableToolItems","toolQuantity","setToolQuantity","toolRentHours","setToolRentHours","showSaveQuantity","setShowSaveQuantity","showSaveRentHours","setShowSaveRentHours","showUnitQuantity","setShowUnitQuantity","UpdateToolQuantity","UpdateToolRentHours","ExecuteUpdateQuantity","ExecuteUpdateRentHour","QuoteTableTools","NewQuoteTool","rentalLength","setRentalLength","QuotePhotoUploadPreviewWindow","UploadSuccessful","AddPhotoToQuote","ToolCardQuote","EditTool","DelTool","ToolSelectionCard","storeToolKits","getStoreToolKits","storeSubToolKits","setStoreSubToolKits","textDisplay","setTextDisplay","backDisplay","setBackDisplay","GetStoreToolsFunction","toolkitid","displayProps","Stored_Values","MIN_LABOR","MIN_DEPOSIT","ProposalCommentCard","commentObj","estimatorId","estimatorName","UpdateProjectUI","estimatorPhoto","homeownerName","OpenPicture","commentPosterName","setCommentPosterName","convertedDateString","setConvertedDateString","UpdateNameBasedOnComment","commentobj","estimatorid","Comment","ViewQuote","observe","onToolAdded","ReturnToMaterial","ReturnToLabor","ReturnToRemoval","ReturnToAccess","saveQuoteState","ToolQuant","RentalL","uparrow","removal","arrow","material","delivery","labor","access","displaySettings","setDisplaySettings","Subtotal","Tax","supplyTotal","installTotal","projectSubtotal","setProjectSubtotal","setDeposit","projectGrandTotal","setProjectGrandTotal","setDeliveryTotal","setAccessTotal","estimateGST","setEstimateGST","removalsHeader8Subtotal","setRemovalsHeader8Subtotal","toolOpen","setToolOpen","toolCardMap","setToolCardMap","storeTaxes","setStoreTaxes","toolID","settoolID","deleteTagId","setDeleteTagId","deleteTagConfirmDisplay","setDeleteTagConfirmDisplay","tagWindowDisplay","setTagWindowDisplay","projectInstallSubtotal","setProjectInstallSubtotal","loadingStates","setLoadingStates","ToggleSection","section","prevState","quoteData","setLaborTotal","GetQuoteLaborTotals","removalsHeader7Subtotal","LaborSubtotal","installSub","LaborSubtotalWithRelatedItems","Delivery","reduce","accumulator","materialSubtotal","deliverySubtotal","toolSubtotal","accessAreaSubtotal","installSubtotal","storeTaxArray","gstTax","taxitems","gst","LaborTotal","attachEvent","handler","getElementById","resize","scrollHeight","delayedResize","setTimeout","init","OpenUploadImageWindow","uploadedImage","DeleteImageFromCloud","imgUrl","DeleteImageFromQuoteAndCloud","photoid","index1","Images","index2","HandleToolAddition","HandleNewTool","HandleToolId","UpdateCaseStatusToProcessed","casestatus","SaveQuoteInfo","redirectpage","UpdateQuoteInfo","DeleteTagOnQuote","tag_id","SaveButtonClicked","EditTime","header8Subtotal","QuotePhotoUpload","backgroundColor","ViewQuotePage","numberOfQuotes","returned","setReturned","returnedAccess","setReturnedAccess","setReturnCateType","materialSelectionOpen","setMaterialSelectionOpen","quoteOpen","setQuoteOpen","setQuote","quoteTitle","setQuoteTitle","returnPage","setReturnPage","setSaveQuoteState","GetQuoteInformationForHeader","DisplayAccessPageChange","returnpage","accessopen","materialopen","quoteopen","scroll","body","desc","setDesc","setDefaultName","defaultEmail","setDefaultEmail","defaultAddress","setDefaultAddress","defaultPhone","setDefaultPhone","defaultTitle","setDefaultTitle","GetCase","picobj","UpdateProject","UpdateTime","UpdateCasePage","CancelAppointmentWindow","AppointmentCreationDiv","SubHeaderPara","RadioDiv","RadioButtonInnerDiv","DatePickDiv","datedisplay","TimeSlotDiv","timeslotDisplay","CancelAppointmentText","EditAppointment","onAppointmentEdit","currentTimeslotId","onUpdateDate","CancelAppointment","year","dfName","dfNotes","dfAddress","dfCellPhone","dfCity","dfFlex","installerId","appointmentTime","contactName","setContactName","setAddress","setPhone","setCity","flexible","closeDays","setCloseDays","timeSlots","setTimeSlots","slotId","setSlotId","appDesc","setAppDesc","notesDisplay","setNotesDisplay","nameDisplay","addressDisplay","cityDisplay","phoneDisplay","setTimeslotDisplay","notesDisplayText","setNotesDisplayText","nameDisplayText","setNameDisplayText","addressDisplayText","setAddressDisplayText","cityDisplayText","setCityDisplayText","phoneDisplayText","setPhoneDisplayText","timeTextDisplay","setTimeTextDisplay","timeSlotInfoDisplay","setTimeSlotInfoDisplay","edit1","setEdit1","edit2","setEdit2","edit3","setEdit3","edit4","setEdit4","edit5","setEdit5","editTime","setEditTime","defaultNotes","setDefaultNotes","defaultContact","setDefaultContact","defaultCity","setDefaultCity","flexibleDisplayProp","setFlexibleDisplayProp","cancelAppointment","setCancelAppointment","GetInstallerCloseDays","closedays","GetTimeSlots","Year","Month","Day","Installer_Id","openslots","MyWeek","this","date","localizer","startOf","endOf","scrollToTime","range","eventOffset","Component","start","end","dates","lte","add","navigate","action","Navigate","PREVIOUS","NEXT","toLocaleDateString","EditYear","setEditYear","EditMonth","setEditMonth","EditDay","setEditDay","startDate","setStartDate","startDateSync","Start_Minute","End_Minute","Start_Hour","End_Hour","marginRight","filterDate","getDay","WeekDay","dateFormat","minDate","subDays","timeClassName","placeholderText","showMonthDropdown","MyCalendarScreen","isEditAppointment","setIsEditAppointment","appointmentId","locales","require","dateFnsLocalizer","startOfWeek","D","currentYear","currentMonth","appointmentList","setAppointmentList","calendarMonth","setCalendarMonth","GetUserAppointments","appointment","setStartTimeSlot","Start","Hour","setStartTimeSlotMinute","Minute","setEndTimeSlot","End","setEndTimeSlotMinute","GetUserAppointmentsAsync","setNameOfUser","appDay","setAppDay","appMonth","setAppMonth","appYear","setAppYear","startHour","setStartHour","startMinute","setStartMinute","endHour","setEndHour","endMinute","setEndMinute","setFlexible","appId","setAppId","setInstallerId","appointmentIdAsync","setAppointmentIdAsync","contactNameNew","addressNew","phoneNew","cityNew","flexibleNew","slotIdNew","appDescNew","newDay","newMonth","newYear","HandleAppointmentForm","HandleAppointmentUpdated","editName","editAddress","editPhone","editCity","editFlexible","editSlotId","editAppDesc","DailyOpenSlot_Id","Flexible","Contactname","GetAppointmentInfoAsync","HandleCancel","GetAppointmentInfo","startTimeSlot","endTimeSlot","startTimeSlotMinute","endTimeSlotMinute","events","allDay","startAccessor","endAccessor","longPressThreshold","views","dayPropGetter","obj","dayLayoutAlgorithm","onSelectEvent","popup","onNavigate","StoreCalendarScreen","storeAppointments","setStoreAppointments","Error","GetAppointmentsSync","GetAppointmentsAsync","fulldate","storeMonth","storeYear","storeDay","selectable","onSelectSlot","slotInfo","slots","InputEdit","TextAreaEdit","InputDivsTime","InputClosedDays","InputDataList","datalist","InputOption","CloseDayInputText","EditSchedule","onScheduleEdit","DeleteSchedule","timeSlotDisplayProp","openHourSelected","setOpenHourSelected","openMinuteSelected","setOpenMinuteSelected","closeHourSelected","setCloseHourSelected","closeMinuteSelected","setCloseMinuteSelected","defaultStartHour","setDefaultStartHour","defaultEndHour","setDefaultEndHour","defaultStartMinute","setDefaultStartMinute","defaultEndMinute","setDefaultEndMinute","defaultMonth","setDefaultMonth","defaultDay","setDefaultDay","defaultYear","setDefaultYear","startMinuteParam","setStartMinuteParam","endMinuteParam","setEndMinuteParam","CheckTimes","cancelSchedule","setCancelSchedule","list","MyScheduleScreen","isEditSchedule","setIsEditSchedule","scheduleList","setScheduleList","scheduleId","storeIdSync","setName","GetUserSchedules","schedules","scheduleIdAsync","setScheduleIdAsync","nameNew","descriptionNew","startHourNew","startMinuteNew","endHourNew","endMinuteNew","yearNew","monthNew","dayNew","GetScheduleInfo","schedule","GetScheduleInfoAsync","HandleEditScheduleForm","HandleUpdateSchedule","Crewname","HandleDeleteSchedule","fullDate","setYear","setMonth","setDay","HandleStartInfo","defaultView","Views","InstallerCard","InstallerName","installerUserId","StoreAddress","StoreInstallersScreen","installerList","setInstallerList","noInstallerText","setNoInstallerText","GetInstallers","installers","WorkerCard","workerId","StoreWorkersScreen","workerList","setWorkerList","GetWorkerList","crews","InstallerSetupScreen","setInputDisplayProp","setTimeSlotDisplayProp","EditTimeSlotDisplayProp","setEditTimeSlotDisplayProp","vacationDisplay","setVacationDisplay","editVacationDisplay","setEditVacationDisplay","daySelected","setDaySelected","setEditName","vacationId","setVacationId","editOpenHourSelected","setEditOpenHourSelected","editOpenMinuteSelected","setEditOpenMinuteSelected","editCloseHourSelected","setEditCloseHourSelected","editCloseMinuteSelected","setEditCloseMinuteSelected","holidayName","setHolidayName","vacationYear","setVacationYear","vacationMonth","setVacationMonth","vacationDay","setVacationDay","selectedYear","setSelectedYear","selectedMonth","setSelectedMonth","selectedDay","setSelectedDay","timeSlotId","setTimeSlotId","deleteVacation","setDeleteVacation","deleteSlot","setDeleteSlot","deleteCloseDay","setDeleteCloseDay","deleteDayId","setDeleteDayId","openDays","setOpenDay","vacationDays","setVacationDays","GetVacationDays","GetCloseDays","AddCloseDay","DeleteCloseDay","vacationdays","AddVacation","Note","EditVacation","DeleteVacationDay","timeslots","AddTimeSlot","UpdateTimeSlot","DeleteTimeSlot","HandleStartDate","locale","minute","substring","onfocus","CreateSchedule","onScheduleCreate","defaultaddress","defaultcity","cellphone","setEmail","isCreateSchedule","setIsCreateSchedule","userIdSync","workerName","nameCreate","addressCreate","phoneCreate","cityCreate","descCreate","startHourCreate","startMinuteCreate","endHourCreate","endMinuteCreate","HandleScheduleForm","HandleNewSchedule","Crew_Id","ClockIn","clockIn","clockOut","clockCheck","MoveForward","DoNotMove","ClockInOutScreen","clockInOpen","setClockInOpen","clockId","setClockId","setClockCheck","scheduleMap","setScheduleMap","currentDay","GetTodaySchedule","HandleClockIn","clockin","Schedule_Id","Clockin","HandleClockOut","clockout","Clockout","ClockStatusCheck","clock","ClockList","indexNum","adjclockout","adjclockin","onUpdateAdjClock","onSetId","editAdjClockIn","setEditAdjClockIn","editAdjClockOut","setEditAdjClockOut","adjInDisplay","setAdjInDisplay","adjOutDisplay","setAdjOutDisplay","adjInTextDisplay","setAdjInTextDisplay","adjOutTextDisplay","setAdjOutTextDisplay","adjClockInValue","setAdjClockInValue","adjClockOutValue","setAdjClockOutValue","clockOutValueHere","setClockOutValueHere","clockInValueHere","setClockInValueHere","adjClockOutValueHere","setAdjClockOutValueHere","adjClockInValueHere","setAdjClockInValueHere","textdisplay","ClockSchedule","setWorkerName","clockMap","setClockMap","endDate","setEndDate","setScheduleId","setClockIn","setClockOut","newClockInSync","newClockOutSync","newClockInSyncUpdated","newClockOutSyncUpdated","selectedStartYear","selectedStartMonth","selectedStartDate","selectedEndYear","selectedEndMonth","selectedEndDate","GetWorkerClockRecords","StartDate","EndDate","Clocks","HandleFormClock","HandleAdjustment","AdjClockin","AdjClockout","selectsStart","selectsEnd","AppointmentSecDiv","AppointmentContDiv","CreateAppointment","onAppointmentCreate","defaultSlotId","errorTextDisplay","setErrorTextDisplay","GetInstallerTimeSlots","slot","eventId","AvailableWindow","PushToSlots","InstallerCalendarScreen","installerColors","setInstallerColors","createAppointmentOpen","setCreateAppointmentOpen","setDefaultSlotId","setDefaultCellphone","checkLogicBox","setCheckLogicBox","nextAvailMonth","setNextAvailMonth","nextAvailDay","setNextAvailDay","nextAvailYear","setNextAvailYear","CheckAvailableDates","instUserId","CurTime","HandleDateSelection","path","GetInstallerColors","GetInstallerVacationDays","routeId","HandleStartInfoTimeSlots","GetInstallerColorsAsync","bookd","bookfullyear","bookmonth","bookday","bookhour","booktime","bookseconds","HandleAppointment","bookTime","payload","instName","BookTime","instId","holidayObj","className","week","MONTH","slotPropGetter","AcceptOrderScreen","username","setUsername","password","setPassword","headerText","setHeaderText","inputDivDisplay","setInputDivDisplay","HandleAccept","GetAuthToken","RejectOrderScreen","supplieridSync","supplierid","setSupplierid","StoreListInstallerCard","StoreListInstallerScreen","StoreListCalendarCard","StoreListCalendarScreen","getStoreList","StoreListInstallersAvailableScreen","noneAvailableText","setNoneAvailableText","installerHeader","setInstallerHeader","maxObj","maxMinute","GetSingleInstaller","intId","defaultDate","DAY","components","toolbar","ConfirmCancel","InstallerPersonalCalendar","nameofUser","ConfirmCancelOpen","setConfirmCancelOpen","ConfirmDateChange","setConfirmDateChange","yearUpdated","setYearUpdated","monthUpdated","setMonthUpdated","dayUpdate","setDayUpdate","HandleAppointmentUpdatedInstallerMove","HandleAppointmentUpdatedInstallerStay","HandleCancelNoMove","ClockScheduleSummary","clocks","record","keyNum","Hours","StoreScheduleDayScreen","GetSchedulesForDay","StoreEstimateListCard","StoreListEstimateScreen","storeMesssage","setStoreMessage","PaymentSuccessScreen","MarkEstimateAsPaid","estimateid","PaymentSuccessTransitScreen","ProcessSuccessPay","PaymentFailScreen","InstallerQuoteAppCard","ConfirmBiddingDateWindow","startdate","reactDatePickerToggle","windowText","setWindowText","postButtonDisplay","setPostButtonDisplay","PostQuoteForBid","selectedDate","DesiredInstallDate","QuoteAppointmentScreen","installerDates","setInstallerDates","userMetroId","setUserMetroId","caseStoreId","setCaseStoreId","setConfirmWindowOpen","GetCaseQuote","casedata","GetInstallerEarliestTimes","installerdates","UserCasesScreen","hoverbg","ToolKitAdd","RefreshToolKitList","ToolKitPos","GetToolKitStructure","AddNewToolKit","toolkitobj","ToolKitEdit","RefreshToolkitList","UpdateToolKitFunction","onToolKitEdit","ToolKitName","ToolKitCode","ToolKitDesc","RadioSelect","ToolKitUrl","ToolKitScreen","deleteToolkitId","setDeleteToolkitId","isNewToolKitOpen","setIsNewToolKitOpen","isEditToolKitOpen","setIsEditToolKitOpen","unfilteredTools","setUnfilteredTools","HandleDeleteKit","GetStoreToolKitsMap","GetStoreToolsFunc","message","searchTextWords","filteredTools","toolNameLower","searchWord","FilterTools","LoginPage","loginForm","setLoginForm","twofactor","setTwoFactor","showMetroSelection","setShowMetroSelection","forgotPassword","setForgotPassword","selectedMetroId","setSelectedMetroId","selectedMetroName","setSelectedMetroName","selectedCityId","setSelectedCityId","selectedCityName","setSelectedCityName","flexHeight","setFlexHeight","metroSelectionText","setShowMetroSelectionText","forgotPasswordText","setForgotPasswordText","forgotPasswordButtonText","setForgotPasswordButtonText","metroSelectionButtonDisplay","setShowMetroSelectionButtonDisplay","un","pass","enteredCode","setEnteredCode","actualCode","errorMessage","setErrorMessage","forgotPasswordEmail","setForgotPasswordEmail","LoginFunction","isValidCode","loginUser","configureSession","navigateUser","Login","attemptLogin","setupSession","processUserData","processLoginErrors","updateUIForMetroSelection","navigateAccordingToData","HandlePasswordReset","processResetErrors","UpdateUserLocationInfo","cityName","AddInstallerToStore","onblur","SignUpPage","setIsMobile","signUpForm","setSignUpForm","activateAccount","setActivateAccount","displayPasswordInfo","setDisplayPasswordInfo","passwordColor","setPasswordColor","SignupUser","Platform","navigator","userAgent","CheckPasswordStrength","passwordStrength","minDiversity","minLength","onscroll","scrollTop","documentElement","substr","InstallerRegisterPage","InstallerRegister","CaseStatusButton","CalendlyWidget","script","createElement","async","appendChild","removeChild","minWidth","marginLeft","marginBottom","DashboardScreen","recentUserCases","setRecentUserCases","setMostRecentCase","ev","onclick","prompt","GetCurrentProjects","CheckStoreEstimates","CaseCardUser","ProjectName","CaseImgs","MyProjectsScreen","userCase","setUserCases","RetrieveUserCases","userid","ProposalCardUser","proposalObj","proposallist","marginLeftRevision","setMarginLeftRevision","revisionText","setRevisionText","statusColor","setStatusColor","statusText","setStatusText","highestRevisionNumber","setHighestRevisionNumber","quotetag","Revision","DetermineRevisionNumber","quotelist","proposalcases","DeleteProjectWindow","projectId","DeleteProject","project_id","RequestProjectCancelWindow","onRequestCancelFunction","ChangeCaseStatus_RequestCancellation","ViewProjectUserView","projectInfoDisplay","setProjectInfoDisplay","draftCaseVisible","setDraftCaseVisible","missingPhotosVisible","setIntroVisible","proposalVisible","setProposalVisible","invoiceVisible","setInvoiceVisible","projectName","setProjectName","projectAreaString","setProjectAreaString","projectScopeString","setProjectScopeString","ProjectTypeString","setProjectTypeString","ProjectStyleString","setProjectStyleString","ProjectBudgetString","setProjectBudgetString","projectDescriptionString","setProjectDescriptionString","projectProposalsDisplay","setProjectProposalsDisplay","projectInvoicesDisplay","setProjectInvoicesDisplay","projectInfoArrow","setProjectInfoArrow","projectProposalArrow","setProjectProposalArrow","projectInvoiceArrow","setProjectInvoiceArrow","deleteProjectDisplay","setDeleteProjectDisplay","deleteProjectWindowDisplay","setDeleteProjectWindowDisplay","deleteProjectBorder","setDeleteProjectDisplayBorder","requestCancelDisplay","setRequestCancelDisplay","requestCancelWindowDisplay","setRequestCancelWindowDisplay","requestCancelProjectBorder","backProposalArrowDisplay","setBackProposalArrowDisplay","backProjectArrowDisplay","setBackProjectArrowDisplay","projectObj","setProjectObj","projectInvoices","setProjectInvoices","projectProposals","setProjectProposals","projectPhotos","setProjectPhotos","submitButtonDisplay","setSubmitButtonDisplay","expiredProjectProposalArrow","setExpiredProjectProposalArrow","expiredProjectProposalsDisplay","setExpiredProjectProposalsDisplay","expiredProposalVisible","DisplayProjectInfo","DisplayProjectProposals","DisplayProjectInvoices","SetupProjectForDisplay","project","SetupProjectDescriptionStrings","SetProposalVisibility","SetInvoiceVisibility","SetProjectControlButtons","projectdesc","case_status","photos","projectobj","AddProposalsToArray","filteredquotes","ChangeProjectStatusToSubmit","PushToPayment","readonly","disabled","RequestProjectCancel","Upload_Time","IsPaid","DuplicateProposalWindow","savingRevision","setSavingRevision","AddProposal","CloneProposal","q","TopMentProposalView","estimateName","scrollinfo","scrollsupply","scrollinstall","scrolldesigns","scrollcomments","scrollconfirmation","handleLockInEstimate","handleDeleteLockedEstimate","downloadPDF","CreateSharableLink","OpenEstimateEmail","duplicateEstimate","setCityName","sharableLink","setSharableLinkInputDisplay","iconmargin","setCloneProposalButtonDisplay","SetHeaderUI","viewonly","onMouseOver","fadeOutDown","SpeechBubbleContainer","isClosing","SpeechBubble","InputBox","ImageContainer","ImageButton","SpeechBubbleComponent","saveItemInfo","cancelItemChange","fieldType","RefreshComponentState","onCloseBubble","installTime","wheelbarrowTime","inputInteracted","setInputInteracted","setIsClosing","containerRef","updateItemOnEstimate","finalValue","denominator","allowance","originalQuant","installItem","wheelbarrowItem","removalTime","removalWheelbarrowTime","removalItem","removalWheelbarrowItem","handleChange","parsedValue","positiveValue","renderInputs","step","startsWith","innerWidth","determineLeftMargin","QuoteItemEstimator","header1","header2","subheader2notes","header3","subheader2","header4","header5","header6","header7","header9","header8","header10","inputheaderposition","OutputValue","parentid","RemoveItemFromLocalQuoteObject","itemLink","bgColor","isHeader","showRelatedItems","constructionView","hideBidQuoteHeaders","onToggleDisplay","hourlyRate","CategoryType","ShowItemSelection","EditTag","DeliveryItems","RemovalItems","showAddOnsSelection","deleteItemFromEstimate","isAccountant","weightedRate","setHeader1Display","header2Display","setHeader2Display","subheader2Display","header3Display","setHeader3Display","header4Display","setHeader4Display","setHeader5Display","header6Display","setHeader6Display","header1InputDisplay","setHeader1InputDisplay","header2InputDisplay","setHeader2InputDisplay","header3InputDisplay","setHeader3InputDisplay","header5InputDisplay","setHeader5InputDisplay","header6InputDisplay","setHeader6InputDisplay","header1DefaultValue","setHeader1DefaultValue","header2DefaultValue","setHeader2DefaultValue","header3DefaultValue","setHeader3DefaultValue","header4DefaultValue","setHeader4DefaultValue","header5DefaultValue","setHeader5DefaultValue","header6DefaultValue","setHeader6DefaultValue","linkHeaderDisplay","setLinkHeaderDisplay","pointerEvent","setPointerEvent","descriptionOverflow","setDeleteIconSrc","relatedItemToggleSRC","setRelatedItemToggleSRC","FontSize","setFontSize","FontWeight","setFontWeight","relatedItemsDisplay","setRelatedItemsDisplay","DetermineInputHeaderLogic","InitializeSetup","shouldDisplayPencil","shouldDisplayGreenButton","itemIconSRC","CheckIfValidLink","handleItemClick","field","pointerEvents","onBlur","valueAsNumber","determineIconDisplayValue","nonLaborRelatedItemsExist","determineDivDisplayValue","BasePrice","acc","header4input","QuoteItem","header5Display","ImageViewWindow","imageSource","setImageSource","RevisionInstructionsWindow","StartRevising","MobileQuoteItem","header3title","header4title","header5title","header6title","header7title","itemPropertyDisplay","setItemPropertyDisplay","itemHRDisplay","setItemHRDisplay","itemPropertyToggle","setItemProperyToggle","setDescriptionOverflow","descriptionWhiteSpace","setDescriptionWhiteSpace","UpdateDescriptionUI","UpdateItemPropertyView","itemtoggle","header8Value","sumItem","sum","relatedItem","SecondButtonContainer","EstimateFooter","buttonRef","depositAmount","depositCallback","isButtonInView","setIsButtonInView","handleScroll","buttonRect","getBoundingClientRect","windowHeight","innerHeight","isButtonOutOfView","ViewProposalUserView","setProposal","setCase","setCurTime","deposit","deliveryTotal","accessTotal","toolsmachinesHeader","setToolsMachinesHeader","removalHeader","setRemovalHeader","setAccessDisplay","generalMaterialsHeader","setGeneralMaterialsHeader","deliveryHeader","setDeliveryHeader","installEstimateDisplay","setLaborDetailView","setShowGenerateInvoice","laborDetailToggleView","setLaborDetailToggleView","setLaborDetailArrow","setDiscardButtonDisplay","setMakeRevisionsButtonDisplay","setSaveRevisionsButtonDisplay","showDepositButton","setShowDepositButton","labourBreakdownDisplay","setShowLabourBreakdown","showRelated","laborDetailToggle","setLaborDetailToggle","imagePreviewUrl","setImagePreviewUrl","imageGalleryDisplay","setImageGalleryDisplay","cloneProposalWindowDisplay","setCloneProposalWindowDisplay","revisionInstructionDisplay","setRevisionInstructionDisplay","setRevisionAcceptDisplay","setRevisionDeclineDisplay","deleteState","setDeleteState","headerInputShown","setHeaderInputShown","setSupplyTotalOpacity","setInstallTotalOpacity","setEstimateName","setHomeownerName","setProjectCaseNumber","setInvoicefileMaterial","setInvoicefileInstall","setUntaggedMaterialSubtotal","setUntaggedInstallSubtotal","untaggedTotalSubtotal","setUntaggedTotalSubtotal","supplyOnlySelected","scrollToOverview","scrollToSupply","scrollToInstall","scrollToDesigns","scrollToComments","scrollToConfirm","setCaseStatus","displayStatus","setDisplayStatus","toolsHeader7Subtotal","toolsHeader8Subtotal","formattedDateTime","now","toLocaleString","ampm","padStart","timestamp","includeElement","originalDisplayStyle","html2canvas","useCss","scale","ignoreElements","then","canvas","imgData","toDataURL","pdf","jsPDF","pageWidth","internal","pageSize","getWidth","pageHeight","getHeight","imgProps","getImageProperties","pdfWidth","pdfHeight","pdfPages","ceil","addPage","addImage","save","DisplayImageInGallery","DisplayLaborBreakdown","toggleDisplay","prevStatus","GetProjectInformation","ext","Closed","Canceled","CancelRequested","DisplayDepositButton","GetProposalInformation","apikey","$POLYGONAPIKEY","authorization","$POLYGONAUTHKEY","$LOCKINURL","checkResponse","UpdateUIBasedOnStatus","ChangeUIToMakeRevisions","UpdateQuoteItemQuantity","itemquantity","reverseQuantity","ValidateAgreement","supplyonly","depositSelect","tokenRef","paymenturl","SetCurrentTime","ref2","createRef","SetQuoteDisplay","some","RouteToPrevious","lastrevision","totalRemovalsByItem","numberofquotes","setHideProjectConfirmationDisplay","newUntaggedMaterialSubtotal","newUntaggedInstallSubtotal","newUntaggedTotalSubtotal","materialSub","SubtotalWithRelatedItems","deliveryDisplayStatus","setDeliveryDisplayStatus","removalDisplayStatus","setRemovalDisplayStatus","RemovalItemsNoTag","totalRemovalCost","totalAggregatedDeliveryCost","addRelatedItemsDeliveryCost","relatedItems","isoString","DeliveryItemsNoTag","scrollIntoView","RevisionInstructions","hour12","businessHours","lowerDayBound","floor","upperDayBound","convertHoursToTimeString","TotalSum","RemovalItemsWithTag","originalRemovalIndex","matchedDeliveries","checkDeliveries","primaryItem","totalAggregatedDeliveryCostWithTagId","aggregateDeliveryCost","removalTotal","setDeleteItemConfirmDisplay","totalQuantity","ChangeBidAmountWindow","inValue","OutValue","setHours","setRate","setSubtotal","Initialize","BidItem","createBid","header1Display","setHeader8Display","setHeader8InputDisplay","Header8","setHeader8","deleteIconSrc","openChangeBidAmount","setOpenChangeBidAmount","ChangeBidAmount","BidQuotePage","bidItem","setProject","setCreateBid","showModifyInvoiceButton","setShowModifyInvoiceButton","setShowGenerateInvoiceButton","showSaveInvoiceButton","setShowSaveInvoiceButton","setShowCancelButton","showAttachToProjectButton","setShowDownloadButton","toTal","setTotal","invoiceDate","setInvoiceDate","orientation","unit","pagesplit","SetUpBidData","InitializeTotal","invoicedate","duedate","setDate","modifyInvoice","AddItemToInvoiceTotal","InitialSetup","casid","AttachBidToProject","heigt","DisplayProposalOverview","overviewToggle","BillingScreen","invoiceArray","setInvoiceArray","noInvoicesText","setNoInvoicesText","SetUserInvoices","ProposalCardGuide","DeleteProposal","setContinueQuoteDisplay","setNotifyHomeownerDisplay","setEditQuoteDisplay","estimateTextWidth","setEstimateTextWidth","proposalBorder","revisionBorder","revisionBorderProp","setRevisionBorderProp","UpdateUI_BasedOnQuoteStatus","revision","UpdateUI_BasedOnCaseStatus","DuplicateProposal","newProposalObject","MarkAsAccepted","ArchiveEstimate","MarkAsCreated","BidFlag","NotifyHomeowner","GotoProposalDisplayPage","quotestatus","revisionnumber","lockedEstimate","AddInvoiceWindow","invoiceobj","uploadText","setUploadText","UploadInvoice","AddInvoiceToProject","ResetWindow","DeleteInvoiceWindow","DeleteInvoiceFromProject","DeleteProposalWindow","proposalid","deletingProposal","setDeletingProposal","GuideCancelProjectWindow","CancelProject","SiteMapOverlayUpload","UsePhotoAsOverlay","PopupContainer","visible","PopupContent","InfoText","InputGroup","bounce","MapIcon","isBouncing","AreaInputPopup","maplength","mapArea","mapwidth","FinishAccess","CloseWindowNoAdd","shapes","createRegular","infoAcknowledged","setInfoAcknowledged","setLength","setWidth","elevation","setElevation","accessPopup","setAccessPopup","showInputForm","setShowInputForm","obstruction","setObstruction","updateAccess","uploadCustom","setUploadCustom","showGifPopup","setShowGifPopup","CreateNewEstimate","UpdateAccessFunction","quotedata","required","ProjectPhotoUploadPreviewWindow","selectedFiles","setSelectedFiles","imagePreviews","setImagePreviews","imageCaptions","setImageCaptions","setProgress","uploadSuccess","setUploadSuccess","URL","revokeObjectURL","uploadPhotos","formData","cloudImageUrl","photoData","AddCasePhotoWithProgress","prevProgress","multiple","from","previews","createObjectURL","previewUrl","handleCaptionChange","Overlay","ModalContent","EstimateGroup","EstimateTitle","h3","ReceiptItem","CloseButton","EstimateReadReceipts","receipts","setReceipts","loading","setLoading","fetchReceipts","fetch","Authorization","ok","json","groupedReceipts","receipt","estimate_id","estimate_name","keys","entries","estimateId","group","viewed_at","approx_location","user_agent","ViewProjectGuideView","cancelProjectWindowDisplay","setCancelProjectWindowDisplay","setConstructionButtonDisplay","setCloseButtonDisplay","cancelButtonDisplay","setCancelButtonDisplay","setCreateQuoteDisplay","setTakeOverDisplay","changeStatusContDisplay","setChangeStatusContDisplay","statusValue","setStatusValue","guideUserId","setGuideUserId","listOfEstimators","setListOfEstimators","changeEstimatorDisplay","setChangeEstimatorDisplay","deleteProposalDisplay","setDeleteProposalDisplay","deleteProposalId","setDeleteProposalId","editCaseInfo","setEditCaseInfo","editCaseDesc","setEditCaseDesc","createQuoteWindowDisplay","setCreateQuoteWindowDisplay","isUploadProjectPhotosOpen","setIsUploadProjectPhotosOpen","estimateTextMobileColor","setEstimateTextMobileColor","projectInfoTextMobileColor","setProjectInfoTextMobileColor","readReceiptsOpen","setReadReceiptsOpen","SetDefaultButtons","estimateIds","updatedQuotes","isLocked","GuideTakeoverCase","SetProjectStatus","GetListOfEstimators","estimators","AssignToCase","reversedProposals","reverse","GuideCancelProject","revisionobj","PaymentOptionsScreen","ProceedToStripePayment","PaymentPendingScreen","MyAccountScreen","DashboardWelcomeScreen","InvoiceItem","invoiceTypeName","createInvoice","installRate","RecalculateSubtotalWithRelatedItems","RecalculateLabourSubtotalWithRelatedItems","InvoiceItemCombo","RecalculateSubtotal","sub","InvoiceToolItem","InvoiceGenerator","invoiceItem","Project","invoiceType","setInvoiceType","setInvoiceTypeName","setCreateInvoice","enterPaid","setEnterPaid","Paid","setPaid","dueDate","setDueDate","invoiceNumber","setInvoiceNumber","SetUpInvoiceData","GenerateInvoiceNumber","mx","SetUpOnInvoiceType","info","invoicenumber","GenerateInvoiceInfo","filename","tittle","isPaid","UploadInvoiceInfo","CreateInvoiceRecord","AttachInvoiceToProject","ProjectBidListScreen","storeBiddingQuotes","setStoreBiddingQuotes","GetListOfBiddingQuotes","BidAmount","CircleWrapper","CircleBackground","circle","CircleProgress","CircularRing","completion","circumference","PI","offset","r","cx","cy","strokeDasharray","strokeDashoffset","drawCheck","CheckmarkSvg","svg","CheckmarkPath","AnimatedCheckmark","viewBox","EditableField","onSave","displayUnit","editing","setEditing","localValue","setLocalValue","handleSave","stopPropagation","increment","newValue","QuoteItemTimesheet","isCompleted","RefreshUserInterface","tagobj","isHeaderCompleted","completedTagIds","completedTagNames","isCompletedParams","setIsCompletedParams","isCompletedTagIds","setIsCompletedTagIds","setIsCompletedTagNames","quantUsed","totalQuant","completionValue","saveWorkEntryField","ItemTagName","quantity_used","time_taken","project_number","estimate_number","tag_name","entered_by","entered_by_name","estimated_quantity","estimated_time","is_completed","method","markItemAsCompleted","handleMarkCompleted","handleFieldSave","updatedRecord","newCompletedTagIds","newCompletedTagNames","completed_tag_ids","completed_tag_names","handleMarkTagCompleted","String","textAlign","InfoContainer","InfoCard","SectionTitle","ProgressRow","ProgressLabel","ProgressValue","Separator","RemainingRow","RemainingLabel","RemainingValue","remaining","insertWorkEntryAttachment","attachmentObj","Prefer","insertWorkEntryNote","noteObj","MobileQuoteItemTimesheet","workEntries","crewHourTotal","onCrewHoursUsed","isExpanded","setIsExpanded","localQuantityUsed","setLocalQuantityUsed","localTimeTaken","setLocalTimeTaken","editingField","setEditingField","isCompletedTagNames","quantityInput","setQuantityInput","timeInput","setTimeInput","setNotes","uploadedPhotos","setUploadedPhotos","imageInputRef","handleImageUpload","uploadedUrl","work_entry_id","file_path","file_name","file_type","random","handleAddNotes","note_text","updatedQuantity","updatedTime","previousValue","newTime","renderEditableField","alignItems","borderRadius","outline","transition","currentValue","startEditingField","marginTop","workEntry","gridTemplateColumns","gap","justifyContent","objectFit","minHeight","barbershop","TrackerWrapper","ProgressBarContainer","ProgressBarFill","SegmentContainer","Segment","TagLabel","TagProgressTracker","tags","totalTags","completedCount","MobileEstimateQuoteItem","adjustAccess","ModalHeader","DateInput","PersonRow","PersonLabel","PersonInput","AddButton","SaveButton","CrewHourModal","personHours","setPersonHours","calculateTotalHours","totalHours","updatePersonHour","ViewProposalConstructionView","accessDisplay","commentText","setShowRelated","setSendButtonDisplay","totalHoursByProduct","setTotalHoursByProduct","setTotalRemovalsByItem","accessAreaPriceSubtotal","toolsPriceSubtotal","setWorkEntries","crewHourModalOpen","setCrewHourModalOpen","setCrewHourTotal","fetchWorkEntries","workEntryMap","entry","setProjectLength","caseData","laborNamesByProduct","setLaborNamesByProduct","setCompletedTagIds","setCompletedTagNames","proposalData","computeTotalHours","computeRemovalsTotal","finalUrl","completionData","incomplete_tag_ids","incomplete_tag_names","newRow","createResponse","productsArray","labourArray","productIndex","labour","Set","relatedProduct","removalsArray","assignedLabours","removalIndex","totalRemovals","has","removalMatch","closest","part","abs","Infinity","materialItems","originalIndex","laborNames","join","laborName","laborItem","delta","prevTotal","removalItems","removalInstallSub","combinedItems","materialInstallSubSum","materialTimeSum","removalInstallSubSum","removalTimeSum","combinedInstallSub","combinedTimeSum","ListItem","AlertBackdrop","AlertPopup","AccessItemPopupWindow","accessCallback","removalCallback","itemCategory","AddItemToPolygon","plottingCallback","plottingSelected","visibleState","setVisible","filteredItems","setFilteredItems","showQuoteItem","setShowQuoteItem","primaryItemEstimateId","setPrimaryItemEstimateId","removalAlert","setRemovalAlert","setIsAddOnPlottingSelected","GetItems","isAccess","newFilteredItems","Boolean","FilterItems","onListItemClick","DialogWrapper","DialogContent","DialogHeader","DialogBody","StyledButton","ConfirmationDialog","onCancel","onConfirm","GridOverlayContainer","GridOverlay","onGridClick","showDialog","closeWindow","SliderContainer","Thumb","Slider","onValueChange","setValue","sliderRef","handleInteractionStart","handleInteractionMove","handleInteractionEnd","passive","clientX","rect","convertClientXToValue","touches","onMouseDown","onTouchStart","LineItemContainer","ActionIcon","TextAreaField","InputWrapper","ProductList","ProductItem","InputRow","InverseInputRow","QuoteLineItem","addOnSelectedItem","isProductListVisible","setProductListVisible","nameInputValue","setNameInputValue","primaryEstimateItemId","setPrimaryEstimateItemId","itemobj","CheckIfProductHasAddonsEstimateScreen","setProducts","first30Products","setFirst30Products","GetAllProducts","productsData","toolsData","combinedData","lowerCaseText","isAccessCategory","restOfProduct","prevProductObj","EmailWindow","projectEmail","estimatorEmail","onSendEmail","setFrom","setTo","cc","setCc","bcc","setBcc","subject","setSubject","setLink","signature","setText","isActive","ProgressText","ProgressWindow","DuplicateProgress","currentStage","stageText","stages","progressPercentage","pdfMake","vfs","pdfFonts","ViewProposalEstimatorView","hideMenu","contWidth","scrollToItem","onResetScrollToItem","refreshEstimate","refreshEstimateFinished","untaggedMaterialSubtotal","untaggedInstallSubtotal","showAccessAdjustment","setShowAccessAdjustment","showEstimateEmail","setShowEstimateEmail","extraItemName","setExtraItemName","extraSelected","setExtraSelected","extraNotes","setExtraNotes","extraImageUrl","setExtraImageUrl","extraObjects","setExtraObjects","openAddExtra","setOpenAddExtra","generateRandomString","characters","charactersLength","charAt","LockInEstimate","DeleteLockedEstimate","quoteDataToSend","baseUrl","location","origin","shareableLink","linkText","setSelectionRange","clipboard","writeText","tracking_code","toggleRemovalDisplay","fetchExtras","addExtra","newExtra","item_name","budget_status","image_url","fileInputRef","handleFileUpload","imageUrl","deleteExtra","sendEmail","linkValue","AddPhotoButtonClick","previousHighlightedRef","elementId","elementRect","middle","behavior","borderColor","primaryItemsDeliveryItems","addRelatedDeliveryItems","removalsMaterialTotal","removalsLaborTotal","finalUntaggedMaterialSubtotal","finalUntaggedInstallSubtotal","finalUntaggedTotalSubtotal","totalInstallTimeInDecimalHours","totalRemovalTimeInDecimalHours","totalRemovalTime","selectedTagId","setSelectedTagId","showQuoteLineItem","setShowQuoteLineItem","showToolLineItem","setShowToolLineItem","setAddOnSelectedItem","deleteItemConfirmDisplay","totalTimeString","handleClick","querySelector","block","SaveAndSendEstimate","SaveEstimateText","accessData","dd","content","columns","alignment","bold","stack","table","headerRows","widths","tableBody","fillColor","safeValue","addItemRows","materialRate","addRemovalRows","addAggregatedDeliveryRow","deliveries","tagId","totalCost","tagItems","tagRemovals","colSpan","generalRemovals","generalDeliveries","checkGeneralDeliveries","buildMaterialTableBody","layout","hLineWidth","node","vLineWidth","accessItems","rentalPrice","moveCost","rentalRate","buildMachinesTableBody","x1","y1","x2","y2","lineWidth","lineColor","styles","header","tableHeader","downloadpdfmake","estimateDateString","createPdf","download","duplicatePopupOpen","setDuplicatePopupOpen","setCurrentStage","setStageText","currentQuote","addOnItems","GetProductAddons","productAddons","parentItem","newQuote","newQuoteId","itemData","newItemResp","FindNewParentItem","newParentItem","GetTagNameById","oldParentItem","oldTagName","matchedItems","relateditem","newquoteid","Estimator_Email","timeSumByTag","prevQuote","MaterialSum","InstallSum","LaborSum","sumHourlyRate","countItems","averageHourlyRate","background","maxWidth","boxSizing","flexDirection","fontStyle","flex","rows","DeletePopupContainer","fade","BottomSection","ButtonSection","DeleteTopRightIcon","ZoomImage","LengthButton","libraries","SiteMapper","ScrollToItemOnEstimate","DeselectIcon","RefreshEstimate","setScale","newScale","containerStyle","transform","transformOrigin","isEstimateShown","setIsEstimateShown","eyeDisplay","setEyeDisplay","addNotes","setAddNotes","itemNoteId","setItemNoteId","itemNotes","setItemNotes","snappingOn","setSnappingOn","showLengths","setShowLengths","individualLabelVisibility","setIndividualLabelVisibility","CreateEstimate","setEstimateId","AddShapeToDatabase","geocodeAddress","setShapes","temporaryShapesArray","setTemporaryShapesArray","lat","lng","center","setCenter","polylines","setPolylines","selectedAccessShape","setSelectedAccessShape","currentColor","setCurrentColor","currentVertices","setCurrentVertices","obstructions","setObstructions","utilities","setUtilities","drawing","setDrawing","currentDistance","setCurrentDistance","isDrawingPolygon","setIsDrawingPolygon","selectedShape","setSelectedShape","selectedShapeObject","setSelectedShapeObject","selectedObstruction","setSelectedObstruction","selectedUtility","setSelectedUtility","targetPosition","setTargetPosition","setMap","showColorCircles","setShowColorCircles","isDragging","setIsDragging","textMarkups","setTextMarkups","selectedText","setSelectedText","inputVisible","setInputVisible","isTextToolSelected","setIsTextToolSelected","apiKey","inputRef","shapePlotterOpen","setShapePlotterOpen","isPlottingToolSelected","setIsPlottingToolSelected","draggingPolygonPosition","setDraggingPolygonPosition","accessWindowVisible","setAccessWindowVisible","showAccessItemWindow","setShowAccessItemWindow","accessObject","setAccessObject","setAccessAreaItems","setItemCategory","currentShapeData","setCurrentShapeData","setActiveSquareFeet","setActivePerimeter","infoWindow","setInfoWindow","deleteWindow","setDeleteWindow","selectedIcon","setSelectedIcon","showText","setShowText","fadeText","setFadeText","setShowDialog","google","maps","Geocoder","geocode","results","geometry","zoom","setZoom","calculatePolygonData","vertices","distance","distances","segmentDistance","spherical","computeDistanceBetween","LatLng","computeArea","vertex","roundToNearestHalf","calculatePolylineData","lastVertex","DeleteShapeFromDatabase","shapeindex","$POLYGONURL","itemAddedPopup","setItemAddedPopup","targetShapeIndex","updatedShapes","hasOwnProperty","shapeDataToSend","encodeURIComponent","existingShapeId","patch","updateResponse","setColor","isColorChanged","setIsColorChanged","AddPlottedShapeToDatabase","itemDataToSend","$PLOTICONURL","iconSize","createInfoWindowContent","shape","calculateIconPosition","toggleIndividualLabel","onInput","newColor","handleNoteSubmit","itemIndex","handleAddNoteClick","UpdateQuoteNote","shapeid","itemTemp","SaveUpdatedPolygonPosition","selectedShapeIndex","shapeIndex","shapeVertices","avgLat","curr","avgLng","setIconPosition","iconPosition","handlePolylineClick","handleDelete","itemToDelete","typeToUpdate","setTypeToUpdate","SetAccessInformation","isGridOpen","setIsGridOpen","updatingMap","setUpdatingMap","GetShapeData","plottingiconresp","setIcons","timer","hideTimer","clearTimeout","lastShape","focus","prevShapesLength","num","round","useLayoutEffect","onShapeSelect","setOnShapeSelect","selectedColor","setSelectedColor","icons","tempiconCount","setTempIconCount","setIconCount","markerIconSize","setMarkerIconSize","scrollTimeout","overlayBounds","setOverlayBounds","overlayUrl","setOverlayUrl","overlayMarkers","setOverlayMarkers","isOverlayMode","setIsOverlayMode","newBounds","north","south","east","west","memoizedShapes","isPolygon","calculateDistance","point1","point2","toRadians","deg","lat1","lat2","deltaLat","deltaLng","sin","cos","atan2","sqrt","sideLengths","nextVertex","midpoint","totalPolylineLength","centralPosition","shapesLayer","Fragment","paths","handlePolygonClick","fillOpacity","strokeColor","strokeOpacity","strokeWeight","lengthOverlays","OFFSET_DISTANCE","ARROWS","rotation","anchor","Point","polygonIsClockwise","computeSignedArea","heading","computeHeading","offsetAngle","leftOffset","computeOffset","rightOffset","icon","interpolate","mapPaneName","OverlayView","OVERLAY_MOUSE_TARGET","fontWeight","whiteSpace","boxShadow","v","overflowX","overflowY","googleMapsApiKey","onLoad","mapInstance","mapContainerStyle","tilt","maxZoom","mapTypeId","zoomControl","mapTypeControl","scaleControl","streetViewControl","rotateControl","fullscreenControl","gestureHandling","newMarker","latLng","clickPosition","prevMarkups","markup","isEditing","handleMapClick","onDragStart","onDragEnd","onCenterChanged","getCenter","newVertex","distanceInMeters","updateDistance","marker","draggable","newOverlayMarkers","onOverlayMarkerDragEnd","bounds","angle","snappedAngle","radians","finalTargetPosition","displayDistanceFeet","displayDistance","radius","triangleCoords","rectangleBounds","linePath","size","squareSide","squareCoords","polyline","newLat","newLng","latDiff","lngDiff","updatedVertices","Size","onCloseClick","selectObstruction","utility","selectUtility","polygon","_","ChangeSizeOfSelectedShapes","prevScale","fill","minInputValue","stepIndex","accesslength","accesswidth","accesselevation","accessobstruction","paddingBottom","visibility","handleGridClick","distanceInFeet","roundedDistanceInFeet","addVertex","prevVertices","newVertices","pop","prevPolylines","newPolylines","finishDrawing","newIcon","prevIcons","prevCount","handlePlottingClick","ViewProposalAccountantView","flattenItems","caseName","flattened","processedIds","primary","relatedForThisPrimary","related","laborItems","setErrorAgreementText","ViewEstimateNA","paymentURL","setPaymentURL","formatDate","TrackEstimateView","tracking_id","ip_address","ipResponse","ipData","ip","locationResponse","locationData","region","country_name","currentUrl","y","w","h","fontFamily","ResizableFlexDiv","DraggableBar","SitemapDesktop","leftWidth","setLeftWidth","setScrollToItem","setRefreshEstimate","rightWidth","handleResetScrollToItem","mouseDownEvent","handleMouseMove","mouseMoveEvent","newWidth","once","InventoryScreen","prodResp","toolResp","staffResp","zoneResp","toolkitResp","sortedProducts","sortedTools","sortedStaff","sortedZones","TableContainer","component","Paper","Table","TableHead","TableRow","TableCell","TableBody","prod","hover","st","TaxName","SaleQuant","rp","s","rt","tk","staff","ResponsiveFlexDiv","MobileLeftCont","PageContainer","HeaderBar","ButtonGroup","ToggleButton","Content","StyledTable","thead","tr","isDefault","dropIndicator","TableHeaderCell","th","wide","tbody","td","TableInput","TableSelect","AddRow","AddCell","DeleteButton","DuplicateButton","actionOptions","FormInfoContainer","FormInputLabel","FormInput","FormTextArea","CreateForm","estimate","setEstimate","draggedIndex","setDraggedIndex","dropTargetIndex","setDropTargetIndex","multiSelectMode","setMultiSelectMode","selectedRows","setSelectedRows","defaultQuestions","questionTitle","questionType","maxFiles","questions","setQuestions","formTitle","setFormTitle","formDescription","setFormDescription","GetEstimateInformation","matQuestions","price","remQuestions","handleDragLeave","handleCreateForm","existingFormResp","existingForms","formId","newFormBody","newFormResp","newFormData","questionRows","idx","form_id","question_title","question_type","sort_order","is_item","indices","mainIndex","combinedPrice","combinedQuantity","row","col","rowIndex","rowStyle","handleDragStart","onDragOver","handleDragOver","onDragLeave","onDrop","newIndex","draggedItem","handleDrop","opt","newQuestions","duplicate","FormHeader","FormTitle","FormDescription","QuestionContainer","QuestionLabel","QuestionDescription","ResponseInput","ResponseTextarea","SubmitButton","DatePicker","attrs","LoginContainer","LoginInput","LoginButton","ThankYouContainer","ThankYouMessage","ViewForm","isAuthenticated","setIsAuthenticated","loginUsername","setLoginUsername","loginPassword","setLoginPassword","loginError","setLoginError","form","setForm","responses","setResponses","handleLogin","fetchForm","res","fetchQuestions","handleResponseChange","questionId","fileList","uploadedUrls","handleSubmit","submissionBody","subResp","subData","submissionId","answerRows","submission_id","question_id","answer","FormNameDisplay","StickyHeaderCell","StickyTableCell","FormStatistics","submissions","setSubmissions","answers","setAnswers","fetchSubmissions","fetchAllAnswers","submissionIds","inList","answerLookup","ans","submitted_by","created_at","App","exact","StoreScheduleScreen","WorkerScheduleScreen","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","isLocalhost","hostname","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","onUpdate","onSuccess","ReactDOM","render","process","contentType","ready","unregister","reload","checkValidServiceWorker","serviceWorkerRegistration"],"mappings":"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CC,GAAD,WACE,wBACE/0F,KAAK,QACLD,GAAG,MACHuS,KAAK,WACL4I,eAAgB+rC,GAChBnrD,SAAU,WAERC,EAAU,CACRo6F,cACAl5E,UACAE,QACAxE,OACA69E,SANFA,GAAW,EAOTK,SACAE,UACA0E,YACAE,aACAE,aAEFvG,EACEa,EACAl5E,EACAE,EACAxE,EACA69E,EACAK,EACAE,EACA0E,GACAE,GACAE,GAEH,IAEH,wBAAO/7F,QAAQ,MAAf,iBACA,wBACA,wBACEE,KAAK,QACLD,GAAG,KACHuS,KAAK,WACL4I,eAAgBgsC,GAChBprD,SAAU,WAERC,EAAU,CACRo6F,cACAl5E,UACAE,QACAxE,OACA69E,SANFA,GAAW,EAOTK,SACAE,UACA0E,YACAE,aACAE,aAEFvG,EACEa,EACAl5E,EACAE,EACAxE,EACA69E,EACAK,EACAE,EACA0E,GACAE,GACAE,GAEH,IAEH,wBAAO/7F,QAAQ,KAAf,gBACA,gCAIN,eAAC,GAAD,CAAexK,YAAakkG,GAA5B,0JAKA,gBAACjlG,GAAD,WACE,eAACsgG,GAAD,gCACA,eAACA,GAAD,CAAehL,YAAa2N,GAA5B,SACG5B,IAEH,+BACE,eAAC,GAAD,CACEz6E,UAAU,MACVE,aAAc69E,GACdj3F,aAAcg1F,GACdn7F,SAAU,SAACa,GACTq6F,EAAWr6F,EAAEwD,OAAOD,MACrB,KAPKg5F,IAUV,eAACxpF,GAAD,CACEhU,QAAS,WACO,SAAV48F,IACFpB,GAAgB,SAChBO,GAAoB,QACpBc,GAAS,UAETrB,GAAgB,QAChBO,GAAoB,SACpBc,GAAS,QACTx8F,EAAU,CACRo6F,cACAl5E,UACAE,QACAxE,OACA69E,WACAK,SACAE,UACA0E,YACAE,aACAE,aAEFvG,EACEa,EACAl5E,EACAE,EACAxE,EACA69E,EACAK,EACAE,EACA0E,GACAE,GACAE,IAGL,EAnCH,SAqCGvD,QAGL,gBAAC/jG,GAAD,WACE,eAACsgG,GAAD,2BACA,eAACA,GAAD,CAAehL,YAAa6N,GAA5B,SACG/B,IAEH,+BACE,eAAClqF,GAAD,CACE4P,aAAc+9E,GACdn3F,aAAck1F,GACdr7F,SAAU,SAACa,GACTy5F,EAAez5F,EAAEwD,OAAOD,MACzB,KANKk5F,IASV,eAAC1pF,GAAD,CACEhU,QAAS,WACO,SAAV88F,IACFp/D,GAAe,SACfu+D,GAAmB,QACnBc,GAAS,UAETr/D,GAAe,QACfu+D,GAAmB,SACnBc,GAAS,QACT18F,EAAU,CACRo6F,cACAl5E,UACAE,QACAxE,OACA69E,WACAK,SACAE,UACA0E,YACAE,aACAE,aAEFvG,EACEa,EACAl5E,EACAE,EACAxE,EACA69E,EACAK,EACAE,EACA0E,GACAE,GACAE,IAGL,EAnCH,SAqCGrD,QAGL,gBAACjkG,GAAD,WACE,eAACsgG,GAAD,sBACA,eAACA,GAAD,CAAehL,YAAa+N,GAA5B,SACG/B,IAEH,+BACE,eAACpqF,GAAD,CACE4P,aAAc24E,GACd/xF,aAAcm1F,GACdt7F,SAAU,SAACa,GACT05F,EAAW15F,EAAEwD,OAAOD,MACrB,KANK8zF,IASV,eAACtkF,GAAD,CACEhU,QAAS,WACO,SAAVg9F,IACFh/D,GAAkB,SAClBm+D,GAAsB,QACtBc,GAAS,UAETj/D,GAAkB,QAClBm+D,GAAsB,SACtBc,GAAS,QACT58F,EAAU,CACRo6F,cACAl5E,UACAE,QACAxE,OACA69E,WACAK,SACAE,UACA0E,YACAE,aACAE,aAEFvG,EACEa,EACAl5E,EACAE,EACAxE,EACA69E,EACAK,EACAE,EACA0E,GACAE,GACAE,IAGL,EAnCH,SAqCGnD,QAGL,gBAACnkG,GAAD,WACE,eAACsgG,GAAD,mBACA,eAACA,GAAD,CAAehL,YAAaiO,GAA5B,SACG/B,IAEH,+BACE,eAACtqF,GAAD,CACE4P,aAAci+E,GACdr3F,aAAco1F,GACdv7F,SAAU,SAACa,GACT45F,EAAQ55F,EAAEwD,OAAOD,MAClB,KANKo5F,IASV,eAAC5pF,GAAD,CACEhU,QAAS,WACO,SAAVk9F,IACFj/D,GAAe,SACfo+D,GAAmB,QACnBc,GAAS,UAETl/D,GAAe,QACfo+D,GAAmB,SACnBc,GAAS,QACT98F,E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F,cACAl5E,UACAE,QACAxE,OACAo+E,WACA0E,YACAE,aACAE,WACAqI,mBACAE,qBACAE,oBACAE,wBAEFT,EACE5N,EACAl5E,EACAE,EACAxE,EACAo+E,GACA0E,GACAE,GACAE,GACAqI,EACAE,EACAE,EACAE,GAGL,EAvCH,SAyCGhM,QAGL,gBAACjkG,GAAD,WACE,eAAC,GAAD,sBACA,eAAC,GAAD,CAAes1F,YAAa+N,GAA5B,SACG/B,IAEH,+BACE,eAACyN,GAAD,CACEjoF,aAAc24E,GACd/xF,aAAcm1F,GACdt7F,SAAU,SAACa,GACT05F,EAAW15F,EAAEwD,OAAOD,MACrB,KANK8zF,IASV,eAACtkF,GAAD,CACEhU,QAAS,WACO,SAAVg9F,IACFh/D,GAAkB,SAClBm+D,GAAsB,QACtBc,GAAS,UAETj/D,GAAkB,QAClBm+D,GAAsB,SACtBc,GAAS,QACT58F,EAAU,CACRo6F,cACAl5E,UACAE,QACAxE,OACAo+E,WACA0E,YACAE,aACAE,WACAqI,mBACAE,qBACAE,oBACAE,wBAEFT,EACE5N,EACAl5E,EACAE,EACAxE,EACAo+E,GACA0E,GACAE,GACAE,GACAqI,EACAE,EACAE,EACAE,GAGL,EAvCH,SAyCG9L,QAGL,gBAACnkG,GAAD,WACE,eAAC,GAAD,mBACA,eAAC,GAAD,CAAes1F,YAAaiO,GAA5B,SACG/B,IAEH,+BACE,eAACuN,GAAD,CACEjoF,aAAci+E,GACdr3F,aAAco1F,GACdv7F,SAAU,SAACa,GACT45F,EAAQ55F,EAAEwD,OAAOD,MAClB,KANKo5F,IASV,eAAC5pF,GAAD,CACEhU,QAAS,WACO,SAAVk9F,IACFj/D,GAAe,SACfo+D,GAAmB,QACnBc,GAAS,UAETl/D,GAAe,QACfo+D,GAAmB,SACnBc,GAAS,QACT98F,EAAU,CACRo6F,cACAl5E,UACAE,QACAxE,OACAo+E,WACA0E,YACAE,aACAE,WACAqI,mBACAE,qBACAE,oBACAE,wBAEFT,EACE5N,EACAl5E,EACAE,EACAxE,EACAo+E,GACA0E,GACAE,GACAE,GACAqI,EACAE,EACAE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","file":"static/js/main.66867bf5.chunk.js","sourcesContent":["import { useEffect } from \"react\";\r\nimport { useLocation } from \"react-router-dom\";\r\n\r\nfunction ScrollToTop() {\r\n  const { pathname } = useLocation();\r\n\r\n  useEffect(() => {\r\n    window.scrollTo(0, 0);\r\n  }, [pathname]);\r\n  return null;\r\n}\r\n\r\nexport default ScrollToTop;\r\n","export const ColorPalette = {\r\n  PrimaryButtonBlue: \"#169ADB\", //Primary Button Green\r\n  MiddleGreen: \"#2667AE\", //Green between Primary Button Green & Secondary Button Green\r\n  SecondaryGreen: \"#2667AE\", // Secondary Button Green, Meant to be used alongside Primary.\r\n  AlternateGreen: \"#E1FAD6\", // Alternate Green, Use if Primary + Secondary are overused\r\n  LightGreen: \"#dceff9\",\r\n  LightGrey: \"#F9F9F9\",\r\n  GreyGreen: \"#edf7fc\",\r\n  PrimaryGrey: \"#D3D3D3\",\r\n  SecondaryGrey: \"#DBDBDB\",\r\n  TertiaryGrey: \"#F4F4F4\",\r\n  PrimaryRed: \"#FF4C4C\",\r\n  White: \"#FFFFFF\",\r\n  DarkGrey: \"#2E2E2E\",\r\n  PrimaryOrange: \"#FF9A00\",\r\n  PrimaryYellow: \"#FFEB2F\",\r\n  BackgroundGrey: \"#F8F8F8\",\r\n  BoxShadowGrey: \"#B7B7B7\",\r\n  PrimaryTurquoise: \"#78d1cc\",\r\n  SecondaryBackgroundGrey: \"#e3e5e8\",\r\n  PrimaryBlue:'#194B79',\r\n  PrimaryGreen: '#51C159',\r\n  LightBlack: \t'#353839',\r\n  CompletedGreen: '#EFFFE8',\r\n  yh50: \"#effee7\",\r\n  yh100: \"#dbfccb\",\r\n  yh200: \"#b9f99d\",\r\n  yh300: \"#8df165\",\r\n  yh400: \"#65e536\",\r\n  yh500: \"#169ADB\",\r\n  yh600: \"#31a20e\",\r\n  yh700: \"#277c0f\",\r\n  yh800: \"#236212\",\r\n  yh900: \"#205314\",\r\n  yh950: \"#0c2e05\",\r\n};\r\n","//Divs for Mobile View Only\r\nimport styled from \"styled-components\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const MobileMenuLinkDiv = styled.div`\r\n  height: 10vw;\r\n  background-color: white;\r\n  display: flex;\r\n  align-items: center;\r\n  padding: 1vw 2vw; // Added some padding on the sides as well\r\n  border-top: 1px solid rgba(0, 0, 0, 0.1); // Soften the border color for a more subtle and refined appearance\r\n`;\r\n\r\nexport const BackgroundColorDiv = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  padding: ${(props) => (props.padding ? props.padding : \"\")};\r\n  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05); /* Softer shadow on the bottom */\r\n  border-radius: 2px;\r\n`;\r\n\r\n\r\n\r\nexport const FixedItemPropertyDiv = styled.div`\r\n  width: 200px;\r\n  height: auto;\r\n  display: flex;\r\n  flex-direction: column;\r\n  text-align: center;\r\n`;\r\n\r\nexport const MobileFlexColumnCont = styled.div`\r\n  height: auto;\r\n  margin: 1%;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  opacity: 100%;\r\n  @media (max-width: 1006px) {\r\n    height: auto;\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n  }\r\n`;\r\n\r\nexport const MyAccountCardDiv = styled.div`\r\n  width: 100%;\r\n  height: 40px;\r\n  margin-top: 4%;\r\n  margin-bottom: 4%;\r\n  box-shadow: 0px 4px 8px #b7b7b7;\r\n  display: flex;\r\n  padding: 10px;\r\n  border-radius: 10px;\r\n  justify-content: space-between;\r\n`;\r\n\r\nexport const FlexColumnDiv90vw = styled.div`\r\n  width: 90vw;\r\n  height: auto;\r\n  padding-bottom: 10vh;\r\n  margin-top: 2%;\r\n  display: flex;\r\n  flex-direction: column;\r\n`;\r\nexport const WhiteTopRoundedDivAutoHeight = styled.div`\r\n  width: 86.75vw;\r\n  border-top-left-radius: 25px;\r\n  border-top-right-radius: 25px;\r\n  position: relative;\r\n  bottom: 10%;\r\n  background-color: white;\r\n  padding: 7vw;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n`;\r\n\r\nexport const WhiteTopRoundedDiv = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"86.75vw\")};\r\n  height: 40vh;\r\n  border-top-left-radius: 25px;\r\n  border-top-right-radius: 25px;\r\n  position: relative;\r\n  bottom: 10%;\r\n  background-color: white;\r\n  padding: 25px;\r\n`;\r\n\r\nexport const TopDiv40vh = styled.div`\r\n  position: relative;\r\n  width: 88.5vw;\r\n  height: 20vh;\r\n  bottom: 15%;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  padding: 20px;\r\n`;\r\n\r\nexport const MobileSpaceAroundDiv = styled.div`\r\n  width: 85vw;\r\n  margin: 10px;\r\n  height: auto;\r\n  display: flex;\r\n  justify-content: space-between;\r\n`;\r\n\r\nexport const GreenBorderColumnDiv = styled.div`\r\n  height: 30vh;\r\n  padding: 1vw;\r\n  width: 100.3vw;\r\n  background-color: ${ColorPalette.LightGreen};\r\n  border-top-left-radius: 25px;\r\n  border-top-right-radius: 25px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  text-align: center;\r\n`;\r\n\r\nexport const TopDivWhite = styled.div`\r\n  padding: 4.3vw;\r\n  width: 100%;\r\n  max-width: 91vw;\r\n  height: 30px; /* Flexible height to accommodate content */\r\n  min-height: 30px; /* Slightly increased for better usability */\r\n  background-color: #ffffff; /* Clean white background */\r\n  border-bottom: 1px solid #e0e0e0; /* Subtle separation */\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); /* Soft shadow for elevation */\r\n  transition: background-color 0.3s ease, box-shadow 0.3s ease;\r\n\r\n  &:hover {\r\n    background-color: #f9f9f9; /* Slight hover effect */\r\n    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15); /* Enhanced shadow on hover */\r\n  }\r\n`;\r\n\r\n\r\nexport const AuthPageCont = styled.div`\r\n  height: 105vh;\r\n  width: 100vw;\r\n  display: flex;\r\n  padding-bottom: 2.5vh;\r\n`;\r\n\r\nexport const Div100vw20vh = styled.div`\r\n  width: 100vw;\r\n  height: 20vh;\r\n`;\r\n\r\nexport const Div100vw10vh = styled.div`\r\n  width: 100vw;\r\n  height: 10vh;\r\n`;\r\n\r\nexport const SignupItemContWithEffects = styled.div`\r\n  width: 100%;\r\n  height: auto;\r\n  position: relative;\r\n  top: 1.5%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  transition: top 0.5s;\r\n  padding-bottom: 2.5vh;\r\n`;\r\n\r\nexport default nullProp;\r\n","//Images for Mobile View Only\r\nimport styled from \"styled-components\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const MobileLogo30x30px = styled.img`\r\n  width: 30px;\r\n  height: 30px;\r\n`;\r\n\r\nexport const MobileLogo50x50px = styled.img`\r\n  width: 50px;\r\n  height: 50px;\r\n`;\r\n\r\nexport const TopImage15vh = styled.img`\r\n  width: 100vw;\r\n  height: 15vh;\r\n  object-fit: cover;\r\n  transition: height 0.2s;\r\n  transition-timing-function: linear;\r\n`;\r\n\r\nexport const TopImage20vh = styled.img`\r\n  width: 100vw;\r\n  height: 20vh;\r\n  object-fit: cover;\r\n  transition: height 0.2s;\r\n  transition-timing-function: linear;\r\n`;\r\n\r\nexport const TopImage40vh = styled.img`\r\n  width: 100vw;\r\n  height: 40vh;\r\n  object-fit: cover;\r\n  transition: height 0.2s;\r\n  transition-timing-function: linear;\r\n`;\r\n\r\nexport const LogoRelative = styled.img`\r\n  width: 220px;\r\n  height: 230px;\r\n  position: relative;\r\n  left: 24%;\r\n  bottom: 52%;\r\n  transition: height 0.2s;\r\n  transition-timing-function: linear;\r\n`;\r\n\r\nexport const LogoRelativeLeft = styled.img`\r\n  width: 100px;\r\n  height: 100px;\r\n  object-fit: cover;\r\n  border-radius: 50%;\r\n  transition: height 0.2s;\r\n  transition-timing-function: linear;\r\n`;\r\n\r\nexport default nullProp;\r\n","import styled from \"styled-components\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const MobileMenuLinkText = styled.p`\r\n  font-family: Futura;\r\n  font-size: 18px;\r\n  margin-right: auto;\r\n  width: 50%;\r\n  margin-left: 3vw;\r\n`;\r\n\r\nexport const WhiteAvenirHeader = styled.p`\r\n  font-family: Avenir;\r\n  color: white;\r\n  font-size: 16px;\r\n  margin: 0;\r\n  margin-left: 25px;\r\n`;\r\n\r\nexport const WhiteLeagueHeader = styled.p`\r\n  font-family: LeagueSpartan-Bold;\r\n  color: white;\r\n  font-size: 20px;\r\n  margin: 0;\r\n  margin-left: 25px;\r\n`;\r\n\r\nexport const GreenLeagueText = styled.p`\r\n  font-family: LeagueSpartan-Bold;\r\n  color: ${ColorPalette.PrimaryButtonBlue};\r\n  font-size: 24px;\r\n  width: 50%;\r\n  margin-top: 10px;\r\n  margin-bottom: 0px;\r\n`;\r\n\r\nexport const RegularGreenLeagueText = styled.p`\r\n  font-family: LeagueSpartan-Bold;\r\n  color: ${ColorPalette.PrimaryButtonBlue};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"18px\")};\r\n  margin-top: 10px;\r\n  margin-bottom: 0px;\r\n  cursor: pointer;\r\n`;\r\n\r\nexport const MobileBodyText = styled.p`\r\n  font-family: Avenir;\r\n  font-size: 16px;\r\n  width: ${(props) => (props.width ? props.width : \"70%\")};\r\n  margin: 10px;\r\n`;\r\n\r\nexport const MobileHeader = styled.p`\r\n  font-family: Avenir;\r\n  font-size: 16px;\r\n  width: auto;\r\n  margin: 14px 0px 10px 12px;\r\n`;\r\n\r\nexport const MobileBodyTextFullWidth = styled.p`\r\n  font-family: Avenir;\r\n  font-size: 16px;\r\n  width: 95%;\r\n  margin: 10px;\r\n`;\r\n\r\nexport const MenuHeader = styled.p`\r\n  font-family: 'League Spartan', sans-serif;\r\n  font-weight: bold;\r\n  font-size: 16px;\r\n  margin: 10px;\r\n  text-transform: uppercase;\r\n  letter-spacing: 0.5px;\r\n  color: #333;\r\n  line-height: 1.5;\r\n\r\n  white-space: nowrap;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n`;\r\n\r\n\r\nexport const LeagueHeader14px = styled.p`\r\n  font-family: LeagueSpartan-Bold;\r\n  font-size: 14px;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nexport const LeagueHeader12px = styled.p`\r\n  font-family: LeagueSpartan-Bold;\r\n  font-size: 12px;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nexport const UnderlinedBoldTitle16px = styled.p`\r\n  font-family: Avenir;\r\n  font-size: 16px;\r\n  font-weight: Bold;\r\n  padding-bottom: value;\r\n  border-bottom-style: solid;\r\n`;\r\nexport const ErrorMessage12px = styled.p`\r\n  font-size: 12px;\r\n  color: red;\r\n`;\r\n\r\nexport default nullProp;\r\n","import styled from \"styled-components\";\r\nimport { animated } from \"react-spring\";\r\nimport { ColorPalette } from \"../Colors\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const FlexColumnCont80vwAutoHeight = styled.div`\r\n  width: 80vw;\r\n  min-height: ${(props) => (props.minheight ? props.minheight : \"100vh\")};\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  display: flex;\r\n  flex-direction: column;\r\n  background-color: white;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n    width: 100vw;\r\n    height: 0vh;\r\n  }\r\n`;\r\n\r\nexport const QuoteItemCont = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"0%\")};\r\n  align-items: ${(props) =>\r\n    props.alignitems ? props.alignitems : \"center\"};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  opacity: ${(props) => (props.opacity ? props.opacity : \"100%\")};\r\n  border-bottom: ${(props) =>\r\n    props.borderbottom\r\n      ? props.borderbottom\r\n      : \"1px solid\" + ColorPalette.PrimaryGrey};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"95vw\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const OverflowDiv = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: auto;\r\n  max-width: 100%;\r\n  min-height: auto;\r\n  max-height: 550px;\r\n  padding-bottom: 25px;\r\n  margin-bottom: 25px;\r\n`;\r\n\r\nexport const FlexColumnContHiddenMobileFlex = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"60%\")};\r\n  height: 100%;\r\n  margin: 1%;\r\n  align-items: left;\r\n  display: ${(props) => (props.display ? props.display : \"none\")};\r\n  flex-direction: column;\r\n  justify-content: space-evenly;\r\n  opacity: 100%;\r\n  @media (max-width: 1006px) {\r\n    width: auto;\r\n    height: auto;\r\n    display: flex;\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont95x30Percent = styled.div`\r\n  width: 95%;\r\n  height: 30%;\r\n  margin: 1%;\r\n  align-items: baseline;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: flex-start;\r\n  opacity: 100%;\r\n  @media (max-width: 1006px) {\r\n    width: auto;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont100xAutoPercent = styled.div`\r\n  width: 100%;\r\n  height:  ${(props) => (props.height ? props.height : \"auto\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  opacity: 100%;\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  transition: background-color 0.5s;\r\n  @media (max-width: 1006px) {\r\n    width: auto;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const FlexRowContFullWidth = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: 100%;\r\n  border: ${(props) => (props.border ? props.border : \"\")};\r\n  &:hover {\r\n    background-color: ${(props) => (props.hoverbgcolor ? props.hoverbgcolor : \"\")};\r\n    margin: ${(props) => (props.hovermargin ? props.hovermargin : \"\")};\r\n  }\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  transition: background-color, margin 0.3s;\r\n  margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: flex;\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  opacity: 100%;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"90vw\")};\r\n    height: auto;\r\n    flex-direction: ${(props) => (props.mobileflexdirection ? props.mobileflexdirection : \"column\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont75x80Percent = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"75%\")};\r\n  height: ${(props) => (props.height ? props.height : \"80%\")};\r\n  margin: 1%;\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  align-items: left;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: flex-start;\r\n  opacity: 100%;\r\n  @media (max-width: 1006px) {\r\n    width: auto;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont70x100Percent = styled.div`\r\n  width: 70%;\r\n  height: 100%;\r\n  margin: 1%;\r\n  text-align: center;\r\n  align-items: center;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  opacity: 100%;\r\n  margin-top: 5%;\r\n  @media (max-width: 1006px) {\r\n    width: auto;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont90x95Percent = styled.div`\r\n  width: 90%;\r\n  height: 95%;\r\n  margin: 2%;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  opacity: 100%;\r\n  @media (max-width: 1006px) {\r\n    width: auto;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const AutoSizeOverflowY = styled.div`\r\n  overflow-x: hidden;\r\n  width: auto;\r\n`;\r\n\r\nexport const FlexContDashboard = styled.div`\r\n  width: 96%;\r\n  background-color: white;\r\n  border-radius: 25px;\r\n  box-shadow: ${(props) =>\r\n    props.boxshadow\r\n      ? props.boxshadow\r\n      : \"0px 4px 6px \" + ColorPalette.PrimaryGrey};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    box-shadow: none;\r\n  }\r\n`;\r\n\r\nexport const FlexContDashboardHeightFixed = styled.div`\r\n  width: 92%;\r\n  min-height: 14vh;\r\n  padding: 2%;\r\n  padding-top: ${(props) => (props.paddingtop ? props.paddingtop : \"\")};\r\n  padding-bottom: ${(props) =>\r\n    props.paddingbottom ? props.paddingbottom : \"\"};\r\n  max-height: 20vh;\r\n  background-color: white;\r\n  border-radius: 25px;\r\n  box-shadow: ${(props) =>\r\n    props.boxshadow\r\n      ? props.boxshadow\r\n      : \"0px 4px 6px \" + ColorPalette.PrimaryGrey};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    box-shadow: none;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnOverflowCont800px = styled.div`\r\n  max-height: 800px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow-y: auto;\r\n  overflow-x: hidden;\r\n  width: 95%;\r\n  margin: 1%;\r\n  @media (max-width: 1006px) {\r\n    width: 100%;\r\n  }\r\n`;\r\n\r\nexport const FlexListOverflowPropDiv = styled.div`\r\n  max-height: ${(props) => (props.maxheight ? props.maxheight : \"100%\")};\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow-y: auto;\r\n  overflow-x: hidden;\r\n  width: 100%;\r\n  @media (max-width: 1006px) {\r\n    width: 100%;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnContAutoHeightLeftAlign = styled.div`\r\n  width: 98%;\r\n  height: auto;\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: left;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  opacity: ${(props) => (props.opacity ? props.opacity : \"100%\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont90PercentLeftAlign = styled.div`\r\n  width: 90%;\r\n  margin: 1%;\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"10%\")};\r\n  height: auto;\r\n  align-items: left;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  opacity: ${(props) => (props.opacity ? props.opacity : \"100%\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    margin-left: 0%;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnLeftAlign = styled.div`\r\n  align-items: baseline\r\n width: ${(props) => (props.width ? props.width : \"\")};\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  overflow-y: ${(props) => (props.overflowy ? props.overflowy : \"\")};\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: left;\r\n`;\r\n\r\nexport const FlexColumnLeftAlignMaxHeight = styled.div`\r\n  align-items: baseline;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: column;\r\n  justify-content: left;\r\n  max-height: 25vh;\r\n  width: 100%;\r\n  overflow: auto;\r\n`;\r\n\r\nexport const FlexColumnContGreyBorders = styled.div`\r\n  width: auto;\r\n  height: auto;\r\n  min-width: 50vw;\r\n  background-color: #eeeeee;\r\n  margin: 2%;\r\n  border-radius: 15px;\r\n  padding-left: 20px;\r\n  padding-right: 20px;\r\n  padding-bottom: 15px;\r\n  padding-top: 5px;\r\n`;\r\n\r\nexport const FlexColumnContGreenBorders = styled.div`\r\n  width: auto;\r\n  height: auto;\r\n  min-width: 50vw;\r\n  background-color: ${ColorPalette.LightGreen};\r\n  margin: 2%;\r\n  border-radius: 15px;\r\n  padding-left: 20px;\r\n  padding-right: 20px;\r\n  padding-bottom: 15px;\r\n  padding-top: 5px;\r\n`;\r\n\r\nexport const FlexColumnContRedBorderTopRounded = styled.div`\r\nposition: fixed;\r\nleft: 50%;\r\ntop: 30%;\r\ntransform: translateX(-50%);\r\nwidth: 80%;\r\nmax-width: 500px;\r\nbackground-color: white;\r\nborder-radius: 25px;\r\nbox-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\npadding: 30px;\r\noverflow: hidden;\r\ndisplay: flex;\r\nflex-direction: column;\r\nalign-items: center;\r\njustify-content: center;\r\ntransition: all 0.3s ease;\r\n\r\n@media (max-width: 1006px) {\r\n  left: 0;\r\n  right: 0;\r\n  top: 0;\r\n  bottom: 0;\r\n  width: auto;\r\n  height: auto;\r\n  border-radius: 0;\r\n}\r\n`;\r\n\r\nexport const FlexColumnContGreenBorderTopRounded = styled.div`\r\n  position: fixed;\r\n  left: 35%;\r\n  top: 30%;\r\n  width: 500px;\r\n  display: ${(props) => (props.display ? props.display : \"\")};\r\n  background-color: white;\r\n  border-top-left-radius: 25px;\r\n  border-top-right-radius: 25px;\r\n  border-top: 20px solid ${ColorPalette.PrimaryButtonBlue};\r\n  border-bottom: ${(props) => (props.border ? props.border : \"2px solid grey\")};\r\n  border-left: ${(props) => (props.border ? props.border : \"2px solid grey\")};\r\n  border-right: ${(props) => (props.border ? props.border : \"2px solid grey\")};\r\n  height: auto;\r\n  padding: 20px;\r\n  @media (max-width: 1006px) {\r\n    left: 0;\r\n    width: auto;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const LeftItemWindowFixed = styled.div`\r\n  position: fixed;\r\n  overflow: auto;\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  max-height: ${(props) => (props.height ? props.height : \"80vh\")};\r\n  height: ${(props) => (props.actualheight ? props.actualheight : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"\")};\r\n  left: ${(props) => (props.left ? props.left : \"2%\")};\r\n  top: ${(props) => (props.top ? props.top : \"2%\")};\r\n  min-width: ${(props) => (props.minwidth ? props.minwidth : \"30vw\")};\r\n  background-color: white;\r\n  border-bottom-left-radius: 25px;\r\n  border-bottom-right-radius: 25px;\r\n  border-top: 30px solid ${ColorPalette.PrimaryButtonBlue};\r\n  padding: 20px;\r\n  border-radius: 10px;\r\n  padding-top: 0px;\r\n  @media (max-width: 1006px) {\r\n    left: 0;\r\n    margin:10px;\r\n    width: 88.5vw;\r\n    height: auto;\r\n    z-Index: -1;\r\n    padding: 10px;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnContGreenBorderTopRounded550pxHeight = styled.div`\r\n  position: fixed;\r\n  left: 10%;\r\n  top: 10%;\r\n  width: ${(props) => (props.width ? props.width : \"550px\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n  background-color: white;\r\n  border-bottom-left-radius: 25px;\r\n  border-bottom-right-radius: 25px;\r\n  border-top: 30px solid ${ColorPalette.PrimaryButtonBlue};\r\n  height: ${(props) => (props.height ? props.height : \"580px\")};\r\n  padding: 20px;\r\n  overflow-y: ${(props) => (props.overflowy ? props.overflowy : \"\")};\r\n\r\n  @media (max-width: 1006px) {\r\n    left: 4%;\r\n    width: 80vw;\r\n    // height: 76vh;\r\n    top: 10%;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont250pxGreenBorderTopRounded = styled.div`\r\n  position: fixed;\r\n  left: 35%;\r\n  top: 30%;\r\n  width: 500px;\r\n  background-color: white;\r\n  border-bottom-left-radius: 25px;\r\n  border-bottom-right-radius: 25px;\r\n  border-top: 30px solid ${ColorPalette.PrimaryButtonBlue};\r\n  height: 250px;\r\n  padding: 20px;\r\n  @media (max-width: 1006px) {\r\n    left: 0;\r\n    width: auto;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont85x15Percent = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"85%\")};\r\n  height: ${(props) => (props.height ? props.height : \"15%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"left\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont98xAutoFlexEnd = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  margin: 1%;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: flex-end;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnContFullWidthOverflowY = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  height: ${(props) => (props.height ? props.height : \"100%\")};\r\n  margin: 1%;\r\n  align-items: center;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: column;\r\n  overflow-y: auto;\r\n  justify-content: flex-start;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont80x100Percent = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"80%\")};\r\n  height: ${(props) => (props.height ? props.height : \"100%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"0%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"left\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont100x8PercentSpaceAround = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"8%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"0%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"-1%\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"space-around\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont55x15Percent = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"55%\")};\r\n  height: ${(props) => (props.height ? props.height : \"15%\")};\r\n  margin: 0;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: row;\r\n  justify-content: flex-start;\r\n  @media (max-width: 1006px) {\r\n    width: 90vw;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont100x50Percent = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"50%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowContAutox100Percent = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  height: ${(props) => (props.height ? props.height : \"100%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  flex-wrap: ${(props) => (props.flexwrap ? props.flexwrap : \"\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowContAutox100PercentMobileColumn = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  height: ${(props) => (props.height ? props.height : \"100%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont98x50PercentJustifyLeft = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  height: ${(props) => (props.height ? props.height : \"50%\")};\r\n  margin: 1%;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: left;\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont80x10PercentAlignLeft = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"80%\")};\r\n  height: ${(props) => (props.height ? props.height : \"10%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"left\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnCont70x18PercentAlignLeft = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"70%\")};\r\n  height: ${(props) => (props.height ? props.height : \"18%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"left\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont55x15PercentPropBorderBottom = styled.div`\r\n  width: 90%;\r\n  height: 100%;\r\n  margin: 0;\r\n  border-bottom: ${(props) => (props.borderbottom ? props.borderbottom : \"\")};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowContPropWidth = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  height: ${(props) => (props.height ? props.height : \"20%\")};\r\n  margin: 0;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: row;\r\n  justify-content: flex-start;\r\n  word-wrap: break-word;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n    justify-content: ${(props) =>\r\n      props.mobilejustifycontent ? props.mobilejustifycontent : \"\"};\r\n  }\r\n`;\r\n\r\nexport const FlexRowContFlexStartAutoHeight = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: row;\r\n  justify-content: flex-start;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowContFlexStart = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  height: ${(props) => (props.height ? props.height : \"20%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n    position: ${(props) =>\r\n      props.position ? props.position : \"\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"row\"};\r\n    margin-bottom: ${(props) =>\r\n      props.mobilepaddingbottom ? props.mobilepaddingbottom : \"\"};\r\n  }\r\n`;\r\n\r\nexport const FlexRowContFlexStartMobileColumn = styled.div`\r\n  width: 98%;\r\n  height: ${(props) => (props.height ? props.height : \"20%\")};\r\n  align-items: center;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: row;\r\n  justify-content: flex-start;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    flex-direction: column;\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    text-align: left;\r\n    align-items: baseline;\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont70PercentSpaceBetween = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"70%\")};\r\n  height: 25px;\r\n  margin: 0;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: row;\r\n  justify-content: space-between;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"25px\")};\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont100PercentSpaceBetween = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  height: ${(props) => (props.height ? props.height : \"20\")};\r\n  margin: 0;\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  overflow-y: ${(props) => (props.overflowy ? props.overflowy : \"\")};\r\n  flex-direction: row;\r\n  justify-content: space-between;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n    background-color: ${(props) =>\r\n      props.mobilebgcolor ? props.mobilebgcolor : \"\"};\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont100PercentFlexEnd = styled.div`\r\n  width: 98%;\r\n  height: ${(props) => (props.height ? props.height : \"20\")};\r\n  margin: 0;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: row;\r\n  justify-content: flex-end;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont70PercentFlexStart = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"70%\")};\r\n  height: 20;\r\n  margin: 0;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: row;\r\n  justify-content: flex-start;\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont60PercentSpaceEvenly = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"60%\")};\r\n  height: 20%;\r\n  margin: 1%;\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  flex-wrap: ${(props) => (props.flexwrap ? props.flexwrap : \"\")};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"space-evenly\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont60PercentFlexStart = styled.div`\r\n  width: 60%;\r\n  height: 20%;\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: center;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont300x200 = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"300px\")};\r\n  height: ${(props) => (props.height ? props.height : \"200px\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"space-evenly\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowCont = styled.div`\r\nwidth:${(props) => (props.width ? props.width : \"98%\")};\r\nheight:${(props) => (props.height ? props.height : \"20%\")};\r\nmargin:${(props) => (props.margin ? props.margin : \"1%\")};\r\nposition:${(props) => (props.position ? props.position : \"\")};\r\ntop:${(props) => (props.top ? props.top : \"\")};\r\nbottom:${(props) => (props.bottom ? props.bottom : \"\")};\r\nleft:${(props) => (props.left ? props.left : \"\")};\r\nright:${(props) => (props.right ? props.right : \"\")};\r\nborder-bottom:${(props) => (props.borderbottom ? props.borderbottom : \"\")};\r\nbackground-color:${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\nalign-items:${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\ndisplay:${(props) => (props.display ? props.display : \"flex\")};\r\npadding:${(props) => (props.padding ? props.padding : \"\")};\r\ncursor:${(props) => (props.cursor ? props.cursor : \"\")};\r\nmargin-bottom:${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\nmargin-top:${(props) => (props.margintop ? props.margintop : \"\")};\r\nborder:${(props) => (props.border ? props.border : \"\")};\r\nflex-direction:${(props) =>\r\n  props.flexdirection ? props.flexdirection : \"row\"};\r\njustify-content:${(props) =>\r\n  props.justifycontent ? props.justifycontent : \"center\"};\r\nmargin-left:${(props) => (props.marginleft ? props.marginleft : \"\")};\r\nborder-radius${(props) => (props.borderradius ? props.borderradius : \"\")};\r\nborder-bottom:${(props) => (props.borderbottom ? props.borderbottom : \"\")};\r\noverflow-y:${(props) => (props.overflowy ? props.overflowy : \"\")};\r\nword-wrap:${(props) => (props.wordwrap ? props.wordwrap : \"\")};\r\nz-Index:${(props) => (props.zIndex ? props.zIndex : \"\")};\r\n@media (max-width: 1528px) {\r\n  flex-direction:${(props) =>\r\n    props.tabletflexdirection ? props.tabletflexdirection : \"\"};\r\n  align-items:${(props) =>\r\n    props.tabletalignitems ? props.tabletalignitems : \"\"};\r\n  }\r\n@media (max-width: 1006px) {\r\n  width:${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n  height:${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  margin:${(props) => (props.mobilemargin ? props.mobilemargin : \"\")};\r\n  border-bottom:${(props) =>\r\n    props.mobileborderbottom ? props.mobileborderbottom : \"\"};\r\n  background-color:${(props) =>\r\n    props.mobilebgcolor ? props.mobilebgcolor : \"\"};\r\n  align-items:${(props) =>\r\n    props.mobilealignitems ? props.mobilealignitems : \"\"};\r\n  display:${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n  padding:${(props) => (props.mobilepadding ? props.mobilepadding : \"\")};\r\n  padding-bottom:${(props) =>\r\n    props.mobilepaddingbottom ? props.mobilepaddingbottom : \"\"};\r\n  margin-bottom:${(props) =>\r\n    props.mobilemarginbottom ? props.mobilemarginbottom : \"\"};\r\n  border:${(props) => (props.mobileborder ? props.mobileborder : \"\")};\r\n  flex-direction:${(props) =>\r\n    props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n  justify-content:${(props) =>\r\n    props.mobilejustifycontent ? props.mobilejustifycontent : \"\"};\r\n  margin-left:${(props) =>\r\n    props.mobilemarginleft ? props.mobilemarginleft : \"\"};\r\n  overflow-y:${(props) => (props.mobileoverflowy ? props.mobileoverflowy : \"\")};\r\n  flex-direction:${(props) =>\r\n    props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n  position:${(props) => (props.mobileposition ? props.mobileposition : \"\")};\r\n  top:${(props) => (props.mobiletop ? props.mobiletop : \"\")};\r\n  bottom:${(props) => (props.mobilebottom ? props.mobilebottom : \"\")};\r\n  left:${(props) => (props.mobileleft ? props.mobileleft : \"\")};\r\n  right:${(props) => (props.mobileright ? props.mobileright : \"\")};\r\n}\r\n`;\r\n\r\nexport const FlexRowContHalfHeight = styled.div`\r\n  width: 98%;\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"space-between\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowContHalfHeightFlexStart = styled.div`\r\n  width: 98%;\r\n  border-bottom: 0.5px solid ${ColorPalette.TertiaryGrey};\r\n  margin: ${(props) => (props.margin ? props.margin : \"10px\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnContHalfHeightSpaceBetween = styled.div`\r\n  width: 98%;\r\n  height: 12%;\r\n  border-bottom: 0.5px solid ${ColorPalette.TertiaryGrey};\r\n  margin: ${(props) => (props.margin ? props.margin : \"10px\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"baseline\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"space-between\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const FlexRowContBoxShadow = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  height: ${(props) => (props.height ? props.height : \"15%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"row\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  box-shadow: 0px 5px 5px ${ColorPalette.PrimaryGrey};\r\n  border-radius: 20px;\r\n  padding: 2%;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    width: 91vw;\r\n    margin-top: 5%;\r\n    margin-bottom: 5%;\r\n  }\r\n`;\r\n\r\nexport const FlexContSpaceEvenly = styled.div`\r\n  width: 98%;\r\n  height: ${(props) => (props.height ? props.height : \"20%\")};\r\n  margin: 1%;\r\n  border-bottom: 1px solid ${ColorPalette.PrimaryGrey};\r\n  display: flex;\r\n  justify-content: space-evenly;\r\n  align-items: center;\r\n  @media (max-width: 1006px) {\r\n    justify-content: space-between;\r\n  }\r\n`;\r\n\r\nexport const RelativeFlexContAutoWidth13vh = styled.div`\r\nwidth:auto;\r\nheight:13vh;\r\nposition:relative;\r\nleft 35%;\r\ntop:5%;\r\ndisplay:flex;\r\n@media (max-width: 1006px) {\r\n height:80%;\r\n margin:1%;\r\n width:25vw;\r\n left:0;\r\n top:0;\r\n display:flex;\r\n justify-content:space-between;\r\n}\r\n`;\r\n\r\nexport const FlexContAutoWidth13vh = styled.div`\r\n  width: auto;\r\n  height: 13vh;\r\n  background-color: white;\r\n  display: flex;\r\n`;\r\n\r\nexport const FlexContFullWidthHeightJustifyCenter = styled.div`\r\n  width: auto;\r\n  height: 100%;\r\n  margin: 5%;\r\n  display: flex;\r\n  justify-content: center;\r\n  justify-items: center;\r\n  @media (max-width: 1006px) {\r\n    width: 100%;\r\n  }\r\n`;\r\n\r\nexport const FlexContFullWidthJustifyCenter = styled.div`\r\n  width: auto;\r\n  margin: 5%;\r\n  display: flex;\r\n  justify-content: center;\r\n  justify-items: center;\r\n  align-items: center;\r\n`;\r\n\r\nexport const FlexContzIndex1 = styled.div`\r\n  display: flex;\r\n  zindex: 1;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnContCenterAlign = styled.div`\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  align-items: center;\r\n  text-align: center;\r\n  flex-direction: column;\r\n`;\r\n\r\nexport const FlexContCenterAlign = styled.div`\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  align-items: center;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n  }\r\n`;\r\n\r\nexport const ContAutoWidth5vh = styled.div`\r\n  height: 5vh;\r\n  margin: 2%;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  display: flex;\r\n  box-shadow: 0px 4px 8px #b7b7b7;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  padding: 2%;\r\n  @media (max-width: 1006px) {\r\n    width: 88%;\r\n    margin: 5%;\r\n    height: 10vw;\r\n    justify-content: flex-star;\r\n  }\r\n`;\r\n\r\nexport const Cont450pxAutoHeight = styled.div`\r\n  width: 450px;\r\n  height: auto;\r\n  margin: 20px;\r\n`;\r\n\r\nexport const GridCont1000px = styled.div`\r\n  width: 1000px;\r\n  background-color: white;\r\n  border-radius: 10px;\r\n  border: 1px solid black;\r\n  display: grid;\r\n  grid-template-columns: repeat(4, 1fr);\r\n  margin: 20px;\r\n`;\r\n\r\nexport const Cont85vwAutoHeight = styled.div`\r\n  width: 85vw;\r\n  height: auto;\r\n  margin: 1%;\r\n  background-color: white;\r\n`;\r\n\r\nexport const ContMargin20px = styled.div`\r\n  margin: 20px;\r\n`;\r\n\r\nexport const Cont400x575pxNoMargin = styled.div`\r\n  width: 400px;\r\n  height: 575px;\r\n`;\r\n\r\nexport const Cont60PercentMargin20px = styled.div`\r\n  width: 60%;\r\n  margin: 20px;\r\n`;\r\n\r\nexport const Cont100Percent100Percent = styled.div`\r\n  width: 100%;\r\n  height: 100%;\r\n`;\r\n\r\nexport const ContPadding10pxMargin20px = styled.div`\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  margin: 20px;\r\n  border: 1px solid black;\r\n  padding: 10px;\r\n`;\r\n\r\nexport const FlexCont10vw15vh = styled.div`\r\n  width: 150px;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  margin: 5px;\r\n  display: flex;\r\n  justify-content: space-between;\r\n  box-shadow: 0px 4px 8px #b7b7b7;\r\n  padding: 5px;\r\n  height: 15vh;\r\n`;\r\n\r\nexport const FlexCont300x150px = styled.div`\r\n  width: 300px;\r\n  height: 150px;\r\n  align-items: center;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  margin: 10px;\r\n  box-shadow: 0px 4px 8px #b7b7b7;\r\n  padding: 10px;\r\n  display: flex;\r\n`;\r\n\r\nexport const FlexCont90PercentAutoHeight = styled.div`\r\n  width: 90%;\r\n  height: auto;\r\n  margin: 2%;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  flex-direction: column;\r\n  cursor: pointer;\r\n`;\r\n\r\nexport const Cont100PercentMobile100Percent = styled.div`\r\n  width: 100%;\r\n  margin-bottom: 2%;\r\n  @media (max-width: 1006px) {\r\n    width: 100%;\r\n  }\r\n`;\r\n\r\nexport const Cont100Percent4Percent = styled.div`\r\n  width: 100%;\r\n  height: 4%;\r\n  font-weight: bold;\r\n`;\r\n\r\nexport const GreyCont100Percent4PercentDisplayProp = styled.div`\r\n  width: 100%;\r\n  height: auto;\r\n  display: ${(props) => (props.displayProp ? props.displayProp : \"block\")};\r\n  color: gray;\r\n`;\r\n\r\nexport const Cont100Percent4PercentDisplayProp = styled.div`\r\n  width: 100%;\r\n  height: auto;\r\n  display: ${(props) => (props.displayProp ? props.displayProp : \"block\")};\r\n  font-weight: bold;\r\n`;\r\n\r\nexport const Cont100PercentMobileOpt = styled.div`\r\n  width: 100%;\r\n  @media (max-width: 1006px) {\r\n    width: 95vw;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n  }\r\n`;\r\n\r\nexport const RelativeCont100Percent = styled.div`\r\n  width: 100%;\r\n  margin: 1%;\r\n  position: relative;\r\n`;\r\n\r\nexport const Cont60x60 = styled(animated.div)`\r\n  width: 60px;\r\n  height: 60px;\r\n  border: 1px solid #d3d3d3;\r\n  border-radius: 50px;\r\n  margin: 30px;\r\n  margin-top: 60px;\r\n`;\r\n\r\nexport const FlexFixedCont = styled.div`\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  left: 0;\r\n  transform: \"translate(-50%,-50%)\";\r\n  margin: 20px;\r\n  zindex: 1000;\r\n  display: flex;\r\n`;\r\n\r\nexport const FixedContHeight120vh = styled.div`\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  left: 0;\r\n  height: 120vh;\r\n  background-color: rgba(0, 0, 0, 0.7);\r\n  zindex: 100;\r\n`;\r\n\r\nexport const FlexCont70PercentAuto = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"70%\")};\r\n  padding: 5px;\r\n  background-color: white;\r\n  border-radius: 10px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  margin: 20px;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    height: 150vh;\r\n    width: 90%;\r\n  }\r\n`;\r\n\r\nexport const Cont180pxAutoHeight = styled.div`\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  margin: 5px;\r\n  justify-content: space-around;\r\n  min-width: auto;\r\n  min-height: 50px;\r\n  max-width: 100%;\r\n  padding: 5px;\r\n  border-bottom: 1px dashed ${ColorPalette.PrimaryGrey};\r\n`;\r\n\r\nexport const Cont50Percent100Percent = styled.div`\r\n  height: 100%;\r\n  width: 50%;\r\n`;\r\n\r\nexport const Cont50Percent100PercentFlexEnd = styled.div`\r\n  height: 100%;\r\n  width: 50%;\r\n  display: flex;\r\n  justify-content: flex-end;\r\n`;\r\n\r\nexport const Cont100Percent50Percent = styled.div`\r\n  width: 100%;\r\n  height: 50%;\r\n`;\r\n\r\nexport const RelativeCont100vwPropBottom = styled.div`\r\n  position: relative;\r\n  display: flex;\r\n  flex-direction: column;\r\n  width: 100vw;\r\n  bottom: ${(props) => (props.contbottom ? props.contbottom : \"74vw\")};\r\n  margin-left: 1vw;\r\n`;\r\n\r\nexport const FlexCont80PercentAutoHeightPadding = styled.div`\r\n  width: 80%;\r\n  margin: 2%;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  padding: 3%;\r\n  box-shadow: 0px 4px 8px #b7b7b7;\r\n`;\r\n\r\nexport const Cont82vw21vh = styled.div`\r\n  height: 21vh;\r\n  width: ${(props) => (props.width ? props.width : \"82vw\")};\r\n  display: ${(props) => (props.display ? props.display : \"none\")};\r\n  border-left: 0px;\r\n  border-right: 0px;\r\n  @media (max-width: 1006px) {\r\n    width: 101vw;\r\n    height: 6vh;\r\n    background-color: #333;\r\n    position: fixed;\r\n    top: 0;\r\n    z-index: 1000;\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n  }\r\n`;\r\n\r\nexport const Cont17vw0vh = styled(animated.div)`\r\n  height: 0vw;\r\n  width: 17vw;\r\n  margin: 1%;\r\n  border-left: 0px;\r\n  border-right: 0px;\r\n  @media (max-width: 1006px) {\r\n    width: 100vw;\r\n    height: 60px;\r\n    background-color: white;\r\n    position: fixed;\r\n    bottom: 0;\r\n    margin: 0;\r\n    z-index: 1000;\r\n  }\r\n`;\r\n\r\nexport const FlexCont_9Percent_AutoHeight = styled.div`\r\n  margin: 2%;\r\n  width: 9%;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n}\r\n  justify-content: space-evenly;\r\n  align-items: center;\r\n  padding: 2%;\r\n  cursor: pointer;\r\n  @media (max-width: 1006px) {\r\n    width: 88%;\r\n    margin: ${(props) => (props.mobilemargin ? props.mobilemargin : \"5%\")};\r\n    height: 10vw;\r\n    justify-content: flex-star;\r\n  }\r\n`;\r\n\r\nexport const FlexCont80PercentAutoHeight = styled.div`\r\n  width: 80%;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  display: flex;\r\n  justify-content: space-evenly;\r\n  align-items: center;\r\n  padding: 2%;\r\n  @media (max-width: 1006px) {\r\n    width: 85vw;\r\n    margin: 0vw;\r\n  }\r\n`;\r\n\r\nexport const RelativeContBGColorWhite = styled.div`\r\n  position: relative;\r\n  background-color: white;\r\n  border-radius: 10px;\r\n  @media (max-width: 1006px) {\r\n  }\r\n`;\r\n\r\nexport const RelativeCont30vw80vh = styled.div`\r\n  margin: 10px;\r\n  width: 30vw;\r\n  height: 80vh;\r\n  position: relative;\r\n  left: 35%;\r\n  top: 5%;\r\n  overflow-y: auto;\r\n  align-items: center;\r\n  background-color: white;\r\n  border-radius: 10px;\r\n  padding: 10px;\r\n  @media (max-width: 1006px) {\r\n    height: 60%;\r\n    width: 70vw;\r\n    top: 10%;\r\n    left: 10%;\r\n    overflow-y: scroll;\r\n  }\r\n`;\r\n\r\nexport const RelativeContOverflowY = styled.div`\r\n  align-items: center;\r\n  width: 20vw;\r\n  position: relative;\r\n  left: 35%;\r\n  top: 5%;\r\n  height: 75vh;\r\n  overflow-y: auto;\r\n  padding: 10px;\r\n  background-color: white;\r\n  border-radius: 10px;\r\n  margin-right: 50px;\r\n  margin-right: 20px;\r\n  @media (max-width: 1006px) {\r\n    height: 65vh;\r\n    width: 70vw;\r\n    top: 10%;\r\n    left: 10%;\r\n  }\r\n`;\r\n\r\nexport const Cont185pxBoxShadowCenter = styled.div`\r\n  align-items: center;\r\n  width: 185px;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  margin: 5px;\r\n  box-shadow: 0px 4px 8px #b7b7b7;\r\n  padding: 5px;\r\n  padding-bottom: 10px;\r\n`;\r\n\r\nexport const FlexCont76PercentMobile = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"76vw\")};\r\n  height: 15px;\r\n  border-bottom: 1px solid #d3d3d3;\r\n  border-right: 1px dotted #d3d3d3;\r\n  cursor: pointer;\r\n  background-color: white;\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  padding: 2%;\r\n  transition: background-color 0.2s;\r\n  transition-timing-function: linear;\r\n  @media (max-width: 1006px) {\r\n    width: 88%;\r\n    margin: 5%;\r\n    height: 10vw;\r\n    justify-content: flex-start;\r\n  }\r\n`;\r\n\r\nexport const FlexZoomSpaceBetween = styled.div`\r\n  width: 100%;\r\n  height: auto;\r\n  display: flex;\r\n  justify-content: space-between;\r\n  &:hover {\r\n    transform: scale(1.011);\r\n  }\r\n  transition: transform 0.2s;\r\n  transition-timing-function: linear;\r\n`;\r\n\r\nexport const Cont82vw15vh = styled.div`\r\n  height: 15vh;\r\n  width: 82vw;\r\n  background-color: white;\r\n  border-left: 0px;\r\n  border-right: 0px;\r\n  @media (max-width: 1006px) {\r\n    width: 101vw;\r\n    height: 6vh;\r\n    background-color: #333;\r\n    position: fixed;\r\n    top: 0;\r\n    z-index: 1000;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnPropWidth = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  min-width: ${(props) => (props.minwidth ? props.minwidth : \"\")};\r\n  height: ${(props) => (props.height ? props.height : \"20%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  text-align: ${(props) => (props.alignitems ? props.alignitems : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  word-wrap: break-word;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"none\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnFullWidth = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  min-height: ${(props) => (props.minheight ? props.minheight : \"\")};\r\n  max-height: ${(props) => (props.maxheight ? props.maxheight : \"\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"left\")};\r\n  text-align: ${(props) => (props.textalign ? props.textalign : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  overflow-y: ${(props) => (props.overflowy ? props.overflowy : \"\")};\r\n  overflow-x: ${(props) => (props.overflowx ? props.overflowx : \"\")};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  transition: visibility 0.5s;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"flex\")};\r\n    padding-bottom: ${(props) =>\r\n      props.mobilepaddingbottom ? props.mobilepaddingbottom : \"\"};\r\n  }\r\n`;\r\n\r\nexport const DivWithDisplay = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  overflow-wrap: anywhere;\r\n  overflow-y: ${(props) => (props.overflowy ? props.overflowy : \"\")};\r\n  overflow-x: ${(props) => (props.overflowx ? props.overflowx : \"\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  font-weight: ${(props) => (props.fontweight ? props.fontweight : \"regular\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"\")};\r\n  border: ${(props) => (props.border ? props.border : \"\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"flex\")};\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"column\"};\r\n  }\r\n`;\r\n\r\nexport const GridDiv = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));\r\n  grid-auto-rows: 0.2fr;\r\n  grid-gap: 2px;\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  overflow-wrap: anywhere;\r\n  overflow-y: ${(props) => (props.overflowy ? props.overflowy : \"\")};\r\n  overflow-x: ${(props) => (props.overflowx ? props.overflowx : \"\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  font-weight: ${(props) => (props.fontweight ? props.fontweight : \"regular\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"\")};\r\n  border: ${(props) => (props.border ? props.border : \"\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"flex\")};\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"column\"};\r\n  }\r\n`;\r\n\r\nexport const Grid_300Div = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); \r\n  grid-auto-rows: 0.2fr;\r\n  grid-gap: 2px;\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  overflow-wrap: anywhere;\r\n  overflow-y: ${(props) => (props.overflowy ? props.overflowy : \"\")};\r\n  overflow-x: ${(props) => (props.overflowx ? props.overflowx : \"\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  font-weight: ${(props) => (props.fontweight ? props.fontweight : \"regular\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"\")};\r\n  border: ${(props) => (props.border ? props.border : \"\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"flex\")};\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"column\"};\r\n  }\r\n`;\r\n\r\nexport const DivWithMarginPadding = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  padding: ${(props) => (props.padding ? props.padding : \"1%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  overflow-wrap: anywhere;\r\n  overflow-y: ${(props) => (props.overflowy ? props.overflowy : \"\")};\r\n  overflow-x: ${(props) => (props.overflowx ? props.overflowx : \"\")};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n    border: ${(props) => (props.border ? props.border : \"2px solid grey\")};\r\n    box-shadow: 0px 4px 8px #b7b7b7;\r\n    @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"flex\")};\r\n    flex-direction: ${(props) =>\r\n      props.flexdirection ? props.flexdirection : \"column\"};\r\n    padding-bottom: ${(props) =>\r\n      props.mobilepaddingbottom ? props.mobilepaddingbottom : \"\"};\r\n  }\r\n`;\r\nexport const FlexColumnFullWidthMargins = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  padding-left: 2%;\r\n  padding-right: 2%;\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  min-height: ${(props) => (props.minheight ? props.minheight : \"\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"left\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  transition: visibility 0.5s;\r\n  margin:  ${(props) => (props.margin ? props.margin : \"\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  }\r\n`;\r\n\r\nexport const Div70PerWidth7PerHeight = styled.div`\r\n  width: 70%;\r\n  height: 7%;\r\n  margin: 30px;\r\n  display: flex;\r\n  align-items: center;\r\n  margin-left: 2%;\r\n  @media (max-width: 1006px) {\r\n  }\r\n`;\r\n\r\nexport const FlexCont80PercentMobileOpt = styled.div`\r\n  width: 80%;\r\n  display: flex;\r\n  flex-flow: row row;\r\n  gap: 5px;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n    height: 100vh;\r\n    align-items: center;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n  }\r\n`;\r\n\r\nexport const Cont100Percent80PercentOverflowY = styled.div`\r\n  height: 80%;\r\n  width: 100%;\r\n  overflow-y: ${(props) => (props.overflowy ? props.overflowy : \"auto\")};\r\n  overflow-x: ${(props) => (props.overflowx ? props.overflowx : \"\")};\r\n`;\r\n\r\nexport const Cont400x575px = styled.div`\r\n  width: 400px;\r\n  height: 575px;\r\n  margin: 20px;\r\n`;\r\n\r\nexport const Cont400x500px = styled.div`\r\n  width: 400px;\r\n  height: 500px;\r\n`;\r\n\r\nexport const FlexCont5vhMobile88x5 = styled.div`\r\n  height: 5vh;\r\n  margin: 2%;\r\n  background-color: white;\r\n  border-radius: 4px;\r\n  display: flex;\r\n  box-shadow: 0px 4px 8px #b7b7b7;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  padding: 2%;\r\n  @media (max-width: 1006px) {\r\n    width: 88%;\r\n    margin: 5%;\r\n    height: 10vw;\r\n    justify-content: flex-star;\r\n  }\r\n`;\r\n\r\nexport const Cont400x400px = styled.div`\r\n  width: 400px;\r\n  height: 400px;\r\n`;\r\n\r\nexport const Cont400x400pxFixed = styled.div`\r\n  width: 400px;\r\n  height: 400px;\r\n  position: fixed;\r\n  top: 40%;\r\n  left: 17%;\r\n  transform: \"translate(-50%,-50%)\";\r\n  margin: 20px;\r\n  zindex: 1000;\r\n`;\r\n\r\nexport const Cont500x850px = styled.div`\r\n  width: 500px;\r\n  height: 850px;\r\n  margin: 20px;\r\n`;\r\n\r\nexport const Cont500x200px = styled.div`\r\n  width: 500px;\r\n  height: 200px;\r\n  background-color: white;\r\n  border: 1px solid black;\r\n`;\r\n\r\nexport const Cont500x200pxFixed = styled.div`\r\n  width: 500px;\r\n  height: 200px;\r\n  background-color: white;\r\n  border: 1px solid black;\r\n  z-index: 1000;\r\n  position: fixed;\r\n  top: 50%;\r\n  left: 40%;\r\n  @media (max-width: 1006px) {\r\n    position: absolute;\r\n    left: 5vw;\r\n    right: 5vw;\r\n    width: 90vw;\r\n    height: 25vh;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n  }\r\n`;\r\n\r\nexport const Cont500x200pxFixedNoMobile = styled.div`\r\n  width: 500px;\r\n  height: 200px;\r\n  background-color: white;\r\n  border: 1px solid black;\r\n  z-index: 1000;\r\n  position: fixed;\r\n  top: 50%;\r\n  left: 40%;\r\n`;\r\n\r\nexport const StickyCont400x400px = styled.div`\r\n  width: 400px;\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  overflow: auto;\r\n  height: ${(props) => (props.height ? props.height : \"700px\")};\r\n  transform: \"translate(-50%,-50%)\";\r\n  zindex: 1000;\r\n    @media (max-width: 1006px) {\r\n    top:  ${(props) => (props.top ? props.top : \"\")};\r\n    bottom:  ${(props) => (props.bottom ? props.bottom : \"\")};\r\n    left: ${(props) => (props.left ? props.left : \"\")};\r\n    right: ${(props) => (props.right ? props.right : \"\")};\r\n  }\r\n`;\r\n\r\nexport const ImageContGallery = styled.div`\r\n  width: 70vw;\r\n  height: 70vh;\r\n  padding: 2%;\r\n  display: flex;\r\n  border-radius: 10px;\r\n  margin: 30px;\r\n  @media (max-width: 1006px) {\r\n    height: 50vh;\r\n    width: 90vw;\r\n    padding: 0%;\r\n    flex-direction: column;\r\n    margin: 0px;\r\n    margin-top: 20vh;\r\n  }\r\n`;\r\n\r\nexport const AbsoluteCont = styled.div`\r\n  width: 80vw;\r\n  position: relative;\r\n  left: 10vw;\r\n  top: 8vh;\r\n  overflow: auto;\r\n  height: 800px;\r\n  border-radius: 10px;\r\n  transform: \"translate(-50%,-50%)\";\r\n  zindex: 1001;\r\n  @media (max-width: 1006px) {\r\n    top: 0vh;\r\n    left: 9.25vw;\r\n  }\r\n`;\r\n\r\nexport const AbsoluteCalculatorCont = styled.div`\r\n  width: 400px;\r\n  position: relative;\r\n  left: 30vw;\r\n  top: 0vh;\r\n  overflow: auto;\r\n  height: 800px;\r\n  border-radius: 10px;\r\n  transform: \"translate(-50%,-50%)\";\r\n  zindex: 1001;\r\n  @media (max-width: 1006px) {\r\n    display:none;\r\n  }\r\n`;\r\n\r\nexport const FlexContMobileColumn = styled.div`\r\n  display: flex;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    height: 0vh;\r\n  }\r\n`;\r\n\r\nexport const FullWidthMobileCont100vw100vh = styled(animated.div)`\r\n  margin-right: 0px;\r\n  background-color: white;\r\n  border-right: 1px dotted #d3d3d3;\r\n  @media (max-width: 1006px) {\r\n    width: 100vw;\r\n    height: 100vh;\r\n  }\r\n`;\r\n\r\nexport const FlexContMobileTopVH = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  display: flex;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    height: 0vh;\r\n    position: relative;\r\n    top: 7vh;\r\n  }\r\n`;\r\n\r\nexport const FlexCont100vw100vh = styled.div`\r\n  width: 100vw;\r\n  height: 100vh;\r\n  display: flex;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\nexport const FlexDiv = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  display: ${(props) => (props.displayProp ? props.displayProp : \"flex\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  justify-content: ${(props) => (props.justifycontent ? props.justifycontent : \"\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumn81vwLightGrey = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"81vw\")};\r\n  min-height: ${(props) => (props.minheight ? props.minheight : \"100vh\")};\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  position: ${(props) => (props.position ? props.position : \"relative\")};\r\n  overflow: visible; /* Ensure sticky works */\r\n  display: flex;\r\n  flex-direction: column;\r\n  background-color: #f8f8f8;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n    background-color: white;\r\n    width: 99.5%;\r\n    height: auto;\r\n    padding-bottom: 15vh;\r\n    min-height: ${(props) =>\r\n      props.minheightmobile ? props.minheightmobile : \"\"};\r\n  }\r\n`;\r\n\r\nexport const LeftCont = styled(animated.div)`\r\n  width: ${(props) => (props.width ? props.width : \"18vw\")};\r\n  height: 100vh;\r\n  display: ${(props) => (props.display ? props.display : \"\")};\r\n  background-color: white;\r\n  border-right: 1px dotted #d3d3d3;\r\n  @media (max-width: 1006px) {\r\n    width: 100vw;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const RightCont = styled.div`\r\n  width: 80vw;\r\n  height: 100vh;\r\n  display: flex;\r\n  flex-direction: column;\r\n  background-color: white;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n    background-color: white;\r\n    width: 99.5%;\r\n    top: 15%;\r\n    position: relative;\r\n  }\r\n`;\r\n\r\nexport default nullProp;\r\n","import styled from \"styled-components\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const Icon80x80Percent = styled.img`\r\n  height: 80%;\r\n  width: 80%;\r\n`;\r\n\r\nexport const Icon40x40Percent = styled.img`\r\n  height: 40%;\r\n  width: 40%;\r\n`;\r\n\r\nexport const RelativeIconBottom70Percent = styled.img`\r\nposition: absolute;\r\n  top: -10px;\r\n  right: -50px;\r\n  width: 30px;\r\n  height: 20px;\r\n  cursor: pointer;\r\n  z-index: 1.8;\r\n\r\n`;\r\n\r\nexport const Icon30x40pxPointer = styled.img`\r\n  width: 30px;\r\n  height: 40px;\r\n  cursor: pointer;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  margin-left: 10px;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nexport const Icon30x40pxPointerNoMargin = styled.img`\r\n  width: 30px;\r\n  height: 40px;\r\n  cursor: pointer;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nexport const Icon35px100Perc = styled.img`\r\n  height: 35px;\r\n  width: 100%;\r\n  cursor: pointer;\r\n  @media (max-width: 1006px) {\r\n    font-size: 100%;\r\n  }\r\n`;\r\n\r\nexport const Icon30x30 = styled.img`\r\n  height: 30px;\r\n  width: 30px;\r\n  cursor: pointer;\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  padding: 2%;\r\n  :hover {\r\n    opacity: 70%;\r\n    // width: 35px;\r\n  }\r\n  transition: opacity 0.5s;\r\n`;\r\n\r\nexport const Icon15x15 = styled.img`\r\n  height: 18px;\r\n  width: 18px;\r\n  cursor: pointer;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  padding: ${(props) => (props.padding ? props.padding : \"2%\")};\r\n  transition: width 0.5s, transform 0.5s;\r\n\r\n  :hover {\r\n    opacity: 70%;\r\n    width: 15px;\r\n    transform: rotateX(180deg); /* Flips the icon vertically */\r\n  }\r\n`;\r\n\r\nexport const Icon120x120 = styled.img`\r\n  height: auto;\r\n  width: 120px;\r\n  transition: width 0.5s;\r\n  @media (max-width: 1006px) {\r\n    width: 35px;\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n  }\r\n`;\r\n\r\nexport const Icon80x80 = styled.img`\r\n  height: auto;\r\n  width: 80px;\r\n  transition: width 0.5s;\r\n  @media (max-width: 1006px) {\r\n    width: 35px;\r\n  }\r\n`;\r\n\r\nexport const Icon100x100 = styled.img`\r\n  height: auto;\r\n  width: 100px;\r\n  transition: width 0.5s;\r\n  @media (max-width: 1006px) {\r\n    width: 35px;\r\n  }\r\n`;\r\n\r\nexport const Icon200x200 = styled.img`\r\n  height:  ${(props) => (props.height ? props.height : \"auto\")};\r\n  object-fit:  ${(props) => (props.objfit ? props.objfit : \"\")};\r\n  margin:  ${(props) => (props.margin ? props.margin : \"\")};\r\n  width: ${(props) => (props.width ? props.width : \"225px\")};\r\n  transition: width 0.5s;\r\n`;\r\n\r\nexport const Icon60x60 = styled.img`\r\n  height: 60px;\r\n  width: 60px;\r\n  padding: 2%;\r\n  zindex: ${(props) => (props.zindex ? props.zindex : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  :hover {\r\n    opacity: 70%;\r\n    width: 75px;\r\n  }\r\n  transition: width 0.5s;\r\n  @media (max-width: 1006px) {\r\n    width: 35px;\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n  }\r\n`;\r\n\r\nexport const Icon45x45 = styled.img`\r\nheight:45px;\r\nwidth:45px;\r\npadding:2%;\r\n:hover {\r\n    opacity:70%;\r\n}\r\ndisplay:${(props) => (props.display ? props.display : \"block\")};\r\ntransition: width 0.5s;\r\n@media (max-width: 1006px) {\r\n    margin-left:auto;\r\n    height:35px;\r\n`;\r\n\r\nexport const Icon20x20 = styled.img`\r\n  width: 20px;\r\n  padding: 2%;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  :hover {\r\n    opacity: 70%;\r\n  }\r\n  transition: width 0.5s;\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n  }\r\n`;\r\n\r\nexport default nullProp;\r\n","export const UserRole = {\r\n    User: 0,\r\n    VIP :1,\r\n    Worker :2, //Crew members\r\n    OwnerOperator :3,\r\n    Estimator : 4,\r\n    Installer :5,\r\n    Manager :6,\r\n    Admin :7,    \r\n    Accountant : 9 ,\r\n    Supplier :10,\r\n    Loading : 1000\r\n  }","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { MobileMenuLinkDiv } from \"../../MobileComponents/Divs\";\r\nimport { MobileMenuLinkText } from \"../../MobileComponents/Text\";\r\nimport { RelativeCont100vwPropBottom } from \"../../StylesheetComps/Cont\";\r\nimport { Icon45x45 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\nconst MobileSlideMenu = ({ open }) => {\r\n  const [idForUser, setIdForUser] = useState(0);\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [userId, setUserId] = useState(0);\r\n  const [userName, setUserName] = useState(\"\");\r\n  const [storeId, setStoreId] = useState(0);\r\n  const [metroId, setMetroId] = useState(0);\r\n\r\n  const history = useHistory();\r\n\r\n  const GetSessionInfo = async () => {\r\n    setIdForUser(JSON.parse(sessionStorage.getItem(\"userInfo\")).Metro_Id);\r\n    setStoreId(JSON.parse(sessionStorage.getItem(\"userInfo\")).Store_Id);\r\n    setMetroId(JSON.parse(sessionStorage.getItem(\"userInfo\")).Metro_Id)\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n    setUserId(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n    setUserName(JSON.parse(sessionStorage.getItem(\"userInfo\")).Name);\r\n  };\r\n\r\n  const Logout = async () => {\r\n    const resp = await axios.post(\r\n      window.$DBURL + \"users/\" + userId + \"/session/logout\"\r\n    );\r\n    if (resp.status === 200) {\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []);\r\n\r\n  if (!open) return null;\r\n  if (roleNum === UserRole.Installer) {\r\n    return (\r\n      <RelativeCont100vwPropBottom contbottom=\"0vw\">\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/myaccount\");\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/ProfileIcon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>My Account</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/installersetup\");\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/manageavailability.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>Business Hours</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/CasesPersonal/\" + metroId + \"/\" + storeId);\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/Projects.png\"}></Icon45x45>\r\n          <MobileMenuLinkText>My Projects</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        {/* <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/storecalendar/\" + idForUser + \"/\" + storeId);\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/Store_Calendar_Icon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>Store Calendar</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv> */}\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/storeworkers\");\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/Workers_Icon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>View Workers</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/\");\r\n            Logout();\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/LogOutIcon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>Log Out</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n      </RelativeCont100vwPropBottom>\r\n    );\r\n  } else if (roleNum === UserRole.Worker) {\r\n    return (\r\n      <RelativeCont100vwPropBottom contbottom=\"0vw\">\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/myaccount\");\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/ProfileIcon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>My Account</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        {/* <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/storecalendar/\" + idForUser + \"/\" + storeId);\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/Store_Calendar_Icon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>Store Calendar</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv> */}\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/clockinout\");\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/clockinout.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>Clock In/Out</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\r\n              \"/clockschedule/\" +\r\n                storeId +\r\n                \"/\" +\r\n                userId +\r\n                \"/\" +\r\n                roleNum +\r\n                \"/\" +\r\n                userName\r\n            );\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/clockrecords.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>View Clock Records</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\r\n              \"/workerschedule/\" + storeId + \"/\" + userId + \"/\" + userName\r\n            );\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/viewmyschedule.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>View My Schedule</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/\");\r\n            Logout();\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/LogOutIcon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>Log Out</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n      </RelativeCont100vwPropBottom>\r\n    );\r\n  } else if (roleNum === UserRole.User || roleNum === UserRole.VIP) {\r\n    return (\r\n      <RelativeCont100vwPropBottom contbottom=\"0vw\">\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/myaccount\");\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/ProfileIcon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>My Account</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/CasesPersonal/\" + metroId + \"/\" + storeId);\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/Projects.png\"}></Icon45x45>\r\n          <MobileMenuLinkText>My Projects</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/\");\r\n            Logout();\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/LogOutIcon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>Log Out</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n      </RelativeCont100vwPropBottom>\r\n    );\r\n  } else if (roleNum === UserRole.Manager || roleNum === UserRole.Estimator) {\r\n    return (\r\n      <RelativeCont100vwPropBottom contbottom=\"0vw\">\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/myaccount\");\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/ProfileIcon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>My Account</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/cases/\" + metroId + \"/\" + storeId);\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/Store_Projects_Icon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>Store Projects</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/CasesPersonal/\" + metroId + \"/\" + storeId);\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/Projects.png\"}></Icon45x45>\r\n          <MobileMenuLinkText>My Projects</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/\");\r\n            Logout();\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/LogOutIcon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>Log Out</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n      </RelativeCont100vwPropBottom>\r\n    );\r\n  } else {\r\n    return (\r\n      <RelativeCont100vwPropBottom contbottom=\"0vw\">\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/myaccount\");\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/ProfileIcon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>My Account</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/CasesPersonal/\" + metroId + \"/\" + storeId);\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/Projects.png\"}></Icon45x45>\r\n          <MobileMenuLinkText>My Projects</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n\r\n        <MobileMenuLinkDiv\r\n          onClick={() => {\r\n            history.push(\"/\");\r\n            Logout();\r\n          }}\r\n        >\r\n          <Icon45x45 src={\"/LogOutIcon.svg\"}></Icon45x45>\r\n          <MobileMenuLinkText>Log Out</MobileMenuLinkText>\r\n        </MobileMenuLinkDiv>\r\n      </RelativeCont100vwPropBottom>\r\n    );\r\n  }\r\n};\r\n\r\nMobileSlideMenu.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  onCloseMenu: () => {},\r\n};\r\n\r\nexport default MobileSlideMenu;\r\n","// Importing React hooks\r\nimport { useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\n// Importing mobile components\r\nimport { TopDivWhite } from \"../../MobileComponents/Divs\";\r\nimport {\r\n  MobileLogo30x30px,\r\n  MobileLogo50x50px,\r\n} from \"../../MobileComponents/Images\";\r\nimport { MenuHeader } from \"../../MobileComponents/Text\";\r\n\r\n// Importing stylesheet components\r\nimport { Cont82vw15vh } from \"../../StylesheetComps/Cont\";\r\n\r\n// Importing a custom component\r\nimport MobileSlideMenu from \"../MobileSlideMenu\";\r\n\r\nconst ActionMenu = ({ mobilePageProp }) => {\r\n  const history = useHistory();\r\n  const [moreToggle, setMoreToggle] = useState(false);\r\n  const [iconToggle, setIconToggle] = useState(false);\r\n  const [menuSRC, setMenuSRC] = useState(\"/hamburger.svg\");\r\n\r\n  window.addEventListener(\"beforeinstallprompt\", function (e) {\r\n    window.$deferredPrompt = e;\r\n  });\r\n\r\n  const ChangeIcon = async (toggle) => {\r\n    if (toggle === false) {\r\n      setMenuSRC(\"/CloseMobile.svg\");\r\n      setIconToggle(true);\r\n    } else {\r\n      setMenuSRC(\"/hamburger.svg\");\r\n      setIconToggle(false);\r\n    }\r\n  };\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    return (\r\n      <div>\r\n        <TopDivWhite>\r\n          <MobileLogo50x50px\r\n            onClick={() => {\r\n              history.push(\"/home\");\r\n            }}\r\n            src=\"/NRCLogoRegularBlack.png\"\r\n          ></MobileLogo50x50px>\r\n          <MenuHeader>{mobilePageProp}</MenuHeader>\r\n          <MobileLogo30x30px\r\n            onClick={() => {\r\n              setMoreToggle(!moreToggle);\r\n              ChangeIcon(iconToggle);\r\n            }}\r\n            src={menuSRC}\r\n          ></MobileLogo30x30px>\r\n        </TopDivWhite>\r\n        <MobileSlideMenu\r\n          open={moreToggle}\r\n          onCloseMenu={() => {\r\n            setMoreToggle(false);\r\n          }}\r\n        ></MobileSlideMenu>\r\n      </div>\r\n    );\r\n  } else {\r\n    return <Cont82vw15vh></Cont82vw15vh>;\r\n  }\r\n};\r\n\r\nActionMenu.defaultProps = {\r\n  profileurl: \"\",\r\n  AddtoHomeScreenIOS: () => {},\r\n  AddtoHomeScreenAndroid: () => {},\r\n};\r\n\r\nexport default ActionMenu;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { ColorPalette } from '../../StylesheetComps/Colors';\r\n\r\nconst StyledIconButton = styled.div`\r\n  min-width: ${(props) => (props.minwidth ? props.minwidth : \"95px\")};\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  height: ${(props) => (props.height ? props.height : \"30px\")};\r\n  text-align: center;\r\n  font-family: LeagueSpartan-Bold;\r\n  color: ${(props) => (props.color ? props.color : \"white\")};\r\n  background-color: ${(props) =>\r\n    props.bgcolor ? props.bgcolor : ColorPalette.PrimaryButtonBlue};\r\n  vertical-align: middle;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"12px\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"2px 2px\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  line-height: ${(props) => (props.lineheight ? props.lineheight : \"2.5\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"pointer\")};\r\n  pointer-events: ${(props) => (props.pointerevent ? props.pointerevent : \"\")};\r\n  border-radius: 10px;\r\n  transition: 0.3s;\r\n  padding: 4px 10px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center; /* Center both icon and text */\r\n\r\n  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.06);\r\n\r\n  &:hover {\r\n    opacity: ${(props) => (props.hoveropacity ? props.hoveropacity : \"70%\")};\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 6px 8px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06);\r\n  }\r\n\r\n  &:active {\r\n    transform: translateY(1px);\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n  }\r\n`;\r\n\r\nconst Icon = styled.img`\r\n  height: ${(props) => (props.iconheight ? props.iconheight : \"20px\")};\r\n  width: ${(props) => (props.iconwidth ? props.iconwidth : \"20px\")};\r\n  margin-right: 8px; /* Consistent spacing between icon and text */\r\n  flex-shrink: 0; /* Prevent the icon from shrinking */\r\n`;\r\n\r\nconst TextContainer = styled.span`\r\n  flex-grow: 1; /* Ensures consistent alignment of text */\r\n  text-align: center; /* Keeps the text centered */\r\n`;\r\n\r\nconst IconButton = ({\r\n    src,\r\n    alt,\r\n    text,\r\n    minwidth,\r\n    width,\r\n    height,\r\n    color,\r\n    bgcolor,\r\n    fontsize,\r\n    margin,\r\n    margintop,\r\n    marginbottom,\r\n    marginright,\r\n    marginleft,\r\n    lineheight,\r\n    cursor,\r\n    pointerevent,\r\n    hoveropacity,\r\n    display,\r\n    mobilewidth,\r\n    mobiledisplay,\r\n    iconheight,\r\n    iconwidth,\r\n    children,\r\n    ...props\r\n  }) => {\r\n    return (\r\n      <StyledIconButton\r\n        minwidth={minwidth}\r\n        width={width}\r\n        height={height}\r\n        color={color}\r\n        bgcolor={bgcolor}\r\n        fontsize={fontsize}\r\n        margin={margin}\r\n        margintop={margintop}\r\n        marginbottom={marginbottom}\r\n        marginright={marginright}\r\n        marginleft={marginleft}\r\n        lineheight={lineheight}\r\n        cursor={cursor}\r\n        pointerevent={pointerevent}\r\n        hoveropacity={hoveropacity}\r\n        display={display}\r\n        mobilewidth={mobilewidth}\r\n        mobiledisplay={mobiledisplay}\r\n        {...props}\r\n      >\r\n        {src && <Icon src={src} alt={alt || \"icon\"} iconheight={iconheight} iconwidth={iconwidth} />}\r\n        <TextContainer>{text || children}</TextContainer>\r\n      </StyledIconButton>\r\n    );\r\n  };  \r\n\r\nexport default IconButton;\r\n","// // React import\r\n// import React, { useState } from \"react\";\r\n\r\n// // Input component import\r\n// import Input from \"../Input\";\r\n\r\n// // FlexDiv, FlexRowCont100x8PercentSpaceAround, and RelativeContBGColorWhite imported from the \"Cont\" stylesheet\r\n// import {\r\n//   FlexDiv,\r\n//   FlexRowCont100x8PercentSpaceAround,\r\n//   RelativeContBGColorWhite,\r\n// } from \"../../StylesheetComps/Cont\";\r\n\r\n// // FlexDiv40PercentMobileWidth100Percent imported from the \"Div\" stylesheet\r\n// import { FlexDiv40PercentMobileWidth100Percent } from \"../../StylesheetComps/Div\";\r\n\r\n// // RegularText, SmallTitleBoldWithWidth, and RegularTextBoldRed imported from the \"Titles\" stylesheet\r\n// import {\r\n//   RegularText,\r\n//   SmallTitleBoldWithWidth,\r\n//   RegularTextBoldRed,\r\n// } from \"../../StylesheetComps/Titles\";\r\n\r\n// // RegularResponsiveButton imported from the \"Components\" stylesheet\r\n// import { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\n// // MobileInput imported from the \"Inputs\" mobile component\r\n// import { MobileInput } from \"../../MobileComponents/Inputs\";\r\n\r\n// // ColorPalette imported from the \"Colors\" stylesheet\r\n// import { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\n// const ChangePass = ({ passSwitch, onClose, onPasswordChanged, onPreview }) => {\r\n//   const [oldPass, setOldPass] = useState(\"\");\r\n//   const [newPass, setNewPass] = useState(\"\");\r\n//   const [confirmNewPass, setConfirmNewPass] = useState(\"\");\r\n//   const [errorText, setErrorText] = useState(\"\");\r\n\r\n//   if (!passSwitch) return null;\r\n\r\n//   if (window.$ISMOBILE === true) {\r\n//     return (\r\n//       <RelativeContBGColorWhite>\r\n//         <RegularText>Change Password</RegularText>\r\n//         <hr></hr>\r\n//         <FlexDiv>\r\n//           <SmallTitleBoldWithWidth>Old Password</SmallTitleBoldWithWidth>\r\n//           <MobileInput\r\n//             type=\"password\"\r\n//             inputwidth=\"40%\"\r\n//             inputheight=\"5px\"\r\n//             placeholder=\"Old Password\"\r\n//             onChange={(e) => {\r\n//               setOldPass(e.target.value);\r\n//             }}\r\n//           ></MobileInput>\r\n//         </FlexDiv>\r\n//         <br></br>\r\n//         <FlexDiv>\r\n//           <SmallTitleBoldWithWidth>New Password</SmallTitleBoldWithWidth>\r\n//           <MobileInput\r\n//             type=\"password\"\r\n//             inputwidth=\"40%\"\r\n//             inputheight=\"5px\"\r\n//             placeholder=\"New Password\"\r\n//             onChange={(e) => {\r\n//               setNewPass(e.target.value);\r\n//             }}\r\n//           ></MobileInput>\r\n//         </FlexDiv>\r\n//         <br></br>\r\n//         <FlexDiv>\r\n//           <SmallTitleBoldWithWidth>\r\n//             Confirm New Password\r\n//           </SmallTitleBoldWithWidth>\r\n//           <MobileInput\r\n//             type=\"password\"\r\n//             inputwidth=\"40%\"\r\n//             inputheight=\"1px\"\r\n//             placeholder=\"Confirm New Password\"\r\n//             onChange={(e) => {\r\n//               setConfirmNewPass(e.target.value);\r\n//             }}\r\n//           ></MobileInput>\r\n//         </FlexDiv>\r\n//         <br></br>\r\n//         <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n//         <FlexRowCont100x8PercentSpaceAround>\r\n//           <RegularResponsiveButton\r\n//             bgcolor={ColorPalette.PrimaryRed}\r\n//             onClick={() => {\r\n//               onClose();\r\n//               setErrorText(\"\");\r\n//             }}\r\n//           >\r\n//             Cancel\r\n//           </RegularResponsiveButton>\r\n//           <RegularResponsiveButton\r\n//             onClick={() => {\r\n//               if (confirmNewPass !== newPass || oldPass === \"\") {\r\n//                 setErrorText(\"Passwords do not match\");\r\n//               } else {\r\n//                 onPreview({ oldPass, newPass });\r\n//                 onPasswordChanged(oldPass, newPass);\r\n//                 setErrorText(\"\");\r\n//               }\r\n//             }}\r\n//           >\r\n//             Save Changes\r\n//           </RegularResponsiveButton>\r\n//         </FlexRowCont100x8PercentSpaceAround>\r\n//       </RelativeContBGColorWhite>\r\n//     );\r\n//   } else {\r\n//     return (\r\n//       <RelativeContBGColorWhite>\r\n//         <RegularText>Change Password</RegularText>\r\n//         <hr></hr>\r\n//         <FlexDiv>\r\n//           <SmallTitleBoldWithWidth>Old Password</SmallTitleBoldWithWidth>\r\n//           <Input\r\n//             type=\"password\"\r\n//             inputwidth=\"40%\"\r\n//             inputheight=\"5px\"\r\n//             placeholder=\"Old Password\"\r\n//             onChange={(e) => {\r\n//               setOldPass(e.target.value);\r\n//             }}\r\n//           ></Input>\r\n//         </FlexDiv>\r\n//         <FlexDiv>\r\n//           <SmallTitleBoldWithWidth>New Password</SmallTitleBoldWithWidth>\r\n//           <Input\r\n//             type=\"password\"\r\n//             inputwidth=\"40%\"\r\n//             inputheight=\"5px\"\r\n//             placeholder=\"New Password\"\r\n//             onChange={(e) => {\r\n//               setNewPass(e.target.value);\r\n//             }}\r\n//           ></Input>\r\n//         </FlexDiv>\r\n//         <FlexDiv>\r\n//           <SmallTitleBoldWithWidth>\r\n//             Confirm New Password\r\n//           </SmallTitleBoldWithWidth>\r\n//           <Input\r\n//             type=\"password\"\r\n//             inputwidth=\"40%\"\r\n//             inputheight=\"1px\"\r\n//             placeholder=\"Confirm New Password\"\r\n//             onChange={(e) => {\r\n//               setConfirmNewPass(e.target.value);\r\n//             }}\r\n//           ></Input>\r\n//         </FlexDiv>\r\n//         <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n//         <FlexDiv40PercentMobileWidth100Percent>\r\n//           <RegularResponsiveButton\r\n//             onClick={() => {\r\n//               onClose();\r\n//               setErrorText(\"\");\r\n//             }}\r\n//             bgcolor={ColorPalette.PrimaryRed}\r\n//           >\r\n//             Cancel\r\n//           </RegularResponsiveButton>\r\n//           <RegularResponsiveButton\r\n//             onClick={() => {\r\n//               if (confirmNewPass !== newPass || oldPass === \"\") {\r\n//                 setErrorText(\"Passwords do not match\");\r\n//               } else {\r\n//                 onPreview({ oldPass, newPass });\r\n//                 onPasswordChanged(oldPass, newPass);\r\n//                 setErrorText(\"\");\r\n//               }\r\n//             }}\r\n//           >\r\n//             Save Changes\r\n//           </RegularResponsiveButton>\r\n//         </FlexDiv40PercentMobileWidth100Percent>\r\n//       </RelativeContBGColorWhite>\r\n//     );\r\n//   }\r\n// };\r\n\r\n// ChangePass.defaultProps = {\r\n//   onChange: () => {},\r\n//   onPreview: () => {},\r\n//   onPasswordChanged: () => {},\r\n// };\r\n\r\n// export default ChangePass;\r\n\r\nimport React, { useState } from \"react\";\r\nimport styled, { keyframes } from \"styled-components\";\r\nimport IconButton from \"../IconButton\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\n/* ---------------------------------\r\n   Animations\r\n--------------------------------- */\r\nconst fadeInUp = keyframes`\r\n  0% {\r\n    opacity: 0;\r\n    transform: translateY(15px);\r\n  }\r\n  100% {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n`;\r\n\r\n/* ---------------------------------\r\n   Styled Components\r\n--------------------------------- */\r\n\r\n/** \r\n * Main container, reminiscent of an Apple card:\r\n * - Rounded corners, subtle shadow, white background \r\n * - Slide/fade in from below\r\n */\r\nconst Container = styled.div`\r\n  animation: ${fadeInUp} 0.35s ease forwards;\r\n  background-color: #fff;\r\n  border-radius: 14px;\r\n  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);\r\n  margin: 1.5rem auto;\r\n  padding: 1.5rem;\r\n  width: 90%;\r\n  max-width: 500px;\r\n  position: relative;\r\n`;\r\n\r\n/** \r\n * A simple heading styled in an iOS-inspired fashion \r\n */\r\nconst Heading = styled.h2`\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\r\n  font-weight: 600;\r\n  font-size: 1.25rem;\r\n  margin: 0 0 1rem 0;\r\n  color: #333;\r\n`;\r\n\r\n/** \r\n * Thin horizontal line akin to iOS separators \r\n */\r\nconst Divider = styled.div`\r\n  width: 100%;\r\n  height: 1px;\r\n  background-color: #e5e5ea;\r\n  margin: 0.75rem 0 1.25rem 0;\r\n`;\r\n\r\n/** \r\n * Label text for each field \r\n */\r\nconst Label = styled.label`\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\r\n  font-weight: 500;\r\n  font-size: 0.95rem;\r\n  color: #555;\r\n  margin-bottom: 0.25rem;\r\n  display: inline-block;\r\n`;\r\n\r\n/** \r\n * A minimal input with Apple-inspired styling:\r\n * - Lightly rounded, subtle border, focus glow\r\n */\r\nconst StyledInput = styled.input`\r\n  display: block;\r\n  width: 100%;\r\n  max-width: 400px;\r\n  padding: 0.6rem 0.75rem;\r\n  font-size: 0.95rem;\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\r\n  color: #333;\r\n  background-color: #f9f9f9;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  outline: none;\r\n  transition: border-color 0.2s ease;\r\n\r\n  &:focus {\r\n    border-color: #007aff;\r\n  }\r\n`;\r\n\r\n/** \r\n * Container for each row (label + input).\r\n * We stack on mobile, side by side if we want on desktop, \r\n * but let's keep it simple & consistent for Apple-like clarity.\r\n */\r\nconst FieldRow = styled.div`\r\n  margin: 1rem 0;\r\n  display: flex;\r\n  flex-direction: column;\r\n`;\r\n\r\n/** \r\n * Error message in red \r\n */\r\nconst ErrorText = styled.p`\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\r\n  color: #d0021b;\r\n  font-size: 0.9rem;\r\n  margin: 0.5rem 0;\r\n`;\r\n\r\n/** \r\n * Button row container for \"Cancel\" / \"Save\" \r\n */\r\nconst ButtonRow = styled.div`\r\n  margin-top: 1.5rem;\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  gap: 1rem;\r\n  flex-wrap: wrap;\r\n`;\r\n\r\n/** \r\n * Buttons:\r\n * - Apple-like system style \r\n */\r\nconst StyledButton = styled.button`\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\r\n  font-size: 0.95rem;\r\n  font-weight: 500;\r\n  padding: 0.6rem 1.2rem;\r\n  border-radius: 8px;\r\n  border: none;\r\n  outline: none;\r\n  cursor: pointer;\r\n  color: #fff;\r\n  background-color: ${(props) => (props.cancel ? \"#FF3B30\" : \"#007AFF\")};\r\n  transition: background-color 0.2s ease;\r\n\r\n  &:hover {\r\n    background-color: ${(props) => (props.cancel ? \"#e23028\" : \"#0067e6\")};\r\n  }\r\n`;\r\n\r\n/** \r\n * Special container for mobile \r\n * - We'll tweak layout or spacing as needed \r\n */\r\nconst MobileContainer = styled(Container)`\r\n  width: 95%;\r\n  max-width: 600px;\r\n  /* Any mobile-specific overrides can go here */\r\n`;\r\n\r\n/* ---------------------------------\r\n   Main Component \r\n--------------------------------- */\r\n\r\nconst ChangePass = ({ passSwitch, onClose, onPasswordChanged, onPreview }) => {\r\n  const [oldPass, setOldPass] = useState(\"\");\r\n  const [newPass, setNewPass] = useState(\"\");\r\n  const [confirmNewPass, setConfirmNewPass] = useState(\"\");\r\n  const [errorText, setErrorText] = useState(\"\");\r\n\r\n  // If not visible, don't render anything\r\n  if (!passSwitch) return null;\r\n\r\n  const handleSave = () => {\r\n    if (!oldPass || !newPass || !confirmNewPass || confirmNewPass !== newPass) {\r\n      setErrorText(\"Passwords do not match or fields are empty\");\r\n    } else {\r\n      onPreview({ oldPass, newPass });\r\n      onPasswordChanged(oldPass, newPass);\r\n      setErrorText(\"\");\r\n    }\r\n  };\r\n\r\n  // Check if mobile is set by global variable\r\n  const isMobile = window.$ISMOBILE === true;\r\n\r\n  const ContainerEl = isMobile ? MobileContainer : Container;\r\n\r\n  return (\r\n    <ContainerEl>\r\n      <Heading>Change Password</Heading>\r\n      <Divider />\r\n\r\n      <FieldRow>\r\n        <Label htmlFor=\"oldPass\">Old Password</Label>\r\n        <StyledInput\r\n          id=\"oldPass\"\r\n          type=\"password\"\r\n          placeholder=\"Enter old password\"\r\n          value={oldPass}\r\n          onChange={(e) => setOldPass(e.target.value)}\r\n        />\r\n      </FieldRow>\r\n\r\n      <FieldRow>\r\n        <Label htmlFor=\"newPass\">New Password</Label>\r\n        <StyledInput\r\n          id=\"newPass\"\r\n          type=\"password\"\r\n          placeholder=\"Enter new password\"\r\n          value={newPass}\r\n          onChange={(e) => setNewPass(e.target.value)}\r\n        />\r\n      </FieldRow>\r\n\r\n      <FieldRow>\r\n        <Label htmlFor=\"confirmNewPass\">Confirm New Password</Label>\r\n        <StyledInput\r\n          id=\"confirmNewPass\"\r\n          type=\"password\"\r\n          placeholder=\"Re-enter new password\"\r\n          value={confirmNewPass}\r\n          onChange={(e) => setConfirmNewPass(e.target.value)}\r\n        />\r\n      </FieldRow>\r\n\r\n      {errorText && <ErrorText>{errorText}</ErrorText>}\r\n\r\n      <ButtonRow>\r\n        <IconButton cancel\r\n          onClick={() => {\r\n            onClose();\r\n            setErrorText(\"\");\r\n          }} bgcolor={ColorPalette.PrimaryRed}>Cancel</IconButton>\r\n      <IconButton onClick={handleSave} src={'/saveiconwhite_icon.svg'}>Save Changes</IconButton>\r\n      </ButtonRow>\r\n    </ContainerEl>\r\n  );\r\n};\r\n\r\n/* Default props, ensuring the same API usage as before */\r\nChangePass.defaultProps = {\r\n  onClose: () => {},\r\n  onPreview: () => {},\r\n  onPasswordChanged: () => {},\r\n};\r\n\r\nexport default ChangePass;\r\n","import styled from \"styled-components\";\r\nimport { animated } from \"react-spring\";\r\nimport { ColorPalette } from \"../Colors\";\r\n\r\nconst nullProp = null;\r\n\r\n//Estimate Page Containers --------------------------------------------------\r\n\r\nexport const ProgressBar = styled.div`\r\n  width: 39vw;\r\n  margin-top: 3vh;\r\n  background-color: #f4f4f4;\r\n  border: 1px solid #f4f4f4;\r\n  height: 1vh;\r\n  border-radius: 50px;\r\n  @media (max-width: 1006px) {\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport const ProgressBarWidth = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"0%\")};\r\n  background-color: ${ColorPalette.PrimaryButtonBlue};\r\n  border-radius: 50px;\r\n  height: 1vh;\r\n  @media (max-width: 1006px) {\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport const EstimatePageMainFlexCont = styled.div`\r\n  display: flex;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    height: 100vh;\r\n  }\r\n`;\r\n\r\nexport const EstimatePageRightCont = styled.div`\r\n  width: 80vw;\r\n  height: 200vh;\r\n  display: flex;\r\n  flex-direction: column;\r\n  background-color: white;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n    width: 100vw;\r\n    height: 0vh;\r\n  }\r\n`;\r\n\r\nexport const EstimatePageRightView = styled.div`\r\n  width: 100vw;\r\n  min-height: 250vh;\r\n  height: auto;\r\n  background-color: #f4f4f4;\r\n  display: flex;\r\n  @media (max-width: 1006px) {\r\n    width: auto;\r\n    margin: 0%;\r\n    padding-bottom: 15vh;\r\n    background-color: white;\r\n    height: auto;\r\n    min-height: auto;\r\n  }\r\n`;\r\n\r\nexport const Section1 = styled(animated.div)`\r\nwidth:100%;\r\nheight ${(props) => (props.height ? props.height : \"55vh\")};\r\ndisplay:flex;\r\nflex-direction:column;\r\nalign-items:center;\r\n@media (max-width: 1006px) {\r\n    position:relative;\r\n    width:95vw;\r\n    left:2%;\r\n    height:auto;\r\n    align-items:center;\r\n    padding-bottom:${(props) =>\r\n      props.mobilepaddingbottom ? props.mobilepaddingbottom : \"15vh\"};\r\n  }\r\n`;\r\n\r\nexport const EstimatorDiv = styled.div`\r\n  width: 79.5vw;\r\n  margin: 1%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  text-align: center;\r\n  align-items: center;\r\n  background-color: white;\r\n\r\n  @media (max-width: 1006px) {\r\n    width: 90%;\r\n    margin-top: 10%;\r\n    align-items: center;\r\n  }\r\n`;\r\n\r\nexport const FormDivs = styled.div`\r\n  width: 75%;\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  margin: 1%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    width: 95vw;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const TextAreaRegular = styled.textarea`\r\n  width: 260px;\r\n  height: 50px;\r\n  border-radius: 4px;\r\n  background-color: #ededed;\r\n  margin: 15px;\r\n  font-family: Avenir;\r\n`;\r\n\r\nexport const TextAreaLarge = styled.textarea`\r\n  width: 100%;\r\n  height: ${(props) => (props.height ? props.height : \"100px\")};\r\n  background-color: #ededed;\r\n  border: 0;\r\n  outline: none;\r\n  overflow: auto;\r\n  border-radius: 4px;\r\n  font-family: Avenir;\r\n  font-size: 16px;\r\n  padding: 20px;\r\n  margin: 10px;\r\n`;\r\n\r\nexport const LandscapePara = styled.textarea`\r\n  width: ${(props) => (props.width ? props.width : \"95%\")};\r\n  height: ${(props) => (props.height ? props.height : \"20vh\")};\r\n  color: black;\r\n  background-color: white;\r\n  border: 2px dashed #d3d3d3;\r\n  border-radius: 10px;\r\n  outline: none;\r\n  font-family: Open Sans;\r\n  font-size: 16px;\r\n  padding: 10px;\r\n  overflow: \"auto\";\r\n  margin:${(props) => (props.margin ? props.margin : \"\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"95vw\")};\r\n    font-size: ${(props) => (props.mobilefontsize ? props.mobilefontsize : \"14px\")};\r\n   \r\n  }\r\n`;\r\n\r\nexport const TextAreaAutoResize = styled.textarea`\r\n  width: ${(props) => (props.width ? props.width : \"95%\")};\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  color: #333;\r\n  background-color: #f9f9f9;\r\n  border: 1px solid #ccc;\r\n  border-radius: 8px;\r\n  outline: none;\r\n  font-family: Avenir;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"16px\")};\r\n  padding: 12px 16px;\r\n  overflow: scroll;\r\n  transition: border-color 0.3s ease;\r\n  box-sizing: border-box;\r\n\r\n  &:focus {\r\n    border-color: #007aff;\r\n  }\r\n\r\n  ::placeholder {\r\n    color: #999;\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"80vw\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n  }\r\n`;\r\n\r\nexport const TextAreaMobile = styled.textarea`\r\n  width: ${(props) => (props.width ? props.width : \"95%\")};\r\n  height: ${(props) => (props.height ? props.height : \"200px\")};\r\n  color: #333;\r\n  margin-left: 5px;\r\n  margin-bottom: 10px;\r\n  background-color: #f9f9f9;\r\n  border: 1px solid #ccc;\r\n  border-radius: 8px;\r\n  outline: none;\r\n  font-family: Avenir;\r\n  font-size: 16px;\r\n  padding: 12px 16px;\r\n  overflow: hidden;\r\n  transition: border-color 0.3s ease;\r\n  box-sizing: border-box;\r\n\r\n  &:focus {\r\n    border-color: #007aff;\r\n  }\r\n\r\n  ::placeholder {\r\n    color: #999;\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"88vw\")};\r\n  }\r\n`;\r\n\r\nexport const TextAreaAutoResizeNoBorder = styled.textarea`\r\n  width: 95%;\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  color: black;\r\n  background-color: white;\r\n  border: none !important; /* override any conflicting styles */\r\n  border-radius: 10px;\r\n  outline: none;\r\n  resize: none;\r\n  font-family: Avenir;\r\n  font-size: 16px;\r\n  padding: 10px;\r\n  overflow: hidden;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"80vw\")};\r\n  }\r\n`;\r\n\r\n\r\nexport const ButtonFormDiv = styled.div`\r\n  display: flex;\r\n  margin-top: 2%;\r\n  position: relative;\r\n  height: 10vh;\r\n  padding-bottom: 5vh;\r\n  justify-content: center;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    align-items: center;\r\n  }\r\n`;\r\n\r\nexport const GreyNavigationButton = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"15%\")};\r\n  height: ${(props) => (props.height ? props.height : \"2.5vw\")};\r\n  text-align: center;\r\n  font-family: LeagueSpartan-Bold;\r\n  color: ${(props) => (props.color ? props.color : \"white\")};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"#2e2e2e\")};\r\n  vertical-align: middle;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  line-height: ${(props) => (props.lineheight ? props.lineheight : \"2.5vw\")};\r\n  cursor: pointer;\r\n  padding: ${(props) => (props.padding ? props.padding : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"1%\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"3%\")};\r\n  border: ${(props) => (props.border ? props.border : \"4px solid white\")};\r\n  border-radius: 10px;\r\n  transition: 0.3s;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  &:hover {\r\n    color: ${(props) => (props.hovercolor ? props.hovercolor : \"\")};\r\n    background-color: ${(props) =>\r\n      props.hoverbgcolor ? props.hoverbgcolor : \"\"};\r\n    border: ${(props) => (props.hoverborder ? props.hoverborder : \"\")};\r\n    opacity: ${(props) => (props.hoveropacity ? props.hoveropacity : \"70%\")};\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"30vw\")};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"18px\"};\r\n    margin-top: 5vh;\r\n    line-height: 6vh;\r\n    height: 6vh;\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n  }\r\n`;\r\n\r\nexport const GreenNavigationButton = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"15%\")};\r\n  height: ${(props) => (props.height ? props.height : \"2.5vw\")};\r\n  text-align: center;\r\n  font-family: ${(props) =>\r\n    props.fontfamily ? props.fontfamily : \"LeagueSpartan-Bold\"};\r\n  color: ${(props) => (props.color ? props.color : \"white\")};\r\n  background-color: ${(props) =>\r\n    props.bgcolor ? props.bgcolor : ColorPalette.PrimaryButtonBlue};\r\n  vertical-align: middle;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  line-height: ${(props) => (props.lineheight ? props.lineheight : \"2.5vw\")};\r\n  cursor: pointer;\r\n  padding: ${(props) => (props.padding ? props.padding : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"1%\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  border: ${(props) => (props.border ? props.border : \"4px solid white\")};\r\n  border-radius: 10px;\r\n  transition: 0.3s;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  &:hover {\r\n    color: ${(props) => (props.hovercolor ? props.hovercolor : \"\")};\r\n    background-color: ${(props) =>\r\n      props.hoverbgcolor ? props.hoverbgcolor : \"\"};\r\n    border: ${(props) => (props.hoverborder ? props.hoverborder : \"\")};\r\n    opacity: ${(props) => (props.hoveropacity ? props.hoveropacity : \"70%\")};\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"30vw\")};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"14px\"};\r\n    margin-top: ${(props) =>\r\n      props.mobilemargintop ? props.mobilemargintop : \"5vh\"};\r\n    line-height: 6vh;\r\n    height: 6vh;\r\n  }\r\n`;\r\n\r\nexport const TextInputRegular = styled.input`\r\n  width: ${(props) => (props.inputwidth ? props.inputwidth : \"84%\")};\r\n  height: ${(props) => (props.inputheight ? props.inputheight : \"1%\")};\r\n  border-radius: ${(props) =>\r\n    props.inputborderradius ? props.inputborderradius : \"5px\"};\r\n  background-color: ${(props) =>\r\n    props.inputbgcolor ? props.inputbgcolor : \"#F4F4F4\"};\r\n  border-style: ${(props) =>\r\n    props.inputborderstyle ? props.inputborderstyle : \"solid\"};\r\n  border-color: ${(props) =>\r\n    props.inputbordercolor ? props.inputbordercolor : \"#AAAAAA\"};\r\n  border-width: ${(props) =>\r\n    props.inputborderwidth ? props.inputborderwidth : 2};\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"block\")};\r\n  margin: 10px;\r\n  margin-top: 2%;\r\n  border: 0;\r\n  padding: 18px;\r\n  outline: none;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"100%\")};\r\n  font-family: Avenir;\r\n  @media (max-width: 1006px) {\r\n    margin-top: 2vh;\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"70vw\")};\r\n    margin-right: ${(props) =>\r\n      props.mobilemarginright ? props.mobilemarginright : \"\"};\r\n      font-size: ${(props) => (props.mobilefontsize ? props.mobilefontsize : \"\")};\r\n  }\r\n`;\r\n\r\nexport const TextInputReusable = styled.input`\r\n  width: ${(props) => (props.width ? props.width : \"400px\")};\r\n  height: ${(props) => (props.height ? props.height : \"8px\")};\r\n  border-radius: ${(props) =>\r\n    props.inputborderradius ? props.inputborderradius : \"5px\"};\r\n  background-color: ${(props) =>\r\n    props.inputbgcolor ? props.inputbgcolor : \"#F4F4F4\"};\r\n  border-style: ${(props) =>\r\n    props.inputborderstyle ? props.inputborderstyle : \"solid\"};\r\n  border-color: ${(props) =>\r\n    props.inputbordercolor ? props.inputbordercolor : \"#AAAAAA\"};\r\n  border-width: ${(props) =>\r\n    props.inputborderwidth ? props.inputborderwidth : 2};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  margin-top: 10px;\r\n  margin-bottom: 10px;\r\n  margin-right: 20px;\r\n  border: 0;\r\n  padding: 18px;\r\n  outline: none;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"100%\")};\r\n  font-family: Avenir;\r\n  @media (max-width: 1006px) {\r\n    margin-top: 2vh;\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"70vw\")};\r\n    margin-right: ${(props) =>\r\n      props.mobilemarginright ? props.mobilemarginright : \"\"};\r\n  }\r\n`;\r\n\r\nexport const TextInput72Percent = styled.input`\r\n  background-color: #ffffff;\r\n  padding: 10px;\r\n  width: 85%;\r\n  margin: 2%;\r\n  font-style: normal;\r\n  border-radius: 6px; /* Slightly more rounded */\r\n  // margin-left: 20px;\r\n  font-family: Avenir, sans-serif;\r\n  font-size: 16px;\r\n  border: 1px solid #d1d1d1; /* Subtle border to define shape */\r\n\r\n  /* Apple-like smooth text rendering */\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n\r\n  /* Transition for hover/focus animations */\r\n  transition: border-color 0.2s ease, box-shadow 0.2s ease;\r\n\r\n  &:hover {\r\n    border-color: #ccc; /* Lighten border on hover */\r\n  }\r\n\r\n  &:focus {\r\n    outline: none;\r\n    border-color: #007aff; /* Apple’s signature blue */\r\n    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.2); /* Soft highlight around input */\r\n  }\r\n`;\r\n\r\nexport const TextInput100Percent = styled.input`\r\n  background-color: #FFFFF;\r\n  padding: 10px;\r\n  width: 100%;\r\n  display: ${(props) => (props.display ? props.display : \"\")};\r\n  font-style: normal;\r\n  border-radius: 4px;\r\n  margin-left: 20px;\r\n  font-family: Avenir;\r\n  font-size: 18px;\r\n`;\r\n\r\nexport const TextSelect72Percent = styled.select`\r\n  background-color: #FFFFF;\r\n  padding: 10px;\r\n  width: 85%;\r\n  margin: 2%;\r\n  font-style: normal;\r\n  border-radius: 4px;\r\n  // margin-left: 20px;\r\n  font-family: Avenir;\r\n  font-size: 18px;\r\n`;\r\n\r\nexport const SelectField = styled.select`\r\n  background-color: #ffffff;\r\n  padding: 12px 16px;\r\n  width: 200px;\r\n  min-width: 75px;\r\n  margin-bottom: 20px;\r\n  font-family: Avenir;\r\n  font-size: 16px;\r\n  border: 1px solid #ccc;\r\n  border-radius: 8px;\r\n  outline: none;\r\n  color: #333;\r\n  box-sizing: border-box;\r\n  transition: border-color 0.3s ease;\r\n\r\n  &:focus {\r\n    border-color: #007aff; // Adjust this to match your theme color if needed\r\n  }\r\n\r\n  &::placeholder {\r\n    color: #999;\r\n  }\r\n`;\r\n\r\n\r\nexport const TextArea72Percent = styled.textarea`\r\n  background-color: #FFFFF;\r\n  padding: 10px;\r\n  width: 85%;\r\n  min-height: 80px;\r\n  font-style: normal;\r\n  border-radius: 4px;\r\n  font-family: Avenir;\r\n  font-size: 16px;\r\n`;\r\n\r\nexport const DatalistMedium = styled.select`\r\n  width: ${(props) => (props.inputwidth ? props.inputwidth : \"335px\")};\r\n  height: ${(props) => (props.inputheight ? props.inputheight : \"50px\")};\r\n  border-radius: ${(props) =>\r\n    props.inputborderradius ? props.inputborderradius : \"4px\"};\r\n  background-color: ${(props) =>\r\n    props.inputbgcolor ? props.inputbgcolor : \"#F4F4F4\"};\r\n  border-style: ${(props) =>\r\n    props.inputborderstyle ? props.inputborderstyle : \"solid\"};\r\n  border-color: ${(props) =>\r\n    props.inputbordercolor ? props.inputbordercolor : \"#AAAAAA\"};\r\n  border-width: ${(props) =>\r\n    props.inputborderwidth ? props.inputborderwidth : 2};\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"block\")};\r\n  margin-top: 10px;\r\n  margin-bottom: 10px;\r\n  margin-right: 20px;\r\n  border: 0;\r\n  padding-left: 18px;\r\n  outline: none;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"100%\")};\r\n  font-family: Avenir;\r\n  @media (max-width: 1006px) {\r\n    margin-top: 2vh;\r\n    height: 10vw;\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"80vw\")};\r\n  }\r\n`;\r\n\r\nexport const DatalistOption = styled.option`\r\n  font-family: Avenir;\r\n  color: black;\r\n  font-size: 18px;\r\n`;\r\n\r\nexport const SmallHeaderLeagueSpartan = styled.p`\r\n  min-width: ${(props) => (props.minwidth ? props.minwidth : \"\")};\r\n  max-width: ${(props) => (props.maxwidth ? props.maxwidth : \"\")};\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"18px\")};\r\n  font-family: ${(props) =>\r\n    props.fontfamily ? props.fontfamily : \"LeagueSpartan-Bold\"};\r\n  font-weight: ${(props) => (props.fontweight ? props.fontweight : \"\")};\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  margin-right: 5px;\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  border-bottom: ${(props) => (props.borderbottom ? props.borderbottom : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  text-decoration: ${(props) =>\r\n    props.textdecoration ? props.textdecoration : \"\"};\r\n  &:hover {\r\n    color: ${(props) => (props.hovercolor ? props.hovercolor : \"\")};\r\n    background-color: ${(props) =>\r\n      props.hoverbgcolor ? props.hoverbgcolor : \"\"};\r\n    border: ${(props) => (props.hoverborder ? props.hoverborder : \"\")};\r\n  }\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"16px\"};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n  }\r\n`;\r\n\r\nexport const SecDivPersonalInfoMarginLeft = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  width: 25%;\r\n  margin-left: 5%;\r\n  @media (max-width: 1006px) {\r\n    width: 90vw;\r\n    // margin-bottom:3vh;\r\n    margin-left: 0%;\r\n  }\r\n`;\r\n\r\nexport const FormContPersonalInfo = styled.div`\r\n  width: 100%;\r\n  height: 100%;\r\n  margin: 1%;\r\n  position: relative;\r\n  bottom: 5%;\r\n  display: flex;\r\n  text-align: left;\r\n  flex-direction: row;\r\n\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    bottom: 0%;\r\n    margin: 3%;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnGreenSelectables = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"98%\")};\r\n  height: 80%;\r\n  margin: 1%;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: row;\r\n  justify-content: space-around;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"60vw\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\nexport const MediumStyledImage = styled.img`\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"70%\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  border-radius: ${(props) =>\r\n    props.borderradius ? props.borderradius : \"0px\"};\r\n  object-fit: ${(props) => (props.objfit ? props.objfit : \"\")};\r\n  opacity: ${(props) => (props.opacity ? props.opacity : \"\")};\r\n  @media (max-width: 1006px) {\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"42vw\")};\r\n  }\r\n`;\r\n\r\nexport const ImageFullWidth = styled.img`\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"100%\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  border-radius: ${(props) =>\r\n    props.borderradius ? props.borderradius : \"0px\"};\r\n  object-fit: ${(props) => (props.objfit ? props.objfit : \"contain\")};\r\n  opacity: ${(props) => (props.opacity ? props.opacity : \"\")};\r\n  @media (max-width: 1006px) {\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"80vw\")};\r\n  }\r\n`;\r\n\r\nexport const Image300x200 = styled.img`\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  width: ${(props) => (props.width ? props.width : \"300px\")};\r\n  height: ${(props) => (props.height ? props.height : \"200px\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  border-radius: ${(props) =>\r\n    props.borderradius ? props.borderradius : \"0px\"};\r\n  object-fit: ${(props) => (props.objfit ? props.objfit : \"contain\")};\r\n  opacity: ${(props) => (props.opacity ? props.opacity : \"\")};\r\n  z-index: ${(props) => (props.zindex ? props.zindex : \"\")};\r\n  @media (max-width: 1006px) {\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n  }\r\n`;\r\n\r\nexport const Image300x200GreenBorder = styled.img`\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  width: ${(props) => (props.width ? props.width : \"300px\")};\r\n  height: ${(props) => (props.height ? props.height : \"200px\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  border-radius: ${(props) =>\r\n    props.borderradius ? props.borderradius : \"0px\"};\r\n  object-fit: cover;\r\n  opacity: ${(props) => (props.opacity ? props.opacity : \"\")};\r\n  :hover {\r\n    object-fit: contain;\r\n  }\r\n  @media (max-width: 1006px) {\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"80vw\")};\r\n  }\r\n`;\r\n\r\nexport const Image375px = styled.img`\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"pointer\")};\r\n  width: 375px;\r\n  height: 375px;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  object-fit: ${(props) => (props.objfit ? props.objfit : \"contain\")};\r\n  opacity: ${(props) => (props.opacity ? props.opacity : \"\")};\r\n  @media (max-width: 1006px) {\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    width: 100%;\r\n    object-fit: contain;\r\n  }\r\n`;\r\n\r\nexport const MediumStyledImage80Opacity = styled.img`\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"70%\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  border-radius: ${(props) =>\r\n    props.borderradius ? props.borderradius : \"0px\"};\r\n  object-fit: ${(props) => (props.objfit ? props.objfit : \"cover\")};\r\n  opacity: ${(props) => (props.opacity ? props.opacity : \"80%\")};\r\n  // background-color:black;\r\n  @media (max-width: 1006px) {\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"42vw\")};\r\n  }\r\n`;\r\n\r\nexport const SmallIconDisplayNone = styled.img`\r\n  cursor: pointer;\r\n  display: ${(props) => (props.display ? props.display : \"none\")};\r\n  width: ${(props) => (props.width ? props.width : \"150px\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  border-radius: ${(props) =>\r\n    props.borderradius ? props.borderradius : \"0px\"};\r\n  object-fit: ${(props) => (props.objfit ? props.objfit : \"\")};\r\n  position: absolute;\r\n  transition: ${(props) =>\r\n    props.displaytransition ? props.displaytransition : \"\"};\r\n  @media (max-width: 1006px) {\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n    position: relative;\r\n    width: 100px;\r\n    bottom: 40%;\r\n  }\r\n`;\r\n\r\nexport const FlexDivSpaceAround = styled.div`\r\nwidth:${(props) => (props.width ? props.width : \"24%\")};\r\nheight:${(props) => (props.height ? props.height : \"90%\")};\r\nmargin:${(props) => (props.margin ? props.margin : \"1%\")};\r\nalign-items:${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\nflex-direction:${(props) =>\r\n  props.flexdirection ? props.flexdirection : \"column\"};\r\njustify-content:${(props) =>\r\n  props.justifycontent ? props.justifycontent : \"space-around\"};\r\n@media (max-width: 1006px) {\r\n  width:${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n  height:${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n}\r\n`;\r\n\r\nexport const FlexDivMarginTop = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"24%\")};\r\n  height: ${(props) => (props.height ? props.height : \"90%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"space-around\"};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    margin-top: 50px;\r\n  }\r\n`;\r\n\r\nexport const FlexContBottomGrey = styled.div`\r\nwidth:${(props) => (props.width ? props.width : \"100%\")};\r\nheight:${(props) => (props.height ? props.height : \"40%\")};\r\nmargin:${(props) => (props.margin ? props.margin : \"0\")};\r\nalign-items:${(props) => (props.alignitems ? props.alignitems : \"left\")};\r\ndisplay:${(props) => (props.display ? props.display : \"flex\")};\r\nmargin-bottom:${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\nflex-direction:${(props) =>\r\n  props.flexdirection ? props.flexdirection : \"row\"};\r\njustify-content:${(props) =>\r\n  props.justifycontent ? props.justifycontent : \"flex-start\"};\r\nborder-bottom:${(props) =>\r\n  props.borderbottom ? props.borderbottom : \"1px solid #d3d3d3\"};\r\npadding:1.5%;\r\n@media (max-width: 1006px) {\r\n  width:${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n  height:${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n}\r\n`;\r\n\r\nexport const WideFlexInfoCont = styled.div`\r\nwidth:${(props) => (props.width ? props.width : \"100%\")};\r\nheight:${(props) => (props.height ? props.height : \"100%\")};\r\nalign-items:${(props) => (props.alignitems ? props.alignitems : \"left\")};\r\ndisplay:${(props) => (props.display ? props.display : \"flex\")};\r\njustify-content:${(props) =>\r\n  props.justifycontent ? props.justifycontent : \"flex-start\"};\r\nword-wrap:${(props) => (props.wordwrap ? props.wordwrap : \"\")};\r\n@media (max-width: 1006px) {\r\n  width:${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n  height:${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  flex-direction:${(props) =>\r\n    props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n}\r\n`;\r\n\r\nexport const FlexInfoCont = styled.div`\r\nwidth:${(props) => (props.width ? props.width : \"50%\")};\r\nheight:${(props) => (props.height ? props.height : \"100%\")};\r\nalign-items:${(props) => (props.alignitems ? props.alignitems : \"left\")};\r\ndisplay:${(props) => (props.display ? props.display : \"flex\")};\r\nflex-direction:${(props) =>\r\n  props.flexdirection ? props.flexdirection : \"column\"};\r\njustify-content:${(props) =>\r\n  props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n@media (max-width: 1006px) {\r\n  width:${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n  height:${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n}\r\n`;\r\n\r\nexport const FlexDivFlexStartCenter = styled.div`\r\n  display: flex;\r\n  justify-content: flex-start;\r\n  align-items: center;\r\n  margin: ${(props) => (props.margin ? props.margin : \"5%\")};\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\nexport const PhotoContExtra = styled.div`\r\n  display: grid;\r\n  grid-template-columns: repeat(2, 1fr);\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: flex;\r\n  }\r\n`;\r\n// ------------------------------------------------------------------------\r\n\r\nexport default nullProp;\r\n","import axios from 'axios';\r\nimport { EstimatorDiv } from '../../StylesheetComps/LandscapeForm';\r\n\r\nexport const QuoteStatus = {\r\n    Created: 0,\r\n    UserNotified: 1,\r\n    RevisionRequested: 2,\r\n    Approved: 3,\r\n    Declined: 4,\r\n    Buy: 10,\r\n    Buy_Install: 11,\r\n    Expired: 100,\r\n    Canceled:-1\r\n  }\r\n\r\nexport const CaseStatus = {\r\n    Drafted: 0,\r\n    Submitted: 1,\r\n    Accepted: 2,\r\n    Processed: 3,\r\n    Closed: 4,\r\n    CancelRequested: 5,\r\n    PayPending: 6, \r\n    Construction: 7,\r\n    Canceled: -1,\r\n  }\r\n\r\n  export const ProjectStatus = {\r\n    Draft: 0,\r\n    NeedsEstimating: 1,\r\n    EstimatingInProgress: 2,\r\n    EstimateSent: 3,\r\n    Completed: 4,\r\n    CancelRequested: 5,\r\n    DepositPaid: 6, \r\n    Construction: 7,\r\n    Canceled: -1,\r\n  }\r\n\r\n  export const ProjectStatusText = {\r\n    Draft: 'Draft',\r\n    NeedsEstimating: 'Needs Estimating',\r\n    EstimatingInProgress: 'Estimating In-Progress',\r\n    EstimateSent: 'Estimate Sent',\r\n    Completed: 'Project Completed',\r\n    CancelRequested: 'Cancel Requested',\r\n    DepositPaid: 'Deposit Paid', \r\n    Construction: 'Under Construction',\r\n    Canceled: 'Project Cancelled',\r\n  }\r\n\r\n  export const ProjectStatusColors = {\r\n    Draft: '#BDC3C7',\r\n    NeedsEstimating: '#95A5A6',\r\n    EstimatingInProgress: '#3498DB',\r\n    EstimateSent: '#F1C40F',\r\n    Completed: '#16A085',\r\n    CancelRequested: 'red',\r\n    DepositPaid: '#2ECC71', \r\n    Construction: '#E67E22',\r\n    Canceled: '#E74C3C',\r\n  }\r\n\r\nexport const BidStatus = {\r\n    NotBidding: 0,\r\n    Bidding: 1,\r\n    Decided: 2,\r\n}\r\n // get categories of a store with storeid.\r\nexport const GetUserCases = async(user_id)=>{\r\n    var resp = await axios.get(window.$DBURL+\"case/user/\"+ user_id);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetCaseById = async(id)=>{\r\n    var resp = await axios.get(window.$DBURL+\"case/\"+ id);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetCasesByGuide = async(estimator_id)=>{\r\n    var resp = await axios.get(window.$DBURL+\"case/estimator/\"+ estimator_id);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetCasesByStore = async(store_id)=>{\r\n    var resp = await axios.get(window.$DBURL+\"case/store/\"+ store_id);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const AddCase = async(newcase)=>{\r\n    var resp = await axios.post(window.$DBURL+\"case/add\", {Case: newcase})\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const AddCaseOBO = async(newcase, inputusername)=>{\r\n    var resp = await axios.post(window.$DBURL+\"case/addOBO\", {Case: newcase, username:inputusername})\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateACase = async(newcase)=>{\r\n    var resp = await axios.put(window.$DBURL+\"case/update\", {Case: newcase})\r\n \r\n    if(resp.status===200)\r\n    {\r\n        var data = await GetCaseById(newcase.Id);\r\n        return data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const AssignCase = async(case_id, user_id)=>{\r\n    var resp = await axios.put(window.$DBURL+\"case/\" + case_id + \"/assign/\"+ user_id);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetCaseTo_Submit = async(cas_id)=>{\r\n    var resp = await axios.put(window.$DBURL+\"case/\"+ cas_id + \"/submit\");\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetCaseTo_Accept = async(cas_id)=>{\r\n    var resp = await axios.put(window.$DBURL+\"case/\"+ cas_id + \"/accept\");\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetCaseTo_Processed = async(cas_id)=>{\r\n    var resp = await axios.put(window.$DBURL+\"case/\"+ cas_id + \"/process\");\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetCaseTo_Close = async(cas_id)=>{\r\n    var resp = await axios.put(window.$DBURL+\"case/\"+ cas_id + \"/close\");\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetCaseTo_Cancel = async(cas_id)=>{\r\n    var resp = await axios.put(window.$DBURL+\"case/\"+ cas_id + \"/cancel\");\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetCaseTo_CancelRequested = async(cas_id)=>{\r\n    var resp = await axios.put(window.$DBURL+\"case/\"+ cas_id + \"/cancelrequest\");\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetCaseTo_Construction = async(cas_id)=>{\r\n    var resp = await axios.put(window.$DBURL+\"case/\"+ cas_id + \"/construction\");\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetQuoteById = async(id)=>{\r\n    var resp = await axios.get(window.$DBURL+\"case/quote/\"+ id);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetQuoteByIdForUserDisplay = async(id)=>{\r\n    var resp = await axios.get(window.$DBURL+\"case/quote/\"+ id + \"/user\");\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const AddQuote = async(quote)=>{\r\n    const resp = await axios.post(window.$DBURL+\"case/quote/add\", {\r\n       Quote: quote})\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const AddQuoteRevision = async(quote)=>{\r\n    const resp = await axios.post(window.$DBURL+\"case/quote/add/revision\", {\r\n       Quote: quote})\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateQuote = async(quote)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/update\", { Quote: quote})\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetQuoteTo_Notify = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/notify\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetQuoteTo_Expire = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/expire\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetQuoteTo_Cancel = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/cancel\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetQuoteTo_Created = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/create\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetQuoteTo_Buy = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/buy\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetQuoteTo_Buy_Install = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/install\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\n\r\nexport const SetQuoteTo_RequestRevision = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/revision\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetQuoteTo_Revisioned = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/approved\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetQuoteTo_Declined = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/declined\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\n\r\nexport const SetQuoteTo_Bid = async(quote)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote.Id + \"/bid\", \r\n    {Quote: quote})\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetQuoteTo_CancelBid = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/cancelbid\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const SetQuoteTo_BidCompleted = async(quote_id)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/\" + quote_id + \"/completebid\")\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\n\r\nexport const GetStoreBiddingQuotes = async(storeid)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/quote/bidding/store/\" + storeid)\r\n \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.quotes;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetQuoteItem = async(item_id)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/quote/item/\" + item_id)\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const AddQuoteItem = async(item)=>{\r\n    const resp = await axios.post(window.$DBURL+\"case/quote/item/add\", { Item: item})\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateQuoteItem = async(item)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/item/update\", {Item: item})\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteQuoteItemByEstimator = async(item_id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/quote/item/\" + item_id)\r\n    if(resp.status===200)\r\n    {       \r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetQuoteItem(item_id)\r\n        return data;\r\n    }\r\n}\r\n\r\nexport const DeleteQuoteItemByHomeowner = async(quote_id, item_id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/quote/\" + quote_id + \"/item/\" + item_id)\r\n    if(resp.status===200)\r\n    {       \r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetQuoteItem(item_id)\r\n        return data;\r\n    }\r\n}\r\n\r\nexport const AddQuoteTool = async(item)=>{\r\n    const resp = await axios.post(window.$DBURL+\"case/quote/tool\", {\r\n        Quote_Id:item.Quote_Id, Tool_Id:item.Tool_Id, RentalLength: item.RentalLength, \r\n         Quant:item.Quant\r\n      })\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateQuoteTool = async(item)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/tool\", {\r\n        Id:item.Id, RentalLength: item.RentalLength, \r\n         Quant:item.Quant\r\n      })\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetQuoteTool = async(item_id)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/quote/tool/\"+ item_id)\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteQuoteTool = async(item_id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/quote/tool/\"+ item_id)  \r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetQuoteTool(item_id);\r\n        return data;\r\n    }\r\n}\r\n\r\n\r\nexport const GetQuote_AccessArea = async(item_id)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/quote/access/\"+ item_id)\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteQuote_AccessArea = async(item_id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/quote/access/\"+ item_id)  \r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetQuote_AccessArea(item_id);\r\n        return data;\r\n    }\r\n}\r\n\r\nexport const AddQuote_AccessArea = async(item)=>{\r\n    const resp = await axios.post(window.$DBURL+\"case/quote/access\", {Case_Id:item.Case_Id,\r\n        Quote_Id:item.Quote_Id, Width:item.Width, Length: item.Length, Elevation:item.Elevation, \r\n         Obstruct:item.Obstruct\r\n      })\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateQuote_AccessArea = async(item)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/access\", {Id:item.Id,\r\n        Width:item.Width, Length: item.Length, \r\n         Obstruct:item.Obstruct, Elevation:item.Elevation, \r\n      })\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetQuoteObject = async()=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/quote/object\")\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.Quote;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetCaseObject = async()=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/object\")\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.Case;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetInvoice = async(id)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/invoice/\" + id)\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.Invoice;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const AddInvoice = async(invoice)=>{\r\n    const resp = await axios.post(window.$DBURL+\"case/invoice/\",{Invoice:invoice})\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.Invoice;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateInvoice = async(invoice)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/invoice/\",{Invoice:invoice})\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteInvoiceById = async(id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/invoice/\" + id)\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetInvoice(id);\r\n        return data;\r\n    }\r\n}\r\n\r\nexport const GetInvoiceObject = async()=>{\r\n    const data = await GetInvoice(0);\r\n    \r\n    return data;\r\n}\r\n\r\nexport const GetAllInvoices = async()=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/invoice\")\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.Invoice;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetInvoicesByStore = async(storeid)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/invoice/store/\" + storeid)\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.Invoice;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteCaseById = async(id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/\"+ id);\r\n    if(resp.status===200)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetCaseById(id);\r\n        return data;\r\n    }\r\n}\r\n\r\nexport const DeleteQuoteById = async(id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/quote/\"+ id);\r\n    if(resp.status===200)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetQuoteById(id);\r\n        return data;\r\n    }\r\n}\r\n\r\nexport const GetInvoicesByUser = async(id)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/invoice/user/\" + id)\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.Invoices;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const ReverseQuant_QuoteItem = async(item_id, quantity)=>{\r\n    const resp = await axios.post(window.$DBURL+\"case/quote/item/quant_reverse\",\r\n                            {Id:item_id, Quant: quantity});\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.quantity;\r\n    }\r\n    else\r\n    {\r\n        return quantity;\r\n    }\r\n}\r\n\r\nexport const AddQuoteComment = async(comment)=>{\r\n    const resp = await axios.post(window.$DBURL+\"case/quote/comment\",\r\n                            {Comment: comment});\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.comment;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateQuoteComment = async(comment)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/comment\",\r\n                            {Comment: comment});\r\n    if(resp.status===200)\r\n    {\r\n        return resp;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetQuoteComment = async(id)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/quote/comment/\" + id);\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.comment;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteQuoteComment = async(id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/quote/comment/\" + id);\r\n\r\n    if(resp.status===200)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetQuoteComment(id);\r\n        return data;\r\n    }\r\n}\r\n\r\n\r\nexport const AddQuotePhoto = async(photo)=>{    \r\n    const resp = await axios.post(window.$DBURL+\"case/quote/photo\",\r\n        {Caption:photo.Caption, File:photo.File, Quote_Id: photo.Quote_Id  });\r\n     \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.newphoto;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateQuotePhoto = async(photo)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/photo\",\r\n    {Caption:photo.Caption, File:photo.File, Id: photo.Id  });\r\n    if(resp.status===200)\r\n    {\r\n        return resp;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetQuotePhoto = async(id)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/quote/photo/\" + id);\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.photo;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteQuotePhoto = async(id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/quote/photo/\" + id);\r\n\r\n    if(resp.status===200)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetQuotePhoto(id);\r\n        return data;\r\n    }\r\n}\r\n\r\nexport const AddCasePhoto = async(photo)=>{\r\n    const resp = await axios.post(window.$DBURL+\"case/photo\",\r\n    {Caption:photo.Caption, File:photo.File, Case_Id: photo.Case_Id  });\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.newphoto;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateCasePhoto = async(photo)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/photo\",\r\n    {Caption:photo.Caption, File:photo.File, Id: photo.Id  });\r\n    if(resp.status===200)\r\n    {\r\n        return resp;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetCasePhoto = async(id)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/photo/\" + id);\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.photo;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteCasePhoto = async(id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/photo/\" + id);\r\n\r\n    if(resp.status===200)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetCasePhoto(id);\r\n        return data;\r\n    }\r\n}\r\n\r\nexport const AddQuoteTag = async(tag)=>{    \r\n    const resp = await axios.post(window.$DBURL+\"case/quote/tag\",\r\n        {TagName:tag.TagName,  Quote_Id: tag.Quote_Id  });\r\n     \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.newtag;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateQuoteTag = async(tag)=>{\r\n    const resp = await axios.put(window.$DBURL+\"case/quote/tag\",\r\n    {TagName:tag.TagName, Id: tag.Id  });\r\n    if(resp.status===200)\r\n    {\r\n        return resp;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const GetQuoteTag = async(id)=>{\r\n    const resp = await axios.get(window.$DBURL+\"case/quote/tag/\" + id);\r\n    \r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.tag;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteQuoteTag = async(id)=>{\r\n    const resp = await axios.delete(window.$DBURL+\"case/quote/tag/\" + id);\r\n\r\n    if(resp.status===200)\r\n    {\r\n        return null;\r\n    }\r\n    else\r\n    {\r\n        var data = await GetQuoteTag(id);\r\n        return data;\r\n    }\r\n}\r\n\r\nexport const AddItemRelation = async(primaryitemid, secondaryitemid, description)=>{\r\n    const resp = await axios.post(window.$DBURL+\"case/quote/item/relation\", \r\n    { Item_Id: primaryitemid, RelatedItem_Id:secondaryitemid, Description: description })\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}","import styled from \"styled-components\";\r\nimport { ColorPalette } from \"../Colors\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const AuthCont = styled.div`\r\n  height: 100vh;\r\n  width: 100vw;\r\n  display: flex;\r\n`;\r\n\r\nexport const LeftAuthCont = styled.div`\r\n  width: 45vw;\r\n  height: 100vh;\r\n  background-image: url(\"${(props) =>\r\n    props.backgroundimg ? props.backgroundimg : \"/Log In Image.png\"}\");\r\n  background-size: 100% 100px;\r\n  background-size: cover;\r\n  overflow: hidden;\r\n  min-height: 100vh;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  @media (max-width: 1006px) {\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport const LeftItemsCont = styled.div`\r\n  width: 70%;\r\n  height: 50%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n`;\r\n\r\nexport const Logo = styled.img`\r\n  width: 300px;\r\n  height: 200px;\r\n  object-fit: cover;\r\n`;\r\n\r\nexport const Header = styled.p`\r\n  font-family: LeagueSpartan-Bold;\r\n  color: ${(props) => (props.headercolor ? props.headercolor : \"black\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"3vw\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"5%\")};\r\n  margin-bottom: ${(props) =>\r\n    props.marginbottom ? props.marginbottom : \"2.5%\"};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  @media (max-width: 1006px) {\r\n    font-size: 18px;\r\n  }\r\n`;\r\n\r\nexport const BodyPara = styled.p`\r\n  font-family: Avenir;\r\n  line-height: 25px;\r\n  color: ${(props) => (props.bodycolor ? props.bodycolor : \"black\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"1.25vw\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"0\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  text-align: ${(props) => (props.textalign ? props.textalign : \"center\")};\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  @media (max-width: 1006px) {\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"2.25vh\"};\r\n    width: 80%;\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n  }\r\n`;\r\n\r\nexport const RightAuthCont = styled.div`\r\n  width: 55vw;\r\n  height: 100vh;\r\n  @media (max-width: 1006px) {\r\n    width: 100vw;\r\n    height: 100vh;\r\n  }\r\n`;\r\n\r\nexport const RightItemsCont = styled.div`\r\n  width: 100%;\r\n  height: 80%;\r\n  position: relative;\r\n  top: ${(props) => (props.top ? props.top : \"7%\")};\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  transition: height 2s;\r\n`;\r\n\r\nexport const RightBarDiv = styled.div`\r\n  width: 95%;\r\n  height: ${(props) => (props.height ? props.height : \"10%\")};\r\n  display: flex;\r\n  justify-content: flex-end;\r\n`;\r\n\r\nexport const LinkText = styled.a`\r\n  font-family: LeagueSpartan-Bold;\r\n  color: Black;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"18px\")};\r\n  margin: 3%;\r\n  transition: 0.3s;\r\n  cursor: pointer;\r\n  &:hover {\r\n    color: ${ColorPalette.PrimaryButtonBlue};\r\n  }\r\n  @media (max-width: 1006px) {\r\n    font-size: 14px;\r\n  }\r\n`;\r\n\r\nexport const TextInput300x50 = styled.input`\r\n  width: ${(props) => (props.inputwidth ? props.inputwidth : \"300px\")};\r\n  height: ${(props) => (props.inputheight ? props.inputheight : \"50px\")};\r\n  border-radius: ${(props) =>\r\n    props.inputborderradius ? props.inputborderradius : \"4px\"};\r\n  background-color: ${(props) =>\r\n    props.inputbgcolor ? props.inputbgcolor : ColorPalette.LightGrey};\r\n  border-style: ${(props) =>\r\n    props.inputborderstyle ? props.inputborderstyle : \"solid\"};\r\n  border-color: ${(props) =>\r\n    props.inputbordercolor ? props.inputbordercolor : \"#AAAAAA\"};\r\n  border-width: ${(props) =>\r\n    props.inputborderwidth ? props.inputborderwidth : 2};\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"block\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"0px\")};\r\n  margin-top: ${(props) =>\r\n    props.inputmargintop ? props.inputmargintop : \"2%\"};\r\n  margin-left: ${(props) =>\r\n    props.inputmarginleft ? props.inputmarginleft : \"0%\"};\r\n  border: 0;\r\n  padding: 18px;\r\n  ::-webkit-file-upload-button {\r\n    display: none;\r\n  }\r\n  &:focus {\r\n    background-color: ${ColorPalette.LightGrey};\r\n  }\r\n  transition: background-color 0.1s;\r\n  transition-timing-function: linear;\r\n  outline: none;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"100%\")};\r\n  font-family: Avenir;\r\n  @media (max-width: 1006px) {\r\n    margin-top: ${(props) =>\r\n      props.inputmargintopmobile ? props.inputmargintopmobile : \"2vh\"};\r\n    margin-left: ${(props) =>\r\n      props.inputmarginleftmobile ? props.inputmarginleftmobile : \"0%\"};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"70vw\")};\r\n  }\r\n`;\r\n\r\nexport const TextInputProp = styled.input`\r\n  width: ${(props) => (props.inputwidth ? props.inputwidth : \"200px\")};\r\n  height: ${(props) => (props.inputheight ? props.inputheight : \"5%\")};\r\n  border-radius: ${(props) =>\r\n    props.inputborderradius ? props.inputborderradius : \"4px\"};\r\n  background-color: ${(props) =>\r\n    props.inputbgcolor ? props.inputbgcolor : \"#F4F4F4\"};\r\n  border-style: ${(props) =>\r\n    props.inputborderstyle ? props.inputborderstyle : \"solid\"};\r\n  border-color: ${(props) =>\r\n    props.inputbordercolor ? props.inputbordercolor : \"#AAAAAA\"};\r\n  border-width: ${(props) =>\r\n    props.inputborderwidth ? props.inputborderwidth : 2};\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"block\")};\r\n  margin-right: 10px;\r\n  margin-top: ${(props) =>\r\n    props.inputmargintop ? props.inputmargintop : \"0%\"};\r\n  border: 0;\r\n  padding: 18px;\r\n  ::-webkit-file-upload-button {\r\n    display: none;\r\n  }\r\n  outline: none;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"16px\")};\r\n  font-family: Avenir;\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"10vw\")};\r\n    font-size: 16px;\r\n  }\r\n`;\r\n\r\nexport const SmallTextInput = styled.input`\r\n  width: ${(props) => (props.width ? props.width : \"80px\")};\r\n  height: \"15px\";\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"block\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"16px\")};\r\n  font-family: Avenir;\r\n`;\r\n\r\nexport const RadioButtonInput100x30 = styled.input`\r\n  width: ${(props) => (props.inputwidth ? props.inputwidth : \"auto\")};\r\n  height: ${(props) => (props.inputheight ? props.inputheight : \"30px\")};\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"block\")};\r\n  margin: 10px;\r\n  accent-color: green;\r\n  margin-top: ${(props) =>\r\n    props.inputmargintop ? props.inputmargintop : \"2%\"};\r\n  border: 0;\r\n  padding: 18px;\r\n  ::-webkit-file-upload-button {\r\n    display: none;\r\n  }\r\n  outline: none;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"100%\")};\r\n  font-family: Avenir;\r\n  @media (max-width: 1006px) {\r\n    margin-top: 2vh;\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"8vw\")};\r\n  }\r\n`;\r\n\r\nexport const RedirectDiv = styled.div`\r\n  width: 45%;\r\n  height: 5%;\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  @media (max-width: 1006px) {\r\n    width: 80vw;\r\n  }\r\n`;\r\n\r\nexport const InputDiv = styled.div`\r\n  width: 47%;\r\n  display: flex;\r\n  @media (max-width: 1006px) {\r\n    width: 77vw;\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"row\"};\r\n  }\r\n`;\r\n\r\nexport const GreenButtonWidth12VWHeight40 = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"12vw\")};\r\n  text-align: center;\r\n  font-family: LeagueSpartan-Bold;\r\n  color: white;\r\n  vertical-align: middle;\r\n  font-size: 1vw;\r\n  margin: 2px;\r\n  line-height: 2.5vw;\r\n  cursor: pointer;\r\n  border-radius: 10px;\r\n  transition: 0.3s;\r\n  padding: 4px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  background-color: ${(props) =>\r\n    props.bgcolor ? props.bgcolor : ColorPalette.PrimaryButtonBlue};\r\n  &:hover {\r\n    color: ${(props) => (props.hovercolor ? props.hovercolor : \"\")};\r\n    background-color: ${(props) =>\r\n      props.hoverbgcolor ? props.hoverbgcolor : \"\"};\r\n    border: ${(props) => (props.hoverborder ? props.hoverborder : \"\")};\r\n    opacity: ${(props) => (props.hoveropacity ? props.hoveropacity : \"70%\")};\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"30vw\")};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"12px\"};\r\n    line-height: 4vh;\r\n    height: 4vh;\r\n  }\r\n`;\r\n\r\nexport const LargeResponsiveButton = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"180px\")};\r\n  text-align: center;\r\n  font-family: LeagueSpartan-Bold;\r\n  color: white;\r\n  vertical-align: middle;\r\n  font-size: 1vw;\r\n  margin: 2px;\r\n  line-height: 2.5vw;\r\n  cursor: pointer;\r\n  border-radius: 10px;\r\n  transition: 0.3s;\r\n  padding: 4px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  background-color: ${(props) =>\r\n    props.bgcolor ? props.bgcolor : ColorPalette.PrimaryButtonBlue};\r\n  &:hover {\r\n    color: ${(props) => (props.hovercolor ? props.hovercolor : \"\")};\r\n    background-color: ${(props) =>\r\n      props.hoverbgcolor ? props.hoverbgcolor : \"\"};\r\n    border: ${(props) => (props.hoverborder ? props.hoverborder : \"\")};\r\n    opacity: ${(props) => (props.hoveropacity ? props.hoveropacity : \"70%\")};\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"30vw\")};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"12px\"};\r\n    line-height: ${(props) => (props.mobilelineheight ? props.mobilelineheight : \"4vh\")};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"4vh\")};\r\n  }\r\n`;\r\n\r\nexport const MediumGreenButton = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"20%\")};\r\n  height: ${(props) => (props.height ? props.height : \"3vw\")};\r\n  text-align: center;\r\n  box-shadow: 0px 8px 24px #d3d3d3;\r\n  font-family: LeagueSpartan-Bold;\r\n  color: ${(props) => (props.color ? props.color : \"white\")};\r\n  background-color: ${(props) =>\r\n    props.bgcolor ? props.bgcolor : ColorPalette.PrimaryButtonBlue};\r\n  vertical-align: middle;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"1.25vw\")};\r\n  line-height: ${(props) => (props.lineheight ? props.lineheight : \"3vw\")};\r\n  cursor: pointer;\r\n  padding: ${(props) => (props.padding ? props.padding : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"1%\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  border-radius: 10px;\r\n  transition: 0.3s;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  &:hover {\r\n    opacity: ${(props) => (props.hoveropacity ? props.hoveropacity : \"70%\")};\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"30vw\")};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"18px\"};\r\n    margin-top: 5vh;\r\n    line-height: 6vh;\r\n    height: 6vh;\r\n  }\r\n`;\r\n\r\nexport const MediumWhiteButton = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"30%\")};\r\n  height: ${(props) => (props.height ? props.height : \"3vw\")};\r\n  text-align: center;\r\n  font-family: LeagueSpartan-Bold;\r\n  color: ${(props) => (props.color ? props.color : \"white\")};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  vertical-align: middle;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"1.25vw\")};\r\n  line-height: ${(props) => (props.lineheight ? props.lineheight : \"3vw\")};\r\n  cursor: pointer;\r\n  padding: ${(props) => (props.padding ? props.padding : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"10%\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  border: ${(props) => (props.border ? props.border : \"4px solid white\")};\r\n  border-radius: 10px;\r\n  transition: 0.3s;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  &:hover {\r\n    color: ${(props) => (props.hovercolor ? props.hovercolor : \"white\")};\r\n    background-color: ${(props) =>\r\n      props.hoverbgcolor ? props.hoverbgcolor : ColorPalette.PrimaryButtonBlue};\r\n    border: ${(props) =>\r\n      props.hoverborder ? props.hoverborder : \"4px solid #169ADB\"};\r\n    opacity: ${(props) => (props.hoveropacity ? props.hoveropacity : \"\")};\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"30vw\")};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"18px\"};\r\n    margin-top: 5vh;\r\n    line-height: 6vh;\r\n    height: 6vh;\r\n  }\r\n`;\r\n\r\nexport const SelectableMediumLongButton = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"20%\")};\r\n  height: ${(props) => (props.height ? props.height : \"3vw\")};\r\n  text-align: center;\r\n  font-weight: bolder;\r\n  font-family: Avenir;\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  vertical-align: middle;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"1.25vw\")};\r\n  line-height: ${(props) => (props.lineheight ? props.lineheight : \"3vw\")};\r\n  cursor: pointer;\r\n  padding: ${(props) => (props.padding ? props.padding : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"10px\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"10px\")};\r\n  border: ${(props) => (props.border ? props.border : \"4px solid white\")};\r\n  border-radius: 10px;\r\n  transition: 0.3s;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"90%\")};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"18px\"};\r\n    margin-top: 5vh;\r\n    line-height: 6vh;\r\n    height: 6vh;\r\n  }\r\n`;\r\n\r\nexport const PrivacyPolicy = styled.p`\r\n  font-family: Avenir;\r\n  color: grey;\r\n  font-size: 10px;\r\n  @media (max-width: 1006px) {\r\n    font-size: 12px;\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport default nullProp;\r\n","import styled from \"styled-components\";\r\nimport { animated } from \"react-spring\";\r\nimport { ColorPalette } from \"../Colors\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const PageContainer = styled.div`\r\nposition: relative;\r\n  height:500vh;\r\n`\r\n\r\nexport const StickyTopMenuCont = styled.div`\r\n  position: -webkit-sticky; /* Safari */\r\n  position: sticky;\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  top: 0;\r\n  z-index: 998;\r\n`;\r\n\r\nexport const MenuCont = styled(animated.div)`\r\n  height: 99vh;\r\n  width: 17.5vw;\r\n  margin: 1%;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: column;\r\n  border-left: 0px;\r\n  border-right: 0px;\r\n  @media (max-width: 1006px) {\r\n    width: 101vw;\r\n    height: 10vh;\r\n    background-color: #333;\r\n    position: fixed;\r\n    bottom: 0;\r\n    margin: 0;\r\n    right: 0vw;\r\n    z-index: 1000;\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"none\")};\r\n  }\r\n`;\r\n\r\nexport const TopMenuCont = styled.div`\r\n  height: ${(props) => (props.height ? props.height : \"24vh\")};\r\n  width: 82vw;\r\n  background-color: white;\r\n  zindex: 2;\r\n  border-left: 0px;\r\n  border-right: 0px;\r\n  @media (max-width: 1006px) {\r\n    width: 101vw;\r\n    height: 6vh;\r\n    background-color: #333;\r\n    position: fixed;\r\n    top: 0;\r\n    z-index: 1000;\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"none\")};\r\n  }\r\n`;\r\n\r\nexport const TopMenuCont_AutoHeight = styled.div`\r\n  width: 82vw;\r\n  background-color: white;\r\n  z-index: 2;\r\n  border-left: 0px;\r\n  border-right: 0px;\r\n  @media (max-width: 1006px) {\r\n    width: 101vw;\r\n    height: 6vh;\r\n    background-color: #333;\r\n    position: fixed;\r\n    top: 0;\r\n    z-index: 1000;\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"none\")};\r\n  }\r\n`;\r\n\r\nexport const TopMenuContAutoHeightSticky = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"82vw\")};\r\n  background-color: white;\r\n  position: -webkit-sticky; /* Safari */\r\n  position: sticky;\r\n  top: 15px;\r\n  border-left: 0px;\r\n  border-right: 0px;\r\n  z-index: 1000; // Add z-index for desktop view\r\n\r\n  @media (max-width: 1006px) {\r\n    width: 101vw;\r\n    height: 6vh;\r\n    background-color: #333;\r\n    position: fixed;\r\n    top: 0;\r\n    z-index: 1000;\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"none\")};\r\n  }\r\n`;\r\n\r\n\r\nexport const MenuNRCLogo = styled.img`\r\n  width: auto;\r\n  height: 150px;\r\n  margin: -8%;\r\n  cursor: pointer;\r\n  object-fit: contain;\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n`;\r\n\r\nexport const FlexColumnCont = styled.div`\r\nwidth:${(props) => (props.width ? props.width : \"98%\")};\r\nheight:${(props) => (props.height ? props.height : \"20%\")};\r\nmargin:${(props) => (props.margin ? props.margin : \"1%\")};\r\nposition:${(props) => (props.position ? props.position : \"\")};\r\ntop:${(props) => (props.top ? props.top : \"\")};\r\nbottom:${(props) => (props.bottom ? props.bottom : \"\")};\r\nleft:${(props) => (props.left ? props.left : \"\")};\r\nright:${(props) => (props.right ? props.right : \"\")};\r\nborder-bottom:${(props) => (props.borderbottom ? props.borderbottom : \"\")};\r\nbackground-color:${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\nalign-items:${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\ndisplay:${(props) => (props.display ? props.display : \"flex\")};\r\npadding:${(props) => (props.padding ? props.padding : \"\")};\r\npadding-left:${(props) => (props.paddingleft ? props.paddingleft : \"\")};\r\npadding-bottom:${(props) => (props.paddingbottom ? props.paddingbottom : \"\")};\r\npadding-right:${(props) => (props.paddingright ? props.paddingright : \"\")};\r\ncursor:${(props) => (props.cursor ? props.cursor : \"\")};\r\nmargin-bottom:${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\nmargin-top:${(props) => (props.margintop ? props.margintop : \"\")};\r\nborder:${(props) => (props.border ? props.border : \"\")};\r\nbox-shadow: ${(props) => (props.boxshadow ? props.boxshadow : \"\")}; \r\nflex-direction:${(props) =>\r\n  props.flexdirection ? props.flexdirection : \"column\"};\r\njustify-content:${(props) =>\r\n  props.justifycontent ? props.justifycontent : \"center\"};\r\nmargin-left:${(props) => (props.marginleft ? props.marginleft : \"\")};\r\nborder-radius${(props) => (props.borderradius ? props.borderradius : \"\")};\r\nborder-bottom:${(props) => (props.borderbottom ? props.borderbottom : \"\")};\r\noverflow-y:${(props) => (props.overflowy ? props.overflowy : \"\")};\r\nword-wrap:${(props) => (props.wordwrap ? props.wordwrap : \"\")};\r\nz-Index:${(props) => (props.zIndex ? props.zIndex : \"\")};\r\nopacity:${(props) => (props.opacity ? props.opacity : \"100%\")};\r\n@media (max-width: 1528px) {\r\n  flex-direction:${(props) =>\r\n    props.tabletflexdirection ? props.tabletflexdirection : \"\"};\r\n  align-items:${(props) =>\r\n    props.tabletalignitems ? props.tabletalignitems : \"\"};\r\n  }\r\n  \r\n@media (max-width: 1006px) {\r\n  width:${(props) => (props.mobilewidth ? props.mobilewidth : \"auto\")};\r\n  height:${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n  margin:${(props) => (props.mobilemargin ? props.mobilemargin : \"\")};\r\n  border-bottom:${(props) =>\r\n    props.mobileborderbottom ? props.mobileborderbottom : \"\"};\r\n  background-color:${(props) =>\r\n    props.mobilebgcolor ? props.mobilebgcolor : \"\"};\r\n  align-items:${(props) =>\r\n    props.mobilealignitems ? props.mobilealignitems : \"\"};\r\n  display:${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n  padding:${(props) => (props.mobilepadding ? props.mobilepadding : \"\")};\r\n  padding-bottom:${(props) =>\r\n    props.mobilepaddingbottom ? props.mobilepaddingbottom : \"\"};\r\n  margin-bottom:${(props) =>\r\n    props.mobilemarginbottom ? props.mobilemarginbottom : \"\"};\r\n  border:\r\n  flex-direction:${(props) =>\r\n    props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n  justify-content:${(props) =>\r\n    props.mobilejustifycontent ? props.mobilejustifycontent : \"\"};\r\n  margin-left:${(props) =>\r\n    props.mobilemarginleft ? props.mobilemarginleft : \"\"};\r\n  overflow-y:${(props) => (props.mobileoverflowy ? props.mobileoverflowy : \"\")};\r\n  flex-direction:${(props) =>\r\n    props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n  position:${(props) => (props.mobileposition ? props.mobileposition : \"\")};\r\n  top:${(props) => (props.mobiletop ? props.mobiletop : \"\")};\r\n  bottom:${(props) => (props.mobilebottom ? props.mobilebottom : \"\")};\r\n  left:${(props) => (props.mobileleft ? props.mobileleft : \"\")};\r\n  right:${(props) => (props.mobileright ? props.mobileright : \"\")};\r\n}\r\n`;\r\n\r\nexport const FlexColumnContBoxShadow = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"70%\")};\r\n  height: ${(props) => (props.height ? props.height : \"20%\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"1%\")};\r\n  padding: 2%;\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: ${(props) =>\r\n    props.flexdirection ? props.flexdirection : \"column\"};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  opacity: ${(props) => (props.opacity ? props.opacity : \"100%\")};\r\n  text-align: center;\r\n  border-radius: 20px;\r\n  box-shadow: 0px 8px 10px ${ColorPalette.PrimaryGrey};\r\n  @media (max-width: 1006px) {\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"auto\")};\r\n    flex-direction: ${(props) =>\r\n      props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n    border: ${(props) => (props.mobileborder ? props.mobileborder : \"\")};\r\n  }\r\n`;\r\n\r\nexport const FlexColumnContBoxShadow19Percent = styled.div`\r\n  width: 19%;\r\n  height: 20%;\r\n  margin: 1%\r\n  padding: 2%;\r\n  align-items: center;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  opacity: 100%;\r\n  text-align: center;\r\n  border-radius: 20px;\r\n  @media (max-width: 1006px) {\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const Icon = styled.img`\r\n  width: ${(props) => (props.width ? props.width : \"35%\")};\r\n  height: ${(props) => (props.height ? props.height : \"50%\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  border-radius: ${(props) =>\r\n    props.borderradius ? props.borderradius : \"100px\"};\r\n  object-fit: ${(props) => (props.objfit ? props.objfit : \"\")};\r\n  @media (max-width: 1006px) {\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n  }\r\n`;\r\n\r\nexport const CircularImage125px = styled.img`\r\n  width: ${(props) => (props.width ? props.width : \"125px\")};\r\n  height: ${(props) => (props.height ? props.height : \"125px\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  border-radius: ${(props) =>\r\n    props.borderradius ? props.borderradius : \"100px\"};\r\n  object-fit: ${(props) => (props.objfit ? props.objfit : \"cover\")};\r\n  margin-bottom: 10px;\r\n  @media (max-width: 1006px) {\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n  }\r\n`;\r\n\r\nexport const Icon20x80Percent = styled.img`\r\n  width: 20%;\r\n  height: 80%;\r\n  border-radius: 100px;\r\n`;\r\n\r\nexport const MobileIcon100x130Percent = styled.img`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"130%\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  border-radius: ${(props) =>\r\n    props.borderradius ? props.borderradius : \"100px\"};\r\n  object-fit: ${(props) => (props.objfit ? props.objfit : \"\")};\r\n  @media (max-width: 1006px) {\r\n    margin-top: 5px;\r\n    margin-bottom: -10px;\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"30px\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"100%\")};\r\n  }\r\n`;\r\n\r\nexport const SmallHeader = styled.p`\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"Avenir\")};\r\n  padding-bottom: ${(props) =>\r\n    props.paddingbottom ? props.paddingbottom : \"\"};\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"5px\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  border-bottom: ${(props) => (props.borderbottom ? props.borderbottom : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  min-width: ${(props) => (props.minwidth ? props.minwidth : \"\")};\r\n  border-radius: 3px;\r\n  text-decoration: ${(props) =>\r\n    props.textdecoration ? props.textdecoration : \"\"};\r\n  transition: color 0.5s;\r\n  &:hover {\r\n    color: ${(props) => (props.hovercolor ? props.hovercolor : \"\")};\r\n    background-color: ${(props) =>\r\n      props.hoverbgcolor ? props.hoverbgcolor : \"\"};\r\n    border: ${(props) => (props.hoverborder ? props.hoverborder : \"\")};\r\n  }\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"14px\"};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n    border-bottom: ${(props) =>\r\n      props.mobileborderbottom ? props.mobileborderbottom : \"\"};\r\n  }\r\n`;\r\n\r\nexport const TinyHeader = styled.p`\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"12px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"Avenir\")};\r\n  padding-bottom: ${(props) =>\r\n    props.paddingbottom ? props.paddingbottom : \"\"};\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"5px\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  border-bottom: ${(props) => (props.borderbottom ? props.borderbottom : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  border-radius: 3px;\r\n  text-decoration: ${(props) =>\r\n    props.textdecoration ? props.textdecoration : \"\"};\r\n  transition: color 0.5s;\r\n  &:hover {\r\n    color: ${(props) => (props.hovercolor ? props.hovercolor : \"\")};\r\n    background-color: ${(props) =>\r\n      props.hoverbgcolor ? props.hoverbgcolor : \"\"};\r\n    border: ${(props) => (props.hoverborder ? props.hoverborder : \"\")};\r\n  }\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"12px\"};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n    border-bottom: ${(props) =>\r\n      props.mobileborderbottom ? props.mobileborderbottom : \"\"};\r\n  }\r\n`;\r\n\r\nexport const StyledHR = styled.hr`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: ${(props) => (props.height ? props.height : \"0%\")};\r\n  border: ${(props) => (props.border ? props.border : \"1px solid black\")};\r\n  position: ${(props) => (props.position ? props.position : \"\")};\r\n  bottom: ${(props) => (props.bottom ? props.bottom : \"\")};\r\n  top: ${(props) => (props.top ? props.top : \"\")};\r\n  left: ${(props) => (props.left ? props.left : \"\")};\r\n  right: ${(props) => (props.right ? props.right : \"\")};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n  }\r\n`;\r\n\r\nexport default nullProp;\r\n","import styled, {keyframes} from \"styled-components\";\r\nimport { ColorPalette } from \"../Colors\";\r\n\r\nconst nullProp = null;\r\n\r\nconst fadeIn = keyframes`\r\n  0% { opacity: 0; transform: translateY(2px); }\r\n  100% { opacity: 1; transform: translateY(0); }\r\n`;\r\n\r\nexport const SmallHeaderOpenSansBold = styled.p`\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"Open Sans\")};\r\n  font-weight:Bold;\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"5px\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  border-radius: 3px;\r\n  transition: color 0.5s;\r\n  &:hover {\r\n    color: ${(props) => (props.hovercolor ? props.hovercolor : \"\")};\r\n    background-color: ${(props) =>\r\n      props.hoverbgcolor ? props.hoverbgcolor : \"\"};\r\n    border: ${(props) => (props.hoverborder ? props.hoverborder : \"\")};\r\n  }\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"12px\"};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n    border-bottom: ${(props) =>\r\n      props.mobileborderbottom ? props.mobileborderbottom : \"\"};\r\n  }\r\n`;\r\n\r\nexport const SmallHeaderOpenSans = styled.p`\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"Open Sans\")};\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"5px\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  border-radius: 3px;\r\n  transition: color 0.5s;\r\n  &:hover {\r\n    color: ${(props) => (props.hovercolor ? props.hovercolor : \"\")};\r\n    background-color: ${(props) =>\r\n      props.hoverbgcolor ? props.hoverbgcolor : \"\"};\r\n    border: ${(props) => (props.hoverborder ? props.hoverborder : \"\")};\r\n  }\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"12px\"};\r\n    height: ${(props) => (props.mobileheight ? props.mobileheight : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n    border-bottom: ${(props) =>\r\n      props.mobileborderbottom ? props.mobileborderbottom : \"\"};\r\n  }\r\n`;\r\n\r\nexport const MediumHeaderMarginLeft = styled.p`\r\n  font-size: 16px;\r\n  color: black;\r\n  margin-right: 40px;\r\n  font-family: Avenir;\r\n`;\r\n\r\nexport const Futura25PercentWidth = styled.p`\r\n  font-family: Futura;\r\n  width: 25%;\r\n  display: ${(props) => (props.displayProp ? props.displayProp : \"block\")};\r\n  text-decoration: ${(props) => (props.txtLine ? props.txtLine : \"none\")};\r\n`;\r\n\r\nexport const RegularTextBoldRed = styled.p`\r\n  font-size: 18px;\r\n  font-family: Avenir;\r\n  font-weight: bold;\r\n  display: ${(props) => (props.display ? props.display : \"\")};\r\n  color: red;\r\n`;\r\n\r\n//League Headers\r\n\r\nexport const LeagueSpartanLarge = styled.p`\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"20px\")};\r\n  margin-top: 5px;\r\n  margin-bottom: 0px;\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  font-weight: bold;\r\n  color: black;\r\n  overflow: wrap;\r\n  font-family: LeagueSpartan-Bold;\r\n  white-space: ${(props) => (props.whitespace ? props.whitespace : \"nowrap\")};\r\n  @media (max-width: 1006px) {\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"20px\"};\r\n  }\r\n`;\r\n\r\nexport const LeagueSpartanRegular = styled.p`\r\n  font-weight: bold;\r\n  color: black;\r\n  font-size: ${(props) => (props.fontSize ? props.fontSize : \"\")};\r\n  font-family: LeagueSpartan-Bold;\r\n  margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n`;\r\n\r\nexport const LeagueSpartanRegularMinWidth = styled.p`\r\n  font-weight: bold;\r\n  color: black;\r\n  font-family: LeagueSpartan-Bold;\r\n  white-space: nowrap;\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n`;\r\n\r\nexport const LeagueSpartanExtraLargeBold = styled.p`\r\n  font-size: 24px;\r\n  font-weight: bold;\r\n  color: black;\r\n  font-family: LeagueSpartan-Bold;\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"5px\")};\r\n  margin-bottom: ${(props) =>\r\n    props.marginbottom ? props.marginbottom : \"5px\"};\r\n`;\r\n\r\nexport const LeagueSpartanExtraLargeWidth200px = styled.p`\r\nfont-size:24px\r\nfont-weight:bold;\r\ncolor:black;\r\nfont-family: LeagueSpartan-Bold;\r\nwidth:200px;\r\nmargin-left:20px;\r\n`;\r\n\r\nexport const SmallHeaderLeagueSpartanWidth100Percent = styled.p`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"18px\")};\r\n  font-family: ${(props) =>\r\n    props.fontfamily ? props.fontfamily : \"LeagueSpartan-Bold\"};\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  margin-left: 2%;\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"16px\"};\r\n  }\r\n`;\r\n\r\nexport const LeagueFontSize100Percent = styled.p`\r\n  font-family: LeagueSpartan-Bold;\r\n  font-size: 100%;\r\n  cursor: pointer;\r\n  @media (max-width: 1006px) {\r\n    font-size: 100%;\r\n  }\r\n`;\r\n\r\nexport const LeagueSpartanTiny = styled.label`\r\n  font-family: LeagueSpartan-Bold;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"12px\")};\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  max-width: ${(props) => (props.maxwidth ? props.maxwidth : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n`;\r\n\r\nexport const LeagueSpartanTinyMargins = styled.label`\r\n  font-family: LeagueSpartan-Bold;\r\n  font-size: 12px;\r\n  white-space: pre-wrap;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n`;\r\n\r\nexport const LeagueSpartanHeaderSmall = styled.p`\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  min-width: ${(props) => (props.minwidth ? props.minwidth : \"\")};\r\n  max-width: ${(props) => (props.maxwidth ? props.maxwidth : \"\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  font-family: ${(props) =>\r\n    props.fontfamily ? props.fontfamily : \"LeagueSpartan-Bold\"};\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"0px\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n\r\n  // margin-right:10px;\r\n  white-space: ${(props) => (props.whitespace ? props.whitespace : \"\")};\r\n\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"14px\"};\r\n  }\r\n`;\r\n\r\nexport const MediumHeader100PercentWidthWhiteText = styled.p`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"16px\")};\r\n  font-family: ${(props) =>\r\n    props.fontfamily ? props.fontfamily : \"LeagueSpartan-Bold\"};\r\n  color: ${(props) => (props.color ? props.color : \"white\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"5px\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"16px\"};\r\n  }\r\n`;\r\n\r\nexport const MobileOnlyRegularHeader = styled.p`\r\n  display: none;\r\n  @media (max-width: 1006px) {\r\n    font-family: LeagueSpartan-Bold;\r\n    color: black;\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"18px\"};\r\n  }\r\n`;\r\n\r\nexport const RegularTextWithMargins = styled.p`\r\n  margin-left: 2.5%;\r\n  margin-right: 2.5%;\r\n  font-size: 18px;\r\n  font-family: Avenir;\r\n`;\r\n\r\nexport const ExtraLargeBoldText = styled.p`\r\n  font-family: Avenir;\r\n  font-size: 20px;\r\n  font-weight: bold;\r\n  @media (max-width: 1006px) {\r\n    font-size: 100%;\r\n  }\r\n`;\r\n\r\nexport const RegularGreenTextDisplayBlock = styled.p`\r\n  font-size: 18px;\r\n  color: ${ColorPalette.PrimaryButtonBlue};\r\n  text-align: center;\r\n`;\r\n\r\nexport const RegularGreenText = styled.p`\r\n  font-size: 18px;\r\n  color: ${ColorPalette.PrimaryButtonBlue};\r\n  text-align: center;\r\n  @media (max-width: 1006px) {\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport const RegularText = styled.p`\r\n  font-family: Avenir;\r\n  max-width: ${(props) => (props.maxwidth ? props.maxwidth : \"\")};\r\n  font-weight: ${(props) => (props.fontweight ? props.fontweight : \"\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"18px\")};\r\n  text-decoration: ${(props) => (props.txtLine ? props.txtLine : \"none\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  text-align: ${(props) => (props.textalign ? props.textalign : \"\")};\r\n  @media (max-width: 1006px) {\r\n    font-size: ${(props) =>props.mobilefontsize ? props.mobilefontsize : \"18px\"};\r\n      margin-top: ${(props) => (props.marginTopMobile ? props.marginTopMobile : \"\")};\r\n      margin-bottom: ${(props) => (props.marginBottomMobile ? props.marginBottomMobile : \"\")};\r\n\r\n  }\r\n`;\r\n\r\nexport const TinyTextItalics = styled.p`\r\n  font-family: Avenir, sans-serif;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"13px\")};\r\n  max-width: ${(props) => (props.maxwidth ? props.maxwidth : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"5px\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"5px\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  font-style: italic;\r\n\r\n  /* Apple-like smooth text rendering */\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n\r\n  /* Subtle fade-in on mount */\r\n  animation: ${fadeIn} 0.3s ease forwards;\r\n\r\n  /* Subtle hover scale for a little delight */\r\n  transition: transform 0.2s ease, color 0.2s ease;\r\n  &:hover {\r\n    transform: scale(1.02);\r\n  }\r\n`;\r\n\r\nexport const GreyTinyTextItalics = styled.p`\r\n  font-family: Avenir;\r\n  font-size: 13px;\r\n  font-weight: Bold;\r\n  max-width: ${(props) => (props.maxwidth ? props.maxwidth : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  color: ${(props) => (props.color ? props.color : ColorPalette.BoxShadowGrey)};\r\n  font-style: italic;\r\n`;\r\n\r\nexport const RegularTextBold = styled.p`\r\n  font-family: Avenir;\r\n  font-size: 18px;\r\n  font-weigth: bold;\r\n  @media (max-width: 1006px) {\r\n    font-size: 100%;\r\n  }\r\n`;\r\n\r\nexport const SmallTitleBold = styled.p`\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  font-family: Avenir;\r\n  cursor: pointer;\r\n`;\r\n\r\nexport const SmallTitleBoldWithWidth = styled.p`\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  color: black;\r\n  font-family: Avenir;\r\n  cursor: pointer;\r\n  min-width: 150px;\r\n`;\r\n\r\nexport const RegularTextSmallWithWidth = styled.p`\r\n  font-size: 14px;\r\n  color: black;\r\n  font-family: Avenir;\r\n  cursor: pointer;\r\n  word-wrap: break-word;\r\n  width: 50vw;\r\n`;\r\n\r\nexport const RegularTextAutoMargin = styled.p`\r\n  font-size: 14px;\r\n  color: black;\r\n  font-family: Avenir;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nexport const TitleFontSize100Percent = styled.p`\r\n  font-size: 100%;\r\n  color: black;\r\n  font-family: Avenir;\r\n`;\r\n\r\nexport const RegularTextMobileSmall = styled.p`\r\n  font-size: 18px;\r\n  font-family: Avenir;\r\n  color: ${(props) => (props.bgcolor ? props.bgcolor : \"black\")};\r\n  @media (max-width: 1006px) {\r\n    font-size: 14px;\r\n  }\r\n`;\r\n\r\nexport const TitleFontSize100PercentPointer = styled.p`\r\n  font-family: Avenir;\r\n  font-size: 100%;\r\n  cursor: pointer;\r\n  @media (max-width: 1006px) {\r\n    font-size: 100%;\r\n  }\r\n`;\r\n\r\nexport const PropDiv = styled.div`\r\n  display: ${(props) => (props.divdisplay ? props.divdisplay : \"none\")};\r\n`;\r\n\r\nexport const BlueUnderlinePointerPara = styled.p`\r\n  text-decoration: underline;\r\n  display: ${(props) => (props.display ? props.display : \"\")};\r\n  color: ${(props) => (props.color ? props.color : \"blue\")};\r\n  cursor: pointer;\r\n`;\r\n\r\nexport const ExtraLargeTextMobileRegular = styled.p`\r\n  font-size: 24px;\r\n  font-family: Avenir;\r\n  @media (max-width: 1006px) {\r\n    font-size: 18px;\r\n  }\r\n`;\r\n\r\nexport const LargeText = styled.p`\r\n  font-size: 20px;\r\n  font-family: Avenir;\r\n`;\r\n\r\nexport const ExtraLargeText = styled.p`\r\n  font-size: 24px;\r\n  font-family: Avenir;\r\n`;\r\n\r\nexport const LargeHeaderBold = styled.p`\r\n  font-size: ${(props) => (props.font_size ? props.font_size : \"20px\")};\r\n  cursor: pointer;\r\n  font-family: Avenir;\r\n  border-bottom: ${(props) => (props.borderbottom ? props.borderbottom : \"\")};\r\n  margin-left: 4%;\r\n  color: ${(props) => (props.font_color ? props.font_color : \"black\")};\r\n  // transition: font-size 0.2s;\r\n  // transition-timing-function: linear;\r\n  transition: color 0.2s ease, border-bottom 0.2s ease, font-weight 0.1s ease;\r\n  &:hover {\r\n    color: ${ColorPalette.DarkGrey};\r\n    border-bottom: 2px solid rgb(66, 197, 22, .5);\r\n    font-weight: bold;\r\n  }\r\n`;\r\n\r\nexport const MediumHeader100PercentWidth = styled.p`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  max-width: ${(props) => (props.maxwidth ? props.maxwidth : \"\")};\r\n  min-width: ${(props) => (props.minwidth ? props.minwidth : \"\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"16px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"Avenir\")};\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"5px\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"16px\"};\r\n  }\r\n`;\r\n\r\nexport const SmallGreenLeagueText = styled.p`\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"10px\")};\r\n  font-family: ${(props) =>\r\n    props.fontfamily ? props.fontfamily : \"LeagueSpartan-Bold\"};\r\n  color: ${(props) => (props.color ? props.color : ColorPalette.PrimaryButtonBlue)};\r\n  margin: ${(props) => (props.margin ? props.margin : \"5px\")};\r\n  padding: ${(props) => (props.padding ? props.padding : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) => (props.display ? props.display : \"block\")};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"12px\"};\r\n    width: auto;\r\n  }\r\n`;\r\n\r\nexport const TinyHeaderDarkGrey = styled.p`\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"12px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"Avenir\")};\r\n  color: ${(props) => (props.color ? props.color : ColorPalette.DarkGrey)};\r\n  margin: ${(props) => (props.margin ? props.margin : \"0px\")};\r\n  margin-right: 10px;\r\n  cursor: pointer;\r\n  white-space: ${(props) => (props.whitespace ? props.whitespace : \"nowrap\")};\r\n  overflow: ${(props) => (props.overflow ? props.overflow : \"hidden\")};\r\n  text-overflow: ellipsis;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"12px\"};\r\n  }\r\n`;\r\n\r\nexport const MediumHeaderDarkGrey = styled.p`\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"16px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"Avenir\")};\r\n  color: ${(props) => (props.color ? props.color : \"grey\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"0px\")};\r\n  margin-right: 10px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"14px\"};\r\n    padding-top: 1vh;\r\n  }\r\n`;\r\n\r\nexport const MediumHeader = styled.p`\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"16px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"Avenir\")};\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"0px\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"10px\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n    font-size: ${(props) =>\r\n      props.mobilefontsize ? props.mobilefontsize : \"14px\"};\r\n    padding-top: 1vh;\r\n  }\r\n`;\r\n\r\nexport const SmallText = styled.p`\r\n  font-family: Avenir;\r\n  color: ${(props) => (props.color ? props.color : \"black\")};\r\n  text-decoration: ${(props) => (props.txtLine ? props.txtLine : \"none\")};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  font-size: 14px;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nexport const SmallTextPadding = styled.p`\r\n  font-family: Avenir;\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  color: black;\r\n  font-size: 14px;\r\n  padding: 2%;\r\n`;\r\n\r\nexport const BlankTextArea = styled.textarea`\r\n  margin-top: 10px;\r\n  font-family: Avenir;\r\n  font-size: 16px;\r\n  width: 97.5%;\r\n  // border: 1px dashed ${ColorPalette.PrimaryGrey};\r\n  height: 100px;\r\n  margin: 10px;\r\n  margin-top: auto;\r\n  margin-bottom: 4px;\r\n  border: 1px dashed ${ColorPalette.PrimaryGrey};\r\n  border-radius: 10px;\r\n  padding: 10px;\r\n  outline: none;\r\n  resize: none;\r\n  @media (max-width: 1006px) {\r\n    box-shadow: 0px 4px 8px #b7b7b7;\r\n    border-radius: 10px;\r\n    padding: 10px;\r\n    height: 150px;\r\n  }\r\n`;\r\n\r\nexport const StyledHRGreyBreak = styled.hr`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  height: 0%;\r\n  border: 0.5px solid ${ColorPalette.PrimaryGrey};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n  }\r\n`;\r\n\r\nexport const StyledHRPropColour = styled.hr`\r\n  width: ${(props) => (props.width ? props.width : \"101%\")};\r\n  height: 0%;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  border: ${(props) => (props.border ? props.border : \"0.5px solid black\")};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n  }\r\n`;\r\n\r\nexport const StyledHRGreenBreak = styled.hr`\r\n  width: 100%;\r\n  height: 0%;\r\n  border: 0.5px solid ${ColorPalette.PrimaryButtonBlue};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n  }\r\n`;\r\n\r\nexport const StyledHRGreenBreakDashed = styled.hr`\r\n  width: 100%;\r\n  height: 0%;\r\n  border: 0.5px dashed ${ColorPalette.PrimaryButtonBlue};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n  }\r\n`;\r\n\r\nexport const StyledHRGreenBreakThick = styled.hr`\r\n  width: ${(props) => (props.width ? props.width : \"96.5%\")};\r\n  height: 0%;\r\n  margin: 0;\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"\")};\r\n  border: 4.5px solid ${ColorPalette.PrimaryButtonBlue};\r\n  background-color: ${ColorPalette.PrimaryButtonBlue};\r\n  border-radius: 20px 20px 20px 20px;\r\n\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) =>\r\n      props.mobiledisplay ? props.mobiledisplay : \"block\"};\r\n  }\r\n`;\r\n\r\nexport default nullProp;\r\n","import axios from \"axios\";\r\nimport { useParams } from \"react-router-dom\";\r\n\r\nexport const GetMetroList = async () => {\r\n  const resp = await axios.get(window.$DBURL + \"utilities/metros\");\r\n  if (resp.status === 200) {\r\n    if (resp.data !== null) {\r\n      if (resp.data.metros !== null) {\r\n        return resp.data.metros;\r\n      }\r\n    }\r\n  }\r\n  return null;\r\n};\r\n\r\nexport const GetCityList = async (metroid) => {\r\n  const resp = await axios.get(\r\n    window.$DBURL + \"utilities/city/metro/\" + metroid\r\n  );\r\n  if (resp.status === 200) {\r\n    if (resp.data !== null) {\r\n      if (resp.data.cities !== null) {\r\n        return resp.data.cities;\r\n      }\r\n    }\r\n  }\r\n  return null;\r\n};\r\n\r\nexport const SetHeaderAuthorization = async () => {\r\n  const token = sessionStorage.getItem(\"token\");\r\n  if (token === null || token === \"\") {\r\n      // window.open(\"/\");\r\n  } else {\r\n    axios.defaults.headers.common[\"Authorization\"] = \"Basic \" + token;\r\n  }\r\n};\r\n\r\nexport const AddImageToCloud = async (image) => {\r\n  const resp = await axios.post(window.$DBURL + \"utilities/image\", image);\r\n  if (resp.status === 200) {\r\n    return resp.data.pics[0];\r\n  } else {\r\n    return null;\r\n  }\r\n};\r\n\r\nexport const UploadFileToCloud = async (file) => {\r\n  let formdata = new FormData();\r\n  formdata.append(\"Image/PDF\", file);\r\n  var resp = await axios.post(window.$DBURL + \"utilities/image\", formdata);\r\n\r\n  if (resp.status === 200) {\r\n    return resp.data.pics[0];\r\n  } else {\r\n    return null;\r\n  }\r\n};\r\n\r\nexport const GetMetroTaxes = async (metro_id) => {\r\n  var resp = await axios.get(window.$DBURL + \"tax/metro/\" + metro_id);\r\n  if (resp.status === 200) {\r\n    var tax = resp.data.tax;\r\n    return tax;\r\n  } else return [];\r\n};\r\n\r\nexport const AddFeedback = async (feedback) => {\r\n  const resp = await axios.post(window.$DBURL + \"feedback\", {\r\n    User_Id: feedback.User_Id,\r\n    Comment: feedback.Comment,\r\n    Rank: feedback.Rank,\r\n    AddTime: feedback.AddTime,\r\n    Platform: feedback.Platform,\r\n  });\r\n  if (resp.status === 200) {\r\n    return resp.data.feedback;\r\n  } else {\r\n    return null;\r\n  }\r\n};\r\n\r\n// pay amt in dollar, in the name of what. name can be any string describing the payment info.\r\n// return Stripe payment portal url\r\nexport const MakeStripePay = async (\r\n  amt,\r\n  currency,\r\n  name,\r\n  transactionid,\r\n  quote_id,\r\n  store_id,\r\n  userauthtoken,\r\n  invoiceid,\r\n) => {\r\n  var amount = amt * 100;\r\n  const resp = await axios.post(window.$DBURL + \"pay/checkout\", {\r\n    Amt: amount,\r\n    CurrencyCode: currency,\r\n    ProductName: name,\r\n    // SuccessUrl:\"https://localhost:3000/paymentsuccesstransit/\"+quote_id + \"/\" + store_id+ \"/\"+userauthtoken+\"/\"+transactionid+\"/\"+amount+\"/\"+currency,\r\n    // CancelUrl:\"https://localhost:3000/paymentfailed/\"+quote_id + \"/\" + userauthtoken\r\n    SuccessUrl:\r\n      \"https://app.newrhodesconstruction.com/paymentsuccesstransit/\" +\r\n      quote_id +\r\n      \"/\" +\r\n      store_id +\r\n      \"/\" +\r\n      userauthtoken +\r\n      \"/\" +\r\n      transactionid +\r\n      \"/\" +\r\n      amount +\r\n      \"/\" +\r\n      currency + \r\n      \"/\" +\r\n      invoiceid,\r\n    CancelUrl:\r\n      \"https://app.newrhodesconstruction.com/paymentfailed/\" +\r\n      quote_id +\r\n      \"/\" +\r\n      userauthtoken,\r\n  });\r\n  if (resp.status === 200) {\r\n    return resp.data.checkout;\r\n  } else return null;\r\n};\r\n\r\nexport const CreatePayRecord = async (payrequest) => {\r\n  const resp = await axios.post(window.$DBURL + \"pay\", {\r\n    CardPayRequest: payrequest,\r\n  });\r\n  if (resp.status === 200) {\r\n    return \"Sucess\";\r\n  } else {\r\n    return \"Failed\";\r\n  }\r\n};\r\n\r\nexport const CreateDepositRecord = async (payrequest) => {\r\n  const resp = await axios.post(window.$DBURL + \"pay/deposit\", {\r\n    CardPayRequest: payrequest,\r\n  });\r\n  if (resp.status === 200) {\r\n    return \"Sucess\";\r\n  } else {\r\n    return \"Failed\";\r\n  }\r\n};\r\n\r\nexport const GetCurrentTime = async () => {\r\n  var d = new Date();\r\n  var fullyear = d.getFullYear();\r\n  var month = (\"0\" + (d.getMonth() + 1)).slice(-2);\r\n  var day = (\"0\" + d.getDate()).slice(-2);\r\n  var hour = (\"0\" + d.getHours()).slice(-2);\r\n  var time = (\"0\" + d.getMinutes()).slice(-2);\r\n  var seconds = (\"0\" + d.getSeconds()).slice(-2);\r\n  var curtime =\r\n    fullyear +\r\n    \"-\" +\r\n    month +\r\n    \"-\" +\r\n    day +\r\n    \"T\" +\r\n    hour +\r\n    \":\" +\r\n    time +\r\n    \":\" +\r\n    seconds;\r\n  return curtime;\r\n};\r\n\r\n// Send pay notification to accountant and manager, method is the pay method, ex: E-transfer, Cheque, etc.\r\n// notes can be anything you like to add: ex. Notes: Deposit\r\nexport const SendPayNotification = async (caseid, amount, method, notes) => {\r\n  const resp = await axios.post(window.$DBURL + \"pay/notify\", {\r\n    CaseId: caseid,\r\n    Amount: amount,\r\n    Method: method,\r\n    Notes: notes,\r\n  });\r\n  if (resp.status === 200) {\r\n    return \"Sucess\";\r\n  } else {\r\n    return \"Failed\";\r\n  }\r\n};\r\n\r\n// export const decimalHoursToTimeString = (decimalHours) => {\r\n//   const hours = Math.floor(decimalHours);\r\n//   const minutes = Math.round((decimalHours - hours) * 60);\r\n\r\n//   if (hours === 0) {\r\n//     return `${minutes} Mins`;\r\n//   } else if (minutes === 0) {\r\n//     return `${hours} Hours`;\r\n//   } else {\r\n//     return `${hours} Hours ${minutes} Mins`;\r\n//   }\r\n// };\r\n\r\nfunction decimalHoursToTimeString(decimalHours) {\r\n  // Attempt to convert decimalHours to a floating-point number\r\n  if(decimalHours){\r\n    const hours = parseFloat(decimalHours);\r\n  // Check if the conversion was successful and hours is a valid number\r\n  if (!isNaN(hours)) {\r\n    return `${hours.toFixed(2)} Hours`;\r\n  } else {\r\n    return \"0 Hours\"; // Or any other fallback response for invalid or non-numeric inputs\r\n  }\r\n} else {\r\n  return 0;\r\n}\r\n}\r\n\r\nexport { decimalHoursToTimeString };\r\n","import axios from 'axios';\r\nimport {GetMetroTaxes} from '../Utility_Functions'\r\n\r\nexport const GetStoreInfo = async(store_id)=>{\r\n    var resp = await axios.get(window.$DBURL+\"store/\"+store_id);\r\n   \r\n    if(resp.status ===200)\r\n    {\r\n        var store = resp.data.store;\r\n        return store\r\n    }\r\n    else\r\n        return null;\r\n}\r\n\r\n\r\nexport const GetTaxesForStore = async(store_id)=>{\r\n    var store = await GetStoreInfo(store_id);\r\n    \r\n    if(store!=null)\r\n    {\r\n      var tx = await GetMetroTaxes(store.Metro_Id); \r\n      return tx;\r\n    }\r\n    else\r\n        return []\r\n}\r\n\r\nexport const GetTaxesForMetro = async(metro_id)=>{\r\n    var tx = await axios.get(window.$DBURL+\"tax/metro/\"+metro_id)\r\n    return tx.data.tax\r\n}\r\n\r\nexport const AddStore = async(store)=>{\r\n    var resp = await axios.post(window.$DBURL+\"store/info\",{Store:store});\r\n   \r\n    if(resp.status ===200)\r\n    {      \r\n        return resp.data.store;\r\n    }\r\n    else\r\n        return null;\r\n}\r\n\r\nexport const UpdateStore = async(store)=>{\r\n    var resp = await axios.put(window.$DBURL+\"store/info\",{Store:store});\r\n   \r\n    if(resp.status ===200)\r\n    {       \r\n        return resp.data.store;\r\n    }\r\n    else\r\n        return null;\r\n}\r\n\r\nexport const GetStoreByMetro = async(metroid)=>{\r\n    var resp = await axios.get(window.$DBURL+\"store/metro/\"+metroid);    \r\n    if(resp.status === 200){\r\n      if(resp.data !== null){\r\n        if(resp.data.stores !== null){    \r\n            return resp.data.stores;\r\n        }\r\n      }\r\n    }  \r\n\r\n    return null;\r\n}\r\n\r\nexport const AddStaffToStore = async(storeid)=>{\r\n    var resp = await axios.post(window.$DBURL+\"users/staff/addto/\"+storeid);    \r\n}\r\n","// /* eslint-disable */\r\n\r\n// import React, { useEffect, useRef, useState } from \"react\";\r\n// import axios from \"axios\";\r\n// import { useHistory, useParams } from \"react-router-dom\";\r\n// import {\r\n//     GetCityList,\r\n//     GetMetroList,\r\n// } from \"../../../API_Functions/Utility_Functions\";\r\n// import { Header } from \"../../../StylesheetComps/AuthSheet\";\r\n// import {\r\n//     FlexColumnLeftAlign,\r\n//     FlexRowCont,\r\n//     FlexRowContAutox100PercentMobileColumn\r\n// } from \"../../../StylesheetComps/Cont\";\r\n// import {\r\n//     DatalistMedium,\r\n//     DatalistOption,\r\n//     EstimatorDiv,\r\n//     GreenNavigationButton,\r\n//     GreyNavigationButton,\r\n//     Section1,\r\n//     TextAreaRegular,\r\n//     TextInputReusable\r\n// } from \"../../../StylesheetComps/LandscapeForm\";\r\n// import { FlexColumnCont } from \"../../../StylesheetComps/Menu\";\r\n// import {\r\n//     LeagueSpartanTiny,\r\n//     RegularTextBoldRed\r\n// } from \"../../../StylesheetComps/Titles\";\r\n// import { AddCaseOBO, SetCaseTo_Submit } from \"../../../API_Functions/CaseQuote_Functions\";\r\n// import { GetStoreByMetro } from \"../../../API_Functions/Store_Functions\";\r\n// // CSS for modal\r\n// const modalStyles = {\r\n//   position: 'fixed',\r\n//   top: '50%',\r\n//   left: '50%',\r\n//   transform: 'translate(-50%, -50%)',\r\n//   backgroundColor: '#FFF',\r\n//   padding: '50px',\r\n//   height: '90vh',\r\n//   zIndex: 1000,\r\n//   overflowY: 'auto', // This line allows the content to be scrollable if it overflows\r\n//   WebkitOverflowScrolling: 'touch', // This line allows smooth scrolling on iOS devices\r\n// };\r\n\r\n\r\n// const overlayStyles = {\r\n//     position: 'fixed',\r\n//     top: 0,\r\n//     left: 0,\r\n//     right: 0,\r\n//     bottom: 0,\r\n//     backgroundColor: 'rgba(0, 0, 0, .7)',\r\n//     zIndex: 1000,\r\n// };\r\n\r\n// const QuickProjectForm = ({ open, onNext, onBack, onPreview, onPersonalInfo, onClose }) => {\r\n\r\n//     const [isModalOpen, setIsModalOpen] = useState(true);\r\n//     const history = useHistory();\r\n//     const params = useParams();\r\n//     const projectInfoMargin = \"30px\";\r\n//     const mobileHeaderWidth = \"90px\";\r\n\r\n//     const [Title, setTitle] = useState(\"\");\r\n//     const [homeownerUsername, setHomeownerUsername] = useState(\"\");\r\n//     const [cityList, setCityList] = useState([]);\r\n//     const [metroList, setMetroList] = useState([]);\r\n//     const [ErrorText, setErrorText] = useState(\"\");\r\n//     const [firstName, setFirstName] = useState(\"\");\r\n//     const [name, setName] = useState(\"\");\r\n//     const [isSubmitting, setIsSubmitting] = useState(false);\r\n\r\n//     let newProjectObj = useRef({\r\n//         FullName: \"\",\r\n//         Email: \"\",\r\n//         StreetAddress:\"\",\r\n//         City: \"\",\r\n//         City_Id: 0,\r\n//         Region: \"\",\r\n//         Metro_Id: 0,\r\n//         Phone: \"\",\r\n//         PropertyType:\"\",\r\n//         Details:\"\",\r\n//         RequestName: \"\"\r\n//     });\r\n\r\n//     const GetLocationInfo = async () => {\r\n//         let metrodata = await GetMetroList();\r\n//         let citydata = await GetCityList(newProjectObj.current.Metro_Id);\r\n//         setCityList(citydata);\r\n//         setMetroList(metrodata);\r\n//     };\r\n\r\n//     const UpdateCityList = async (metroid) => {\r\n//         if (metroid !== 0 && metroid !== 3) {\r\n//             newProjectObj.current.City = \"\";\r\n//             newProjectObj.current.City_Id = 0;\r\n//             let citydata = await GetCityList(metroid);\r\n//             setCityList(citydata);\r\n//         }\r\n//     };\r\n\r\n//     useEffect(() => {\r\n//         GetLocationInfo();\r\n//     }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n//     // const DefinePersonalInfo = async () => {\r\n//     //     const D = new Date();\r\n//     //     const currentYear = D.getFullYear();\r\n//     //     const currentMonth = (\"0\" + (D.getMonth() + 1)).slice(-2);\r\n//     //     const currentDay = (\"0\" + D.getDate()).slice(-2);\r\n//     //     const currentHour = (\"0\" + D.getHours()).slice(-2);\r\n//     //     const currentMinute = (\"0\" + D.getMinutes()).slice(-2);   \r\n//     //     newProjectObj.current.Name = firstName + \" \" + lastName;\r\n//     //     if (\r\n//     //         firstName !== null &&\r\n//     //         firstName !== \"\" &&\r\n//     //         lastName !== null &&\r\n//     //         lastName !== \"\" &&\r\n//     //         newProjectObj.current.Name !== null &&\r\n//     //         newProjectObj.current.Name !== \"\" &&\r\n//     //         newProjectObj.current.Street !== null &&\r\n//     //         newProjectObj.current.Street !== \"\" &&\r\n//     //         newProjectObj.current.CityId !== 0 &&\r\n//     //         newProjectObj.current.Phone !== null &&\r\n//     //         newProjectObj.current.Phone !== \"\" &&\r\n//     //         newProjectObj.current.Email !== null &&\r\n//     //         newProjectObj.current.Email !== \"\" &&\r\n//     //         Title !== null &&\r\n//     //         Title !== \"\" &&\r\n//     //         newProjectObj.current.Metro_Id !== 0 &&\r\n//     //         newProjectObj.current.Metro_Id !== 3\r\n//     //     ) {\r\n//     //         newProjectObj.current.Tittle = Title\r\n//     //         newProjectObj.current.CreateTime = (currentYear +\r\n//     //             \"-\" +\r\n//     //             currentMonth +\r\n//     //             \"-\" +\r\n//     //             currentDay +\r\n//     //             \"T\" +\r\n//     //             currentHour +\r\n//     //             \":\" +\r\n//     //             currentMinute);\r\n//     //         newProjectObj.current.UpdateTime = (currentYear +\r\n//     //             \"-\" +\r\n//     //             currentMonth +\r\n//     //             \"-\" +\r\n//     //             currentDay +\r\n//     //             \"T\" +\r\n//     //             currentHour +\r\n//     //             \":\" +\r\n//     //             currentMinute);\r\n//     //         newProjectObj.current.Description = \"\"\r\n//     //         newProjectObj.current.ImageUrl = []\r\n//     //         const stores = await GetStoreByMetro(newProjectObj.current.Metro_Id)\r\n//     //         if(stores !== null){\r\n//     //         newProjectObj.current.Store_Id = stores[0].Id\r\n//     //         const data = await AddCaseOBO(newProjectObj.current, homeownerUsername )\r\n//     //         if(data){\r\n//     //             const submit = await SetCaseTo_Submit(data.Case.Id)\r\n//     //             if(submit !== null){\r\n//     //                 onClose()\r\n//     //             }\r\n//     //         } else {\r\n//     //             setErrorText(\"Username not found\");\r\n//     //         }\r\n//     //         }\r\n      \r\n//     //     } else {\r\n//     //         setErrorText(\"Please fill in all of the boxes\");\r\n//     //         window.scrollTo(0, 0);\r\n//     //     }\r\n//     // };\r\n\r\n\r\n\r\n//     const DefinePersonalInfo = async () => {\r\n//       if (isSubmitting) return; // Prevent further clicks if already submitting\r\n  \r\n//       setIsSubmitting(true); // Disable button on click\r\n//       try {\r\n//         newProjectObj.current.RequestName = JSON.parse(sessionStorage.getItem(\"userInfo\")).Name;\r\n//         const automationData = newProjectObj.current;\r\n  \r\n//         await axios.post(window.$DBURL + '/users/forwardToZapier', automationData);\r\n//         history.push('/home');\r\n//       } catch (error) {\r\n//         console.error(\"Error sending data to backend:\", error);\r\n//       } finally {\r\n//         setIsSubmitting(false); // Re-enable if necessary (optional)\r\n//       }\r\n//     };\r\n  \r\n\r\n//     const SelectCity = async (e) => {\r\n//       newProjectObj.current.City_Id = e.target.value;\r\n  \r\n//       const selectedCity = cityList.find(o => o.Id === Number(e.target.value));\r\n      \r\n//       if (selectedCity) {\r\n//           newProjectObj.current.City = selectedCity.Name;\r\n//       }\r\n//   };\r\n  \r\n\r\n//     const SelectMetro = async (e) => {\r\n//       newProjectObj.current.Metro_Id = e.target.value;\r\n      \r\n//       const selectedMetro = metroList.find(o => o.Id === Number(e.target.value));\r\n      \r\n//       if (selectedMetro) {\r\n//           newProjectObj.current.Region = selectedMetro.Name;\r\n//       } else {\r\n//       }\r\n//   };\r\n  \r\n\r\n//     return (\r\n//         <>\r\n//             {isModalOpen && (\r\n//                 <div style={overlayStyles}>\r\n//                     <div style={modalStyles}>\r\n//                         <EstimatorDiv>\r\n//                         <Section1>\r\n//           <Header fontsize=\"22px\" margintop=\"0%\">\r\n//           Create a Quick Project on Behalf of a Homeowner:\r\n//           </Header>\r\n//           <RegularTextBoldRed>{ErrorText}</RegularTextBoldRed>\r\n    \r\n//           <FlexRowContAutox100PercentMobileColumn>\r\n          \r\n//                <FlexColumnLeftAlign>\r\n//               <LeagueSpartanTiny htmlFor=\"name\">\r\n//                 Name\r\n//               </LeagueSpartanTiny>\r\n//               <TextInputReusable\r\n//                 id=\"name\"\r\n//                 placeholder={\"Full Name\"}\r\n//                 defaultValue={name}\r\n//                 onChange={(e) => {\r\n//                   newProjectObj.current.FullName = e.target.value;\r\n//                 }}\r\n//               ></TextInputReusable>\r\n//             </FlexColumnLeftAlign>\r\n//             <FlexColumnLeftAlign>\r\n//               <LeagueSpartanTiny htmlFor=\"address\">Address</LeagueSpartanTiny>\r\n//               <TextInputReusable\r\n//                 id=\"address\"\r\n//                 placeholder={\"Address\"}\r\n//                 onChange={(e) => {\r\n//                   newProjectObj.current.StreetAddress = e.target.value;\r\n//                 }}\r\n//               ></TextInputReusable>\r\n//             </FlexColumnLeftAlign>\r\n//           </FlexRowContAutox100PercentMobileColumn>\r\n    \r\n//           <FlexRowContAutox100PercentMobileColumn>\r\n//             <FlexColumnLeftAlign>\r\n//               <LeagueSpartanTiny htmlFor=\"cellphone\">\r\n//                 Phone Number\r\n//               </LeagueSpartanTiny>\r\n//               <TextInputReusable\r\n//                 type=\"tel\"\r\n//                 id=\"cellphone\"\r\n//                 placeholder={\"Cell Phone\"}\r\n//                 defaultValue={newProjectObj.current.Phone}\r\n//                 onChange={(e) => {\r\n//                   newProjectObj.current.Phone = e.target.value;\r\n//                 }}\r\n//               ></TextInputReusable>\r\n//             </FlexColumnLeftAlign>\r\n//             <FlexColumnLeftAlign>\r\n//               <LeagueSpartanTiny htmlFor=\"emailaddress\">\r\n//                 Email Address\r\n//               </LeagueSpartanTiny>\r\n//               <TextInputReusable\r\n//                 type=\"email\"\r\n//                 id=\"emailaddress\"\r\n//                 placeholder={\"Email Address\"}\r\n//                 defaultValue={newProjectObj.current.Email}\r\n//                 onChange={(e) => {\r\n//                   newProjectObj.current.Email = e.target.value;\r\n//                 }}\r\n//               ></TextInputReusable>\r\n//             </FlexColumnLeftAlign>\r\n//           </FlexRowContAutox100PercentMobileColumn>\r\n\r\n//           <FlexRowContAutox100PercentMobileColumn>\r\n//             <FlexColumnLeftAlign>\r\n//               <LeagueSpartanTiny htmlFor=\"type\">\r\n//                 Home Type (Single Family, Townhouse, etc.)\r\n//               </LeagueSpartanTiny>\r\n//               <TextInputReusable\r\n//                 id=\"type\"\r\n//                 placeholder={\"Home Type\"}\r\n//                 defaultValue={newProjectObj.current.PropertyType}\r\n//                 onChange={(e) => {\r\n//                   newProjectObj.current.PropertyType = e.target.value;\r\n//                 }}\r\n//               ></TextInputReusable>\r\n//             </FlexColumnLeftAlign>\r\n//             <FlexColumnLeftAlign>\r\n//               <LeagueSpartanTiny htmlFor=\"details\">\r\n//                 Notes\r\n//               </LeagueSpartanTiny>\r\n//               <TextInputReusable\r\n//                 type=\"email\"\r\n//                 id=\"details\"\r\n//                 placeholder={\"Notes\"}\r\n//                 defaultValue={newProjectObj.current.Details}\r\n//                 onChange={(e) => {\r\n//                   newProjectObj.current.Details = e.target.value;\r\n//                 }}\r\n//               ></TextInputReusable>\r\n//             </FlexColumnLeftAlign>\r\n//           </FlexRowContAutox100PercentMobileColumn>\r\n    \r\n    \r\n//           <FlexRowContAutox100PercentMobileColumn>\r\n//           <FlexColumnLeftAlign>\r\n//               <LeagueSpartanTiny htmlFor=\"metros\">Region</LeagueSpartanTiny>\r\n//               <DatalistMedium\r\n//                 defaultValue={newProjectObj.current.Region}\r\n//                 id=\"metros\"\r\n//                 onChange={(e) => {\r\n//                   SelectMetro(e);\r\n//                   UpdateCityList(e.target.value);\r\n//                 }}\r\n//               >\r\n//                 <DatalistOption value={0} >Select Region</DatalistOption>\r\n//                 {metroList.map((o, i) => (\r\n//                   <DatalistOption\r\n//                     key={o.Id}\r\n//                     value={o.Id}\r\n//                     defaultValue={o.Id === newProjectObj.current.Metro_Id}\r\n//                     selected={o.Id === newProjectObj.current.Metro_Id}\r\n//                   >\r\n//                     {o.Name}\r\n//                   </DatalistOption>\r\n//                 ))}\r\n//               </DatalistMedium>\r\n//             </FlexColumnLeftAlign>\r\n\r\n//             <FlexColumnLeftAlign>\r\n//               <LeagueSpartanTiny htmlFor=\"cities\">City</LeagueSpartanTiny>\r\n    \r\n//               <DatalistMedium\r\n//                 defaultValue={newProjectObj.current.City}\r\n//                 id=\"cities\"\r\n//                 onChange={(e) => {\r\n//                   SelectCity(e);\r\n//                 }}\r\n//               >\r\n//                 <DatalistOption value={0}>Select City</DatalistOption>\r\n//                 {cityList.map((o, i) => (\r\n//                   <DatalistOption\r\n//                     id=\"city\"\r\n//                     defaultValue={o.Id === newProjectObj.current.City_Id}\r\n//                     selected={o.Id === newProjectObj.current.City_Id}\r\n//                     key={o.Id}\r\n//                     value={o.Id}\r\n//                   >\r\n//                     {o.Name}\r\n//                   </DatalistOption>\r\n//                 ))}\r\n//               </DatalistMedium>\r\n//             </FlexColumnLeftAlign>\r\n\r\n//           </FlexRowContAutox100PercentMobileColumn>\r\n    \r\n//           <br></br>\r\n    \r\n//           <FlexColumnCont\r\n//             height=\"8%\"\r\n//             mobilewidth=\"auto\"\r\n//             margin=\"0\"\r\n//             margintop=\"auto\"\r\n//             flexdirection=\"row\"\r\n//             justifycontent=\"space-around\"\r\n//             width=\"100%\"\r\n//           >\r\n//             <GreyNavigationButton\r\n//               onClick={() => {\r\n//                 onClose();\r\n//               }}\r\n//             >\r\n//               Close\r\n//             </GreyNavigationButton>\r\n//             <GreenNavigationButton\r\n//             disabled={isSubmitting}\r\n//               onClick={() => {\r\n//                 DefinePersonalInfo();\r\n//               }}\r\n//             >\r\n//               Submit\r\n//             </GreenNavigationButton>\r\n//           </FlexColumnCont>\r\n//         </Section1>\r\n//                         </EstimatorDiv>\r\n//                     </div>\r\n//                 </div>\r\n//             )}\r\n//         </>\r\n//     );\r\n//             }\r\n\r\n// QuickProjectForm.defaultProps = {\r\n//     onChange: () => {},\r\n//     onPreview: () => {},\r\n//     onClose: () => {},\r\n//     onPersonalInfo: () => {},\r\n//     fullName: \"\",\r\n//     addressofUser: \"\",\r\n//     emailofUser: \"\",\r\n//     phoneofUser: \"\",\r\n//   };\r\n\r\n// export default QuickProjectForm;\r\n\r\n/* eslint-disable */\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport styled from \"styled-components\";\r\n\r\nimport {\r\n  GetCityList,\r\n  GetMetroList,\r\n} from \"../../../API_Functions/Utility_Functions\";\r\nimport { AddCaseOBO, SetCaseTo_Submit } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { GetStoreByMetro } from \"../../../API_Functions/Store_Functions\";\r\n\r\n// Keep this import as requested:\r\nimport { EstimatorDiv } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport IconButton from \"../../IconButton\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\n/**\r\n * \r\n * Apple-Inspired Minimal Styling\r\n * \r\n * By design, Apple likes a clean, spacious, and slightly translucent or \r\n * well-contrasted look, with subtle shadows, and minimal borders. \r\n * The following components are an example approach.\r\n * \r\n */\r\n\r\nconst SpinnerContainer = styled.div`\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n`;\r\n\r\nconst Spinner = styled.div`\r\n  width: 24px;\r\n  height: 24px;\r\n  border: 3px solid #ccc;\r\n  border-top: 3px solid #007aff;\r\n  border-radius: 50%;\r\n  animation: spin 1s linear infinite;\r\n\r\n  @keyframes spin {\r\n    0%   { transform: rotate(0deg); }\r\n    100% { transform: rotate(360deg); }\r\n  }\r\n`;\r\n\r\n// Overlay for the modal (dimming background)\r\nconst ModalOverlay = styled.div`\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background-color: rgba(0, 0, 0, 0.3);\r\n  z-index: 1000;\r\n`;\r\n\r\n// Centered container for the modal\r\nconst ModalContainer = styled.div`\r\n  position: fixed;\r\n  top: 50%;\r\n  left: 50%;\r\n  transform: translate(-50%, -50%);\r\n  background-color: #ffffff;\r\n  width: 90%;\r\n  max-width: 600px;\r\n  border-radius: 16px;\r\n  box-shadow: 0 8px 30px rgba(0,0,0,0.12);\r\n  padding: 40px;\r\n  padding-top: 120px;\r\n  padding-bottom: 120px;\r\n  z-index: 1001;\r\n  overflow-y: auto;\r\n  -webkit-overflow-scrolling: touch;\r\n\r\n  /* By default on desktop, let height be as big as content requires */\r\n  height: auto;\r\n  max-height: 90vh; \r\n    /* This ensures it won't exceed the viewport height on large screens, \r\n       but normally it'll size to fit content. Remove if you don't want any cap. */\r\n\r\n  /* On mobile, force it to be 90vh */\r\n  @media (max-width: 600px) {\r\n    height: 90vh;\r\n  }\r\n`;\r\n\r\n\r\n// Basic heading style\r\nconst AppleHeading = styled.h2`\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen,\r\n    Ubuntu, Cantarell, \"Open Sans\", \"Helvetica Neue\", sans-serif;\r\n  color: #000;\r\n  font-size: 22px;\r\n  margin: 0 0 24px 0;\r\n`;\r\n\r\n// Error text in red\r\nconst ErrorText = styled.p`\r\n  color: #d92b2b;\r\n  font-size: 14px;\r\n  margin-bottom: 20px;\r\n`;\r\n\r\n// Flex row container (for your form rows)\r\nconst FormRow = styled.div`\r\n  display: flex;\r\n  flex-direction: row;\r\n  gap: 20px;\r\n  margin-bottom: 20px;\r\n  flex-wrap: wrap;\r\n\r\n  @media (max-width: 600px) {\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\n// Column to hold label + input\r\nconst FormColumn = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  flex: 1 1 45%;\r\n`;\r\n\r\n// Label styled\r\nconst AppleLabel = styled.label`\r\n  font-size: 14px;\r\n  font-weight: 500;\r\n  margin-bottom: 6px;\r\n  color: #333;\r\n`;\r\n\r\n// Apple-like input style\r\nconst AppleInput = styled.input`\r\n  font-size: 16px;\r\n  padding: 10px 12px;\r\n  border: 1px solid #ccd1d9;\r\n  border-radius: 8px;\r\n  background-color: #fdfdfd;\r\n  margin-bottom: 2px;\r\n\r\n  &:focus {\r\n    outline: none;\r\n    border-color: #007aff; // Apple's signature blue\r\n    box-shadow: 0 0 0 2px rgba(0,122,255,0.2);\r\n  }\r\n`;\r\n\r\n// Apple-like select (datalist replacement)\r\nconst AppleSelect = styled.select`\r\n  font-size: 16px;\r\n  padding: 10px 12px;\r\n  border: 1px solid #ccd1d9;\r\n  border-radius: 8px;\r\n  background-color: #fdfdfd;\r\n\r\n  &:focus {\r\n    outline: none;\r\n    border-color: #007aff;\r\n    box-shadow: 0 0 0 2px rgba(0,122,255,0.2);\r\n  }\r\n`;\r\n\r\n// Container for the buttons\r\nconst ButtonRow = styled.div`\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  gap: 12px;\r\n  margin-top: 30px;\r\n`;\r\n\r\n// Grey Button\r\nconst GreyButton = styled.button`\r\n  background-color: #f2f2f2;\r\n  color: #333;\r\n  font-size: 16px;\r\n  border: none;\r\n  border-radius: 8px;\r\n  padding: 10px 20px;\r\n  cursor: pointer;\r\n  font-weight: 500;\r\n\r\n  &:hover {\r\n    background-color: #e2e2e2;\r\n  }\r\n\r\n  &:active {\r\n    background-color: #ccc;\r\n  }\r\n`;\r\n\r\n// Green Button\r\nconst GreenButton = styled.button`\r\n  background-color: #34c759;\r\n  color: #fff;\r\n  font-size: 16px;\r\n  border: none;\r\n  border-radius: 8px;\r\n  padding: 10px 20px;\r\n  cursor: pointer;\r\n  font-weight: 500;\r\n\r\n  &:hover {\r\n    background-color: #28a745;\r\n  }\r\n\r\n  &:active {\r\n    background-color: #218838;\r\n  }\r\n\r\n  &:disabled {\r\n    opacity: 0.6;\r\n    cursor: not-allowed;\r\n  }\r\n`;\r\n\r\n/**\r\n * The QuickProjectForm Component\r\n */\r\nconst QuickProjectForm = ({ open, onNext, onBack, onPreview, onPersonalInfo, onClose }) => {\r\n  const [isModalOpen, setIsModalOpen] = useState(true);\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  const [Title, setTitle] = useState(\"\");\r\n  const [homeownerUsername, setHomeownerUsername] = useState(\"\");\r\n  const [cityList, setCityList] = useState([]);\r\n  const [metroList, setMetroList] = useState([]);\r\n  const [ErrorMsg, setErrorMsg] = useState(\"\");\r\n  const [name, setName] = useState(\"\");\r\n  const [isSubmitting, setIsSubmitting] = useState(false);\r\n\r\n  let newProjectObj = useRef({\r\n    FullName: \"\",\r\n    Email: \"\",\r\n    StreetAddress: \"\",\r\n    City: \"\",\r\n    City_Id: 0,\r\n    Region: \"\",\r\n    Metro_Id: 0,\r\n    Phone: \"\",\r\n    PropertyType: \"\",\r\n    Details: \"\",\r\n    RequestName: \"\",\r\n  });\r\n\r\n  // Fetch location info on mount\r\n  const GetLocationInfo = async () => {\r\n    let metrodata = await GetMetroList();\r\n    // If newProjectObj.current.Metro_Id was set, load city data\r\n    let citydata = [];\r\n    if (newProjectObj.current.Metro_Id !== 0) {\r\n      citydata = await GetCityList(newProjectObj.current.Metro_Id);\r\n    }\r\n    setMetroList(metrodata);\r\n    setCityList(citydata);\r\n  };\r\n\r\n  // Update city list if region changes\r\n  const UpdateCityList = async (metroid) => {\r\n    if (metroid !== 0 && metroid !== 3) {\r\n      newProjectObj.current.City = \"\";\r\n      newProjectObj.current.City_Id = 0;\r\n      let citydata = await GetCityList(metroid);\r\n      setCityList(citydata);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetLocationInfo();\r\n    // eslint-disable-next-line\r\n  }, []);\r\n\r\n  const SelectCity = (e) => {\r\n    newProjectObj.current.City_Id = e.target.value;\r\n    const selectedCity = cityList.find(\r\n      (o) => o.Id === Number(e.target.value)\r\n    );\r\n    if (selectedCity) {\r\n      newProjectObj.current.City = selectedCity.Name;\r\n    }\r\n  };\r\n\r\n  const SelectMetro = (e) => {\r\n    newProjectObj.current.Metro_Id = e.target.value;\r\n    const selectedMetro = metroList.find(\r\n      (o) => o.Id === Number(e.target.value)\r\n    );\r\n    if (selectedMetro) {\r\n      newProjectObj.current.Region = selectedMetro.Name;\r\n    }\r\n  };\r\n\r\n  /**\r\n   *  Submits to Zapier (or your endpoint) then navigates away\r\n   */\r\n  const DefinePersonalInfo = async () => {\r\n    if (isSubmitting) return; // Prevent multiple clicks if already submitting\r\n\r\n    setIsSubmitting(true); \r\n    try {\r\n      // We assume user info is stored in sessionStorage (per your logic).\r\n      newProjectObj.current.RequestName = JSON.parse(\r\n        sessionStorage.getItem(\"userInfo\")\r\n      )?.Name;\r\n\r\n      const automationData = newProjectObj.current;\r\n      // Send to your backend\r\n      await axios.post(window.$DBURL + \"/users/forwardToZapier\", automationData);\r\n\r\n      // On success, navigate to home or close the modal\r\n      history.push(\"/home\");\r\n    } catch (error) {\r\n      console.error(\"Error sending data to backend:\", error);\r\n      setErrorMsg(\"An error occurred, please try again.\");\r\n    } finally {\r\n      setIsSubmitting(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <>\r\n      {open && (\r\n        <ModalOverlay>\r\n          <ModalContainer>\r\n            {/* Keep the EstimatorDiv as requested */}\r\n            {/* <EstimatorDiv> */}\r\n              <AppleHeading>Create a Project for a Homeowner</AppleHeading>\r\n              {ErrorMsg && <ErrorText>{ErrorMsg}</ErrorText>}\r\n\r\n              {/* \r\n                We group form fields in rows for a more Apple-like minimal layout\r\n              */}\r\n\r\n              {/* FULL NAME + ADDRESS */}\r\n              <FormRow>\r\n                <FormColumn>\r\n                  <AppleLabel htmlFor=\"name\">Full Name</AppleLabel>\r\n                  <AppleInput\r\n                    id=\"name\"\r\n                    placeholder=\"Full Name\"\r\n                    onChange={(e) => {\r\n                      newProjectObj.current.FullName = e.target.value;\r\n                    }}\r\n                  />\r\n                </FormColumn>\r\n\r\n                <FormColumn>\r\n                  <AppleLabel htmlFor=\"address\">Address</AppleLabel>\r\n                  <AppleInput\r\n                    id=\"address\"\r\n                    placeholder=\"Address\"\r\n                    onChange={(e) => {\r\n                      newProjectObj.current.StreetAddress = e.target.value;\r\n                    }}\r\n                  />\r\n                </FormColumn>\r\n              </FormRow>\r\n\r\n              {/* PHONE + EMAIL */}\r\n              <FormRow>\r\n                <FormColumn>\r\n                  <AppleLabel htmlFor=\"phone\">Phone Number</AppleLabel>\r\n                  <AppleInput\r\n                    id=\"phone\"\r\n                    type=\"tel\"\r\n                    placeholder=\"Phone Number\"\r\n                    onChange={(e) => {\r\n                      newProjectObj.current.Phone = e.target.value;\r\n                    }}\r\n                  />\r\n                </FormColumn>\r\n\r\n                <FormColumn>\r\n                  <AppleLabel htmlFor=\"email\">Email Address</AppleLabel>\r\n                  <AppleInput\r\n                    id=\"email\"\r\n                    type=\"email\"\r\n                    placeholder=\"Email Address\"\r\n                    onChange={(e) => {\r\n                      newProjectObj.current.Email = e.target.value;\r\n                    }}\r\n                  />\r\n                </FormColumn>\r\n              </FormRow>\r\n\r\n              {/* PROPERTY TYPE + DETAILS */}\r\n              <FormRow>\r\n                <FormColumn>\r\n                  <AppleLabel htmlFor=\"type\">\r\n                    Home Type (Single Family, Townhouse, etc.)\r\n                  </AppleLabel>\r\n                  <AppleInput\r\n                    id=\"type\"\r\n                    placeholder=\"Home Type\"\r\n                    onChange={(e) => {\r\n                      newProjectObj.current.PropertyType = e.target.value;\r\n                    }}\r\n                  />\r\n                </FormColumn>\r\n\r\n                <FormColumn>\r\n                  <AppleLabel htmlFor=\"details\">Notes</AppleLabel>\r\n                  <AppleInput\r\n                    id=\"details\"\r\n                    placeholder=\"Notes\"\r\n                    onChange={(e) => {\r\n                      newProjectObj.current.Details = e.target.value;\r\n                    }}\r\n                  />\r\n                </FormColumn>\r\n              </FormRow>\r\n\r\n              {/* REGION + CITY */}\r\n              <FormRow>\r\n                <FormColumn>\r\n                  <AppleLabel htmlFor=\"metros\">Region</AppleLabel>\r\n                  <AppleSelect\r\n                    id=\"metros\"\r\n                    onChange={(e) => {\r\n                      SelectMetro(e);\r\n                      UpdateCityList(e.target.value);\r\n                    }}\r\n                  >\r\n                    <option value={0}>Select Region</option>\r\n                    {metroList.map((metro) => (\r\n                      <option\r\n                        key={metro.Id}\r\n                        value={metro.Id}\r\n                        selected={metro.Id === newProjectObj.current.Metro_Id}\r\n                      >\r\n                        {metro.Name}\r\n                      </option>\r\n                    ))}\r\n                  </AppleSelect>\r\n                </FormColumn>\r\n\r\n                <FormColumn>\r\n                  <AppleLabel htmlFor=\"cities\">City</AppleLabel>\r\n                  <AppleSelect\r\n                    id=\"cities\"\r\n                    onChange={(e) => SelectCity(e)}\r\n                  >\r\n                    <option value={0}>Select City</option>\r\n                    {cityList.map((city) => (\r\n                      <option\r\n                        key={city.Id}\r\n                        value={city.Id}\r\n                        selected={city.Id === newProjectObj.current.City_Id}\r\n                      >\r\n                        {city.Name}\r\n                      </option>\r\n                    ))}\r\n                  </AppleSelect>\r\n                </FormColumn>\r\n              </FormRow>\r\n\r\n              {/* BUTTONS */}\r\n              <ButtonRow>\r\n                <IconButton bgcolor={ColorPalette.PrimaryGrey} onClick={() => {\r\n                    setIsModalOpen(false);\r\n                    onClose();\r\n                  }}>Close</IconButton>\r\n                  {isSubmitting ? (\r\n                <SpinnerContainer>\r\n                  <Spinner />\r\n                  <span>Submitting...</span>\r\n                </SpinnerContainer>\r\n              ) : (\r\n                <IconButton\r\n                  onClick={DefinePersonalInfo}\r\n                  src=\"/whiteplus_icon.svg\"\r\n                >\r\n                  Submit\r\n                </IconButton>\r\n              )}\r\n              </ButtonRow>\r\n            {/* </EstimatorDiv> */}\r\n          </ModalContainer>\r\n        </ModalOverlay>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n\r\nQuickProjectForm.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onClose: () => {},\r\n  onPersonalInfo: () => {},\r\n  fullName: \"\",\r\n  addressofUser: \"\",\r\n  emailofUser: \"\",\r\n  phoneofUser: \"\",\r\n};\r\n\r\nexport default QuickProjectForm;\r\n\r\n\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport styled from \"styled-components\";\r\nimport { GetUserCases } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport MobileSlideMenu from \"../../../comps/MobileSlideMenu\";\r\nimport { GreenButtonWidth12VWHeight40 } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport {\r\n  Cont17vw0vh,\r\n  FlexColumnCont70x18PercentAlignLeft,\r\n  FlexColumnCont80x100Percent,\r\n  FlexColumnCont80x10PercentAlignLeft,\r\n  FlexColumnCont98x50PercentJustifyLeft,\r\n  FlexColumnCont98xAutoFlexEnd,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnContFullWidthOverflowY,\r\n  FlexRowContAutox100Percent,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { Icon30x30 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  CircularImage125px,\r\n  Icon,\r\n  Icon20x80Percent,\r\n  MenuCont,\r\n  MenuNRCLogo,\r\n  MobileIcon100x130Percent,\r\n  SmallHeader,\r\n} from \"../../../StylesheetComps/Menu\";\r\nimport { StyledHRPropColour } from \"../../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../../StylesheetComps/UserRoles\";\r\nimport IconButton from \"../../IconButton\";\r\nimport QuickProjectForm from \"../../Windows/AddProjectOBO\";\r\n\r\nconst MobileFlexMenu = styled.div`\r\n  justify-content: space-around;\r\n  position: fixed;\r\n  width: 100%;\r\n  bottom: 0;\r\n  height: 60px;\r\n  display: none;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n  }\r\n`;\r\n\r\nconst SecDiv = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  height: 90%;\r\n  justify-content: center;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n  align-items: center;\r\n`;\r\n\r\nconst MobileLinkText = styled.p`\r\n  display: none;\r\n  @media (max-width: 1006px) {\r\n    font-family: LeagueSpartan-Bold;\r\n    display: block;\r\n    font-size: 10px;\r\n    color: #333;\r\n    z-index: 1001;\r\n    left: 2px;\r\n  }\r\n`;\r\n\r\nconst StyledLink = styled(Link)`\r\n  color: black;\r\n  &:hover {\r\n    color: #606060;\r\n  }\r\n`;\r\n\r\nconst Menu = () => {\r\n  const history = useHistory();\r\n\r\n  const [userName, setUserName] = useState(\"\");\r\n  const [userId, setUserId] = useState(\"\");\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [metroId, setMetroId] = useState(0);\r\n  const [storeId, setStoreId] = useState(0);\r\n  const [profileIconUrl, setProfileIconUrl] = useState(\"/PersonIcon.svg\");\r\n  const [moreToggle, setMoreToggle] = useState(false);\r\n  const [displayMetro, setDisplayMetro] = useState(\"none\");\r\n  const [displayStoreCalendar, setDisplayStoreCalendar] = useState(\"none\");\r\n  const [displayInstallers, setDisplayInstallers] = useState(\"none\");\r\n  const [displayWorkders, setDisplayWorkers] = useState(\"none\");\r\n  //const [displayBilling, setDisplayBilling] = useState(\"none\");\r\n  const [displayClockSum, setDisplayClocksum] = useState(\"none\");\r\n  const [displaySchedule, setDisplayschedule] = useState(\"none\");\r\n  const [displayStoreProjects, setDisplaystoreprojects] = useState(\"none\");\r\n  const [displayStoreManagement, setDisplaystoremanagement] = useState(\"none\");\r\n  const [displayBidding, setDisplaybidding] = useState(\"none\");\r\n  const [displayHoursetup, setDisplayHoursetup] = useState(\"none\");\r\n  const [displayClockInout, setDisplayClockinout] = useState(\"none\");\r\n  const [displayClockRecord, setDisplayClockrecord] = useState(\"none\");\r\n  const [displayMySchedule, setDisplayMyschedule] = useState(\"none\");\r\n  const [displayCalendar, setDisplayCalendar] = useState(\"none\");\r\n  const [displayQuickProject, setDisplayQuickProject] = useState(\"none\");\r\n  const [displayQuickProjectButton, setDisplayQuickProjectButton] = useState(\"none\");\r\n\r\n  const Logout = async (userId) => {\r\n    const resp = await axios.post(\r\n      `${window.$DBURL}users/${userId}/session/logout`\r\n    );\r\n    if (resp.status === 200) {\r\n      axios.defaults.headers.common[\"Authorization\"] = \"\";\r\n      sessionStorage.removeItem(\"token\");\r\n      history.push(\"/\");\r\n    }\r\n  };\r\n\r\n  const CheckStoreEstimates = async (metroId, storeId) => {\r\n    const resp = await axios.get(`${window.$DBURL}store/metro/${metroId}`);\r\n    if (\r\n      resp.status === 200 &&\r\n      resp.data !== null &&\r\n      resp.data.stores !== null\r\n    ) {\r\n      if (storeId === 0) {\r\n        if (resp.data.stores.length !== 1) {\r\n          history.push(`/storelistestimate/${metroId}`);\r\n        } else {\r\n          history.push(`/estimate/${metroId}/${resp.data.stores[0].Id}`);\r\n        }\r\n      } else {\r\n        history.push(`/estimate/${metroId}/${storeId}`);\r\n      }\r\n    }\r\n  };\r\n\r\n  const CheckInstallers = async (metroId, storeId) => {\r\n    const resp = await axios.get(`${window.$DBURL}store/metro/${metroId}`);\r\n    if (\r\n      resp.status === 200 &&\r\n      resp.data !== null &&\r\n      resp.data.stores !== null\r\n    ) {\r\n      if (storeId === 0) {\r\n        if (resp.data.stores.length !== 1) {\r\n          history.push(`/storelistinstallers/${metroId}`);\r\n        } else {\r\n          history.push(`/storeinstallers/${metroId}/${resp.data.stores[0].Id}`);\r\n        }\r\n      } else {\r\n        history.push(`/storeinstallers/${metroId}/${storeId}`);\r\n      }\r\n    }\r\n  };\r\n\r\n  const RedirectUserToHome = async () => {\r\n    // Fetch the user's cases using their ID from session storage\r\n    const data = await GetUserCases(\r\n      JSON.parse(sessionStorage.getItem(\"userInfo\")).Id\r\n    );\r\n\r\n    // If the data is not null, check if the user has any cases or if the window is a mobile device\r\n    if (data !== null) {\r\n      if (data.Cases.length > 0 || window.$ISMOBILE === true) {\r\n        // Redirect to the home page\r\n        history.push(\"/home\");\r\n      } else {\r\n        // Redirect to the home page\r\n        history.push(\"/home\");\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    var user = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    if (user != null) {\r\n      setUserName(user.Username);\r\n      setRoleNum(user.Role);\r\n      setMetroId(user.Metro_Id);\r\n      setStoreId(user.Store_Id);\r\n      setUserId(user.Id);\r\n      if (user.Image !== null) {\r\n        setProfileIconUrl(window.$IMGURL + user.Image);\r\n      }\r\n      if(user.Role === UserRole.Manager)\r\n      {      \r\n        setDisplayClocksum(\"flex\");\r\n        setDisplayInstallers(\"flex\");\r\n        setDisplayStoreCalendar(\"flex\");\r\n        setDisplayWorkers(\"flex\");\r\n        setDisplayschedule(\"flex\");\r\n        setDisplaystoreprojects(\"flex\");\r\n        setDisplaystoremanagement(\"flex\");\r\n        setDisplaybidding(\"flex\");\r\n        setDisplayQuickProjectButton('flex')\r\n      }\r\n      else if(user.Role === UserRole.Admin)\r\n      {\r\n        setDisplayMetro(\"flex\");\r\n      }\r\n      else if(user.Role === UserRole.Installer)\r\n      {\r\n        setDisplayClocksum(\"flex\");\r\n        setDisplayWorkers(\"flex\");\r\n        setDisplaybidding(\"flex\");\r\n        setDisplayHoursetup(\"flex\");\r\n      }\r\n      else if(user.Role === UserRole.Worker)\r\n      {\r\n        setDisplayClocksum(\"flex\");\r\n        setDisplayClockinout(\"flex\");\r\n        setDisplayClockrecord(\"flex\");\r\n        setDisplayMyschedule(\"flex\");\r\n      }\r\n      else if(user.Role === UserRole.Accountant)\r\n      {\r\n        setDisplayClocksum(\"flex\");\r\n        setDisplayWorkers(\"flex\");\r\n        setDisplayschedule(\"flex\");\r\n        setDisplaystoreprojects(\"flex\");\r\n      }\r\n      else if(user.Role === UserRole.Estimator)\r\n      {\r\n        setDisplaystoreprojects(\"flex\");\r\n        setDisplaybidding(\"flex\");\r\n        setDisplayQuickProjectButton('flex')\r\n      }\r\n      /* else if(user.Role === UserRole.Manager)\r\n      {\r\n        setDisplayClocksum(\"flex\");\r\n        setDisplayInstallers(\"flex\");\r\n        setDisplayMetro(\"flex\");\r\n        setDisplayStoreCalendar(\"flex\");\r\n        setDisplayWorkers(\"flex\");\r\n        setDisplayschedule(\"flex\");\r\n        setDisplaystoreprojects(\"flex\");\r\n        setDisplaystoremanagement(\"flex\");\r\n        setDisplaybidding(\"flex\");\r\n        setDisplayHoursetup(\"flex\");\r\n      } */\r\n\r\n    }\r\n  }, []);\r\n\r\n  if (roleNum !== 1000) {\r\n    return (\r\n      <div>\r\n        {\" \"}\r\n        {/* <Cont17vw0vh> */}\r\n          <MobileSlideMenu\r\n            open={moreToggle}\r\n            onCloseMenu={() => {\r\n              setMoreToggle(false);\r\n            }}\r\n          ></MobileSlideMenu>\r\n\r\n          <div style={{display:displayQuickProject}}>\r\n          <QuickProjectForm open={displayQuickProject === 'flex' ? true : false} onClose={()=>{setDisplayQuickProject('none')}}></QuickProjectForm>\r\n          </div>\r\n\r\n          {/* <MobileFlexMenu>\r\n            <SecDiv>\r\n              <StyledLink\r\n                onClick={() => {\r\n                  history.push(\"/home\");\r\n                }}\r\n                to={\"#\"}\r\n                className=\"nav\"\r\n                style={{ textDecoration: \"none\" }}\r\n              >\r\n                <MobileIcon100x130Percent\r\n                  src={\"/Dashboard.png\"}\r\n                ></MobileIcon100x130Percent>\r\n              </StyledLink>\r\n              <MobileLinkText>Home</MobileLinkText>\r\n            </SecDiv>\r\n\r\n            <SecDiv>\r\n              <StyledLink\r\n                to={\"/CasesPersonal/\" + metroId + \"/\" + storeId}\r\n                className=\"nav\"\r\n                style={{ textDecoration: \"none\" }}\r\n              >\r\n                <MobileIcon100x130Percent\r\n                  src={\"/Projects.png\"}\r\n                ></MobileIcon100x130Percent>\r\n              </StyledLink>\r\n              <MobileLinkText>Projects</MobileLinkText>\r\n            </SecDiv>\r\n                \r\n            <SecDiv>\r\n              <StyledLink\r\n                to={\"/calendar\"}\r\n                className=\"nav\"\r\n                style={{ textDecoration: \"none\" }}\r\n              >\r\n                <MobileIcon100x130Percent\r\n                  src={\"/Calendar_Icon.png\"}\r\n                ></MobileIcon100x130Percent>\r\n              </StyledLink>\r\n              <MobileLinkText>Calendar</MobileLinkText>\r\n            </SecDiv>\r\n\r\n            <SecDiv>\r\n              <StyledLink\r\n                to={\"#\"}\r\n                onClick={() => {\r\n                  history.push(\"/billing\");\r\n                }}\r\n                className=\"nav\"\r\n                style={{ textDecoration: \"none\" }}\r\n              >\r\n                <MobileIcon100x130Percent\r\n                  src={\"/Billing_Icon.png\"}\r\n                ></MobileIcon100x130Percent>\r\n              </StyledLink>\r\n              <MobileLinkText>Billing</MobileLinkText>\r\n            </SecDiv>\r\n          </MobileFlexMenu> */}\r\n        {/* </Cont17vw0vh> */}\r\n        <MenuCont mobiledisplay=\"none\">\r\n          <MenuNRCLogo\r\n            onClick={() => {\r\n              history.push(\"/home\");\r\n            }}\r\n            src=\"/newrhodeslogo.svg\"\r\n          ></MenuNRCLogo>\r\n\r\n          <br></br>\r\n\r\n          <FlexColumnContCenterAlign>\r\n            <CircularImage125px src={profileIconUrl}></CircularImage125px>\r\n            <SmallHeader>{userName}</SmallHeader>\r\n            <SmallHeader\r\n              fontsize=\"14px\"\r\n              color=\"#797979\"\r\n              cursor=\"pointer\"\r\n              onClick={() => {\r\n                history.push(\"/profile\");\r\n              }}\r\n            >\r\n              View Profile\r\n            </SmallHeader>\r\n          </FlexColumnContCenterAlign>\r\n          <br></br>\r\n\r\n          <FlexColumnCont98x50PercentJustifyLeft>\r\n            {/* <GreenButtonWidth12VWHeight40\r\n              bgcolor={ColorPalette.PrimaryButtonBlue}\r\n              onClick={() => {\r\n                CheckStoreEstimates(metroId, storeId);\r\n              }}\r\n            >\r\n              New Project\r\n            </GreenButtonWidth12VWHeight40> */}\r\n\r\n            {/* <br></br> */}\r\n\r\n              <FlexColumnCont80x10PercentAlignLeft display={displayQuickProjectButton}>\r\n                <FlexRowContAutox100Percent>\r\n                  {/* <Icon20x80Percent\r\n                    src={\"/Landscaper1.svg\"}\r\n                  ></Icon20x80Percent> */}\r\n                  {/* <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    \r\n                  >\r\n                    New Project\r\n                  </SmallHeader> */}\r\n\r\n                <IconButton width={'200px'} onClick={() => {\r\n                      setDisplayQuickProject('flex')\r\n                    }} text='New Project' src='/whiteplus_icon.svg'></IconButton>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft>\r\n\r\n\r\n\r\n  \r\n            <FlexColumnCont70x18PercentAlignLeft>\r\n              <SmallHeader fontfamily=\"LeagueSpartan-Bold\" fontsize=\"1vw\">\r\n                Navigation\r\n              </SmallHeader>\r\n            </FlexColumnCont70x18PercentAlignLeft>\r\n\r\n            <FlexColumnContFullWidthOverflowY>\r\n              <FlexColumnCont80x10PercentAlignLeft>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Dashboard_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/home\");\r\n                    }}\r\n                  >\r\n                    Book a Site Visit\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft>      \r\n\r\n              <FlexColumnCont80x10PercentAlignLeft>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Projects_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/CasesPersonal/\" + metroId + \"/\" + storeId);\r\n                    }}\r\n                  >\r\n                    Projects\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft>\r\n\r\n              <FlexColumnCont80x10PercentAlignLeft display={displayHoursetup}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/manageavailability.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/installersetup\");\r\n                    }}\r\n                  >\r\n                    Business Hours\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft>\r\n\r\n              <FlexColumnCont80x10PercentAlignLeft display={displayMetro}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent src={\"/metroicon.svg\"}></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/metrolist\");\r\n                    }}\r\n                  >\r\n                    Region Management\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft>\r\n\r\n              <FlexColumnCont80x10PercentAlignLeft display={displayStoreProjects}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Store_Projects_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/cases/\" + metroId + \"/\" + storeId);\r\n                    }}\r\n                  >\r\n                    Store Projects\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft>\r\n\r\n              <FlexColumnCont80x10PercentAlignLeft display={displayStoreManagement}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Store_Management_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/Store/\" + storeId);\r\n                    }}\r\n                  >\r\n                    Store Management\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft>\r\n\r\n              {/* <FlexColumnCont80x10PercentAlignLeft display={displayStoreManagement}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Store_Management_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/Inventory/\" + storeId);\r\n                    }}\r\n                  >\r\n                    Inventory Management\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n\r\n              {/* <FlexColumnCont80x10PercentAlignLeft display={displayBidding}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon30x30\r\n                    marginleft=\"3.5%\"\r\n                    src={\"/BiddingList_Icon.svg\"}\r\n                  ></Icon30x30>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(`/projectbidlist/${metroId}/${storeId}`);\r\n                    }}\r\n                  >\r\n                    Project Bidding\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n\r\n              {/* <FlexColumnCont80x10PercentAlignLeft display={displayCalendar}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Calendar_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/calendar\");\r\n                    }}\r\n                  >\r\n                    Calendar\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n\r\n              {/* <FlexColumnCont80x10PercentAlignLeft>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Billing_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/billing\");\r\n                    }}\r\n                  >\r\n                    Billing\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n\r\n              {/* <FlexColumnCont80x10PercentAlignLeft display={displayStoreCalendar}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Store_Calendar_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/storecalendar/\" + metroId + \"/\" + storeId);\r\n                    }}\r\n                  >\r\n                    Store Calendar\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n{/* \r\n              <FlexColumnCont80x10PercentAlignLeft display={displaySchedule}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Store_Schedule.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/storeschedule\");\r\n                    }}\r\n                  >\r\n                    Store Schedule\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n\r\n              {/* <FlexColumnCont80x10PercentAlignLeft display={displayInstallers}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Installers_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      CheckInstallers(metroId, storeId);\r\n                    }}\r\n                  >\r\n                    View Installers\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n\r\n              {/* <FlexColumnCont80x10PercentAlignLeft display={displayWorkders}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Workers_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/storeworkers\");\r\n                    }}\r\n                  >\r\n                    View Workers\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n{/* \r\n              <FlexColumnCont80x10PercentAlignLeft display={displayClockInout}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent src={\"/clockinout.svg\"}></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/clockinout\");\r\n                    }}\r\n                  >\r\n                    Clock In/Out\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n\r\n              {/* <FlexColumnCont80x10PercentAlignLeft display={displayClockRecord}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/clockrecords.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\r\n                        \"/clockschedule/\" +\r\n                          storeId +\r\n                          \"/\" +\r\n                          userId +\r\n                          \"/\" +\r\n                          roleNum +\r\n                          \"/\" +\r\n                          userName\r\n                      );\r\n                    }}\r\n                  >\r\n                    View Clock Records\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n\r\n              {/* <FlexColumnCont80x10PercentAlignLeft display={displayMySchedule}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/viewmyschedule.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\r\n                        \"/workerschedule/\" +\r\n                          storeId +\r\n                          \"/\" +\r\n                          userId +\r\n                          \"/\" +\r\n                          userName\r\n                      );\r\n                    }}\r\n                  >\r\n                    View My Schedule\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft>\r\n             */}\r\n              {/* <FlexColumnCont80x10PercentAlignLeft display={displayClockSum}>\r\n                <FlexRowContAutox100Percent>\r\n                  <Icon20x80Percent\r\n                    src={\"/Workers_Summary_Icon.svg\"}\r\n                  ></Icon20x80Percent>\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                    onClick={() => {\r\n                      history.push(\"/clockschedulesummary/\" + storeId);\r\n                    }}\r\n                  >\r\n                    Worker Summary\r\n                  </SmallHeader>\r\n                </FlexRowContAutox100Percent>\r\n              </FlexColumnCont80x10PercentAlignLeft> */}\r\n            </FlexColumnContFullWidthOverflowY>\r\n          </FlexColumnCont98x50PercentJustifyLeft>\r\n          <StyledHRPropColour\r\n            border={`0.5px solid ${ColorPalette.PrimaryGrey}`}\r\n          ></StyledHRPropColour>\r\n          <FlexColumnCont98xAutoFlexEnd>\r\n            <FlexColumnCont80x100Percent>\r\n              {/* <FlexRowContAutox100Percent>\r\n                <Icon width=\"20%\" height=\"60%\" src={\"/NRCLogoRegularBlack.png\"}></Icon>\r\n                <a\r\n                  href=\"https://www.newrhodesconstruction.com\"\r\n                  target=\"_blank\"\r\n                  rel=\"noreferrer\"\r\n                >\r\n                  <SmallHeader\r\n                    cursor=\"pointer\"\r\n                    fontsize=\"1vw\"\r\n                    hovercolor={ColorPalette.PrimaryGrey}\r\n                  >\r\n                    NRC Website\r\n                  </SmallHeader>\r\n                </a>\r\n              </FlexRowContAutox100Percent> */}\r\n\r\n              <FlexRowContAutox100Percent>\r\n                <Icon width=\"20%\" height=\"60%\" src={\"/LogOutIcon.svg\"}></Icon>\r\n                <SmallHeader\r\n                  cursor=\"pointer\"\r\n                  fontsize=\"1vw\"\r\n                  hovercolor={ColorPalette.PrimaryGrey}\r\n                  onClick={() => {\r\n                    Logout(userId);\r\n                  }}\r\n                >\r\n                  Log Out\r\n                </SmallHeader>\r\n              </FlexRowContAutox100Percent>\r\n            </FlexColumnCont80x100Percent>\r\n          </FlexColumnCont98xAutoFlexEnd>\r\n        </MenuCont>\r\n      </div>\r\n    );\r\n  }  else {\r\n    return (\r\n      null\r\n    );\r\n  }\r\n};\r\n\r\nMenu.defaultProps = {};\r\n\r\nexport default Menu;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\n\r\nconst InputStyle = styled.input`\r\n  width: ${(props) => (props.inputwidth ? props.inputwidth : \"300px\")};\r\n  height: ${(props) => (props.inputheight ? props.inputheight : \"50px\")};\r\n  border-radius: ${(props) =>\r\n    props.inputborderradius ? props.inputborderradius : \"4px\"};\r\n  background-color: ${(props) =>\r\n    props.inputbgcolor ? props.inputbgcolor : \"#EDEDED\"};\r\n  border-style: ${(props) =>\r\n    props.inputborderstyle ? props.inputborderstyle : \"solid\"};\r\n  border-color: ${(props) =>\r\n    props.inputbordercolor ? props.inputbordercolor : \"#AAAAAA\"};\r\n  border-width: ${(props) =>\r\n    props.inputborderwidth ? props.inputborderwidth : 2};\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"block\")};\r\n  margin: 10px;\r\n  border: 0;\r\n  padding: 18px;\r\n  outline: none;\r\n  font-size: 90%;\r\n  font-family: Futura;\r\n  @media (max-width: 1006px) {\r\n    // font-size:3vh;\r\n  }\r\n`;\r\n\r\nconst Input = ({\r\n  placeholder,\r\n  checked,\r\n  defaultChecked,\r\n  maxLength,\r\n  inputdisplay,\r\n  autoComplete,\r\n  inputwidth,\r\n  inputheight,\r\n  inputborderradius,\r\n  inputbgcolor,\r\n  inputborderstyle,\r\n  inputborderwidth,\r\n  inputbordercolor,\r\n  defaultValue,\r\n  onChange,\r\n  type,\r\n  value,\r\n  Filter,\r\n}) => {\r\n  return (\r\n    <InputStyle\r\n      type={type}\r\n      defaultValue={defaultValue}\r\n      value={value}\r\n      placeholder={placeholder}\r\n      checked={checked}\r\n      defaultChecked={defaultChecked}\r\n      inputheight={inputheight}\r\n      inputwidth={inputwidth}\r\n      inputborderradius={inputborderradius}\r\n      maxLength={maxLength}\r\n      autoComplete={autoComplete}\r\n      inputdisplay={inputdisplay}\r\n      inputbordercolor={inputbordercolor}\r\n      inputbgcolor={inputbgcolor}\r\n      inputborderstyle={inputborderstyle}\r\n      inputborderwidth={inputborderwidth}\r\n      onChange={onChange}\r\n      Filter={Filter}\r\n    ></InputStyle>\r\n  );\r\n};\r\n\r\nInput.defaultProps = {\r\n  inputwidth: \"300px\",\r\n  inputheight: \"50px\",\r\n  inputborderradius: \"4px\",\r\n  inputbgcolor: \"#EDEDED\",\r\n  inputborderstyle: \"solid\",\r\n  inputborderwidth: 0,\r\n  placeholder: \"placeholder\",\r\n  autoComplete: \"new-password\",\r\n  onChange: () => {},\r\n  setUn: () => {},\r\n  setPass: () => {},\r\n};\r\n\r\nexport default Input;\r\n","//Buttons for Mobile View Only\r\nimport styled from \"styled-components\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const MobileSmallGreenButton = styled.div`\r\n  width: 50vw;\r\n  height: 4vh;\r\n  text-align: center;\r\n  font-family: LeagueSpartan-Bold;\r\n  color: white;\r\n  background-color: ${ColorPalette.PrimaryButtonBlue};\r\n  vertical-align: middle;\r\n  font-size: 12px;\r\n  line-height: 4vh;\r\n  cursor: pointer;\r\n  border-radius: 10px;\r\n  transition: 0.3s;\r\n  margin-left: 20px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n`;\r\n\r\nexport const MobileGreenButton = styled.div`\r\n  width: 40vw;\r\n  height: 50px;\r\n  line-height: 50px;\r\n  text-align: center;\r\n  border-radius: 10px;\r\n  color: white;\r\n  margin-left: 20px;\r\n  vertical-align: middle;\r\n  background-color: ${ColorPalette.PrimaryButtonBlue};\r\n  font-family: LeagueSpartan-Bold;\r\n  font-size: 18px;\r\n`;\r\n\r\nexport const MobileWideGreenButton = styled.div`\r\n  width: 60vw;\r\n  height: 50px;\r\n  line-height: 50px;\r\n  text-align: center;\r\n  border-radius: 10px;\r\n  color: white;\r\n  vertical-align: middle;\r\n  background-color: ${ColorPalette.PrimaryButtonBlue};\r\n  font-family: LeagueSpartan-Bold;\r\n  font-size: 18px;\r\n`;\r\n\r\nexport const MobileWideGreenButtonRelative = styled.div`\r\n  width: 80vw;\r\n  height: 50px;\r\n  position: relative;\r\n  left: 10%;\r\n  bottom: 5px;\r\n  line-height: 50px;\r\n  text-align: center;\r\n  border-radius: 10px;\r\n  color: white;\r\n  vertical-align: middle;\r\n  background-color: ${ColorPalette.PrimaryButtonBlue};\r\n  font-family: LeagueSpartan-Bold;\r\n  font-size: 18px;\r\n`;\r\n\r\nexport default nullProp;\r\n","import styled from \"styled-components\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const MobileInput = styled.input`\r\n  display: ${(props) => (props.display ? props.display : \"\")};\r\n  font-family: Avenir;\r\n  font-size: 12px;\r\n  width: 300px;\r\n  border-radius: 4px;\r\n  background-color: #ededed;\r\n  border-style: none;\r\n  margin: 2px;\r\n  margin-left: 5px;\r\n  padding: 10px;\r\n`;\r\n\r\nexport default nullProp;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport {\r\n  GetCityList,\r\n  GetMetroList,\r\n  UploadFileToCloud,\r\n} from \"../../API_Functions/Utility_Functions\";\r\nimport Input from \"../../comps/Input\";\r\nimport { MobileSmallGreenButton } from \"../../MobileComponents/Buttons\";\r\nimport { MobileInput } from \"../../MobileComponents/Inputs\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  Cont100Percent100Percent,\r\n  FlexDiv,\r\n  FlexRowCont60PercentSpaceEvenly,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  DatalistMedium,\r\n  DatalistOption,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { RegularTextBoldRed } from \"../../StylesheetComps/Titles\";\r\n\r\nconst LeftFormField = styled.div`\r\n  width: 100%;\r\n  height: 100%;\r\n  margin: 2%;\r\n\r\n  @media (max-width: 1006px) {\r\n    margin: 0%;\r\n    width: 100%;\r\n    height: 50%;\r\n  }\r\n`;\r\n\r\nconst FormLabel = styled.label`\r\n  font-size: 18px;\r\n  font-family: Avenir;\r\n  font-weight: bold;\r\n  margin: 10px;\r\n  width: 100px;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n  @media (max-width: 1006px) {\r\n    width: 75px;\r\n    font-size: 14px;\r\n  }\r\n`;\r\n\r\nconst ProfilePara = styled.p`\r\n  font-size: 18px;\r\n  font-family: Avenir;\r\n  margin: 10px;\r\n  width: 80%;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n  @media (max-width: 1006px) {\r\n    width: 160px;\r\n    margin-right: 30px;\r\n    word-break: break-all;\r\n    font-size: 14px;\r\n  }\r\n`;\r\n\r\nconst UpdateProfileButton = styled.div`\r\n  padding: 10px;\r\n  border-radius: ${(props) =>\r\n    props.buttonborderradius ? props.buttonborderradius : \"10px\"};\r\n  background-color: ${(props) =>\r\n    props.buttonbgcolor ? props.buttonbgcolor : ColorPalette.PrimaryButtonBlue};\r\n  color: ${(props) => (props.buttoncolor ? props.buttoncolor : \"white\")};\r\n  font-size: 18px;\r\n  display: flex;\r\n  /* flex-direction: column;*/\r\n  align-items: center;\r\n  justify-content: center;\r\n  font-family: Avenir;\r\n  margin-left: 0.5%;\r\n  margin-top: 15px;\r\n  text-align: center;\r\n  cursor: pointer;\r\n  @media (max-width: 1006px) {\r\n    width: 70%;\r\n    height: 7%;\r\n    position: relative;\r\n    bottom: 10%;\r\n  }\r\n`;\r\n\r\nconst UpdatePass = styled.a`\r\n  font-family: Avenir;\r\n  font-size: 100%;\r\n  text-decoration: underline;\r\n  color: blue;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  cursor: pointer;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n  @media (max-width: 1006px) {\r\n    font-size: 12px;\r\n  }\r\n`;\r\n\r\nconst SecDiv = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  width: 100%;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n  padding-top: 15px;\r\n  padding-bottom: 15px;\r\n`;\r\n\r\nconst PhotoCont = styled.img`\r\n  height: 150px;\r\n  display: ${(props) => (props.photoprops1 ? props.photoprops1 : \"block\")};\r\n  object-fit: contain;\r\n  @media (max-width: 1006px) {\r\n    height: 100%;\r\n    margin-top: 0%;\r\n  }\r\n`;\r\n\r\nconst FormDivider = styled.div`\r\n  display: flex;\r\n  height: 18vh;\r\n  width: 81.5%;\r\n  @media (max-width: 1006px) {\r\n    width: 200px;\r\n  }\r\n`;\r\n\r\nconst FileUpload = styled.input`\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nconst ProfileHR = styled.hr`\r\n  width: 100%;\r\n  border: 1px solid #d3d3d3;\r\n`;\r\n\r\nconst EditDiv = styled.div`\r\n  display: ${(props) => (props.displayprop ? props.displayprop : \"flex\")};\r\n  flex-direction: column;\r\n  padding-top: 25px;\r\n`;\r\n\r\nconst UpdateProfile = ({\r\n  onPreview,\r\n  CallProfileAgain,\r\n  onProfileUpdated,\r\n  metro,\r\n  city,\r\n  name,\r\n  address,\r\n  email,\r\n  phone,\r\n  role,\r\n  updated,\r\n  editprofile,\r\n}) => {\r\n  const [emailValue, setEmailValue] = useState(\"\");\r\n  const [NameValue, setNameValue] = useState(\"\");\r\n  const [AddressValue, setAddressValue] = useState(\"\");\r\n  const [PhoneValue, setPhoneValue] = useState(\"\");\r\n\r\n  const [editDisplay, setEditDisplay] = useState(\"none\");\r\n\r\n  const [emailValue2, setEmailValue2] = useState(\"\");\r\n  const [NameValue2, setNameValue2] = useState(\"\");\r\n  const [AddressValue2, setAddressValue2] = useState(\"\");\r\n  const [PhoneValue2, setPhoneValue2] = useState(\"\");\r\n\r\n  const [ChangePropMetro, setChangePropMetro] = useState(\"Add\");\r\n  const [ChangePropCity, setChangePropCity] = useState(\"Add\");\r\n  const [ChangePropName, setChangePropName] = useState(\"Edit\");\r\n  const [ChangePropEmail, setChangePropEmail] = useState(\"Edit\");\r\n  const [ChangePropPhone, setChangePropPhone] = useState(\"Edit\");\r\n  const [ChangePropAddress, setChangePropAddress] = useState(\"Edit\");\r\n  const [ChangePropImage, setChangePropImage] = useState(\"Edit\");\r\n\r\n  const [ChangePropNameDisplay, setChangePropNameDisplay] = useState(\"none\");\r\n  const [ChangePropEmailDisplay, setChangePropEmailDisplay] = useState(\"none\");\r\n  const [ChangePropPhoneDisplay, setChangePropPhoneDisplay] = useState(\"none\");\r\n  const [ChangePropAddressDisplay, setChangePropAddressDisplay] =\r\n    useState(\"none\");\r\n  const [ChangePropImageDisplay, setChangePropImageDisplay] = useState(\"none\");\r\n  const [ChangePropCityDisplay, setChangePropCityDisplay] = useState(\"none\");\r\n  const [ChangePropMetroDisplay, setChangePropMetroDisplay] = useState(\"none\");\r\n\r\n  const [cityList, setCityList] = useState([]);\r\n  const [metroList, setMetroList] = useState([]);\r\n  const [ImgUrl, setImgUrl] = useState(\"\");\r\n\r\n  var [profileDefaultUrl, setProfileDefaultUrl] = useState(ImgUrl);\r\n\r\n  const [photoDisplay, setPhotoDisplay] = useState(\"block\");\r\n  const [changeTextDisplay, setChangeTextDisplay] = useState(\"none\");\r\n  const [errorText] = useState(\"\");\r\n  const [locationErrorText, setLocationErrorText] = useState(\"\");\r\n\r\n  var file = \"\";\r\n\r\n  const GetProfileInfo = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"users/profile\");\r\n    setEmailValue(JSON.parse(sessionStorage.getItem(\"userInfo\")).Email);\r\n    setNameValue(JSON.parse(sessionStorage.getItem(\"userInfo\")).Name);\r\n    setAddressValue(JSON.parse(sessionStorage.getItem(\"userInfo\")).Street);\r\n    setPhoneValue(JSON.parse(sessionStorage.getItem(\"userInfo\")).Phone);\r\n    setImgUrl(resp.data.user.Image);\r\n    if (resp.data.user.Metro === null || resp.data.user.City === \" \") {\r\n      setChangePropMetro(\"Add\");\r\n    } else {\r\n      setChangePropMetro(\"Change\");\r\n    }\r\n    if (resp.data.user.City === null || resp.data.user.City === \" \") {\r\n      setChangePropCity(\"Add\");\r\n    } else {\r\n      setChangePropCity(\"Change\");\r\n    }\r\n  };\r\n\r\n  let userobj = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n  let ContactInfo = React.useRef(userobj);\r\n\r\n  const GetLocationInfo = async () => {\r\n    let metrodata = await GetMetroList();\r\n    let citydata = await GetCityList(userobj.Metro_Id);\r\n    setCityList(citydata);\r\n    setMetroList(metrodata);\r\n  };\r\n\r\n  const UpdateMetroUIChanges = async (displayProp, contactinfo) => {\r\n    if (displayProp === \"none\") {\r\n      setChangePropCity(\"Change\");\r\n      setChangeTextDisplay(\"none\");\r\n      setChangePropMetroDisplay(\"flex\");\r\n      setChangePropCityDisplay(\"flex\");\r\n      setChangePropMetro(\"Save\");\r\n    } else {\r\n      if (\r\n        contactinfo.current.City_Id === 0 ||\r\n        contactinfo.current.Metro_Id === 0\r\n      ) {\r\n        setLocationErrorText(\"Please select both a Region and City\");\r\n      } else {\r\n        setChangeTextDisplay(\"block\");\r\n        UpdateMetroAndCity(contactinfo);\r\n        setLocationErrorText(\"\");\r\n        setChangePropMetroDisplay(\"none\");\r\n        setChangePropCityDisplay(\"none\");\r\n        setChangePropMetro(\"Change\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const UpdateCityUIChanges = async (displayProp, contactinfo) => {\r\n    if (displayProp === \"Change\") {\r\n      setChangePropCityDisplay(\"flex\");\r\n      setChangePropMetroDisplay(\"none\");\r\n      GetLocationInfo();\r\n      setChangePropCity(\"Save\");\r\n      setChangePropMetro(\"Change\");\r\n    } else {\r\n      UpdateCity(contactinfo);\r\n      setChangePropCityDisplay(\"none\");\r\n      setChangePropCity(\"Change\");\r\n    }\r\n  };\r\n\r\n  const UpdateMetroAndCity = async (contactinfo) => {\r\n    const resp = await axios.put(window.$DBURL + \"users\", {\r\n      Metro_Id: contactinfo.current.Metro_Id,\r\n      Metro: contactinfo.current.Metro,\r\n      City_Id: contactinfo.current.City_Id,\r\n      City: contactinfo.current.City,\r\n      Id: contactinfo.current.Id,\r\n      Username: contactinfo.current.Username,\r\n    });\r\n    if (resp.status === 200) {\r\n      CallProfileAgain();\r\n    }\r\n  };\r\n\r\n  const UpdateCity = async (contactinfo) => {\r\n    const resp = await axios.put(window.$DBURL + \"users\", {\r\n      Metro_Id: contactinfo.current.Metro_Id,\r\n      Metro: contactinfo.current.Metro,\r\n      City_Id: contactinfo.current.City_Id,\r\n      City: contactinfo.current.City,\r\n      Id: contactinfo.current.Id,\r\n      Username: contactinfo.current.Username,\r\n    });\r\n    if (resp.status === 200) {\r\n      CallProfileAgain();\r\n    }\r\n  };\r\n\r\n  // Handles file upload event and updates state\r\n  function handleUpload(event) {\r\n    if (ImgUrl !== \"\") {\r\n      const resp = axios.delete(window.$DBURL + \"utilities/image\", {\r\n        headers: { Url: ImgUrl },\r\n      });\r\n      if (resp.status === 200) {\r\n      }\r\n    }\r\n    file = event.target.files[0];\r\n    UploadFile(file);\r\n  }\r\n\r\n  const UploadFile = async (file) => {\r\n    var pic = await UploadFileToCloud(file);\r\n    if (pic !== null) {\r\n      setProfileDefaultUrl(pic);\r\n      setPhotoDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const UpdateCityList = async (metroid) => {\r\n    if (metroid !== 0 && metroid !== 3) {\r\n      ContactInfo.current.City = \"\";\r\n      ContactInfo.current.City_Id = 0;\r\n      let citydata = await GetCityList(metroid);\r\n      setCityList(citydata);\r\n    }\r\n  };\r\n\r\n  //Assigns the ID based on the Name Selected\r\n  const SelectCity = async (e) => {\r\n    ContactInfo.current.City_Id = e.target.value;\r\n    cityList.find(function (o, i) {\r\n      if (o.Id == e.target.value) {\r\n        ContactInfo.current.City = o.Name;\r\n      }\r\n      return null;\r\n    });\r\n  };\r\n\r\n  const SelectMetro = async (e) => {\r\n    ContactInfo.current.Metro_Id = e.target.value;\r\n    console.log(\r\n      metroList.find(function (o, i) {\r\n        if (o.Id === e.target.value) {\r\n          ContactInfo.current.Metro = o.Name;\r\n        }\r\n        return null;\r\n      })\r\n    );\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (file) {\r\n      const reader = new FileReader();\r\n      reader.onloadend = () => {};\r\n      reader.readAsDataURL(file);\r\n    }\r\n  }, [file]);\r\n\r\n  useEffect(() => {\r\n    GetLocationInfo();\r\n    GetProfileInfo();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    GetLocationInfo();\r\n    GetProfileInfo();\r\n  }, [updated]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    setProfileDefaultUrl(ImgUrl);\r\n  }, [ImgUrl]);\r\n\r\n  useEffect(() => {\r\n    if (editprofile === true) {\r\n      setEditDisplay(\"block\");\r\n      setChangeTextDisplay(\"block\");\r\n    }\r\n  }, [editprofile]);\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    if (role === 1000) {\r\n      return (\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont100Percent100Percent>\r\n          <FlexDiv>\r\n            <LeftFormField>\r\n              <SecDiv>\r\n                <FlexDiv key={NameValue}>\r\n                  <FormLabel>Name</FormLabel>\r\n                  <ProfilePara>{name}</ProfilePara>\r\n                  <UpdatePass\r\n                    display={editDisplay}\r\n                    onClick={() => {\r\n                      if (ChangePropName === \"Edit\") {\r\n                        setChangePropMetro(\"Change\");\r\n                        setChangePropCity(\"Change\");\r\n                        setChangePropEmailDisplay(\"none\");\r\n                        setChangePropEmail(\"Edit\");\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                        setChangePropPhone(\"Edit\");\r\n                        setChangePropAddressDisplay(\"none\");\r\n                        setChangePropAddress(\"Edit\");\r\n                        setChangePropImageDisplay(\"none\");\r\n                        setChangePropImage(\"Edit\");\r\n                        setChangePropName(\"Cancel\");\r\n                        setChangePropNameDisplay(\"flex\");\r\n                      } else if (ChangePropName === \"Cancel\") {\r\n                        setChangePropName(\"Edit\");\r\n                        setChangePropNameDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  >\r\n                    {ChangePropName}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropNameDisplay}>\r\n                  <FlexDiv>\r\n                    <FormLabel>New Name</FormLabel>\r\n                    <MobileInput\r\n                      placeholder=\"Name\"\r\n                      defaultValue={NameValue}\r\n                      onChange={(e) => {\r\n                        setNameValue2(e.target.value);\r\n                      }}\r\n                    ></MobileInput>\r\n                  </FlexDiv>\r\n                  <br></br>\r\n                  <FlexDiv>\r\n                    <MobileSmallGreenButton\r\n                      buttonbgcolor={\"#169ADB\"}\r\n                      text=\"Hack My Yard\"\r\n                      buttonwidth=\"30%\"\r\n                      onClick={() => {\r\n                        setChangePropNameDisplay(\"none\");\r\n                        setChangePropName(\"Edit\");\r\n                        onPreview({\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl,\r\n                        });\r\n                        onProfileUpdated(\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl\r\n                        );\r\n                        GetProfileInfo();\r\n                      }}\r\n                    >\r\n                      Save Changes\r\n                    </MobileSmallGreenButton>\r\n                  </FlexDiv>\r\n                </EditDiv>\r\n              </SecDiv>\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv key={emailValue}>\r\n                  <FormLabel>Email</FormLabel>\r\n                  <ProfilePara>{email}</ProfilePara>\r\n                  <UpdatePass\r\n                    display={editDisplay}\r\n                    onClick={() => {\r\n                      if (ChangePropEmail === \"Edit\") {\r\n                        setChangePropMetro(\"Change\");\r\n                        setChangePropCity(\"Change\");\r\n                        setChangePropNameDisplay(\"none\");\r\n                        setChangePropName(\"Edit\");\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                        setChangePropPhone(\"Edit\");\r\n                        setChangePropAddressDisplay(\"none\");\r\n                        setChangePropAddress(\"Edit\");\r\n                        setChangePropImageDisplay(\"none\");\r\n                        setChangePropImage(\"Edit\");\r\n                        setChangePropEmail(\"Cancel\");\r\n                        setChangePropEmailDisplay(\"flex\");\r\n                      } else if (ChangePropEmail === \"Cancel\") {\r\n                        setChangePropEmail(\"Edit\");\r\n                        setChangePropEmailDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  >\r\n                    {ChangePropEmail}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropEmailDisplay}>\r\n                  <FlexDiv>\r\n                    <FormLabel>New Email</FormLabel>\r\n                    <MobileInput\r\n                      placeholder=\"Email\"\r\n                      defaultValue={emailValue}\r\n                      onChange={(e) => {\r\n                        setEmailValue2(e.target.value);\r\n                      }}\r\n                    ></MobileInput>\r\n                  </FlexDiv>\r\n                  <br></br>\r\n                  <FlexDiv>\r\n                    <MobileSmallGreenButton\r\n                      buttonbgcolor={\"#169ADB\"}\r\n                      text=\"Hack My Yard\"\r\n                      buttonwidth=\"30%\"\r\n                      onClick={() => {\r\n                        setChangePropEmailDisplay(\"none\");\r\n                        setChangePropEmail(\"Edit\");\r\n                        onPreview({\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl,\r\n                        });\r\n                        onProfileUpdated(\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl\r\n                        );\r\n                        GetProfileInfo();\r\n                      }}\r\n                    >\r\n                      Save Changes\r\n                    </MobileSmallGreenButton>\r\n                  </FlexDiv>\r\n                </EditDiv>\r\n              </SecDiv>\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv key={PhoneValue}>\r\n                  <FormLabel>Cell Phone</FormLabel>\r\n                  <ProfilePara>{phone}</ProfilePara>\r\n                  <UpdatePass\r\n                    display={editDisplay}\r\n                    onClick={() => {\r\n                      if (ChangePropPhone === \"Edit\") {\r\n                        setChangePropMetro(\"Change\");\r\n                        setChangePropCity(\"Change\");\r\n                        setChangePropNameDisplay(\"none\");\r\n                        setChangePropName(\"Edit\");\r\n                        setChangePropEmailDisplay(\"none\");\r\n                        setChangePropEmail(\"Edit\");\r\n                        setChangePropAddressDisplay(\"none\");\r\n                        setChangePropAddress(\"Edit\");\r\n                        setChangePropImageDisplay(\"none\");\r\n                        setChangePropImage(\"Edit\");\r\n                        setChangePropPhone(\"Cancel\");\r\n                        setChangePropPhoneDisplay(\"flex\");\r\n                      } else if (ChangePropPhone === \"Cancel\") {\r\n                        setChangePropPhone(\"Edit\");\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  >\r\n                    {ChangePropPhone}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropPhoneDisplay}>\r\n                  <FlexDiv>\r\n                    <FormLabel>New Cell Phone</FormLabel>\r\n                    <MobileInput\r\n                      defaultValue={PhoneValue}\r\n                      onChange={(e) => {\r\n                        setPhoneValue2(e.target.value);\r\n                      }}\r\n                    ></MobileInput>\r\n                  </FlexDiv>\r\n                  <br></br>\r\n                  <FlexDiv>\r\n                    <MobileSmallGreenButton\r\n                      buttonbgcolor={\"#169ADB\"}\r\n                      text=\"Hack My Yard\"\r\n                      buttonwidth=\"30%\"\r\n                      onClick={() => {\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                        setChangePropPhone(\"Edit\");\r\n                        onPreview({\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl,\r\n                        });\r\n                        onProfileUpdated(\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl\r\n                        );\r\n                        GetProfileInfo();\r\n                      }}\r\n                    >\r\n                      Save Changes\r\n                    </MobileSmallGreenButton>\r\n                  </FlexDiv>\r\n                </EditDiv>\r\n              </SecDiv>\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv>\r\n                  <FormLabel>Profile Photo</FormLabel>\r\n                  <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n                  <FormDivider>\r\n                    <PhotoCont\r\n                      photoprops1={photoDisplay}\r\n                      src={window.$IMGURL + profileDefaultUrl}\r\n                      alt=\"No Profile Picture\"\r\n                    ></PhotoCont>\r\n                  </FormDivider>\r\n                  <UpdatePass\r\n                    display={editDisplay}\r\n                    onClick={() => {\r\n                      if (ChangePropImage === \"Edit\") {\r\n                        setChangePropMetro(\"Change\");\r\n                        setChangePropCity(\"Change\");\r\n                        setChangePropNameDisplay(\"none\");\r\n                        setChangePropName(\"Edit\");\r\n                        setChangePropEmailDisplay(\"none\");\r\n                        setChangePropEmail(\"Edit\");\r\n                        setChangePropAddressDisplay(\"none\");\r\n                        setChangePropAddress(\"Edit\");\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                        setChangePropPhone(\"Edit\");\r\n                        setChangePropImage(\"Cancel\");\r\n                        setChangePropImageDisplay(\"flex\");\r\n                      } else if (ChangePropImage === \"Cancel\") {\r\n                        setChangePropImage(\"Edit\");\r\n                        setChangePropImageDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  >\r\n                    {ChangePropImage}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropImageDisplay}>\r\n                  <FlexDiv>\r\n                    <FormLabel>New Profile Photo</FormLabel>\r\n                    <FileUpload\r\n                      type=\"file\"\r\n                      id=\"catpic\"\r\n                      name=\"filename\"\r\n                      accept=\".png,.heic,.jpg,.jpeg\"\r\n                      onChange={handleUpload}\r\n                    ></FileUpload>\r\n                  </FlexDiv>\r\n                  <br></br>\r\n                  <FlexDiv>\r\n                    <MobileSmallGreenButton\r\n                      buttonbgcolor={\"#169ADB\"}\r\n                      text=\"Hack My Yard\"\r\n                      buttonwidth=\"30%\"\r\n                      onClick={() => {\r\n                        setChangePropImageDisplay(\"none\");\r\n                        setChangePropImage(\"Edit\");\r\n                        onPreview({\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl,\r\n                        });\r\n                        onProfileUpdated(\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl\r\n                        );\r\n                        GetProfileInfo();\r\n                      }}\r\n                    >\r\n                      Save Changes\r\n                    </MobileSmallGreenButton>\r\n                  </FlexDiv>\r\n                </EditDiv>\r\n              </SecDiv>\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv>\r\n                  <FormLabel>Region</FormLabel>\r\n                  <ProfilePara>{metro}</ProfilePara>\r\n                  <UpdatePass\r\n                    display={editDisplay}\r\n                    onClick={() => {\r\n                      UpdateMetroUIChanges(ChangePropMetroDisplay, ContactInfo);\r\n                    }}\r\n                  >\r\n                    {ChangePropMetro}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <RegularTextBoldRed>{locationErrorText}</RegularTextBoldRed>\r\n                <EditDiv displayprop={ChangePropMetroDisplay}>\r\n                  <FlexRowCont60PercentSpaceEvenly>\r\n                    <DatalistMedium\r\n                      defaultValue={ContactInfo.current.Metro}\r\n                      inputwidth=\"100%\"\r\n                      inputheight=\"40%\"\r\n                      id=\"metros\"\r\n                      onChange={(e) => {\r\n                        SelectMetro(e);\r\n                        UpdateCityList(e.target.value);\r\n                      }}\r\n                    >\r\n                      <DatalistOption value={0}>Select Region</DatalistOption>\r\n                      {metroList.map((o, i) => (\r\n                        <DatalistOption\r\n                          key={o.Id}\r\n                          value={o.Id}\r\n                          selected={o.Id === ContactInfo.current.Metro_Id}\r\n                        >\r\n                          {o.Name}\r\n                        </DatalistOption>\r\n                      ))}\r\n                    </DatalistMedium>\r\n                  </FlexRowCont60PercentSpaceEvenly>\r\n                </EditDiv>\r\n              </SecDiv>\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv>\r\n                  <FormLabel>City</FormLabel>\r\n                  <ProfilePara>{city}</ProfilePara>\r\n                  <UpdatePass\r\n                    display={changeTextDisplay}\r\n                    onClick={() => {\r\n                      UpdateCityUIChanges(ChangePropCity, ContactInfo);\r\n                    }}\r\n                  >\r\n                    {ChangePropCity}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropCityDisplay}>\r\n                  <FlexRowCont60PercentSpaceEvenly>\r\n                    <DatalistMedium\r\n                      defaultValue={ContactInfo.current.City}\r\n                      inputwidth=\"100%\"\r\n                      inputheight=\"40%\"\r\n                      id=\"cities\"\r\n                      onChange={(e) => {\r\n                        SelectCity(e);\r\n                      }}\r\n                    >\r\n                      <DatalistOption value={0}>Select City</DatalistOption>\r\n                      {cityList.map((o, i) => (\r\n                        <DatalistOption\r\n                          id=\"city\"\r\n                          selected={o.Id === ContactInfo.current.City_Id}\r\n                          key={o.Id}\r\n                          value={o.Id}\r\n                        >\r\n                          {o.Name}\r\n                        </DatalistOption>\r\n                      ))}\r\n                    </DatalistMedium>\r\n                  </FlexRowCont60PercentSpaceEvenly>\r\n                </EditDiv>\r\n              </SecDiv>\r\n\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv>\r\n                  <FormLabel>Address</FormLabel>\r\n                  <ProfilePara>{address}</ProfilePara>\r\n                  <UpdatePass\r\n                    display={editDisplay}\r\n                    onClick={() => {\r\n                      if (ChangePropAddress === \"Edit\") {\r\n                        setChangePropMetro(\"Change\");\r\n                        setChangePropCity(\"Change\");\r\n                        setChangePropNameDisplay(\"none\");\r\n                        setChangePropName(\"Edit\");\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                        setChangePropPhone(\"Edit\");\r\n                        setChangePropEmailDisplay(\"none\");\r\n                        setChangePropEmail(\"Edit\");\r\n                        setChangePropImageDisplay(\"none\");\r\n                        setChangePropImage(\"Edit\");\r\n                        setChangePropAddress(\"Cancel\");\r\n                        setChangePropAddressDisplay(\"flex\");\r\n                      } else if (ChangePropAddress === \"Cancel\") {\r\n                        setChangePropAddress(\"Edit\");\r\n                        setChangePropAddressDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  >\r\n                    {ChangePropAddress}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropAddressDisplay}>\r\n                  <FlexDiv>\r\n                    <FormLabel>New Address</FormLabel>\r\n                    <MobileInput\r\n                      placeholder=\"Address\"\r\n                      defaultValue={AddressValue}\r\n                      onChange={(e) => {\r\n                        setAddressValue2(e.target.value);\r\n                      }}\r\n                    ></MobileInput>\r\n                  </FlexDiv>\r\n                  <br></br>\r\n                  <FlexDiv>\r\n                    <MobileSmallGreenButton\r\n                      buttonbgcolor={\"#169ADB\"}\r\n                      text=\"Hack My Yard\"\r\n                      buttonwidth=\"30%\"\r\n                      onClick={() => {\r\n                        setChangePropAddressDisplay(\"none\");\r\n                        setChangePropAddress(\"Edit\");\r\n                        onPreview({\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl,\r\n                        });\r\n                        onProfileUpdated(\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl\r\n                        );\r\n                        GetProfileInfo();\r\n                      }}\r\n                    >\r\n                      Save Changes\r\n                    </MobileSmallGreenButton>\r\n                  </FlexDiv>\r\n                </EditDiv>\r\n              </SecDiv>\r\n            </LeftFormField>\r\n          </FlexDiv>\r\n        </Cont100Percent100Percent>\r\n      );\r\n    }\r\n  } else {\r\n    if (role === 1000) {\r\n      return (\r\n        <Backdrop\r\n          style={{ zIndex: 2 }}\r\n          //  className={classes.Backdrop}\r\n          open\r\n        >\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont100Percent100Percent>\r\n          <FlexDiv>\r\n            <LeftFormField>\r\n              <SecDiv>\r\n                <FlexDiv key={NameValue}>\r\n                  <FormLabel>Name</FormLabel>\r\n                  <ProfilePara>{name}</ProfilePara>\r\n                  <UpdatePass\r\n                    onClick={() => {\r\n                      if (ChangePropName === \"Edit\") {\r\n                        setChangePropMetro(\"Change\");\r\n                        setChangePropCity(\"Change\");\r\n                        setChangePropEmailDisplay(\"none\");\r\n                        setChangePropEmail(\"Edit\");\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                        setChangePropPhone(\"Edit\");\r\n                        setChangePropAddressDisplay(\"none\");\r\n                        setChangePropAddress(\"Edit\");\r\n                        setChangePropImageDisplay(\"none\");\r\n                        setChangePropImage(\"Edit\");\r\n                        setChangePropName(\"Cancel\");\r\n                        setChangePropNameDisplay(\"flex\");\r\n                      } else if (ChangePropName === \"Cancel\") {\r\n                        setChangePropName(\"Edit\");\r\n                        setChangePropNameDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  >\r\n                    {ChangePropName}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropNameDisplay}>\r\n                  <FlexDiv>\r\n                    <FormLabel>New Name</FormLabel>\r\n                    <Input\r\n                      inputwidth=\"40%\"\r\n                      inputheight=\"1px\"\r\n                      placeholder=\"Name\"\r\n                      defaultValue={NameValue}\r\n                      onChange={(e) => {\r\n                        setNameValue2(e.target.value);\r\n                      }}\r\n                    ></Input>\r\n                  </FlexDiv>\r\n                  <FlexDiv>\r\n                    <UpdateProfileButton\r\n                      buttonbgcolor={\"#169ADB\"}\r\n                      text=\"Hack My Yard\"\r\n                      buttonwidth=\"30%\"\r\n                      onClick={() => {\r\n                        setChangePropNameDisplay(\"none\");\r\n                        setChangePropName(\"Edit\");\r\n                        onPreview({\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl,\r\n                        });\r\n                        onProfileUpdated(\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl\r\n                        );\r\n                        GetProfileInfo();\r\n                      }}\r\n                    >\r\n                      Save Changes\r\n                    </UpdateProfileButton>\r\n                  </FlexDiv>\r\n                </EditDiv>\r\n              </SecDiv>\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv key={emailValue}>\r\n                  <FormLabel>Email</FormLabel>\r\n                  <ProfilePara>{email}</ProfilePara>\r\n                  <UpdatePass\r\n                    onClick={() => {\r\n                      if (ChangePropEmail === \"Edit\") {\r\n                        setChangePropMetro(\"Change\");\r\n                        setChangePropCity(\"Change\");\r\n                        setChangePropNameDisplay(\"none\");\r\n                        setChangePropName(\"Edit\");\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                        setChangePropPhone(\"Edit\");\r\n                        setChangePropAddressDisplay(\"none\");\r\n                        setChangePropAddress(\"Edit\");\r\n                        setChangePropImageDisplay(\"none\");\r\n                        setChangePropImage(\"Edit\");\r\n                        setChangePropEmail(\"Cancel\");\r\n                        setChangePropEmailDisplay(\"flex\");\r\n                      } else if (ChangePropEmail === \"Cancel\") {\r\n                        setChangePropEmail(\"Edit\");\r\n                        setChangePropEmailDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  >\r\n                    {ChangePropEmail}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropEmailDisplay}>\r\n                  <FlexDiv>\r\n                    <FormLabel>New Email</FormLabel>\r\n                    <Input\r\n                      inputwidth=\"40%\"\r\n                      inputheight=\"1px\"\r\n                      placeholder=\"Email\"\r\n                      defaultValue={emailValue}\r\n                      onChange={(e) => {\r\n                        setEmailValue2(e.target.value);\r\n                      }}\r\n                    ></Input>\r\n                  </FlexDiv>\r\n                  <FlexDiv>\r\n                    <UpdateProfileButton\r\n                      buttonbgcolor={\"#169ADB\"}\r\n                      text=\"Hack My Yard\"\r\n                      buttonwidth=\"30%\"\r\n                      onClick={() => {\r\n                        setChangePropEmailDisplay(\"none\");\r\n                        setChangePropEmail(\"Edit\");\r\n                        onPreview({\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl,\r\n                        });\r\n                        onProfileUpdated(\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl\r\n                        );\r\n                        GetProfileInfo();\r\n                      }}\r\n                    >\r\n                      Save Changes\r\n                    </UpdateProfileButton>\r\n                  </FlexDiv>\r\n                </EditDiv>\r\n              </SecDiv>\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv key={PhoneValue}>\r\n                  <FormLabel>Cell Phone</FormLabel>\r\n                  <ProfilePara>{phone}</ProfilePara>\r\n                  <UpdatePass\r\n                    onClick={() => {\r\n                      if (ChangePropPhone === \"Edit\") {\r\n                        setChangePropMetro(\"Change\");\r\n                        setChangePropCity(\"Change\");\r\n                        setChangePropNameDisplay(\"none\");\r\n                        setChangePropName(\"Edit\");\r\n                        setChangePropEmailDisplay(\"none\");\r\n                        setChangePropEmail(\"Edit\");\r\n                        setChangePropAddressDisplay(\"none\");\r\n                        setChangePropAddress(\"Edit\");\r\n                        setChangePropImageDisplay(\"none\");\r\n                        setChangePropImage(\"Edit\");\r\n                        setChangePropPhone(\"Cancel\");\r\n                        setChangePropPhoneDisplay(\"flex\");\r\n                      } else if (ChangePropPhone === \"Cancel\") {\r\n                        setChangePropPhone(\"Edit\");\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  >\r\n                    {ChangePropPhone}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropPhoneDisplay}>\r\n                  <FlexDiv>\r\n                    <FormLabel>New Cell Phone</FormLabel>\r\n                    <Input\r\n                      inputwidth=\"40%\"\r\n                      inputheight=\"1px\"\r\n                      placeholder=\"(XXX)-XXX-XXXX\"\r\n                      defaultValue={PhoneValue}\r\n                      onChange={(e) => {\r\n                        setPhoneValue2(e.target.value);\r\n                      }}\r\n                    ></Input>\r\n                  </FlexDiv>\r\n                  <FlexDiv>\r\n                    <UpdateProfileButton\r\n                      buttonbgcolor={\"#169ADB\"}\r\n                      text=\"Hack My Yard\"\r\n                      buttonwidth=\"30%\"\r\n                      onClick={() => {\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                        setChangePropPhone(\"Edit\");\r\n                        onPreview({\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl,\r\n                        });\r\n                        onProfileUpdated(\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl\r\n                        );\r\n                        GetProfileInfo();\r\n                      }}\r\n                    >\r\n                      Save Changes\r\n                    </UpdateProfileButton>\r\n                  </FlexDiv>\r\n                </EditDiv>\r\n              </SecDiv>\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv>\r\n                  <FormLabel>Profile Photo</FormLabel>\r\n                  <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n                  <FormDivider>\r\n                    <PhotoCont\r\n                      photoprops1={photoDisplay}\r\n                      src={window.$IMGURL + profileDefaultUrl}\r\n                      alt=\"No Profile Picture\"\r\n                    ></PhotoCont>\r\n                  </FormDivider>\r\n                  <UpdatePass\r\n                    onClick={() => {\r\n                      if (ChangePropImage === \"Edit\") {\r\n                        setChangePropMetro(\"Change\");\r\n                        setChangePropCity(\"Change\");\r\n                        setChangePropNameDisplay(\"none\");\r\n                        setChangePropName(\"Edit\");\r\n                        setChangePropEmailDisplay(\"none\");\r\n                        setChangePropEmail(\"Edit\");\r\n                        setChangePropAddressDisplay(\"none\");\r\n                        setChangePropAddress(\"Edit\");\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                        setChangePropPhone(\"Edit\");\r\n                        setChangePropImage(\"Cancel\");\r\n                        setChangePropImageDisplay(\"flex\");\r\n                      } else if (ChangePropImage === \"Cancel\") {\r\n                        setChangePropImage(\"Edit\");\r\n                        setChangePropImageDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  >\r\n                    {ChangePropImage}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropImageDisplay}>\r\n                  <FlexDiv>\r\n                    <FormLabel>New Profile Photo</FormLabel>\r\n                    <FileUpload\r\n                      type=\"file\"\r\n                      id=\"catpic\"\r\n                      name=\"filename\"\r\n                      accept=\".png,.heic,.jpg,.jpeg\"\r\n                      onChange={handleUpload}\r\n                    ></FileUpload>\r\n                  </FlexDiv>\r\n                  <FlexDiv>\r\n                    <UpdateProfileButton\r\n                      buttonbgcolor={\"#169ADB\"}\r\n                      text=\"Hack My Yard\"\r\n                      buttonwidth=\"30%\"\r\n                      onClick={() => {\r\n                        setChangePropImageDisplay(\"none\");\r\n                        setChangePropImage(\"Edit\");\r\n                        onPreview({\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl,\r\n                        });\r\n                        onProfileUpdated(\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl\r\n                        );\r\n                        GetProfileInfo();\r\n                      }}\r\n                    >\r\n                      Save Changes\r\n                    </UpdateProfileButton>\r\n                  </FlexDiv>\r\n                </EditDiv>\r\n              </SecDiv>\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv>\r\n                  <FormLabel>Region</FormLabel>\r\n                  <ProfilePara>{metro}</ProfilePara>\r\n                  <UpdatePass\r\n                    onClick={() => {\r\n                      UpdateMetroUIChanges(ChangePropMetroDisplay, ContactInfo);\r\n                    }}\r\n                  >\r\n                    {ChangePropMetro}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <RegularTextBoldRed>{locationErrorText}</RegularTextBoldRed>\r\n                <EditDiv displayprop={ChangePropMetroDisplay}>\r\n                  <FlexRowCont60PercentSpaceEvenly>\r\n                    <DatalistMedium\r\n                      defaultValue={ContactInfo.current.Metro}\r\n                      inputwidth=\"100%\"\r\n                      inputheight=\"40%\"\r\n                      id=\"metros\"\r\n                      onChange={(e) => {\r\n                        SelectMetro(e);\r\n                        UpdateCityList(e.target.value);\r\n                      }}\r\n                    >\r\n                      <DatalistOption value={0}>Select Region</DatalistOption>\r\n                      {metroList.map((o, i) => (\r\n                        <DatalistOption\r\n                          key={o.Id}\r\n                          value={o.Id}\r\n                          selected={o.Id === ContactInfo.current.Metro_Id}\r\n                        >\r\n                          {o.Name}\r\n                        </DatalistOption>\r\n                      ))}\r\n                    </DatalistMedium>\r\n                  </FlexRowCont60PercentSpaceEvenly>\r\n                </EditDiv>\r\n              </SecDiv>\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv>\r\n                  <FormLabel>City</FormLabel>\r\n                  <ProfilePara>{city}</ProfilePara>\r\n                  <UpdatePass\r\n                    display={changeTextDisplay}\r\n                    onClick={() => {\r\n                      UpdateCityUIChanges(ChangePropCity, ContactInfo);\r\n                    }}\r\n                  >\r\n                    {ChangePropCity}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropCityDisplay}>\r\n                  <FlexRowCont60PercentSpaceEvenly>\r\n                    <DatalistMedium\r\n                      defaultValue={ContactInfo.current.City}\r\n                      inputwidth=\"100%\"\r\n                      inputheight=\"40%\"\r\n                      id=\"cities\"\r\n                      onChange={(e) => {\r\n                        SelectCity(e);\r\n                      }}\r\n                    >\r\n                      <DatalistOption value={0}>Select City</DatalistOption>\r\n                      {cityList.map((o, i) => (\r\n                        <DatalistOption\r\n                          id=\"city\"\r\n                          selected={o.Id === ContactInfo.current.City_Id}\r\n                          key={o.Id}\r\n                          value={o.Id}\r\n                        >\r\n                          {o.Name}\r\n                        </DatalistOption>\r\n                      ))}\r\n                    </DatalistMedium>\r\n                  </FlexRowCont60PercentSpaceEvenly>\r\n                </EditDiv>\r\n              </SecDiv>\r\n\r\n              <ProfileHR></ProfileHR>\r\n              <SecDiv>\r\n                <FlexDiv>\r\n                  <FormLabel>Address</FormLabel>\r\n                  <ProfilePara>{address}</ProfilePara>\r\n                  <UpdatePass\r\n                    onClick={() => {\r\n                      if (ChangePropAddress === \"Edit\") {\r\n                        setChangePropMetro(\"Change\");\r\n                        setChangePropCity(\"Change\");\r\n                        setChangePropNameDisplay(\"none\");\r\n                        setChangePropName(\"Edit\");\r\n                        setChangePropPhoneDisplay(\"none\");\r\n                        setChangePropPhone(\"Edit\");\r\n                        setChangePropEmailDisplay(\"none\");\r\n                        setChangePropEmail(\"Edit\");\r\n                        setChangePropImageDisplay(\"none\");\r\n                        setChangePropImage(\"Edit\");\r\n                        setChangePropAddress(\"Cancel\");\r\n                        setChangePropAddressDisplay(\"flex\");\r\n                      } else if (ChangePropAddress === \"Cancel\") {\r\n                        setChangePropAddress(\"Edit\");\r\n                        setChangePropAddressDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  >\r\n                    {ChangePropAddress}\r\n                  </UpdatePass>\r\n                </FlexDiv>\r\n                <EditDiv displayprop={ChangePropAddressDisplay}>\r\n                  <FlexDiv>\r\n                    <FormLabel>New Address</FormLabel>\r\n                    <Input\r\n                      inputwidth=\"40%\"\r\n                      inputheight=\"1px\"\r\n                      placeholder=\"Address\"\r\n                      defaultValue={AddressValue}\r\n                      onChange={(e) => {\r\n                        setAddressValue2(e.target.value);\r\n                      }}\r\n                    ></Input>\r\n                  </FlexDiv>\r\n                  <FlexDiv>\r\n                    <UpdateProfileButton\r\n                      buttonbgcolor={\"#169ADB\"}\r\n                      text=\"Hack My Yard\"\r\n                      buttonwidth=\"30%\"\r\n                      onClick={() => {\r\n                        setChangePropAddressDisplay(\"none\");\r\n                        setChangePropAddress(\"Edit\");\r\n                        onPreview({\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl,\r\n                        });\r\n                        onProfileUpdated(\r\n                          emailValue2,\r\n                          NameValue2,\r\n                          AddressValue2,\r\n                          PhoneValue2,\r\n                          profileDefaultUrl\r\n                        );\r\n                        GetProfileInfo();\r\n                      }}\r\n                    >\r\n                      Save Changes\r\n                    </UpdateProfileButton>\r\n                  </FlexDiv>\r\n                </EditDiv>\r\n              </SecDiv>\r\n            </LeftFormField>\r\n          </FlexDiv>\r\n        </Cont100Percent100Percent>\r\n      );\r\n    }\r\n  }\r\n};\r\n\r\nUpdateProfile.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n  metro: \"\",\r\n  city: \"\",\r\n  updated: 0,\r\n  name: \"\",\r\n  email: \"\",\r\n  phone: \"\",\r\n  imgurl: \"\",\r\n  address: \"\",\r\n  role: 1000,\r\n};\r\n\r\nexport default UpdateProfile;\r\n","import styled from \"styled-components\";\r\n\r\nconst nullProp = null;\r\n\r\n//Material Selection -------------------------------------------------\r\n\r\nexport const HundredPercentFlexDiv = styled.div`\r\n  display: flex;\r\n  width: 100%;\r\n`;\r\n\r\nexport const HundredPercentFlexDivCenterItems = styled.div`\r\n  display: flex;\r\n  width: 100%;\r\n  align-items: center;\r\n`;\r\n\r\nexport const ItemSelectionContainer = styled.div`\r\n  width: 57%;\r\n  margin: 1%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  text-align: center;\r\n  align-items: center;\r\n  background-color: white;\r\n\r\n  @media (max-width: 1006px) {\r\n    width: 90%;\r\n    margin-top: 10%;\r\n    align-items: center;\r\n  }\r\n`;\r\n\r\nexport const TwentyPercentWidthCont = styled.div`\r\n  width: 20%;\r\n  margin: 1%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  text-align: center;\r\n  align-items: center;\r\n  background-color: white;\r\n\r\n  @media (max-width: 1006px) {\r\n    width: 90%;\r\n    margin-top: 10%;\r\n    align-items: center;\r\n  }\r\n`;\r\n\r\nexport const Cont100PercentWidth = styled.div`\r\n  width: 100%;\r\n`;\r\n\r\nexport const CategoryCont = styled.div`\r\n  align-items: center;\r\n  width: 100%;\r\n  height: auto;\r\n  padding: 5%;\r\n  box-shadow: 0px 4px 8px #b7b7b7;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: space-between;\r\n  border-radius: 15px;\r\n  cursor: pointer;\r\n  background-color: ${(props) =>\r\n    props.bgcolorprops ? props.bgcolorprops : \"white\"};\r\n`;\r\n\r\nexport const CategoryCenterInnerDiv = styled.div`\r\n  margin: 5%;\r\n  display: flex;\r\n  height: auto;\r\n  justify-content: center;\r\n  justify-items: center;\r\n`;\r\n\r\nexport const AvenirCategoryLabelWide = styled.p`\r\n  font-size: 14px;\r\n  font-family: Avenir;\r\n  width: 80%;\r\n`;\r\n\r\nexport const GridCont100PercentDisplayProps = styled.div`\r\n  width: 100%;\r\n  height: auto;\r\n  max-height: ${(props) => (props.maxheight ? props.maxheight : \"\")};\r\n  overflow-y: auto;\r\n  display: ${(props) => (props.display ? props.display : \"grid\")};\r\n  grid-template-columns: repeat(4, 1fr);\r\n`;\r\n\r\nexport const Icon30px20pxPointer = styled.img`\r\n  height: 20px;\r\n  width: 30px;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  cursor: pointer;\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"auto\")};;\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"auto\")};;\r\n  margin-left: 5px;\r\n  filter: ${(props) => (props.color ? `opacity(0.5) drop-shadow(0 0 0 ${props.color})` : 'none')};\r\n`;\r\n\r\nexport const Icon30px30pxPointer = styled.img`\r\n  height: 30px;\r\n  width: 30px;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n  cursor: pointer;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n  margin-left: 5px;\r\n`;\r\n\r\nexport default nullProp;\r\n","// /* eslint-disable */\r\n\r\n// import axios from \"axios\";\r\n// import React, { useEffect, useState } from \"react\";\r\n// import { useHistory } from \"react-router-dom\";\r\n// import styled from \"styled-components\";\r\n// import ActionMenu from \"../../comps/ActionMenu\";\r\n// import ChangePass from \"../../comps/ChangePass\";\r\n// import Menu from \"../../comps/MenuComps/Menu\";\r\n// import UpdateProfile from \"../../comps/UpdateProfile\";\r\n// import { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\n// import Backdrop from \"@material-ui/core/Backdrop\";\r\n// import CircularProgress from \"@material-ui/core/CircularProgress\";\r\n// import { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\n// import {\r\n//   MobileGreenButton,\r\n//   MobileSmallGreenButton,\r\n// } from \"../../MobileComponents/Buttons\";\r\n// import {\r\n//   Div100vw20vh,\r\n//   FlexColumnDiv90vw,\r\n//   TopDiv40vh,\r\n//   WhiteTopRoundedDiv,\r\n// } from \"../../MobileComponents/Divs\";\r\n// import { LogoRelativeLeft, TopImage40vh } from \"../../MobileComponents/Images\";\r\n// import {\r\n//   MenuHeader,\r\n//   WhiteAvenirHeader,\r\n//   WhiteLeagueHeader,\r\n// } from \"../../MobileComponents/Text\";\r\n// import {\r\n//   FlexColumnCont80vwAutoHeight,\r\n//   FlexColumnLeftAlign,\r\n//   FlexContMobileColumn,\r\n//   FlexContzIndex1,\r\n//   FlexDiv,\r\n//   FlexRowContFullWidth,\r\n//   FullWidthMobileCont100vw100vh,\r\n//   LeftCont,\r\n// } from \"../../StylesheetComps/Cont\";\r\n// import { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\n// import { RegularTextBoldRed } from \"../../StylesheetComps/Titles\";\r\n\r\n// const ProfileDiv = styled.div`\r\n//   display: flex;\r\n//   width: 100%;\r\n//   @media (max-width: 1006px) {\r\n//     width: 95%;\r\n//     height: auto;\r\n//     display: flex;\r\n//     flex-direction: column;\r\n//   }\r\n// `;\r\n\r\n// const ProfileInfo = styled.div`\r\n//   background-color: white;\r\n//   border-radius: 10px;\r\n//   padding: 2%;\r\n//   margin: 2%;\r\n//   margin-left: auto;\r\n//   margin-right: auto;\r\n//   width: 85%;\r\n//   @media (max-width: 1006px) {\r\n//     display: ;\r\n//     width: 100%;\r\n//     margin: 0%;\r\n//     height: 60%;\r\n//     box-shadow: 0px 0px 0px #d3d3d3;\r\n//   }\r\n// `;\r\n\r\n// const UpdatePass = styled.a`\r\n//   background-color: #169ADB;\r\n//   padding: 1%;\r\n//   color: white;\r\n//   width: 8vw;\r\n//   border-radius: 10px;\r\n//   font-family: Futura;\r\n//   font-size: 100%;\r\n//   margin-top: auto;\r\n//   margin-bottom: auto;\r\n//   cursor: pointer;\r\n//   margin: 1%;\r\n//   @media (max-width: 1006px) {\r\n//     width: 50%;\r\n//     margin-top: 20px;\r\n//   }\r\n// `;\r\n\r\n// const Clickables = styled.div`\r\n//   display: flex;\r\n//   // height:80%;\r\n//   width: 100%;\r\n//   @media (max-width: 1006px) {\r\n//     flex-direction: column;\r\n//   }\r\n// `;\r\n\r\n// const UpdateClickables = styled.div`\r\n//   @media (max-width: 1006px) {\r\n//     flex-direction: column;\r\n//     position: relative;\r\n//     height: 0%;\r\n//     display: ${(props) => (props.changeView ? props.changeView : \"none\")};\r\n//   }\r\n// `;\r\n\r\n// const HeaderDiv = styled.div`\r\n//   display: none;\r\n//   @media (max-width: 1006px) {\r\n//     width: 40%;\r\n//     display: flex;\r\n//     justify-content: space-around;\r\n//   }\r\n// `;\r\n\r\n// const UpdateDiv = styled.div`\r\n// display:flex;\r\n// flex-direction:column;\r\n// @media (max-width: 1006px) {\r\n// +}\r\n// `;\r\n\r\n// const ProfileScreen = ({ onPreview, onProfileUpdated }) => {\r\n//   //=============================================================================\r\n//   // Profile Screen - User can view and edit their own Profile Information here\r\n//   //=============================================================================\r\n\r\n//   //=============================================================================\r\n//   // All users have access to this page via the ActionMenu or Left Menu\r\n//   //=============================================================================\r\n\r\n//   const history = useHistory();\r\n\r\n//   const [passSwitch, setPassSwitch] = useState(false);\r\n//   const [editProfile, setEditProfile] = useState(false);\r\n//   const [metroSwitch, setMetroSwitch] = useState(false);\r\n//   const [citySwitch, setCitySwitch] = useState(false);\r\n\r\n//   const [cpCurrentUsername, setcpCurrentUsername] = useState(\"\");\r\n//   const [cpOldPass, setcpOldPass] = useState(\"\");\r\n//   const [cpNewPass, setcpNewPass] = useState(\"\");\r\n//   const [cpConfirmNewPass, setcpConfirmNewPass] = useState(\"\");\r\n//   const [confirmMessage] = useState(\"\");\r\n//   const [updated] = useState(0);\r\n\r\n//   const [passView, setPassView] = useState(\"none\");\r\n//   const [metroView, setMetroView] = useState(\"none\");\r\n\r\n//   const [emailValue, setEmailValue] = useState(\"\");\r\n//   const [email, setEmail] = useState(\"\");\r\n//   const [NameValue, setNameValue] = useState(\"\");\r\n//   const [AddressValue, setAddressValue] = useState(\"\");\r\n//   const [CityValue, setCityValue] = useState(\"\");\r\n//   const [UsernameValue, setUsernameValue] = useState(\"\");\r\n//   const [PhoneValue, setPhoneValue] = useState(\"\");\r\n//   const [MetroValue, setMetroValue] = useState(\"\");\r\n//   const [RoleValue, setRoleValue] = useState(\"\");\r\n//   const [userId, setUserId] = useState(0);\r\n//   const [roleNum, setRoleNum] = useState(1000);\r\n//   const [roleName, setRoleName] = useState(\"\");\r\n//   const [ImgUrl, setImgUrl] = useState(\"\");\r\n\r\n//   const [userinfo, setUserinfo] = useState({});\r\n\r\n//   const [ErrorText, setErrorText] = useState(\"\");\r\n\r\n//   const HandlePasswordChange = async ({\r\n//     currentUsername,\r\n//     oldPass,\r\n//     newPass,\r\n//     confirmNewPass,\r\n//     onPreview,\r\n//     onChange,\r\n//   }) => {\r\n//     setcpCurrentUsername(currentUsername);\r\n//     setcpOldPass(oldPass);\r\n//     setcpNewPass(newPass);\r\n//     setcpConfirmNewPass(confirmNewPass);\r\n//   };\r\n\r\n//   const HandleProfileUpdated = async ({\r\n//     emailValue2,\r\n//     NameValue2,\r\n//     AddressValue2,\r\n//     PhoneValue2,\r\n//     onPreview,\r\n//     onChange,\r\n//   }) => {\r\n//     setEmailValue(emailValue2);\r\n//     setNameValue(NameValue2);\r\n//     setAddressValue(AddressValue2);\r\n//     setPhoneValue(PhoneValue2);\r\n//   };\r\n\r\n//   const ChangePasswordFunc = async (cpOldPass, cpNewPass) => {\r\n//     try {\r\n//       setErrorText(\"Old Password Incorrect\");\r\n\r\n//       // Log out from the current session\r\n//       const resplogout = await axios.post(\r\n//         `${window.$DBURL}users/${userId}/session/logout`\r\n//       );\r\n\r\n//       // Change the password\r\n//       const resp = await axios.put(`${window.$DBURL}users/password`, {\r\n//         UserName: UsernameValue,\r\n//         OldPassword: cpOldPass,\r\n//         NewPassword: cpNewPass,\r\n//       });\r\n\r\n//       if (resp.status === 200) {\r\n//         // Clear the error text\r\n//         setErrorText(\"\");\r\n\r\n//         // Delete the current authorization token\r\n//         delete axios.defaults.headers.common[\"Authorization\"];\r\n\r\n//         // Log in with the new password\r\n//         const resplogin = await axios.post(\r\n//           `${window.$DBURL}users/session/login`,\r\n//           {\r\n//             Username: UsernameValue,\r\n//             Password: cpNewPass,\r\n//           }\r\n//         );\r\n\r\n//         if (resplogin.data !== undefined || resplogin.data !== null) {\r\n//           // Save the new authorization token\r\n//           const token = resplogin.data.Session.AuthToken;\r\n//           axios.defaults.baseURL = window.$DBURL;\r\n//           sessionStorage.setItem(\"token\", token);\r\n//           axios.defaults.headers.common[\"Authorization\"] = `Basic ${token}`;\r\n//         }\r\n\r\n//         // Update the UI\r\n//         setPassSwitch(false);\r\n//         setPassView(\"none\");\r\n//         window.scrollTo(0, 0);\r\n//       }\r\n//     } catch (error) {\r\n//       // Handle any errors that may have occurred\r\n//       console.error(error);\r\n//     }\r\n//   };\r\n\r\n//   const UpdateAccount = async (email, name, address, phone, image) => {\r\n//     const resp = await axios.put(`${window.$DBURL}users`, {\r\n//       Name: name,\r\n//       Phone: phone,\r\n//       Id: userId,\r\n//       Street: address,\r\n//       Email: email,\r\n//       Username: UsernameValue,\r\n//       Image: image,\r\n//     });\r\n//     GetProfileInfo();\r\n//   };\r\n\r\n//   const GetProfileInfo = async () => {\r\n//     const resp = await axios.get(window.$DBURL + \"users/profile\", {});\r\n//     const { user } = resp.data;\r\n\r\n//     sessionStorage.setItem(\"userInfo\", JSON.stringify(user));\r\n//     setUserinfo(JSON.parse(sessionStorage.getItem(\"userInfo\")));\r\n\r\n//     setEmail(user.Email);\r\n//     setUserId(user.Id);\r\n//     setEmailValue(user.Email);\r\n//     setUsernameValue(user.Username);\r\n//     setNameValue(user.Name);\r\n//     setAddressValue(user.Street);\r\n//     setCityValue(user.City);\r\n//     setPhoneValue(user.Phone);\r\n//     setMetroValue(user.Metro);\r\n//     setImgUrl(user.Image);\r\n\r\n//     switch (JSON.parse(sessionStorage.getItem(\"userInfo\")).Role) {\r\n//       case UserRole.User:\r\n//         setRoleName(\"Homeowner\");\r\n//         break;\r\n//       case UserRole.VIP:\r\n//         setRoleName(\"VIP Homeowner\");\r\n//         break;\r\n//       case UserRole.Worker:\r\n//         setRoleName(\"Worker\");\r\n//         break;\r\n//       case UserRole.OwnerOperator:\r\n//         setRoleName(\"Owner / Operator\");\r\n//         break;\r\n//       case UserRole.Estimator:\r\n//         setRoleName(\"Guide\");\r\n//         break;\r\n//       case UserRole.Installer:\r\n//         setRoleName(\"Installer\");\r\n//         break;\r\n//       case UserRole.Manager:\r\n//         setRoleName(\"Manager\");\r\n//         break;\r\n//       case UserRole.Admin:\r\n//         setRoleName(\"Admin\");\r\n//         break;\r\n//       case UserRole.Accountant:\r\n//         setRoleName(\"Accountant\");\r\n//         break;\r\n//       case UserRole.Supplier:\r\n//         setRoleName(\"Supplier\");\r\n//         break;\r\n//       default:\r\n//         break;\r\n//     }\r\n\r\n//     setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n//   };\r\n\r\n//   useEffect(() => {\r\n//     SetHeaderAuthorization();\r\n//     GetProfileInfo();\r\n//   }, []);\r\n\r\n//   if (window.$ISMOBILE === true) {\r\n//     if (roleNum !== UserRole.Loading) {\r\n//       return (\r\n//         <FlexContzIndex1>\r\n//           <LeftCont>\r\n//             <Menu> </Menu>\r\n//           </LeftCont>\r\n\r\n//           <FlexColumnCont80vwAutoHeight>\r\n//             <ActionMenu mobilePageProp=\"Profile\"></ActionMenu>\r\n\r\n//             <Div100vw20vh>\r\n//               <TopImage40vh src=\"/DarkProfileImage2.png\"></TopImage40vh>\r\n//             </Div100vw20vh>\r\n\r\n//             <TopDiv40vh>\r\n//               <LogoRelativeLeft\r\n//                 src={\r\n//                   userinfo.Image === null\r\n//                     ? \"/PersonIcon.svg\"\r\n//                     : window.$IMGURL + userinfo.Image\r\n//                 }\r\n//               ></LogoRelativeLeft>\r\n//               <FlexColumnLeftAlign>\r\n//                 <WhiteLeagueHeader>\r\n//                   {userinfo.Name !== null ? userinfo.Name : \"\"}\r\n//                 </WhiteLeagueHeader>\r\n//                 <WhiteAvenirHeader>{roleName}</WhiteAvenirHeader>\r\n//                 <br></br>\r\n//                 <MobileGreenButton\r\n//                   onClick={() => {\r\n//                     setEditProfile(true);\r\n//                   }}\r\n//                 >\r\n//                   Edit Profile\r\n//                 </MobileGreenButton>\r\n//               </FlexColumnLeftAlign>\r\n//             </TopDiv40vh>\r\n\r\n//             <WhiteTopRoundedDiv>\r\n//               <FlexDiv>\r\n//                 <Icon30px30pxPointer\r\n//                   onClick={() => {\r\n//                     history.push(\"/myaccount\");\r\n//                   }}\r\n//                   src=\"/leftarrow.svg\"\r\n//                 ></Icon30px30pxPointer>\r\n//                 <MenuHeader>Profile</MenuHeader>\r\n//                 <MobileSmallGreenButton\r\n//                   onClick={() => {\r\n//                     setPassSwitch(true);\r\n//                     setPassView(\"block\");\r\n//                     window.scrollTo(0, 0);\r\n//                   }}\r\n//                 >\r\n//                   Change Password{\" \"}\r\n//                 </MobileSmallGreenButton>\r\n//               </FlexDiv>\r\n\r\n//               <FlexColumnDiv90vw>\r\n//                 <ProfileDiv>\r\n//                   <UpdateClickables changeView={passView}></UpdateClickables>\r\n//                   <UpdateClickables changeView={metroView}></UpdateClickables>\r\n\r\n//                   <ProfileInfo>\r\n//                     <UpdateDiv changeView={passView}>\r\n//                       <RegularTextBoldRed>{ErrorText}</RegularTextBoldRed>\r\n//                       <ChangePass\r\n//                         passSwitch={passSwitch}\r\n//                         onClose={() => {\r\n//                           setPassSwitch(false);\r\n//                           setPassView(\"none\");\r\n//                           window.scrollTo(0, 0);\r\n//                         }}\r\n//                         onPasswordChanged={ChangePasswordFunc}\r\n//                         onPreview={HandlePasswordChange}\r\n//                       ></ChangePass>\r\n//                       <br></br>\r\n//                     </UpdateDiv>\r\n//                     <hr></hr>\r\n//                     <Clickables>\r\n//                       <UpdateProfile\r\n//                         editprofile={editProfile}\r\n//                         CallProfileAgain={() => {\r\n//                           GetProfileInfo();\r\n//                         }}\r\n//                         role={roleNum}\r\n//                         imgurl={ImgUrl}\r\n//                         metro={MetroValue}\r\n//                         city={CityValue}\r\n//                         email={emailValue}\r\n//                         name={NameValue}\r\n//                         phone={PhoneValue}\r\n//                         address={AddressValue}\r\n//                         updated={updated}\r\n//                         onProfileUpdated={UpdateAccount}\r\n//                         ChangeCity={() => {\r\n//                           setMetroSwitch(false);\r\n//                           setCitySwitch(true);\r\n//                           setMetroView(\"block\");\r\n//                           window.scrollTo(0, 0);\r\n//                         }}\r\n//                         ChangeMetro={() => {\r\n//                           setCitySwitch(false);\r\n//                           setMetroSwitch(true);\r\n//                           setMetroView(\"block\");\r\n//                           window.scrollTo(0, 0);\r\n//                         }}\r\n//                         onPreview={HandleProfileUpdated}\r\n//                       ></UpdateProfile>\r\n//                     </Clickables>\r\n//                   </ProfileInfo>\r\n//                 </ProfileDiv>\r\n//               </FlexColumnDiv90vw>\r\n//             </WhiteTopRoundedDiv>\r\n//           </FlexColumnCont80vwAutoHeight>\r\n//         </FlexContzIndex1>\r\n//       );\r\n//     } else {\r\n//       return (\r\n//         <Backdrop style={{ zIndex: 2 }} open>\r\n//           <CircularProgress color=\"inherit\" />\r\n//         </Backdrop>\r\n//       );\r\n//     }\r\n//   } else {\r\n//     //Desktop\r\n//     if (roleNum !== UserRole.Loading) {\r\n//       return (\r\n//         <FlexContMobileColumn>\r\n//           <FullWidthMobileCont100vw100vh>\r\n//             <Menu> </Menu>\r\n//           </FullWidthMobileCont100vw100vh>\r\n\r\n//           <FlexColumnCont80vwAutoHeight>\r\n//             <ActionMenu mobilePageProp=\"Profile\"></ActionMenu>\r\n//             <FlexRowContFullWidth>\r\n//               <HeaderDiv></HeaderDiv>\r\n//               <p>{confirmMessage}</p>\r\n//               <ProfileDiv>\r\n//                 <UpdateClickables changeView={passView}></UpdateClickables>\r\n//                 <UpdateClickables changeView={metroView}></UpdateClickables>\r\n//                 <ProfileInfo>\r\n//                   <UpdateDiv>\r\n//                     <UpdatePass\r\n//                       onClick={() => {\r\n//                         setPassSwitch(true);\r\n//                         setPassView(\"block\");\r\n//                         window.scrollTo(0, 0);\r\n//                       }}\r\n//                     >\r\n//                       Change Password{\" \"}\r\n//                     </UpdatePass>\r\n//                     <RegularTextBoldRed>{ErrorText}</RegularTextBoldRed>\r\n//                     <ChangePass\r\n//                       passSwitch={passSwitch}\r\n//                       onClose={() => {\r\n//                         setPassSwitch(false);\r\n//                         setPassView(\"none\");\r\n//                         window.scrollTo(0, 0);\r\n//                       }}\r\n//                       onPasswordChanged={ChangePasswordFunc}\r\n//                       onPreview={HandlePasswordChange}\r\n//                     ></ChangePass>\r\n//                     <br></br>\r\n//                   </UpdateDiv>\r\n//                   <hr></hr>\r\n//                   <Clickables>\r\n//                     <UpdateProfile\r\n//                       CallProfileAgain={() => {\r\n//                         GetProfileInfo();\r\n//                       }}\r\n//                       role={roleNum}\r\n//                       imgurl={ImgUrl}\r\n//                       metro={MetroValue}\r\n//                       city={CityValue}\r\n//                       email={emailValue}\r\n//                       name={NameValue}\r\n//                       phone={PhoneValue}\r\n//                       address={AddressValue}\r\n//                       updated={updated}\r\n//                       onProfileUpdated={UpdateAccount}\r\n//                       ChangeCity={() => {\r\n//                         setMetroSwitch(false);\r\n//                         setCitySwitch(true);\r\n//                         setMetroView(\"block\");\r\n//                         window.scrollTo(0, 0);\r\n//                       }}\r\n//                       ChangeMetro={() => {\r\n//                         setCitySwitch(false);\r\n//                         setMetroSwitch(true);\r\n//                         setMetroView(\"block\");\r\n//                         window.scrollTo(0, 0);\r\n//                       }}\r\n//                       onPreview={HandleProfileUpdated}\r\n//                     ></UpdateProfile>\r\n//                   </Clickables>\r\n//                 </ProfileInfo>\r\n//               </ProfileDiv>\r\n//             </FlexRowContFullWidth>\r\n//           </FlexColumnCont80vwAutoHeight>\r\n//         </FlexContMobileColumn>\r\n//       );\r\n//     } else {\r\n//       return (\r\n//         <Backdrop style={{ zIndex: 2 }} open>\r\n//           <CircularProgress color=\"inherit\" />\r\n//         </Backdrop>\r\n//       );\r\n//     }\r\n//   }\r\n// };\r\n\r\n// ProfileScreen.defaultProps = {\r\n//   ProfileName: \"Default Name\",\r\n//   onPreview: () => {},\r\n//   onProfileUpdated: () => {},\r\n// };\r\n\r\n// export default ProfileScreen;\r\n\r\n/* eslint-disable */\r\nimport axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport styled, { keyframes, css } from \"styled-components\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\n\r\n// Existing / Reused Components\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport ChangePass from \"../../comps/ChangePass\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport UpdateProfile from \"../../comps/UpdateProfile\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\n\r\n// Mobile / Helper Components (unchanged)\r\nimport {\r\n  MobileGreenButton,\r\n  MobileSmallGreenButton,\r\n} from \"../../MobileComponents/Buttons\";\r\nimport {\r\n  Div100vw20vh,\r\n  FlexColumnDiv90vw,\r\n  TopDiv40vh,\r\n  WhiteTopRoundedDiv,\r\n} from \"../../MobileComponents/Divs\";\r\nimport { LogoRelativeLeft, TopImage40vh } from \"../../MobileComponents/Images\";\r\nimport {\r\n  MenuHeader,\r\n  WhiteAvenirHeader,\r\n  WhiteLeagueHeader,\r\n} from \"../../MobileComponents/Text\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnLeftAlign,\r\n  FlexContMobileColumn,\r\n  FlexContzIndex1,\r\n  FlexDiv,\r\n  FlexRowContFullWidth,\r\n  FullWidthMobileCont100vw100vh,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { RegularTextBoldRed } from \"../../StylesheetComps/Titles\";\r\nimport IconButton from \"../../comps/IconButton\";\r\n\r\n/* -------------------------------------------\r\n   Animations\r\n------------------------------------------- */\r\nconst fadeIn = keyframes`\r\n  from { opacity: 0; transform: translateY(-10px); }\r\n  to   { opacity: 1; transform: translateY(0); }\r\n`;\r\n\r\nconst slideDown = keyframes`\r\n  from { opacity: 0; transform: translateY(-2rem); }\r\n  to   { opacity: 1; transform: translateY(0); }\r\n`;\r\n\r\nconst hoverTransition = css`\r\n  transition: all 0.2s ease-in-out;\r\n`;\r\n\r\n/* -------------------------------------------\r\n   Shared Styled Components\r\n------------------------------------------- */\r\nconst MainContainer = styled.div`\r\n  display: flex;\r\n  width: 100%;\r\n  gap: 2rem;\r\n  animation: ${fadeIn} 0.4s ease;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    width: 95%;\r\n  }\r\n`;\r\n\r\nconst ContentCard = styled.div`\r\n  background-color: #ffffffee;\r\n  border-radius: 16px;\r\n  padding: 2rem;\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n  width: 85%;\r\n  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.07);\r\n  animation: ${slideDown} 0.4s ease;\r\n  @media (max-width: 1006px) {\r\n    width: 100%;\r\n    margin: 0;\r\n    box-shadow: none;\r\n    border-radius: 16px 16px 0 0;\r\n  }\r\n`;\r\n\r\nconst SectionSeparator = styled.hr`\r\n  border: none;\r\n  height: 1px;\r\n  background: #e2e2e2;\r\n  margin: 2rem 0;\r\n`;\r\n\r\nconst UpdatePassButton = styled.button`\r\n  background-color: #007aff;\r\n  padding: 0.75rem 1rem;\r\n  color: #fff;\r\n  border-radius: 12px;\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Helvetica,\r\n    Arial, sans-serif;\r\n  font-weight: 500;\r\n  font-size: 1rem;\r\n  border: none;\r\n  cursor: pointer;\r\n  margin-top: 1rem;\r\n  ${hoverTransition}\r\n\r\n  &:hover {\r\n    background-color: #006ae6;\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: 50%;\r\n  }\r\n`;\r\n\r\nconst HorizFlex = styled.div`\r\n  display: flex;\r\n  width: 100%;\r\n  flex-wrap: wrap;\r\n  gap: 1rem;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    gap: 0;\r\n  }\r\n`;\r\n\r\nconst HiddenContent = styled.div`\r\n  ${(props) => (props.isVisible ? \"display: block;\" : \"display: none;\")}\r\n  animation: ${fadeIn} 0.3s ease;\r\n`;\r\n\r\nconst HeaderDiv = styled.div`\r\n  display: none;\r\n  @media (max-width: 1006px) {\r\n    width: 40%;\r\n    display: flex;\r\n    justify-content: space-around;\r\n  }\r\n`;\r\n\r\nconst SmallSpacer = styled.div`\r\n  margin: 1rem 0;\r\n`;\r\n\r\n/* -------------------------------------------\r\n   New Layout Subcomponents\r\n------------------------------------------- */\r\n\r\n/**\r\n * ProfileHeader\r\n * Renders the user's name & role with a hero image in the background (mobile).\r\n */\r\nconst ProfileHeader = ({ userinfo, roleName, onEdit }) => {\r\n  return (\r\n    <>\r\n      <Div100vw20vh>\r\n        <TopImage40vh src=\"/DarkProfileImage2.png\" />\r\n      </Div100vw20vh>\r\n\r\n      <TopDiv40vh>\r\n        <LogoRelativeLeft\r\n          src={\r\n            userinfo.Image === null\r\n              ? \"/PersonIcon.svg\"\r\n              : window.$IMGURL + userinfo.Image\r\n          }\r\n        />\r\n        <FlexColumnLeftAlign>\r\n          <WhiteLeagueHeader>\r\n            {userinfo.Name !== null ? userinfo.Name : \"\"}\r\n          </WhiteLeagueHeader>\r\n          <WhiteAvenirHeader>{roleName}</WhiteAvenirHeader>\r\n          <SmallSpacer />\r\n          <MobileGreenButton onClick={onEdit}>Edit Profile</MobileGreenButton>\r\n        </FlexColumnLeftAlign>\r\n      </TopDiv40vh>\r\n    </>\r\n  );\r\n};\r\n\r\n/**\r\n * ProfileActions\r\n * Renders the top row actions for Desktop or Mobile:\r\n * - “Back” arrow\r\n * - Page Title\r\n * - “Change Password” button\r\n */\r\nconst ProfileActions = ({ onBack, onChangePassword }) => {\r\n  return (\r\n    <FlexDiv>\r\n      <Icon30px30pxPointer onClick={onBack} src=\"/leftarrow.svg\" />\r\n      <MenuHeader>Profile</MenuHeader>\r\n      <IconButton onClick={onChangePassword} src='/passwordwhite_icon.svg'>Change Password</IconButton>\r\n    </FlexDiv>\r\n  );\r\n};\r\n\r\n/**\r\n * DesktopHeaderPlaceholder\r\n * Displays an empty div on mobile or any placeholder if needed for desktop.\r\n */\r\nconst DesktopHeaderPlaceholder = () => {\r\n  return <HeaderDiv />;\r\n};\r\n\r\n/**\r\n * ProfileCard\r\n * The main content card that includes:\r\n * - \"Change Password\" button (desktop)\r\n * - The password form (conditionally shown)\r\n * - UpdateProfile form\r\n */\r\nconst ProfileCard = ({\r\n  isMobile,\r\n  passView,\r\n  passSwitch,\r\n  onClosePass,\r\n  errorText,\r\n  onPasswordChanged,\r\n  onPreviewPassword,\r\n  onTogglePassView,\r\n  // For updating user info\r\n  editProfile,\r\n  onUpdateProfile,\r\n  userProps,\r\n  updated,\r\n  onPreviewProfile,\r\n  roleNum,\r\n}) => {\r\n  return (\r\n    <ContentCard>\r\n      {/* Desktop: \"Change Password\" at top */}\r\n      {!isMobile && (\r\n        <>\r\n          <IconButton width='150px' onClick={onTogglePassView} src='/passwordwhite_icon.svg'>Change Password</IconButton>\r\n          <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n          <ChangePass\r\n            passSwitch={passSwitch}\r\n            onClose={onClosePass}\r\n            onPasswordChanged={onPasswordChanged}\r\n            onPreview={onPreviewPassword}\r\n          />\r\n          <SectionSeparator />\r\n        </>\r\n      )}\r\n\r\n      {/* Mobile: \"Change Password\" is triggered via the top bar. Render form conditionally below */}\r\n      {isMobile && (\r\n        <HiddenContent isVisible={passView === \"block\"}>\r\n          <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n          <ChangePass\r\n            passSwitch={passSwitch}\r\n            onClose={onClosePass}\r\n            onPasswordChanged={onPasswordChanged}\r\n            onPreview={onPreviewPassword}\r\n          />\r\n          <SectionSeparator />\r\n        </HiddenContent>\r\n      )}\r\n\r\n      <HorizFlex>\r\n        <UpdateProfile\r\n          editprofile={editProfile}\r\n          updated={updated}\r\n          {...userProps}\r\n          role={roleNum}\r\n          onProfileUpdated={onUpdateProfile}\r\n          onPreview={onPreviewProfile}\r\n        />\r\n      </HorizFlex>\r\n    </ContentCard>\r\n  );\r\n};\r\n\r\n/* -------------------------------------------\r\n   Main ProfileScreen\r\n------------------------------------------- */\r\n\r\nconst ProfileScreen = () => {\r\n  const history = useHistory();\r\n\r\n  // States\r\n  const [passSwitch, setPassSwitch] = useState(false);\r\n  const [editProfile, setEditProfile] = useState(false);\r\n  const [ErrorText, setErrorText] = useState(\"\");\r\n  const [passView, setPassView] = useState(\"none\");\r\n\r\n  const [userinfo, setUserinfo] = useState({});\r\n  const [roleName, setRoleName] = useState(\"\");\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n\r\n  // Existing Profile Info\r\n  const [userId, setUserId] = useState(0);\r\n  const [UsernameValue, setUsernameValue] = useState(\"\");\r\n  const [NameValue, setNameValue] = useState(\"\");\r\n  const [AddressValue, setAddressValue] = useState(\"\");\r\n  const [CityValue, setCityValue] = useState(\"\");\r\n  const [PhoneValue, setPhoneValue] = useState(\"\");\r\n  const [MetroValue, setMetroValue] = useState(\"\");\r\n  const [ImgUrl, setImgUrl] = useState(\"\");\r\n  const [EmailValue, setEmailValue] = useState(\"\");\r\n\r\n  // For re-renders\r\n  const [updated] = useState(0);\r\n\r\n  // For password\r\n  const [cpCurrentUsername, setcpCurrentUsername] = useState(\"\");\r\n  const [cpOldPass, setcpOldPass] = useState(\"\");\r\n  const [cpNewPass, setcpNewPass] = useState(\"\");\r\n  const [cpConfirmNewPass, setcpConfirmNewPass] = useState(\"\");\r\n\r\n  // Detect Mobile\r\n  const isMobile = window.$ISMOBILE === true;\r\n\r\n  /* -------------------------------\r\n     Load User Info\r\n  --------------------------------*/\r\n  const GetProfileInfo = async () => {\r\n    try {\r\n      const resp = await axios.get(window.$DBURL + \"users/profile\", {});\r\n      const { user } = resp.data;\r\n\r\n      sessionStorage.setItem(\"userInfo\", JSON.stringify(user));\r\n      setUserinfo(user);\r\n\r\n      setUserId(user.Id);\r\n      setUsernameValue(user.Username);\r\n      setNameValue(user.Name);\r\n      setAddressValue(user.Street);\r\n      setCityValue(user.City);\r\n      setPhoneValue(user.Phone);\r\n      setMetroValue(user.Metro);\r\n      setImgUrl(user.Image);\r\n      setEmailValue(user.Email);\r\n\r\n      // Determine role name\r\n      switch (user.Role) {\r\n        case UserRole.User:\r\n          setRoleName(\"Homeowner\");\r\n          break;\r\n        case UserRole.VIP:\r\n          setRoleName(\"VIP Homeowner\");\r\n          break;\r\n        case UserRole.Worker:\r\n          setRoleName(\"Worker\");\r\n          break;\r\n        case UserRole.OwnerOperator:\r\n          setRoleName(\"Owner / Operator\");\r\n          break;\r\n        case UserRole.Estimator:\r\n          setRoleName(\"Guide\");\r\n          break;\r\n        case UserRole.Installer:\r\n          setRoleName(\"Installer\");\r\n          break;\r\n        case UserRole.Manager:\r\n          setRoleName(\"Manager\");\r\n          break;\r\n        case UserRole.Admin:\r\n          setRoleName(\"Admin\");\r\n          break;\r\n        case UserRole.Accountant:\r\n          setRoleName(\"Accountant\");\r\n          break;\r\n        case UserRole.Supplier:\r\n          setRoleName(\"Supplier\");\r\n          break;\r\n        default:\r\n          break;\r\n      }\r\n      setRoleNum(user.Role);\r\n    } catch (err) {\r\n      console.error(err);\r\n    }\r\n  };\r\n\r\n  /* -------------------------------\r\n     Password Change Logic\r\n  --------------------------------*/\r\n  const HandlePasswordChangePreview = ({\r\n    currentUsername,\r\n    oldPass,\r\n    newPass,\r\n    confirmNewPass,\r\n  }) => {\r\n    setcpCurrentUsername(currentUsername);\r\n    setcpOldPass(oldPass);\r\n    setcpNewPass(newPass);\r\n    setcpConfirmNewPass(confirmNewPass);\r\n  };\r\n\r\n  const ChangePasswordFunc = async (oldPass, newPass) => {\r\n    try {\r\n      setErrorText(\"Old Password Incorrect\");\r\n      // Log out\r\n      await axios.post(`${window.$DBURL}users/${userId}/session/logout`);\r\n\r\n      // Attempt to update password\r\n      const resp = await axios.put(`${window.$DBURL}users/password`, {\r\n        UserName: UsernameValue,\r\n        OldPassword: oldPass,\r\n        NewPassword: newPass,\r\n      });\r\n\r\n      if (resp.status === 200) {\r\n        setErrorText(\"\");\r\n\r\n        // Remove token & re-login\r\n        delete axios.defaults.headers.common[\"Authorization\"];\r\n        const resplogin = await axios.post(`${window.$DBURL}users/session/login`, {\r\n          Username: UsernameValue,\r\n          Password: newPass,\r\n        });\r\n\r\n        if (resplogin.data) {\r\n          const token = resplogin.data.Session.AuthToken;\r\n          axios.defaults.baseURL = window.$DBURL;\r\n          sessionStorage.setItem(\"token\", token);\r\n          axios.defaults.headers.common[\"Authorization\"] = `Basic ${token}`;\r\n        }\r\n\r\n        setPassSwitch(false);\r\n        setPassView(\"none\");\r\n        window.scrollTo(0, 0);\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  /* -------------------------------\r\n     Profile Update Logic\r\n  --------------------------------*/\r\n  const HandleProfileUpdatePreview = ({\r\n    emailValue2,\r\n    NameValue2,\r\n    AddressValue2,\r\n    PhoneValue2,\r\n  }) => {\r\n    setEmailValue(emailValue2);\r\n    setNameValue(NameValue2);\r\n    setAddressValue(AddressValue2);\r\n    setPhoneValue(PhoneValue2);\r\n  };\r\n\r\n  const UpdateAccount = async (email, name, address, phone, image) => {\r\n    try {\r\n      await axios.put(`${window.$DBURL}users`, {\r\n        Name: name,\r\n        Phone: phone,\r\n        Id: userId,\r\n        Street: address,\r\n        Email: email,\r\n        Username: UsernameValue,\r\n        Image: image,\r\n      });\r\n      // Refresh profile info\r\n      GetProfileInfo();\r\n    } catch (err) {\r\n      console.error(err);\r\n    }\r\n  };\r\n\r\n  /* -------------------------------\r\n     Effects\r\n  --------------------------------*/\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetProfileInfo();\r\n    // eslint-disable-next-line\r\n  }, []);\r\n\r\n  /* -------------------------------\r\n     Conditionally Render\r\n  --------------------------------*/\r\n  if (roleNum === UserRole.Loading) {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n\r\n  /* -------------------------------\r\n     Mobile Layout\r\n  --------------------------------*/\r\n  if (isMobile) {\r\n    return (\r\n      <FlexContzIndex1>\r\n        <LeftCont>\r\n          <Menu />\r\n        </LeftCont>\r\n\r\n        <FlexColumnCont80vwAutoHeight>\r\n          <ActionMenu mobilePageProp=\"Profile\" />\r\n\r\n          {/* Mobile Hero */}\r\n          <ProfileHeader\r\n            userinfo={userinfo}\r\n            roleName={roleName}\r\n            onEdit={() => setEditProfile(true)}\r\n          />\r\n\r\n          <WhiteTopRoundedDiv>\r\n            {/* Top bar actions & Title */}\r\n            <ProfileActions\r\n              onBack={() => history.push(\"/myaccount\")}\r\n              onChangePassword={() => {\r\n                setPassSwitch(true);\r\n                setPassView(\"block\");\r\n                window.scrollTo(0, 0);\r\n              }}\r\n            />\r\n\r\n            <FlexColumnDiv90vw>\r\n              <MainContainer>\r\n                <ProfileCard\r\n                  isMobile\r\n                  passView={passView}\r\n                  passSwitch={passSwitch}\r\n                  onClosePass={() => {\r\n                    setPassSwitch(false);\r\n                    setPassView(\"none\");\r\n                    window.scrollTo(0, 0);\r\n                  }}\r\n                  errorText={ErrorText}\r\n                  onPasswordChanged={ChangePasswordFunc}\r\n                  onPreviewPassword={HandlePasswordChangePreview}\r\n                  onTogglePassView={() => {\r\n                    setPassSwitch(true);\r\n                    setPassView(\"block\");\r\n                  }}\r\n                  editProfile={editProfile}\r\n                  onUpdateProfile={UpdateAccount}\r\n                  userProps={{\r\n                    imgurl: ImgUrl,\r\n                    metro: MetroValue,\r\n                    city: CityValue,\r\n                    email: EmailValue,\r\n                    name: NameValue,\r\n                    phone: PhoneValue,\r\n                    address: AddressValue,\r\n                  }}\r\n                  updated={updated}\r\n                  onPreviewProfile={HandleProfileUpdatePreview}\r\n                  roleNum={roleNum}\r\n                />\r\n              </MainContainer>\r\n            </FlexColumnDiv90vw>\r\n          </WhiteTopRoundedDiv>\r\n        </FlexColumnCont80vwAutoHeight>\r\n      </FlexContzIndex1>\r\n    );\r\n  }\r\n\r\n  /* -------------------------------\r\n     Desktop Layout\r\n  --------------------------------*/\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <FullWidthMobileCont100vw100vh>\r\n        <Menu />\r\n      </FullWidthMobileCont100vw100vh>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu mobilePageProp=\"Profile\" />\r\n\r\n        <FlexRowContFullWidth>\r\n          <DesktopHeaderPlaceholder />\r\n\r\n          <MainContainer>\r\n            <ProfileCard\r\n              isMobile={false}\r\n              passView={passView}\r\n              passSwitch={passSwitch}\r\n              onClosePass={() => {\r\n                setPassSwitch(false);\r\n                setPassView(\"none\");\r\n                window.scrollTo(0, 0);\r\n              }}\r\n              errorText={ErrorText}\r\n              onPasswordChanged={ChangePasswordFunc}\r\n              onPreviewPassword={HandlePasswordChangePreview}\r\n              onTogglePassView={() => {\r\n                setPassSwitch(true);\r\n                setPassView(\"block\");\r\n              }}\r\n              editProfile={editProfile}\r\n              onUpdateProfile={UpdateAccount}\r\n              userProps={{\r\n                imgurl: ImgUrl,\r\n                metro: MetroValue,\r\n                city: CityValue,\r\n                email: EmailValue,\r\n                name: NameValue,\r\n                phone: PhoneValue,\r\n                address: AddressValue,\r\n              }}\r\n              updated={updated}\r\n              onPreviewProfile={HandleProfileUpdatePreview}\r\n              roleNum={roleNum}\r\n            />\r\n          </MainContainer>\r\n        </FlexRowContFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nexport default ProfileScreen;\r\n","import styled from \"styled-components\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const StickyOverlayDiv160vwAutoHeight = styled.div`\r\n  width: 160vh;\r\n  background-color: rgba(0, 0, 0, 0.5);\r\n  position: sticky;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  left: 0;\r\n  z-index: 100;\r\n  display: flex;\r\n`;\r\n\r\nexport const FixedOverlayRegular = styled.div`\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  left: 0;\r\n  height: ${(props) => (props.height ? props.height : \"\")};\r\n  background-color: \"rgba(0,0,0,.7)\";\r\n  background-color: rgba(0, 0, 0, 0.7);\r\n  zindex: 1000;\r\n`;\r\n\r\nexport const FixedOverlay1000vh = styled.div`\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  left: 0;\r\n  height: 1000vh;\r\n  background-color: rgba(0, 0, 0, 0.7);\r\n  z-index: 1000;\r\n`;\r\n\r\nexport const FixedOverlay200vh = styled.div`\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  left: 0;\r\n  height: 200vh;\r\n  background-color: rgba(0, 0, 0, 0.7);\r\n  z-index: 1000;\r\n`;\r\n\r\nexport const OverlayCont300pxAutoHeight = styled.div`\r\n  background-color: white;\r\n  width: 300px;\r\n  border-radius: 10px;\r\n  border: 1px solid black;\r\n  margin: 30px;\r\n  align-items: center;\r\n`;\r\n\r\nexport const OverlayCont450pxAutoHeight = styled.div`\r\n  background-color: white;\r\n  width: 450px;\r\n  border-radius: 10px;\r\n  border: 1px solid black;\r\n  margin: 30px;\r\n  align-items: center;\r\n`;\r\n\r\nexport const AbsoluteOverlayDivFullWidth = styled.div`\r\n  width: 100%;\r\n  height: 100%;\r\n  background-color: rgba(0, 0, 0, 0.5);\r\n  position: absolute;\r\n  z-index: 100;\r\n  left: 16%;\r\n  display: flex;\r\n  @media (max-width: 1006px) {\r\n    left: 0%;\r\n  }\r\n`;\r\n\r\nexport const OverlayDiv200vh400vw = styled.div`\r\n  width: 200vh;\r\n  height: 400vw;\r\n  background-color: rgba(0, 0, 0, 0.5);\r\n  position: absolute;\r\n  z-index: 100;\r\n  left: 16%;\r\n  display: flex;\r\n`;\r\n\r\nexport const FlexOverlayDivFullWidth = styled.div`\r\n  display: flex;\r\n  width: 100%;\r\n  background-color: white;\r\n  @media (max-width: 1006px) {\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n    width: 97vw;\r\n  }\r\n`;\r\n\r\nexport default nullProp;\r\n","import React, { useState } from \"react\";\r\nimport {\r\n  FlexColumnCont250pxGreenBorderTopRounded,\r\n  FlexColumnCont90x95Percent,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\n\r\nimport {\r\n  SmallHeaderLeagueSpartan,\r\n  GreyNavigationButton,\r\n  GreenNavigationButton,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { LinkText } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { Icon20x20 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { SmallTextPadding } from \"../../../StylesheetComps/Titles\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\n\r\nconst SaveProjectWindow = ({\r\n  saveOpen,\r\n  onSaveCase,\r\n  SaveCase_ChangeStatusToSubmit,\r\n  onClose,\r\n}) => {\r\n  const [submitted, setSubmitted] = useState(false);\r\n\r\n  if (!saveOpen) return null;\r\n  if (submitted !== true) {\r\n    return (\r\n      <FixedOverlay200vh>\r\n        <FlexColumnCont250pxGreenBorderTopRounded>\r\n          <FlexRowCont\r\n            height=\"100%\"\r\n            justifycontent=\"flex-start\"\r\n            alignitems=\"baseline\"\r\n          >\r\n            <FlexColumnCont90x95Percent>\r\n              <SmallHeaderLeagueSpartan>\r\n                Ready to Submit Your Project?\r\n              </SmallHeaderLeagueSpartan>\r\n              <SmallTextPadding>\r\n                Make sure to review all of your information and confirm the\r\n                details. Once you press submit, our team will be alerted and get\r\n                started right away. You will receive a confirmation email and\r\n                the project proposal within 1-2 days*\r\n              </SmallTextPadding>\r\n\r\n              <FlexRowCont justifycontent=\"flex-end\">\r\n                <LinkText\r\n                  onClick={() => {\r\n                    onClose();\r\n                  }}\r\n                >\r\n                  Cancel\r\n                </LinkText>\r\n                <GreyNavigationButton\r\n                  width=\"50%\"\r\n                  onClick={() => {\r\n                    setSubmitted(true);\r\n                    onSaveCase();\r\n                  }}\r\n                >\r\n                  Draft\r\n                </GreyNavigationButton>\r\n                <GreenNavigationButton\r\n                  width=\"50%\"\r\n                  onClick={() => {\r\n                    setSubmitted(true);\r\n                    SaveCase_ChangeStatusToSubmit();\r\n                  }}\r\n                >\r\n                  Submit\r\n                </GreenNavigationButton>\r\n              </FlexRowCont>\r\n            </FlexColumnCont90x95Percent>\r\n            <Icon20x20\r\n              onClick={() => {\r\n                onClose();\r\n              }}\r\n              src=\"/Close.svg\"\r\n            ></Icon20x20>\r\n          </FlexRowCont>\r\n        </FlexColumnCont250pxGreenBorderTopRounded>\r\n      </FixedOverlay200vh>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nSaveProjectWindow.defaultProps = {\r\n  SaveCase: () => {},\r\n  SaveCase_ChangeStatusToSubmit: () => {},\r\n};\r\n\r\nexport default SaveProjectWindow;\r\n","import React from \"react\";\r\nimport Lottie from \"react-lottie\";\r\n\r\nexport default function LottieAnimation({ lotti, width, height }) {\r\n  const defaultOptions = {\r\n    loop: true,\r\n    autoplay: true,\r\n    animationData: lotti,\r\n    rendererSettings: {\r\n      preserveAspectRatio: \"xMidYMid slice\",\r\n    },\r\n  };\r\n\r\n  return (\r\n    <div>\r\n      <Lottie options={defaultOptions} height={height} width={width} />\r\n    </div>\r\n  );\r\n};","import styled from \"styled-components\";\r\nimport { ColorPalette } from \"../Colors\";\r\nimport { animated } from \"react-spring\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const MobileMainCont = styled.div`\r\n  display: none;\r\n  @media (max-width: 1006px) {\r\n    display: block;\r\n    width: 101vw;\r\n    height: 8vh;\r\n    top: 0;\r\n    display: flex;\r\n    align-items: center;\r\n    right: 2vw;\r\n  }\r\n`;\r\n\r\nexport const MenuMainCont = styled.div`\r\n  width: 100vw;\r\n  height: 13vh;\r\n  display: flex;\r\n  display: none;\r\n  border-bottom: 1px dotted #d3d3d3;\r\n  @media (max-width: 1006px) {\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport const SummaryContainerItems = styled.div`\r\n  height: auto;\r\n  margin-bottom: 5px;\r\n  padding: ${(props) => (props.padding ? props.padding : \"\")};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  justify-content: space-between;\r\n`;\r\n\r\nexport const SummaryContainer = styled.div`\r\n  width: 90%;\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  padding: 10px;\r\n  margin: 20px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content:${(props) => (props.justifycontent ? props.justifycontent : \"\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobileWidth ? props.mobileWidth : \"95vw\")};\r\n    padding: 0px;\r\n    margin: 0px;\r\n  }\r\n`;\r\n\r\nexport const FlexDivMargins = styled.div`\r\n  display: flex;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nexport const FlexEndDivAutox15Percent = styled.div`\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  height: 15%;\r\n`;\r\n\r\nexport const Div70Percent = styled.div`\r\n  width: 70%;\r\n`;\r\n\r\nexport const FlexColumnDivSpaceBetween = styled.div`\r\n  display: flex;\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  justify-content: space-between;\r\n  flex-direction: column;\r\n  height: 100%;\r\n`;\r\n\r\nexport const Div30Percent = styled.div`\r\n  width: 30%;\r\n`;\r\n\r\nexport const FlexDiv50Percent = styled.div`\r\n  width: 50%;\r\n  display: flex;\r\n`;\r\n\r\nexport const FlexDivSpaceBetween = styled.div`\r\n  display: flex;\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  justify-content: space-between;\r\n  margin-top:  ${(props) => (props.margintop ? props.margintop : \"1%\")};\r\n  margin-left:  ${(props) => (props.marginleft ? props.marginleft : \"1%\")};\r\n  padding-bottom: ${(props) => (props.paddingbottom ? props.paddingbottom : \"\")};\r\n    background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  text-align: ${(props) => (props.textalign ? props.textalign : \"center\")};;\r\n  align-items: center;\r\n`;\r\n\r\nexport const Div300x400pxMargin30px = styled.div`\r\n  background-color: white;\r\n  width: 300px;\r\n  height: 400px;\r\n  border-radius: 10px;\r\n  border: 1px solid black;\r\n  margin: 30px;\r\n  align-items: center;\r\n  justify-content: center;\r\n`;\r\n\r\nexport const BlankDiv = styled.div``;\r\n\r\nexport const FlexDiv40PercentMobileWidth100Percent = styled.div`\r\n  display: flex;\r\n  width: 40%;\r\n  @media (max-width: 1006px) {\r\n    width: 100%;\r\n  }\r\n`;\r\n\r\nexport const FlexDiv40PercentMobileDisplayNone = styled.div`\r\n  display: flex;\r\n  width: 40%;\r\n  @media (max-width: 1006px) {\r\n    width: 100%;\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport const FlexDivLeftAlign = styled.div`\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: flex-start;\r\n  align-items: baseline;\r\n`;\r\n\r\nexport const FlexCenterDiv100PercentSpaceBetween = styled.div`\r\n  width: 100%;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n`;\r\n\r\nexport const FlexCenterDiv100PercentCenter = styled.div`\r\n  width: 100%;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  align-items: center;\r\n  justify-content: center;\r\n`;\r\n\r\nexport const FlexDiv90PercentMargins = styled(animated.div)`\r\n  width: 90%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n  @media (max-width: 1006px) {\r\n    width: 100%;\r\n  }\r\n`;\r\n\r\nexport const GridDivMobileFlexDiv = styled.div`\r\n  display: grid;\r\n  grid-template-columns: repeat(3, 1fr);\r\n  margin-bottom: 5%;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\nexport const FlexDiv80Percent = styled.div`\r\n  max-width: 80%;\r\n  display: flex;\r\n  min-height: 0;\r\n  flex-flow: row wrap;\r\n`;\r\n\r\nexport const GridDiv80xAutoPercent = styled.div`\r\n  width: 80%;\r\n  display: grid;\r\n  grid-template-columns: auto auto auto;\r\n  gap: 5px;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n    height: 100vh;\r\n    align-items: center;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n  }\r\n`;\r\n\r\nexport const FlexDiv70x7Percent = styled.div`\r\n  width: ${(props) =>\r\n    props.width ? props.width : \"70%\"};  \r\n  height: ${(props) =>\r\n    props.height ? props.height : \"7%\"};  \r\n    margin: ${(props) =>\r\n      props.margin ? props.margin : \"30px\"};  \r\n  display: flex;\r\n  align-items: ${(props) =>\r\n    props.alignitems ? props.alignitems : \"center\"};  \r\n  margin-left: 2%;\r\n  overflow-y: ${(props) =>\r\n    props.overflowy ? props.overflowy : \"\"};  \r\n  @media (max-width: 1006px) {\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport const GreyHRMobileHidden = styled.hr`\r\n  width: 100%;\r\n  border: 1px solid ${ColorPalette.PrimaryGrey};\r\n  @media (max-width: 1006px) {\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport const HiddenDivSpaceAroundColumn = styled.div`\r\n  display: ${(props) =>\r\n    props.vacationdisplayprop ? props.vacationdisplayprop : \"none\"};\r\n  border: 1px dotted black;\r\n  align-items: left;\r\n  justify-content: space-around;\r\n  flex-direction: column;\r\n  padding-bottom: 2%;\r\n  padding-left: 2%;\r\n`;\r\n\r\nexport const DivWidth80PercentFlexStartDisplayProp = styled.div`\r\n  width: 80%;\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"none\")};\r\n  justify-content: flex-start;\r\n`;\r\n\r\nexport const FullWidthDivPropDisplay = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"100%\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"none\")};\r\n`;\r\n\r\nexport const FlexColumnStartDiv45Percent = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"45%\")};\r\n  justify-content: flex-start;\r\n  display: flex;\r\n  flex-direction: column;\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"45%\")};\r\n  }\r\n`;\r\n\r\nexport const FlexDivCenter = styled.div`\r\n  display: flex;\r\n  justify-content: center;\r\n  margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n`;\r\n\r\nexport const FlexDivFlexEnd = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  justify-content: flex-end;\r\n  display: flex;\r\n`;\r\n\r\nexport const FlexDivSpaceAround = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  justify-content: space-around;\r\n  display: flex;\r\n`;\r\n\r\nexport const Div400x75px = styled.div`\r\n  width: 400px;\r\n  height: 75px;\r\n  display: flex;\r\n  justify-content: center;\r\n  @media (max-width: 1006px) {\r\n    width: auto;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nexport const Div450x175px = styled.div`\r\n  width: 450px;\r\n  height: 175px;\r\n  justify-content: center;\r\n  align-items: center;\r\n  position: relative;\r\n  left: 2em;\r\n  top: 1em;\r\n  @media (max-width: 1006px) {\r\n    left: 0;\r\n    width: auto;\r\n    height: auto;\r\n    text-align: center;\r\n  }\r\n`;\r\n\r\nexport const Div300pxMargin30px = styled.div`\r\n  background-color: white;\r\n  width: 300px;\r\n  padding: 14px;\r\n  border-radius: 10px;\r\n  border: 1px solid black;\r\n   @media (max-width: 1006px) {\r\n    width: 80vw;\r\n    margin-left: 6vw;\r\n    margin-right: auto;\r\n    margin-top: 4vh;\r\n    margin-bottom: 2vh;\r\n    padding-bottom: 7vh;\r\n  }\r\n`;\r\n\r\nexport const FlexColumnDiv = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  flex-direction: column;\r\n  justify-content: ${(props) => (props.justifycontent ? props.justifycontent : \"\")};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n  text-align: ${(props) => (props.textalign ? props.textalign : \"\")};\r\n`;\r\n\r\nexport const QuadContainer = styled.div`\r\n  width: 100%;\r\n  height: 6%;\r\n  display: flex;\r\n  justify-content: flex-start;\r\n`;\r\n\r\nexport const QuadDeleteTitle = styled.p`\r\n  font-family: Avenir;\r\n  cursor: pointer;\r\n  color: red;\r\n`;\r\n\r\nexport const QuoteQuadMedium = styled.div`\r\n  width: 15%;\r\n  display: flex;\r\n  border: 1px solid #aaaaaa;\r\n  justify-content: center;\r\n  background-color: white;\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"\")};\r\n  border-bottom-right-radius: ${(props) =>\r\n    props.bottomrightborder ? props.bottomrightborder : \"\"};\r\n`;\r\n\r\nexport const QuoteQuadHeaderBorderTopLeft = styled.div`\r\n  width: 45%;\r\n  height: 30px;\r\n  align-items: center;\r\n  text-align: center;\r\n  display: flex;\r\n  justify-content: flex-start;\r\n  background-color: #eeeeee;\r\n  padding: 5px;\r\n  border-top-left-radius: 10px;\r\n`;\r\n\r\nexport const QuoteQuadHead = styled.div`\r\n  width: 20%;\r\n  height: 30px;\r\n  align-items: center;\r\n  text-align: center;\r\n  display: flex;\r\n  padding: 5px;\r\n  justify-content: center;\r\n  background-color: #eeeeee;\r\n`;\r\n\r\nexport const QuoteQuadHeadMedium = styled.div`\r\n  width: 15%;\r\n  height: 30px;\r\n  align-items: center;\r\n  text-align: center;\r\n  display: flex;\r\n  padding: 5px;\r\n  justify-content: center;\r\n  background-color: #eeeeee;\r\n`;\r\n\r\nexport const QuoteQuadHeaderBorderTopRight = styled.div`\r\n  width: 15%;\r\n  height: 30px;\r\n  align-items: center;\r\n  text-align: center;\r\n  display: flex;\r\n  padding: 5px;\r\n  justify-content: center;\r\n  background-color: #eeeeee;\r\n  border-top-right-radius: 10px;\r\n`;\r\n\r\nexport const FullWidthDivFlexStart = styled.div`\r\n  width: 72vw;\r\n  height: 100%;\r\n  display: flex;\r\n  justify-content: flex-start;\r\n`;\r\n\r\nexport const FlexDivCentered45Percent = styled.div`\r\n  min-width: auto;\r\n  width: 43.5%;\r\n  text-align: left;\r\n  padding: 0.5%;\r\n  border: 1px solid #aaaaaa;\r\n  display: ${(props) => (props.displayProp ? props.displayProp : \"flex\")};\r\n  justify-content: flex-start;\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"white\")};\r\n`;\r\n\r\nexport const FlexColumnDivCentered20Percent = styled.div`\r\n  width: 20%;\r\n  border: 1px solid #aaaaaa;\r\n  display: ${(props) => (props.displayProp ? props.displayProp : \"flex\")};\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"white\")};\r\n`;\r\n\r\nexport const FlexibleEstimateDiv35Percent = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"35%\")};\r\n  height: auto;\r\n  min-height: 95px;\r\n  max-height: 210px;\r\n  align-items: center;\r\n  text-align: ${(props) => (props.textalign ? props.textalign : \"left\")};\r\n  font-weight: ${(props) => (props.fontweight ? props.fontweight : \"regular\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"\")};\r\n  padding-top: ${(props) => (props.paddingtop ? props.paddingtop : \"\")};\r\n  padding-bottom: ${(props) =>\r\n    props.paddingbottom ? props.paddingbottom : \"\"};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"flex-start\"};\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"flex\")};\r\n    // width:33vw;\r\n  }\r\n`;\r\n\r\nexport const FlexibleEstimateDiv15Percent = styled.div`\r\n  min-width: ${(props) => (props.minwidth ? props.minwidth : \"10%\")};\r\n  width: ${(props) => (props.width ? props.width : \"17%\")};\r\n  max-width: 17%;\r\n  height: auto;\r\n  min-height: 95px;\r\n  max-height: 210px;\r\n  align-items: center;\r\n  border-right: ${(props) => (props.borderright ? props.borderright : \"\")};\r\n  font-weight: ${(props) => (props.fontweight ? props.fontweight : \"regular\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"\")};\r\n  padding-top: ${(props) => (props.paddingtop ? props.paddingtop : \"\")};\r\n  padding-bottom: ${(props) =>\r\n    props.paddingbottom ? props.paddingbottom : \"\"};\r\n  text-align: left;\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  justify-content: center;\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"flex\")};\r\n  }\r\n`;\r\n\r\nexport const GreyFlexibleEstimateDiv15Percent = styled.div`\r\n  min-width: 10%;\r\n  width: 17%;\r\n  max-width: 17%;\r\n  // height: auto;\r\n  // min-height: 110px;\r\n  // max-height: 210px;\r\n  flex-grow: 1;\r\n  border-right: ${(props) => (props.borderright ? props.borderright : \"\")};\r\n  align-items: center;\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"\")};\r\n  font-weight: ${(props) => (props.fontweight ? props.fontweight : \"regular\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  text-align: left;\r\n  padding-top: ${(props) => (props.paddingtop ? props.paddingtop : \"\")};\r\n  padding-bottom: ${(props) =>\r\n    props.paddingbottom ? props.paddingbottom : \"\"};\r\n  background-color: ${(props) =>\r\n    props.bgcolor ? props.bgcolor : ColorPalette.TertiaryGrey};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  justify-content: center;\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"flex\")};\r\n  }\r\n`;\r\n\r\nexport const FlexibleEstimateDiv5Percent = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"5%\")};\r\n  height: auto;\r\n  //min-height: 110px;\r\n  //max-height: 210px;\r\n  background-color: ${(props) => (props.bgcolor ? props.bgcolor : \"\")};\r\n  align-items: center;\r\n  font-family: ${(props) => (props.fontfamily ? props.fontfamily : \"\")};\r\n  font-weight: ${(props) => (props.fontweight ? props.fontweight : \"regular\")};\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"14px\")};\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  justify-content: center;\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"flex\")};\r\n    width: auto;\r\n  }\r\n`;\r\n\r\nexport const FlexContainerPhotos = styled.div`\r\n  width: 100%;\r\n  min-height: 200px;\r\n  height: auto;\r\n  display: flex;\r\n  margin-top: 30px;\r\n  margin-bottom: 30px;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  text-align: center;\r\n  justify-content: center;\r\n  @media (max-width: 1006px) {\r\n    box-shadow: none;\r\n  }\r\n`;\r\n\r\nexport const FlexContainerItem = styled.div`\r\nwidth: ${(props) => (props.width ? props.width : \"45%\")};\r\nmin-height: auto;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  text-align: center;\r\n  margin-top: 10px;\r\n  margin-bottom: 15px;\r\n  justify-content: flex-start;\r\n  @media (max-width: 1006px) {\r\n    box-shadow: none;\r\n  }\r\n`;\r\n\r\nexport const GridContainer200pxWidth = styled.div`\r\n  max-width: 80%;\r\n  display: grid;\r\n  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n  grid-auto-rows: 0.2fr;\r\n  grid-gap: 2px;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n    margin-bottom: auto;\r\n    margin-top: auto;\r\n  }\r\n`;\r\n\r\nexport const GridContainer3Wide = styled.div`\r\n  width: 95%;\r\n  margin: 1%;\r\n  display: grid;\r\n  align-items: center;\r\n  grid-template-columns: repeat(3, 1fr);\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\nexport const GridContainer2Wide = styled.div`\r\n  width: 90%;\r\n  grid-column-gap: 10px;\r\n  grid-row-gap: 25px;\r\n  row-gap: 0px;\r\n  margin: 0%;\r\n  display: grid;\r\n  grid-template-columns: repeat(2, 1fr);\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"90%\")};\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\nexport const InlineGridContainer = styled.div`\r\n  display: inline-grid;\r\n  grid-template-columns: repeat(4, 1fr);\r\n  grid-gap: 3px;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\nexport const FlexDiv40Percent = styled.div`\r\n  width: 40%;\r\n  display: flex;\r\n`;\r\n\r\nexport const Div225px = styled.div`\r\n  width: 225px;\r\n`;\r\n\r\nexport const Div175px = styled.div`\r\n  width: 175px;\r\n`;\r\n\r\nexport const Div125px = styled.div`\r\n  width: 125px;\r\n`;\r\n\r\nexport const Div80px = styled.div`\r\n  width: 80px;\r\n`;\r\n\r\nexport const Div150pxMobile250px = styled.div`\r\n  width: 150px;\r\n  @media (max-width: 1006px) {\r\n    width: 250px;\r\n  }\r\n`;\r\n\r\nexport const Div150pxMobileDisplayNone = styled.div`\r\n  width: 200px;\r\n  @media (max-width: 1006px) {\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport const StyledDiv = styled.div`\r\n  width: ${(props) => props.width || '100%'};\r\n  \r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => props.mobileWidth || props.width || '100%'};\r\n    display: ${(props) => props.mobileDisplay || 'block'};\r\n  }\r\n`;\r\n\r\nexport const StyledFlexDiv = styled.div`\r\n  flex-grow: ${(props) => props.grow || 1};\r\n  flex-basis: ${(props) => props.basis || '0'};\r\n  flex-shrink: ${(props) => props.shrink || 1};\r\n\r\n  @media (max-width: 1006px) {\r\n    display: ${(props) => props.mobileDisplay || 'block'};\r\n    flex-basis: ${(props) => props.mobileWidth || props.basis || '0'};\r\n  }\r\n`;\r\n\r\n\r\nexport const FlexColumnDivAutoMargin = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n  margin-left: 10px;\r\n`;\r\n\r\nexport default nullProp;\r\n","import { useHistory } from \"react-router-dom\";\r\nimport Balloons from \"../../../Animation/balloonlottie.json\";\r\nimport LottieAnimation from \"../../../Lottie\";\r\nimport {\r\n  FlexColumnCont70x100Percent,\r\n  FlexColumnFullWidth,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { BlankDiv } from \"../../../StylesheetComps/Div\";\r\nimport {\r\n  GreenNavigationButton,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { RegularText } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst Submitted = ({ open, metroId, storeId }) => {\r\n  const history = useHistory();\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FlexColumnFullWidth bgcolor=\"white\">\r\n      <FlexColumnFullWidth>\r\n        <FlexColumnCont70x100Percent>\r\n          <SmallHeaderLeagueSpartan fontsize=\"24px\">\r\n            Thank you for drafting this project!\r\n          </SmallHeaderLeagueSpartan>\r\n          <RegularText>\r\n            This project has been drafted, you can submit it to us at anytime by\r\n            visiting this project from your 'Projects' page.\r\n          </RegularText>\r\n\r\n          <BlankDiv>\r\n            <LottieAnimation lotti={Balloons} height={300} width={300}>\r\n              {\" \"}\r\n            </LottieAnimation>\r\n          </BlankDiv>\r\n\r\n          <GreenNavigationButton\r\n            onClick={() => {\r\n              history.push(\"/CasesPersonal/\" + metroId + \"/\" + storeId);\r\n            }}\r\n            width=\"15vw\"\r\n            lineheight=\"2.4vw\"\r\n            height=\"auto\"\r\n          >\r\n            View Project\r\n          </GreenNavigationButton>\r\n        </FlexColumnCont70x100Percent>\r\n      </FlexColumnFullWidth>\r\n    </FlexColumnFullWidth>\r\n  );\r\n};\r\n\r\nSubmitted.defaultProps = {\r\n  metroId: 0,\r\n  storeId: 0,\r\n};\r\n\r\nexport default Submitted;\r\n","import { useState } from \"react\";\r\nimport { BodyPara, Header } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnCont53x100Percent,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnFullWidth,\r\n  FlexRowCont100x8PercentSpaceAround,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  EstimatorDiv,\r\n  GreenNavigationButton,\r\n  GreyNavigationButton,\r\n  LandscapePara,\r\n  ProgressBar,\r\n  ProgressBarWidth,\r\n  Section1,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { SmallHeader } from \"../../../StylesheetComps/Menu\";\r\nimport { RegularTextBoldRed } from \"../../../StylesheetComps/Titles\";\r\nconst LandscapeDesc = ({ open, onNext, onBack, onPreview, preDesc }) => {\r\n  const [description, setDescription] = useState(\"\");\r\n  const [characterLimitState, setCharacterLimitState] = useState(\"none\");\r\n\r\n  //Check Description Text, if greater than or equal to 1500 characters,\r\n  //display character limit\r\n\r\n  const CheckLandscapeDescription = async (landscapeText) => {\r\n    if (landscapeText !== null) {\r\n      setDescription(landscapeText);\r\n      if (landscapeText.length >= 1500) {\r\n        setCharacterLimitState(\"block\");\r\n      } else {\r\n        setCharacterLimitState(\"none\");\r\n      }\r\n    }\r\n  };\r\n\r\n  if (!open) return null;\r\n\r\n  return (\r\n    <EstimatorDiv>\r\n      <Section1>\r\n        <ProgressBar>\r\n          <ProgressBarWidth width=\"75%\"></ProgressBarWidth>\r\n        </ProgressBar>\r\n\r\n        <Header fontsize=\"28px\" marginbottom=\"1%\">\r\n          Project Description\r\n        </Header>\r\n        <BodyPara\r\n          bodycolor=\"#808080\"\r\n          width=\"55%\"\r\n          marginbottom=\"2%\"\r\n          fontsize=\"16px\"\r\n        >\r\n          Tell us what you'd like to do with your outdoor space. Include your\r\n          project's details here.\r\n        </BodyPara>\r\n\r\n        <FlexColumnFullWidth width=\"50%\">\r\n          <RegularTextBoldRed display={characterLimitState}>\r\n            (No more than 1500 characters){\" \"}\r\n          </RegularTextBoldRed>\r\n          <LandscapePara\r\n            mobileheight=\"40vh\"\r\n            defaultValue={description}\r\n            maxLength=\"1500\"\r\n            placeholder=\"I want to completely redo my garden. For starters I want...\"\r\n            onChange={(e) => {\r\n              CheckLandscapeDescription(e.target.value);\r\n            }}\r\n          ></LandscapePara>\r\n          <SmallHeader\r\n            color={ColorPalette.PrimaryGrey}\r\n            fontsize=\"16px\"\r\n            margintop=\"3%\"\r\n          >\r\n            Character Count: {description.length}{\" \"}\r\n          </SmallHeader>\r\n        </FlexColumnFullWidth>\r\n        <FlexRowCont100x8PercentSpaceAround>\r\n          <GreyNavigationButton\r\n            onClick={() => {\r\n              onBack();\r\n            }}\r\n          >\r\n            Back\r\n          </GreyNavigationButton>\r\n          <GreenNavigationButton\r\n            onClick={() => {\r\n              onNext();\r\n              onPreview({ description });\r\n            }}\r\n          >\r\n            Next\r\n          </GreenNavigationButton>\r\n        </FlexRowCont100x8PercentSpaceAround>\r\n      </Section1>\r\n    </EstimatorDiv>\r\n  );\r\n};\r\n\r\nLandscapeDesc.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onStoreDescriptionLocal: () => {},\r\n};\r\n\r\nexport default LandscapeDesc;\r\n","/* eslint-disable */\r\n\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCityList,\r\n  GetMetroList,\r\n} from \"../../../API_Functions/Utility_Functions\";\r\nimport { BodyPara, Header } from \"../../../StylesheetComps/AuthSheet\";\r\nimport {\r\n  FlexColumnCont75x80Percent,\r\n  FlexColumnFullWidth,\r\n  FlexColumnLeftAlign,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  DatalistMedium,\r\n  DatalistOption,\r\n  EstimatorDiv,\r\n  FormContPersonalInfo,\r\n  FormDivs,\r\n  GreenNavigationButton,\r\n  GreyNavigationButton,\r\n  ProgressBar,\r\n  ProgressBarWidth,\r\n  SecDivPersonalInfoMarginLeft,\r\n  Section1,\r\n  TextInputRegular,\r\n  TextInputReusable,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../../StylesheetComps/Menu\";\r\nimport {\r\n  LeagueSpartanTiny,\r\n  MediumHeader100PercentWidth,\r\n  RegularTextBoldRed,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst PersonalInfo = ({ open, onNext, onBack, onPreview, onPersonalInfo }) => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n  const projectInfoMargin = \"30px\";\r\n  const mobileHeaderWidth = \"90px\";\r\n\r\n  const [Title, setTitle] = useState(\"\");\r\n  const [cityList, setCityList] = useState([]);\r\n  const [metroList, setMetroList] = useState([]);\r\n  const [ErrorText, setErrorText] = useState(\"\");\r\n\r\n  //Set the ContactInfo variable to use userobj as a reference\r\n\r\n  let userobj = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n  let ContactInfo = React.useRef(userobj);\r\n\r\n  //Get the location info for the user and define the Metro/City Map Datalists\r\n\r\n  const GetLocationInfo = async () => {\r\n    let metrodata = await GetMetroList();\r\n    let citydata = await GetCityList(userobj.Metro_Id);\r\n    setCityList(citydata);\r\n    setMetroList(metrodata);\r\n  };\r\n\r\n  //Update the CityList to match the cities in a metro (activated when user\r\n  //selects a new metro)\r\n\r\n  const UpdateCityList = async (metroid) => {\r\n    if (metroid !== 0 && metroid !== 3) {\r\n      ContactInfo.current.City = \"\";\r\n      ContactInfo.current.City_Id = 0;\r\n      let citydata = await GetCityList(metroid);\r\n      setCityList(citydata);\r\n    }\r\n  };\r\n\r\n  //Run GetLocationInfo(); immediately after load\r\n\r\n  useEffect(() => {\r\n    GetLocationInfo();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  //Once user wants to proceed, ensure all values are filled in,\r\n  //display an error if otherwise.\r\n\r\n  const DefinePersonalInfo = async () => {\r\n    ContactInfo.current.Name = firstName + \" \" + lastName;\r\n    if (\r\n      firstName !== null &&\r\n      firstName !== \"\" &&\r\n      firstName !== undefined &&\r\n      firstName !== \" \" &&\r\n      lastName !== null &&\r\n      lastName !== \"\" &&\r\n      lastName !== undefined &&\r\n      lastName !== \" \" &&\r\n      ContactInfo.current.Name !== null &&\r\n      ContactInfo.current.Name !== \"\" &&\r\n      ContactInfo.current.Name !== undefined &&\r\n      ContactInfo.current.Name !== \" \" &&\r\n      ContactInfo.current.Street !== null &&\r\n      ContactInfo.current.Street !== \"\" &&\r\n      ContactInfo.current.Street !== undefined &&\r\n      ContactInfo.current.Street !== \" \" &&\r\n      ContactInfo.current.CityId !== 0 &&\r\n      ContactInfo.current.Phone !== null &&\r\n      ContactInfo.current.Phone !== \"\" &&\r\n      ContactInfo.current.Phone !== undefined &&\r\n      ContactInfo.current.Phone !== \" \" &&\r\n      ContactInfo.current.Email !== null &&\r\n      ContactInfo.current.Email !== \"\" &&\r\n      ContactInfo.current.Email !== undefined &&\r\n      ContactInfo.current.Email !== \" \" &&\r\n      Title !== null &&\r\n      Title !== \"\" &&\r\n      Title !== undefined &&\r\n      Title !== \" \" &&\r\n      ContactInfo.current.Metro_Id !== 0 &&\r\n      ContactInfo.current.Metro_Id !== 3\r\n    ) {\r\n      onPreview({ ContactInfo, Title });\r\n      onPersonalInfo(ContactInfo, Title);\r\n      onNext();\r\n    } else {\r\n      setErrorText(\"Please fill in all of the boxes\");\r\n      window.scrollTo(0, 0);\r\n    }\r\n  };\r\n\r\n  //Assigns the ID based on the Name Selected\r\n  const SelectCity = async (e) => {\r\n    ContactInfo.current.City_Id = e.target.value;\r\n    cityList.find(function (o, i) {\r\n      if (o.Id === e.target.value) {\r\n        ContactInfo.current.City = o.Name;\r\n      }\r\n      return null;\r\n    });\r\n  };\r\n\r\n  const SelectMetro = async (e) => {\r\n    ContactInfo.current.Metro_Id = e.target.value;\r\n    console.log(\r\n      metroList.find(function (o, i) {\r\n        if (o.Id === e.target.value) {\r\n          ContactInfo.current.Metro = o.Name;\r\n        }\r\n        return null;\r\n      })\r\n    );\r\n  };\r\n\r\n  const [firstName, setFirstName] = useState(\"\");\r\n  const [lastName, setLastName] = useState(\"\");\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    if (!open) return null;\r\n    return (\r\n      <EstimatorDiv>\r\n        <Section1>\r\n          <ProgressBar>\r\n            <ProgressBarWidth width=\"12.5%\"></ProgressBarWidth>\r\n          </ProgressBar>\r\n\r\n          <Header fontsize=\"22px\" marginbottom=\"1%\">\r\n            Project Information\r\n          </Header>\r\n          <BodyPara bodycolor=\"#808080\" marginbottom=\"0%\" fontsize=\"16px\">\r\n            Enter all the information below to get started on your project.\r\n          </BodyPara>\r\n          <BodyPara bodycolor=\"red\" marginbottom=\"2%\" fontsize=\"16px\">\r\n            {ErrorText}\r\n          </BodyPara>\r\n          <FlexColumnFullWidth>\r\n            <FlexColumnCont75x80Percent>\r\n              <SmallHeader\r\n                mobilewidth={mobileHeaderWidth}\r\n                width=\"100%\"\r\n                margin=\"0px\"\r\n              >\r\n                Project Name\r\n              </SmallHeader>\r\n              <TextInputRegular\r\n                mobilemarginright={projectInfoMargin}\r\n                inputwidth=\"87%\"\r\n                placeholder={\"Project Name (Ex. Robyn's Backyard)\"}\r\n                inputheight=\"1%\"\r\n                inputborderradius=\"5px\"\r\n                onChange={(e) => {\r\n                  setTitle(e.target.value);\r\n                }}\r\n              ></TextInputRegular>\r\n            </FlexColumnCont75x80Percent>\r\n          </FlexColumnFullWidth>\r\n\r\n          <FormDivs>\r\n            <FormContPersonalInfo>\r\n              <SecDivPersonalInfoMarginLeft>\r\n                <MediumHeader100PercentWidth>\r\n                  First Name\r\n                </MediumHeader100PercentWidth>\r\n                <TextInputRegular\r\n                  placeholder={\"First Name\"}\r\n                  defaultValue={firstName}\r\n                  onChange={(e) => {\r\n                    setFirstName(e.target.value);\r\n                  }}\r\n                ></TextInputRegular>\r\n\r\n                <MediumHeader100PercentWidth>\r\n                  Last Name\r\n                </MediumHeader100PercentWidth>\r\n                <TextInputRegular\r\n                  placeholder={\"Last Name\"}\r\n                  defaultValue={lastName}\r\n                  onChange={(e) => {\r\n                    setLastName(e.target.value);\r\n                  }}\r\n                ></TextInputRegular>\r\n              </SecDivPersonalInfoMarginLeft>\r\n\r\n              <SecDivPersonalInfoMarginLeft>\r\n                <MediumHeader100PercentWidth>\r\n                  Phone Number\r\n                </MediumHeader100PercentWidth>\r\n                <TextInputRegular\r\n                  placeholder={\"Cell Phone\"}\r\n                  defaultValue={ContactInfo.current.Phone}\r\n                  onChange={(e) => {\r\n                    ContactInfo.current.Phone = e.target.value;\r\n                  }}\r\n                ></TextInputRegular>\r\n              </SecDivPersonalInfoMarginLeft>\r\n\r\n              <SecDivPersonalInfoMarginLeft>\r\n                <MediumHeader100PercentWidth>\r\n                  Email Address\r\n                </MediumHeader100PercentWidth>\r\n                <TextInputRegular\r\n                  placeholder={\"Email Address\"}\r\n                  defaultValue={ContactInfo.current.Email}\r\n                  onChange={(e) => {\r\n                    ContactInfo.current.Email = e.target.value;\r\n                  }}\r\n                ></TextInputRegular>\r\n              </SecDivPersonalInfoMarginLeft>\r\n            </FormContPersonalInfo>\r\n            <FormContPersonalInfo>\r\n              <SecDivPersonalInfoMarginLeft>\r\n                <MediumHeader100PercentWidth>\r\n                  Address\r\n                </MediumHeader100PercentWidth>\r\n                <TextInputRegular\r\n                  placeholder={\"Address\"}\r\n                  defaultValue={ContactInfo.current.Street}\r\n                  onChange={(e) => {\r\n                    ContactInfo.current.Street = e.target.value;\r\n                  }}\r\n                ></TextInputRegular>\r\n              </SecDivPersonalInfoMarginLeft>\r\n\r\n              <SecDivPersonalInfoMarginLeft>\r\n                <MediumHeader100PercentWidth>City</MediumHeader100PercentWidth>\r\n\r\n                <DatalistMedium\r\n                  defaultValue={ContactInfo.current.City}\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"40%\"\r\n                  id=\"cities\"\r\n                  onChange={(e) => {\r\n                    SelectCity(e);\r\n                  }}\r\n                >\r\n                  <DatalistOption value={0}>Select City</DatalistOption>\r\n                  {cityList.map((o, i) => (\r\n                    <DatalistOption\r\n                      id=\"city\"\r\n                      defaultValue={o.Id === ContactInfo.current.City_Id}\r\n                      selected={o.Id === ContactInfo.current.City_Id}\r\n                      key={o.Id}\r\n                      value={o.Id}\r\n                    >\r\n                      {o.Name}\r\n                    </DatalistOption>\r\n                  ))}\r\n                </DatalistMedium>\r\n              </SecDivPersonalInfoMarginLeft>\r\n\r\n              <SecDivPersonalInfoMarginLeft>\r\n                <MediumHeader100PercentWidth>\r\n                  Region\r\n                </MediumHeader100PercentWidth>\r\n                <DatalistMedium\r\n                  defaultValue={ContactInfo.current.Metro}\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"40%\"\r\n                  id=\"metros\"\r\n                  onChange={(e) => {\r\n                    SelectMetro(e);\r\n                    // UpdateCityList(e.target.value);\r\n                  }}\r\n                >\r\n                  <DatalistOption value={0}>Select Region</DatalistOption>\r\n                  {metroList.map((o, i) => (\r\n                    <DatalistOption\r\n                      key={o.Id}\r\n                      value={o.Id}\r\n                      defaultValue={o.Id === ContactInfo.current.Metro_Id}\r\n                      selected={o.Id === ContactInfo.current.Metro_Id}\r\n                    >\r\n                      {o.Name}\r\n                    </DatalistOption>\r\n                  ))}\r\n                </DatalistMedium>\r\n              </SecDivPersonalInfoMarginLeft>\r\n            </FormContPersonalInfo>\r\n          </FormDivs>\r\n          <FlexColumnCont\r\n            height=\"8%\"\r\n            mobilewidth=\"auto\"\r\n            margin=\"0\"\r\n            margintop=\"auto\"\r\n            flexdirection=\"row\"\r\n            justifycontent=\"space-around\"\r\n            width=\"100%\"\r\n          >\r\n            <GreyNavigationButton\r\n              onClick={() => {\r\n                history.push(\"/storelistestimate/\" + params.Id);\r\n              }}\r\n            >\r\n              Back\r\n            </GreyNavigationButton>\r\n            <GreenNavigationButton\r\n              onClick={() => {\r\n                DefinePersonalInfo();\r\n              }}\r\n            >\r\n              Next\r\n            </GreenNavigationButton>\r\n          </FlexColumnCont>\r\n        </Section1>\r\n      </EstimatorDiv>\r\n    );\r\n  } else {\r\n    if (!open) return null;\r\n    return (\r\n      <EstimatorDiv>\r\n        <Section1>\r\n          <ProgressBar>\r\n            <ProgressBarWidth width=\"12.5%\"></ProgressBarWidth>\r\n          </ProgressBar>\r\n\r\n          <Header fontsize=\"22px\" marginbottom=\"1%\">\r\n            Project Information\r\n          </Header>\r\n          <BodyPara bodycolor=\"#808080\" marginbottom=\"0%\" fontsize=\"16px\">\r\n            Enter all the information below to get started on your project.\r\n          </BodyPara>\r\n          <RegularTextBoldRed>{ErrorText}</RegularTextBoldRed>\r\n\r\n          <FlexRowCont>\r\n            <FlexColumnLeftAlign>\r\n              <LeagueSpartanTiny htmlFor=\"projectname\">\r\n                Project Name\r\n              </LeagueSpartanTiny>\r\n              <TextInputReusable\r\n                id=\"projectname\"\r\n                mobilemarginright={projectInfoMargin}\r\n                placeholder={\"Project Name (Ex. Robyn's Backyard)\"}\r\n                onChange={(e) => {\r\n                  setTitle(e.target.value);\r\n                }}\r\n              ></TextInputReusable>\r\n            </FlexColumnLeftAlign>\r\n            <FlexColumnLeftAlign>\r\n              <LeagueSpartanTiny htmlFor=\"address\">Address</LeagueSpartanTiny>\r\n              <TextInputReusable\r\n                id=\"address\"\r\n                placeholder={\"Address\"}\r\n                defaultValue={ContactInfo.current.Street}\r\n                onChange={(e) => {\r\n                  ContactInfo.current.Street = e.target.value;\r\n                }}\r\n              ></TextInputReusable>\r\n            </FlexColumnLeftAlign>\r\n          </FlexRowCont>\r\n\r\n          <FlexRowCont>\r\n            <FlexColumnLeftAlign>\r\n              <LeagueSpartanTiny htmlFor=\"firstname\">\r\n                First Name\r\n              </LeagueSpartanTiny>\r\n              <TextInputReusable\r\n                id=\"firstname\"\r\n                placeholder={\"First Name\"}\r\n                defaultValue={firstName}\r\n                onChange={(e) => {\r\n                  setFirstName(e.target.value);\r\n                }}\r\n              ></TextInputReusable>\r\n            </FlexColumnLeftAlign>\r\n            <FlexColumnLeftAlign>\r\n              <LeagueSpartanTiny htmlFor=\"lastname\">\r\n                Last Name\r\n              </LeagueSpartanTiny>\r\n              <TextInputReusable\r\n                id=\"lastname\"\r\n                placeholder={\"Last Name\"}\r\n                defaultValue={lastName}\r\n                onChange={(e) => {\r\n                  setLastName(e.target.value);\r\n                }}\r\n              ></TextInputReusable>\r\n            </FlexColumnLeftAlign>\r\n          </FlexRowCont>\r\n\r\n          <FlexRowCont>\r\n            <FlexColumnLeftAlign>\r\n              <LeagueSpartanTiny htmlFor=\"cellphone\">\r\n                Phone Number\r\n              </LeagueSpartanTiny>\r\n              <TextInputReusable\r\n                type=\"tel\"\r\n                id=\"cellphone\"\r\n                placeholder={\"Cell Phone\"}\r\n                defaultValue={ContactInfo.current.Phone}\r\n                onChange={(e) => {\r\n                  ContactInfo.current.Phone = e.target.value;\r\n                }}\r\n              ></TextInputReusable>\r\n            </FlexColumnLeftAlign>\r\n            <FlexColumnLeftAlign>\r\n              <LeagueSpartanTiny htmlFor=\"emailaddress\">\r\n                Email Address\r\n              </LeagueSpartanTiny>\r\n              <TextInputReusable\r\n                type=\"email\"\r\n                id=\"emailaddress\"\r\n                placeholder={\"Email Address\"}\r\n                defaultValue={ContactInfo.current.Email}\r\n                onChange={(e) => {\r\n                  ContactInfo.current.Email = e.target.value;\r\n                }}\r\n              ></TextInputReusable>\r\n            </FlexColumnLeftAlign>\r\n          </FlexRowCont>\r\n\r\n          <FlexRowCont>\r\n            <FlexColumnLeftAlign>\r\n              <LeagueSpartanTiny htmlFor=\"cities\">City</LeagueSpartanTiny>\r\n\r\n              <DatalistMedium\r\n                defaultValue={ContactInfo.current.City}\r\n                id=\"cities\"\r\n                onChange={(e) => {\r\n                  SelectCity(e);\r\n                }}\r\n              >\r\n                <DatalistOption value={0}>Select City</DatalistOption>\r\n                {cityList.map((o, i) => (\r\n                  <DatalistOption\r\n                    id=\"city\"\r\n                    defaultValue={o.Id === ContactInfo.current.City_Id}\r\n                    selected={o.Id === ContactInfo.current.City_Id}\r\n                    key={o.Id}\r\n                    value={o.Id}\r\n                  >\r\n                    {o.Name}\r\n                  </DatalistOption>\r\n                ))}\r\n              </DatalistMedium>\r\n            </FlexColumnLeftAlign>\r\n            <FlexColumnLeftAlign>\r\n              <LeagueSpartanTiny htmlFor=\"metros\">Region</LeagueSpartanTiny>\r\n              <DatalistMedium\r\n                defaultValue={ContactInfo.current.Metro}\r\n                id=\"metros\"\r\n                onChange={(e) => {\r\n                  SelectMetro(e);\r\n                  UpdateCityList(e.target.value);\r\n                }}\r\n              >\r\n                <DatalistOption value={0}>Select Region</DatalistOption>\r\n                {metroList.map((o, i) => (\r\n                  <DatalistOption\r\n                    key={o.Id}\r\n                    value={o.Id}\r\n                    defaultValue={o.Id === ContactInfo.current.Metro_Id}\r\n                    selected={o.Id === ContactInfo.current.Metro_Id}\r\n                  >\r\n                    {o.Name}\r\n                  </DatalistOption>\r\n                ))}\r\n              </DatalistMedium>\r\n            </FlexColumnLeftAlign>\r\n          </FlexRowCont>\r\n\r\n          <br></br>\r\n\r\n          <FlexColumnCont\r\n            height=\"8%\"\r\n            mobilewidth=\"auto\"\r\n            margin=\"0\"\r\n            margintop=\"auto\"\r\n            flexdirection=\"row\"\r\n            justifycontent=\"space-around\"\r\n            width=\"100%\"\r\n          >\r\n            <GreyNavigationButton\r\n              onClick={() => {\r\n                history.push(\"/storelistestimate/\" + params.Id);\r\n              }}\r\n            >\r\n              Back\r\n            </GreyNavigationButton>\r\n            <GreenNavigationButton\r\n              onClick={() => {\r\n                DefinePersonalInfo();\r\n              }}\r\n            >\r\n              Next\r\n            </GreenNavigationButton>\r\n          </FlexColumnCont>\r\n        </Section1>\r\n      </EstimatorDiv>\r\n    );\r\n  }\r\n};\r\n\r\nPersonalInfo.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onPersonalInfo: () => {},\r\n  fullName: \"\",\r\n  addressofUser: \"\",\r\n  emailofUser: \"\",\r\n  phoneofUser: \"\",\r\n};\r\n\r\nexport default PersonalInfo;\r\n","import styled from \"styled-components\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const OverrideEmbedImage = styled.div`\r\n  width: 350px;\r\n  height: 205px;\r\n  position: absolute;\r\n  margin-bottom: 0;\r\n  bottom: 0px;\r\n  left: ${(props) => (props.left ? props.left : \"\")};\r\n  right: ${(props) => (props.right ? props.right : \"\")};\r\n`;\r\n\r\nexport const OverrideEmbedDiv = styled.div`\r\n  background-color: red;\r\n  position: relative;\r\n  margin-bottom: 0;\r\n`;\r\n\r\nexport const InboxProfileImage = styled.img`\r\n  width: 80px;\r\n  height: 80px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  border-radius: 50px;\r\n  margin: 10px;\r\n  object-fit: cover;\r\n  @media (max-width: 1006px) {\r\n    width: 60px;\r\n    height: 60px;\r\n    border-radius: 50px;\r\n  }\r\n`;\r\n\r\nexport const RoundedImageFullWidth = styled.img`\r\n  width: ${(props) => (props.width ? props.width : \"40vw\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  border-top-left-radius: 10px;\r\n  border-bottom-left-radius: 10px;\r\n  border-top-right-radius: 0px;\r\n  border-bottom-right-radius: 0px;\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  object-fit: ${(props) => (props.objfit ? props.objfit : \"contain\")};\r\n`;\r\n\r\nexport const FullWidthCoverPointerImageWithMargins = styled.img`\r\n  width: 100%;\r\n  height: 100%;\r\n  border-radius: 4px;\r\n  object-fit: cover;\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n  cursor: pointer;\r\n`;\r\n\r\nexport const Image200x200pxContain = styled.img`\r\n  width:  ${(props) => (props.width ? props.width : \"200px\")};\r\n  height: 200px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  border-radius: 4px;\r\n  object-fit: contain;\r\n`;\r\n\r\nexport const CenteredGridImage = styled.img`\r\n  width: 200px;\r\n  height: 200px;\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"\")};\r\n  justify-content: ${(props) =>\r\n    props.justifycontent ? props.justifycontent : \"center\"};\r\n  align-items: ${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\n  border-radius: 4px;\r\n  object-fit: contain;\r\n  @media (max-width: 1006px) {\r\n    width: 90%;\r\n    height: 70%;\r\n    margin-left: 5%;\r\n    margin-top: 5%;\r\n  }\r\n`;\r\n\r\nexport const Image40x40px = styled.img`\r\n  width: ${(props) => (props.width ? props.width : \"40px\")};\r\n  height: 40px;\r\n  margin: 3%;\r\n  margin-left: 20px;\r\n  object-fit: contain;\r\n  position: relative;\r\n  bottom: 0%;\r\n  right: 35px;\r\n  cursor: pointer;\r\n  @media (max-width: 1006px) {\r\n    left: 72vw;\r\n    bottom: 250px;\r\n  }\r\n`;\r\n\r\nexport const Image80x100px = styled.img`\r\n  width: 80px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  height: 100px;\r\n  margin: 20px;\r\n`;\r\n\r\nexport const Image60x50Percent = styled.img`\r\n  width: 60%;\r\n  height: 50%;\r\n  margin: 15px;\r\n  border-radius: 50px;\r\n  // z-Index:2;\r\n  @media (max-width: 1006px) {\r\n    width: 90%;\r\n    height: 70%;\r\n    margin: 0;\r\n  }\r\n`;\r\n\r\nexport default nullProp;\r\n","import styled from \"styled-components\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const EditFormContainer = styled.div`\r\n  display: flex;\r\n  flex-direction: row;\r\n  width: 100%;\r\n  margin: 0 auto;\r\n\r\n  /* Switch to a single column on narrower screens */\r\n  @media (max-width: 768px) {\r\n    flex-direction: column;\r\n    width: 90vw;\r\n  }\r\n`;\r\n\r\n/** Each column inside the edit form container */\r\nexport const EditFormColumn = styled.div`\r\n  flex: 1;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 20px;\r\n\r\n  @media (max-width: 768px) {\r\n    width: 100%;\r\n  }\r\n`;\r\n\r\n/** A row for a single field: label + input or label + read-only text */\r\nexport const EditFieldRow = styled.div`\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n  /* You can add margin-bottom or other styling here if desired. */\r\n`;\r\n\r\n/** \r\n * Label for each field.\r\n * You can rename to something else if you prefer \r\n * (ex: EditFieldLabel).\r\n */\r\nexport const EditFieldLabel = styled.label`\r\n  min-width: 120px;\r\n  font-weight: 500;\r\n  color: #000;\r\n\r\n  /* If you want them on separate lines for narrower screens:\r\n  @media(max-width: 500px) {\r\n    display: block;\r\n    margin-bottom: 6px;\r\n  } \r\n  */\r\n`;\r\n\r\n/** Text input field (replace if you have your own reusable input component). */\r\nexport const EditTextInput = styled.input`\r\n  flex: 1;\r\n  padding: 10px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 6px;\r\n  background-color: #f6f6f6;\r\n  margin-right: 25px;\r\n  &:focus {\r\n    outline: none;\r\n    border-color: #007aff;\r\n    background-color: #fff;\r\n  }\r\n`;\r\n\r\n/** Select (or <datalist>) for city or region. */\r\nexport const EditSelect = styled.select`\r\n  flex: 1;\r\n  padding: 10px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 6px;\r\n  background-color: #f6f6f6;\r\n  margin-right: 25px;\r\n  &:focus {\r\n    outline: none;\r\n    border-color: #007aff;\r\n    background-color: #fff;\r\n  }\r\n`;\r\n\r\n/** \r\n * A row for the Save / Cancel buttons (only shown when editing).\r\n * You can rename it to EditButtonsRow or something else if you prefer.\r\n */\r\nexport const EditActionButtonsRow = styled.div`\r\n  display: flex;\r\n  gap: 10px;\r\n  margin-top: 24px;\r\n  justify-content: flex-end; \r\n  width: 95%;\r\n`;\r\n\r\n/* \r\n  If you have your own reusable button components, \r\n  you can skip these or rename them.\r\n */\r\nexport const EditButton = styled.button`\r\n  padding: 10px 16px;\r\n  background-color: #007aff;\r\n  border: none;\r\n  border-radius: 6px;\r\n  color: #fff;\r\n  font-weight: 500;\r\n  cursor: pointer;\r\n\r\n  &:hover {\r\n    background-color: #005bb5;\r\n  }\r\n  &:active {\r\n    background-color: #003f82;\r\n  }\r\n`;\r\n\r\nexport const RegularResponsiveButton = styled.div`\r\n  min-width: ${(props) => (props.minwidth ? props.minwidth : \"100px\")};\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  height: ${(props) => (props.height ? props.height : \"30px\")};\r\n  text-align: center;\r\n  font-family: LeagueSpartan-Bold;\r\n  color: ${(props) => (props.color ? props.color : \"white\")};\r\n  background-color: ${(props) =>\r\n    props.bgcolor ? props.bgcolor : ColorPalette.PrimaryButtonBlue};\r\n  vertical-align: middle;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"12px\")};\r\n  margin: ${(props) => (props.margin ? props.margin : \"2px 2px\")};\r\n  margin-top: ${(props) => (props.margintop ? props.margintop : \"\")};\r\n  margin-bottom: ${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\n  margin-right: ${(props) => (props.marginright ? props.marginright : \"\")};\r\n  margin-left: ${(props) => (props.marginleft ? props.marginleft : \"\")};\r\n  line-height: ${(props) => (props.lineheight ? props.lineheight : \"2.5\")};\r\n  cursor: ${(props) => (props.cursor ? props.cursor : \"pointer\")};\r\n  pointer-events: ${(props) => (props.pointerevent ? props.pointerevent : \"\")};\r\n  border-radius: 10px;\r\n  transition: 0.3s;\r\n  padding: 4px 10px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n\r\n  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.06);\r\n\r\n  &:hover {\r\n    opacity: ${(props) => (props.hoveropacity ? props.hoveropacity : \"70%\")};\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 6px 8px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06);\r\n  }\r\n\r\n  &:active {\r\n    transform: translateY(1px);\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);\r\n  }\r\n\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"\")};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n  }\r\n`;\r\n\r\n\r\nexport const FixedIconToTop = styled.img`\r\n  position: fixed;\r\n  right: 0.5%;\r\n  bottom: 0.25%;\r\n  width: 50px;\r\n  height: 50px;\r\n  padding: 5px;\r\n  transition: width 0.5s, height 0.5s, opacity 0.5s;\r\n  cursor: pointer;\r\n  border-radius: 4px;\r\n  color: white;\r\n  font-size: 18px;\r\n  font-weight: 500;\r\n  display: flex;\r\n  justify-content: center;\r\n  text-align: center;\r\n  line-height: 40px;\r\n  cursor: pointer;\r\n  &:hover {\r\n    opacity: 70%;\r\n  }\r\n  @media (max-width: 1006px) {\r\n    display: none;\r\n  }\r\n`;\r\n\r\nexport const BackTopTopArrow = styled.img`\r\n  position: fixed;\r\n  right: 2.5%;\r\n  bottom: 2.5%;\r\n  width: 50px;\r\n  height: 50px;\r\n  padding: 5px;\r\n  transition: width 0.5s, height 0.5s, opacity 0.5s;\r\n  cursor: pointer;\r\n  border-radius: 4px;\r\n  color: white;\r\n  font-size: 18px;\r\n  font-weight: 500;\r\n  display: flex;\r\n  justify-content: center;\r\n  text-align: center;\r\n  line-height: 40px;\r\n  cursor: pointer;\r\n  z-index: 999;\r\n  &:hover {\r\n    opacity: 70%;\r\n  }\r\n  @media (max-width: 1006px) {\r\n    // display: none;\r\n  }\r\n`;\r\n\r\nexport const Select16px = styled.select`\r\n  font-family: Avenir;\r\n  font-size: min(0.75vw, 14px);\r\n  border: 1px solid #d3d3d3;\r\n  height: 40%;\r\n  width: 12vw;\r\n  margin-left: 5px;\r\n  margin-right: 5px;\r\n`;\r\n\r\nexport const SelectionInputRegular = styled.select`\r\n  width: 200px;\r\n  font-family: Avenir;\r\n  font-size: 18px;\r\n  padding: 5px;\r\n  margin: 5px;\r\n  border-radius: 10px;\r\n  border: 1px solid #d3d3d3;\r\n`;\r\n\r\nexport const Option16px = styled.option`\r\n  font-family: Avenir;\r\n  font-size: min(0.75vw, 14px);\r\n`;\r\n\r\nexport default nullProp;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont90x95Percent,\r\n  FlexColumnCont95x30Percent,\r\n  FlexColumnContGreenBorderTopRounded550pxHeight,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  LandscapePara,\r\n  MediumStyledImage,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { AddCasePhoto } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { Icon20x20 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { LinkText } from \"../../../StylesheetComps/AuthSheet\";\r\nconst CasePhotoUploadPreviewWindow = ({\r\n  open,\r\n  CloseWindow,\r\n  CancelUpload,\r\n  previewsrc,\r\n  imgtype,\r\n  caseObj,\r\n  AssignIdToImage,\r\n}) => {\r\n  const SpinnerIcon = \"/Spinner.svg\";\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n  const [imageCaption, setImageCaption] = useState(\"\");\r\n  const [buttonDisplay] = useState(\"block\");\r\n\r\n  //Upload Boolean prevents Images from getting uploaded twice.\r\n\r\n  const [uploadBoolean, setUploadBoolean] = useState(false);\r\n\r\n  const AddPhotoToCase = async (caseid, imgurl, caption, imgtype) => {\r\n    var photo = {};\r\n    switch (imgtype) {\r\n      case \"streetview\":\r\n        photo = {\r\n          Caption: \"Street View - \" + caption,\r\n          File: imgurl,\r\n          Case_Id: caseid,\r\n        };\r\n        break;\r\n      case \"accessarea\":\r\n        photo = {\r\n          Caption: \"Access Area - \" + caption,\r\n          File: imgurl,\r\n          Case_Id: caseid,\r\n        };\r\n        break;\r\n      case \"panorama\":\r\n        photo = {\r\n          Caption: \"Panorama - \" + caption,\r\n          File: imgurl,\r\n          Case_Id: caseid,\r\n        };\r\n        break;\r\n      case \"areaofwork\":\r\n        photo = {\r\n          Caption: \"Area of Work - \" + caption,\r\n          File: imgurl,\r\n          Case_Id: caseid,\r\n        };\r\n        break;\r\n\r\n      default:\r\n        photo = {\r\n          Caption: caption,\r\n          File: imgurl,\r\n          Case_Id: caseid,\r\n        };\r\n        break;\r\n    }\r\n    if (caseid !== 0 && imgurl !== \"\" && caption !== null) {\r\n      var newphoto = await AddCasePhoto(photo);\r\n      if (newphoto !== null) {\r\n        AssignIdToImage(newphoto.Id);\r\n        setImageCaption(\"\");\r\n        setUploadBoolean(false);\r\n        CloseWindow();\r\n      }\r\n    }\r\n  };\r\n\r\n  const ChangeUIToPreventDoubles = async (uploadboolean) => {\r\n    if (uploadboolean === false) {\r\n      setUploadBoolean(true);\r\n      AddPhotoToCase(caseObj.Id, previewsrc, imageCaption, imgtype);\r\n    } else {\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (previewsrc !== undefined && previewsrc !== null) {\r\n      if (previewsrc.includes(\"pdf\") || previewsrc.includes(\"PDF\")) {\r\n        setPreviewImage(\"/pdficon.png\");\r\n      } else {\r\n        setPreviewImage(window.$IMGURL + previewsrc);\r\n      }\r\n    }\r\n  }, [previewsrc]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContGreenBorderTopRounded550pxHeight>\r\n        <FlexRowCont\r\n          height=\"100%\"\r\n          justifycontent=\"flex-start\"\r\n          alignitems=\"baseline\"\r\n        >\r\n          <FlexColumnCont90x95Percent>\r\n            <SmallHeaderLeagueSpartan>Preview Photo</SmallHeaderLeagueSpartan>\r\n            <FlexRowCont width=\"40%\" height=\"40%\" marginbottom=\"5%\">\r\n              <MediumStyledImage\r\n                objfit=\"contain\"\r\n                mobileheight=\"20vh\"\r\n                mobilewidth=\"40vw\"\r\n                height=\"100%\"\r\n                src={previewImage}\r\n              ></MediumStyledImage>\r\n            </FlexRowCont>\r\n            <FlexColumnCont95x30Percent>\r\n              <SmallHeaderLeagueSpartan>\r\n                Photo Description\r\n              </SmallHeaderLeagueSpartan>\r\n              <LandscapePara\r\n                mobilewidth=\"68vw\"\r\n                mobileheight=\"25vh\"\r\n                maxLength=\"250\"\r\n                onChange={(e) => {\r\n                  setImageCaption(e.target.value);\r\n                }}\r\n              ></LandscapePara>\r\n            </FlexColumnCont95x30Percent>\r\n            <FlexRowCont justifycontent=\"flex-end\">\r\n              <LinkText\r\n                onClick={() => {\r\n                  CancelUpload();\r\n                }}\r\n              >\r\n                Cancel\r\n              </LinkText>\r\n              <RegularResponsiveButton\r\n                display={buttonDisplay}\r\n                onClick={() => {\r\n                  setPreviewImage(SpinnerIcon);\r\n                  ChangeUIToPreventDoubles(uploadBoolean);\r\n                }}\r\n              >\r\n                Upload\r\n              </RegularResponsiveButton>\r\n            </FlexRowCont>\r\n          </FlexColumnCont90x95Percent>\r\n          <Icon20x20\r\n            onClick={() => {\r\n              CancelUpload();\r\n            }}\r\n            src=\"/Close.svg\"\r\n          ></Icon20x20>\r\n        </FlexRowCont>\r\n      </FlexColumnContGreenBorderTopRounded550pxHeight>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nCasePhotoUploadPreviewWindow.defaultProps = {\r\n  CloseWindow: () => {},\r\n  CancelUpload: () => {},\r\n  AssignIdToImage: () => {},\r\n};\r\n\r\nexport default CasePhotoUploadPreviewWindow;\r\n","import axios from \"axios\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { DeleteCasePhoto } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { UploadFileToCloud } from \"../../../API_Functions/Utility_Functions\";\r\nimport {\r\n  BodyPara,\r\n  Header,\r\n  TextInput300x50,\r\n} from \"../../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  FlexRowCont100x8PercentSpaceAround,\r\n  FlexRowCont55x15Percent,\r\n  FlexRowCont55x15PercentPropBorderBottom,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { InlineGridContainer } from \"../../../StylesheetComps/Div\";\r\nimport { Icon45x45 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { CenteredGridImage } from \"../../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  EstimatorDiv,\r\n  GreenNavigationButton,\r\n  GreyNavigationButton,\r\n  ProgressBar,\r\n  ProgressBarWidth,\r\n  Section1,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont, StyledHR } from \"../../../StylesheetComps/Menu\";\r\nimport {\r\n  Icon30px20pxPointer,\r\n  Icon30px30pxPointer,\r\n} from \"../../../StylesheetComps/Quote\";\r\nimport { RegularTextBoldRed } from \"../../../StylesheetComps/Titles\";\r\nimport CasePhotoUploadPreviewWindow from \"../../Windows/PhotoUpload\";\r\n\r\nconst PhotoUploadComp = ({\r\n  open,\r\n  onNext,\r\n  onBack,\r\n  onPhotoUpload,\r\n  onPreview,\r\n  caseObj,\r\n}) => {\r\n  const [streetView, setStreetView] = useState(\"\");\r\n  const [accessTo, setAccessTo] = useState(\"\");\r\n  const [panorama, setPanorama] = useState(\"\");\r\n  const [areaOfWork, setAreaOfWork] = useState(\"\");\r\n  const [extraPhoto, setExtraPhoto] = useState(\"\");\r\n\r\n  const [streetViewId, setStreetViewId] = useState(0);\r\n  const [accessToId, setAccessToId] = useState(0);\r\n  const [panoramaId, setPanoramaId] = useState(0);\r\n  const [areaOfWorkId, setAreaOfWorkId] = useState(0);\r\n\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n  const [previewImageWindowDisplay, setPreviewImageWindowDisplay] =\r\n    useState(false);\r\n\r\n  const PhotoPreview =\r\n    \"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=\";\r\n  const [streetViewPreview, setStreetViewPreview] = useState(PhotoPreview);\r\n  const [accessAreaPreview, setAccessAreaPreview] = useState(PhotoPreview);\r\n  const [panoramaPreview, setPanoramaPreview] = useState(PhotoPreview);\r\n  const [workAreaPreview, setWorkAreaPreview] = useState(PhotoPreview);\r\n\r\n  const PhotoAddIcon = \"/Green Button.svg\";\r\n  const [streetViewButton, setStreetViewButton] = useState(PhotoAddIcon);\r\n  const [accessAreaButton, setAccessAreaButton] = useState(PhotoAddIcon);\r\n  const [panoramaButton, setPanoramaButton] = useState(PhotoAddIcon);\r\n  const [workAreaButton, setWorkAreaButton] = useState(PhotoAddIcon);\r\n\r\n  const [errorText, setErrorText] = useState(\"\");\r\n  const [photoType, setPhotoType] = useState(\"\");\r\n\r\n  const [imgArray, setImgArray] = useState([]);\r\n  var ImageId = 0;\r\n  const inputFileExtra = useRef(null);\r\n\r\n  const [PDFMap] = useState([]);\r\n  const [videoMap] = useState([]);\r\n\r\n  const onInputClick = async (event) => {\r\n    event.target.value = \"\";\r\n  };\r\n\r\n  const DeleteImgFromCloud_AndLocal = async (o) => {\r\n    DeleteImg(o);\r\n    imgArray.splice(ImageId, 1);\r\n    setImgArray([...imgArray]);\r\n  };\r\n\r\n  const CheckIfPhotosPresent = async () => {\r\n    onPreview({\r\n      streetView,\r\n      accessTo,\r\n      panorama,\r\n      areaOfWork,\r\n      imgArray,\r\n      PDFMap,\r\n    });\r\n    onPhotoUpload(streetView, accessTo, panorama, areaOfWork, imgArray, PDFMap);\r\n    onNext();\r\n  };\r\n\r\n  const UploadPhoto = async (file) => {\r\n    if (file !== undefined) {\r\n      if (\r\n        file.name.includes(\".jpg\") ||\r\n        file.name.includes(\".JPG\") ||\r\n        file.name.includes(\".jpeg\") ||\r\n        file.name.includes(\".JPEG\") ||\r\n        file.name.includes(\".png\") ||\r\n        file.name.includes(\".PNG\") ||\r\n        file.name.includes(\".heic\") ||\r\n        file.name.includes(\".HEIC\") ||\r\n        file.name.includes(\".heif\") ||\r\n        file.name.includes(\".HEIF\") ||\r\n        file.name.includes(\".webp\") ||\r\n        file.name.includes(\".WEBP\") ||\r\n        file.name.includes(\".jfif\") ||\r\n        file.name.includes(\".JFIF\") ||\r\n        file.name.includes(\".pjpeg\") ||\r\n        file.name.includes(\".PJPEG\") ||\r\n        file.name.includes(\".pjp\") ||\r\n        file.name.includes(\".PJP\") ||\r\n        file.name.includes(\".pdf\") ||\r\n        file.name.includes(\".PDF\")\r\n      ) {\r\n        var pic = await UploadFileToCloud(file);\r\n        return pic;\r\n      } else {\r\n        return null;\r\n      }\r\n    } else {\r\n      return null;\r\n    }\r\n  };\r\n\r\n  //Upload functions for individual inputs\r\n\r\n  async function UploadStreetViewImage(event) {\r\n    var file = event.target.files[0];\r\n    setStreetViewPreview(\"/Spinner.svg\");\r\n    var pic = await UploadPhoto(file);\r\n    if (pic !== null) {\r\n      setErrorText(\"\");\r\n      setPreviewImage(pic);\r\n      setPhotoType(\"streetview\");\r\n      setPreviewImageWindowDisplay(true);\r\n      setStreetView(pic);\r\n      setStreetViewPreview(window.$IMGURL + pic);\r\n      setStreetViewButton(\"/Check Mark.svg\");\r\n    } else {\r\n      setStreetViewPreview(PhotoPreview);\r\n      setErrorText(\r\n        \"File not supported, we are also not currently accepting videos.\"\r\n      );\r\n      window.scrollTo(0, 0);\r\n    }\r\n  }\r\n\r\n  async function UploadAccessAreaImage(event) {\r\n    var file = event.target.files[0];\r\n    setAccessAreaPreview(\"/Spinner.svg\");\r\n    var pic = await UploadPhoto(file);\r\n    if (pic !== null) {\r\n      setErrorText(\"\");\r\n      setPreviewImage(pic);\r\n      setPhotoType(\"accessarea\");\r\n      setPreviewImageWindowDisplay(true);\r\n      setAccessTo(pic);\r\n      setAccessAreaPreview(window.$IMGURL + pic);\r\n      setAccessAreaButton(\"/Check Mark.svg\");\r\n    } else {\r\n      setAccessAreaPreview(PhotoPreview);\r\n      setErrorText(\r\n        \"File not supported, we are also not currently accepting videos.\"\r\n      );\r\n      window.scrollTo(0, 0);\r\n    }\r\n  }\r\n\r\n  async function UploadPanormaImage(event) {\r\n    var file = event.target.files[0];\r\n    setPanoramaPreview(\"/Spinner.svg\");\r\n    var pic = await UploadPhoto(file);\r\n    if (pic !== null) {\r\n      setErrorText(\"\");\r\n      setPreviewImage(pic);\r\n      setPhotoType(\"panorama\");\r\n      setPreviewImageWindowDisplay(true);\r\n      setPanorama(pic);\r\n      setPanoramaPreview(window.$IMGURL + pic);\r\n      setPanoramaButton(\"/Check Mark.svg\");\r\n    } else {\r\n      setPanoramaPreview(PhotoPreview);\r\n      setErrorText(\r\n        \"File not supported, we are also not currently accepting videos.\"\r\n      );\r\n      window.scrollTo(0, 0);\r\n    }\r\n  }\r\n\r\n  async function UploadWorkAreaImage(event) {\r\n    var file = event.target.files[0];\r\n    setWorkAreaPreview(\"/Spinner.svg\");\r\n    var pic = await UploadPhoto(file);\r\n    if (pic !== null) {\r\n      setErrorText(\"\");\r\n      setPreviewImage(pic);\r\n      setPhotoType(\"areaofwork\");\r\n      setPreviewImageWindowDisplay(true);\r\n      setAreaOfWork(pic);\r\n      setWorkAreaPreview(window.$IMGURL + pic);\r\n      setWorkAreaButton(\"/Check Mark.svg\");\r\n    } else {\r\n      setWorkAreaPreview(PhotoPreview);\r\n      setErrorText(\r\n        \"File not supported, we are also not currently accepting videos.\"\r\n      );\r\n      window.scrollTo(0, 0);\r\n    }\r\n  }\r\n\r\n  async function UploadExtraPhotos(event) {\r\n    let file = event.target.files[0];\r\n    setPhoto(file);\r\n    setPhotoType(\"extra\");\r\n  }\r\n\r\n  const inputFile = useRef(null);\r\n  const inputFile2 = useRef(null);\r\n  const inputFile3 = useRef(null);\r\n  const inputFile4 = useRef(null);\r\n\r\n  const DeleteImg = async (img) => {\r\n    var resp = await axios.delete(window.$DBURL + \"utilities/image\", {\r\n      data: { Url: img },\r\n    });\r\n    if (resp.status === 200) {\r\n    }\r\n  };\r\n\r\n  const onStreetViewButtonClick = (event) => {\r\n    if (streetViewButton === PhotoAddIcon) {\r\n      inputFile.current.click();\r\n    } else {\r\n      DeleteImg(streetView);\r\n      DeleteCasePhoto(streetViewId);\r\n      setStreetViewPreview(PhotoPreview);\r\n      setStreetView(\"\");\r\n      setStreetViewButton(PhotoAddIcon);\r\n    }\r\n  };\r\n\r\n  const onAccessAreaButtonClick = (event) => {\r\n    if (accessAreaButton === PhotoAddIcon) {\r\n      inputFile2.current.click();\r\n    } else {\r\n      DeleteImg(accessTo);\r\n      DeleteCasePhoto(accessToId);\r\n      setAccessAreaPreview(PhotoPreview);\r\n      setAccessTo(\"\");\r\n      setAccessAreaButton(PhotoAddIcon);\r\n    }\r\n  };\r\n\r\n  const onPanoramaButtonClick = (event) => {\r\n    if (panoramaButton === PhotoAddIcon) {\r\n      inputFile3.current.click();\r\n    } else {\r\n      DeleteImg(panorama);\r\n      DeleteCasePhoto(panoramaId);\r\n      setPanoramaPreview(PhotoPreview);\r\n      setPanorama(\"\");\r\n      setPanoramaButton(PhotoAddIcon);\r\n    }\r\n  };\r\n\r\n  const onWorkAreaButtonClick = (event) => {\r\n    if (workAreaButton === PhotoAddIcon) {\r\n      inputFile4.current.click();\r\n    } else {\r\n      DeleteImg(areaOfWork);\r\n      DeleteCasePhoto(areaOfWorkId);\r\n      setWorkAreaPreview(PhotoPreview);\r\n      setAreaOfWork(\"\");\r\n      setWorkAreaButton(PhotoAddIcon);\r\n    }\r\n  };\r\n\r\n  const [photo, setPhoto] = useState(\"\");\r\n\r\n  const onButtonClickExtra = () => {\r\n    inputFileExtra.current.click();\r\n  };\r\n\r\n  const GetImgUrl_PushToLocal = async () => {\r\n    if (photo !== \"\") {\r\n      var pic = await UploadPhoto(photo);\r\n      if (pic !== null) {\r\n        setPreviewImage(pic);\r\n        setPreviewImageWindowDisplay(true);\r\n        setExtraPhoto(pic);\r\n        pullArrayAgain();\r\n      } else {\r\n        setErrorText(\r\n          \"File not supported, we are also not currently accepting videos.\"\r\n        );\r\n        window.scrollTo(0, 0);\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetImgUrl_PushToLocal();\r\n  }, [photo]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const pullArrayAgain = () => {\r\n    setImgArray([...imgArray]);\r\n  };\r\n\r\n  const ResetImage = async (photo) => {\r\n    setPreviewImageWindowDisplay(false);\r\n    switch (photo) {\r\n      case \"streetview\":\r\n        DeleteImg(streetView);\r\n        setStreetViewPreview(PhotoPreview);\r\n        setStreetView(\"\");\r\n        setStreetViewButton(PhotoAddIcon);\r\n        break;\r\n\r\n      case \"accessarea\":\r\n        DeleteImg(accessTo);\r\n        setAccessAreaPreview(PhotoPreview);\r\n        setAccessTo(\"\");\r\n        setAccessAreaButton(PhotoAddIcon);\r\n        break;\r\n\r\n      case \"panorama\":\r\n        DeleteImg(panorama);\r\n        setPanoramaPreview(PhotoPreview);\r\n        setPanorama(\"\");\r\n        setPanoramaButton(PhotoAddIcon);\r\n        break;\r\n\r\n      case \"areaofwork\":\r\n        DeleteImg(areaOfWork);\r\n        setWorkAreaPreview(PhotoPreview);\r\n        setAreaOfWork(\"\");\r\n        setWorkAreaButton(PhotoAddIcon);\r\n        break;\r\n\r\n      case \"extra\":\r\n        DeleteImg(previewImage);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  };\r\n\r\n  const AssignIdToImage = async (id, image) => {\r\n    switch (image) {\r\n      case \"streetview\":\r\n        setStreetViewId(id);\r\n        break;\r\n\r\n      case \"accessarea\":\r\n        setAccessToId(id);\r\n        break;\r\n\r\n      case \"panorama\":\r\n        setPanoramaId(id);\r\n        break;\r\n\r\n      case \"areaofwork\":\r\n        setAreaOfWorkId(id);\r\n        break;\r\n\r\n      case \"extra\":\r\n        if (extraPhoto.includes(\"pdf\") || extraPhoto.includes(\"PDF\")) {\r\n          PDFMap.push({\r\n            File: extraPhoto,\r\n            Id: id,\r\n          });\r\n        } else {\r\n          imgArray.push({\r\n            File: extraPhoto,\r\n            Id: id,\r\n          });\r\n        }\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <EstimatorDiv>\r\n      <Section1>\r\n        <CasePhotoUploadPreviewWindow\r\n          imgtype={photoType}\r\n          caseObj={caseObj}\r\n          AssignIdToImage={(id) => {\r\n            AssignIdToImage(id, photoType);\r\n          }}\r\n          open={previewImageWindowDisplay}\r\n          previewsrc={previewImage}\r\n          CancelUpload={() => {\r\n            ResetImage(photoType);\r\n          }}\r\n          CloseWindow={() => {\r\n            setPreviewImageWindowDisplay(false);\r\n          }}\r\n        ></CasePhotoUploadPreviewWindow>\r\n\r\n        <ProgressBar>\r\n          <ProgressBarWidth width=\"93.75%\"></ProgressBarWidth>\r\n        </ProgressBar>\r\n\r\n        <Header fontsize=\"28px\" marginbottom=\"1%\">\r\n          Upload Photos\r\n        </Header>\r\n        <BodyPara\r\n          bodycolor=\"#808080\"\r\n          width=\"55%\"\r\n          marginbottom=\"0%\"\r\n          fontsize=\"16px\"\r\n        >\r\n          If you have photos of your outdoor space for us to better understand\r\n          your project's requirements. We work best with photos of the following\r\n          areas.\r\n        </BodyPara>\r\n        <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n\r\n        {/* STREET VIEW OF PROPERTY */}\r\n\r\n        <FlexColumnCont\r\n          margin=\"0\"\r\n          mobilewidth=\"90vw\"\r\n          width=\"55%\"\r\n          height=\"15%\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"flex-start\"\r\n        >\r\n          <Icon45x45\r\n            src={streetViewButton}\r\n            onClick={() => {\r\n              onStreetViewButtonClick();\r\n            }}\r\n          ></Icon45x45>\r\n          <FlexRowCont55x15PercentPropBorderBottom\r\n            borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n          >\r\n            <SmallHeaderLeagueSpartan mobilewidth=\"70vw\" width=\"auto\">\r\n              Street View of Property*\r\n            </SmallHeaderLeagueSpartan>\r\n            <StyledHR\r\n              mobiledisplay=\"none\"\r\n              height=\"50%\"\r\n              width=\"0px\"\r\n              border={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n            ></StyledHR>\r\n            <TextInput300x50\r\n              mobiledisplay=\"none\"\r\n              inputwidth=\"40%\"\r\n              inputheight=\"20%\"\r\n              ref={inputFile}\r\n              type=\"file\"\r\n              onClick={onInputClick}\r\n              onChange={UploadStreetViewImage}\r\n            />\r\n            <Icon30px20pxPointer\r\n              mobilewidth=\"5vw\"\r\n              width=\"4%\"\r\n              onClick={() => {\r\n                onStreetViewButtonClick();\r\n              }}\r\n              src=\"/Close.svg\"\r\n            ></Icon30px20pxPointer>\r\n          </FlexRowCont55x15PercentPropBorderBottom>\r\n        </FlexColumnCont>\r\n\r\n        {/* ACCESS TO WORK AREA */}\r\n\r\n        <FlexRowCont55x15Percent>\r\n          <Icon45x45\r\n            src={accessAreaButton}\r\n            onClick={onAccessAreaButtonClick}\r\n          ></Icon45x45>\r\n          <FlexRowCont55x15PercentPropBorderBottom\r\n            borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n          >\r\n            <SmallHeaderLeagueSpartan mobilewidth=\"70vw\" width=\"auto\">\r\n              Access to Work Area*\r\n            </SmallHeaderLeagueSpartan>\r\n            <StyledHR\r\n              mobiledisplay=\"none\"\r\n              height=\"50%\"\r\n              marginleft=\"10%\"\r\n              width=\"0px\"\r\n              border={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n            ></StyledHR>\r\n            <TextInput300x50\r\n              mobiledisplay=\"none\"\r\n              inputwidth=\"40%\"\r\n              inputheight=\"20%\"\r\n              ref={inputFile2}\r\n              type=\"file\"\r\n              onClick={onInputClick}\r\n              onChange={UploadAccessAreaImage}\r\n            />\r\n            <Icon30px20pxPointer\r\n              mobilewidth=\"5vw\"\r\n              width=\"4%\"\r\n              onClick={onAccessAreaButtonClick}\r\n              src=\"/Close.svg\"\r\n            ></Icon30px20pxPointer>\r\n          </FlexRowCont55x15PercentPropBorderBottom>\r\n        </FlexRowCont55x15Percent>\r\n\r\n        {/* PANORAMA OF YARD */}\r\n\r\n        <FlexRowCont55x15Percent>\r\n          <Icon45x45\r\n            src={panoramaButton}\r\n            onClick={onPanoramaButtonClick}\r\n          ></Icon45x45>\r\n          <FlexRowCont55x15PercentPropBorderBottom\r\n            borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n          >\r\n            <SmallHeaderLeagueSpartan mobilewidth=\"70vw\" width=\"auto\">\r\n              Panorama of Yard*\r\n            </SmallHeaderLeagueSpartan>\r\n            <StyledHR\r\n              mobiledisplay=\"none\"\r\n              height=\"50%\"\r\n              marginleft=\"13%\"\r\n              width=\"0px\"\r\n              border={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n            ></StyledHR>\r\n            <TextInput300x50\r\n              mobiledisplay=\"none\"\r\n              inputwidth=\"40%\"\r\n              inputheight=\"20%\"\r\n              ref={inputFile3}\r\n              type=\"file\"\r\n              onClick={onInputClick}\r\n              onChange={UploadPanormaImage}\r\n            />\r\n            <Icon30px20pxPointer\r\n              mobilewidth=\"5vw\"\r\n              width=\"4%\"\r\n              onClick={onPanoramaButtonClick}\r\n              src=\"/Close.svg\"\r\n            ></Icon30px20pxPointer>\r\n          </FlexRowCont55x15PercentPropBorderBottom>\r\n        </FlexRowCont55x15Percent>\r\n\r\n        {/* AREA OF WORK */}\r\n\r\n        <FlexRowCont55x15Percent>\r\n          <Icon45x45\r\n            src={workAreaButton}\r\n            onClick={onWorkAreaButtonClick}\r\n          ></Icon45x45>\r\n          <FlexRowCont55x15PercentPropBorderBottom\r\n            borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n          >\r\n            <SmallHeaderLeagueSpartan mobilewidth=\"70vw\" width=\"auto\">\r\n              Area of Work*\r\n            </SmallHeaderLeagueSpartan>\r\n            <StyledHR\r\n              mobiledisplay=\"none\"\r\n              height=\"50%\"\r\n              marginleft=\"20%\"\r\n              width=\"0px\"\r\n              border={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n            ></StyledHR>\r\n            <TextInput300x50\r\n              mobiledisplay=\"none\"\r\n              inputwidth=\"40%\"\r\n              inputheight=\"20%\"\r\n              ref={inputFile4}\r\n              type=\"file\"\r\n              onClick={onInputClick}\r\n              onChange={UploadWorkAreaImage}\r\n            />\r\n            <Icon30px20pxPointer\r\n              mobilewidth=\"5vw\"\r\n              width=\"4%\"\r\n              onClick={onWorkAreaButtonClick}\r\n              src=\"/Close.svg\"\r\n            ></Icon30px20pxPointer>\r\n          </FlexRowCont55x15PercentPropBorderBottom>\r\n        </FlexRowCont55x15Percent>\r\n\r\n        {/* EXTRA PHOTOS */}\r\n\r\n        <FlexRowCont55x15Percent>\r\n          <Icon45x45\r\n            src={PhotoAddIcon}\r\n            onClick={onButtonClickExtra}\r\n          ></Icon45x45>\r\n          <FlexRowCont55x15PercentPropBorderBottom\r\n            borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n          >\r\n            <SmallHeaderLeagueSpartan mobilewidth=\"70vw\" width=\"auto\">\r\n              Extra Photos\r\n            </SmallHeaderLeagueSpartan>\r\n            <StyledHR\r\n              mobiledisplay=\"none\"\r\n              height=\"50%\"\r\n              marginleft=\"22%\"\r\n              width=\"0px\"\r\n              border={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n            ></StyledHR>\r\n            <TextInput300x50\r\n              mobiledisplay=\"none\"\r\n              inputwidth=\"40%\"\r\n              inputheight=\"20%\"\r\n              ref={inputFileExtra}\r\n              type=\"file\"\r\n              onChange={UploadExtraPhotos}\r\n            />\r\n            <Icon30px20pxPointer\r\n              mobilewidth=\"5vw\"\r\n              width=\"4%\"\r\n              src=\"/Close.svg\"\r\n            ></Icon30px20pxPointer>\r\n          </FlexRowCont55x15PercentPropBorderBottom>\r\n        </FlexRowCont55x15Percent>\r\n\r\n        <FlexColumnFullWidth width=\"6vw\" alignitems=\"center\">\r\n          <InlineGridContainer>\r\n            <CenteredGridImage\r\n              display={streetViewPreview !== PhotoPreview ? \"flex\" : \"none\"}\r\n              src={streetViewPreview}\r\n            ></CenteredGridImage>\r\n            <CenteredGridImage\r\n              display={accessAreaPreview !== PhotoPreview ? \"flex\" : \"none\"}\r\n              src={accessAreaPreview}\r\n            ></CenteredGridImage>\r\n            <CenteredGridImage\r\n              display={panoramaPreview !== PhotoPreview ? \"flex\" : \"none\"}\r\n              src={panoramaPreview}\r\n            ></CenteredGridImage>\r\n            <CenteredGridImage\r\n              display={workAreaPreview !== PhotoPreview ? \"flex\" : \"none\"}\r\n              src={workAreaPreview}\r\n            ></CenteredGridImage>\r\n            {imgArray.map((o, i) => (\r\n              <InlineGridContainer key={i}>\r\n                <CenteredGridImage\r\n                  src={window.$IMGURL + o.File}\r\n                  alt={\"Cannot Display Image\"}\r\n                ></CenteredGridImage>\r\n                <Icon30px30pxPointer\r\n                  src=\"/Close.svg\"\r\n                  onClick={() => {\r\n                    ImageId = i;\r\n                    DeleteImgFromCloud_AndLocal(o.File);\r\n                    DeleteCasePhoto(o.Id);\r\n                  }}\r\n                ></Icon30px30pxPointer>\r\n              </InlineGridContainer>\r\n            ))}\r\n            {videoMap.map((o, i) => (\r\n              <video width=\"320\" height=\"240\" controls>\r\n                <source src={window.$IMGURL + o} />\r\n                Your browser does not support the video tag.\r\n              </video>\r\n            ))}\r\n            {PDFMap.map((o, i) => (\r\n              <InlineGridContainer>\r\n                <a\r\n                  rel=\"noreferrer\"\r\n                  href={window.$IMGURL + o.File}\r\n                  target=\"_blank\"\r\n                >\r\n                  <CenteredGridImage\r\n                    objfit=\"contain\"\r\n                    src={\"/pdficon.png\"}\r\n                    alt={\"File:\" + o.File}\r\n                  ></CenteredGridImage>\r\n                </a>\r\n              </InlineGridContainer>\r\n            ))}\r\n          </InlineGridContainer>\r\n        </FlexColumnFullWidth>\r\n        <FlexRowCont100x8PercentSpaceAround>\r\n          <GreyNavigationButton\r\n            onClick={() => {\r\n              onBack();\r\n            }}\r\n          >\r\n            Back\r\n          </GreyNavigationButton>\r\n          <GreenNavigationButton\r\n            bgcolor={ColorPalette.PrimaryButtonBlue}\r\n            onClick={() => {\r\n              CheckIfPhotosPresent();\r\n            }}\r\n          >\r\n            Next\r\n          </GreenNavigationButton>\r\n        </FlexRowCont100x8PercentSpaceAround>\r\n      </Section1>\r\n    </EstimatorDiv>\r\n  );\r\n};\r\n\r\nPhotoUploadComp.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onPhotoUpload: () => {},\r\n};\r\n\r\nexport default PhotoUploadComp;\r\n","import React, { useState } from \"react\";\r\n\r\nimport {\r\n  Header,\r\n  SelectableMediumLongButton,\r\n} from \"../../../StylesheetComps/AuthSheet\";\r\nimport { SmallHeader } from \"../../../StylesheetComps/Menu\";\r\nimport { BodyPara } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { FlexColumnCont } from \"../../../StylesheetComps/Menu\";\r\nimport { TextInput300x50 } from \"../../../StylesheetComps/AuthSheet\";\r\nimport {\r\n  Section1,\r\n  EstimatorDiv,\r\n  GreyNavigationButton,\r\n  GreenNavigationButton,\r\n  ProgressBar,\r\n  ProgressBarWidth,\r\n  FlexColumnGreenSelectables,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { FlexRowCont70PercentFlexStart } from \"../../../StylesheetComps/Cont\";\r\nconst ProjectArea = ({\r\n  open,\r\n  onNext,\r\n  onBack,\r\n  onPreview,\r\n  onPersonalInfo,\r\n  fullName,\r\n  addressofUser,\r\n  emailofUser,\r\n  phoneofUser,\r\n  onSelectProjectArea,\r\n}) => {\r\n  //Front Yard UI Update\r\n  const [frontcolor, setFrontColor] = useState(\"black\");\r\n  const [frontborder, setFrontBorder] = useState(\"4px solid white\");\r\n  const [frontselected, setFrontSelected] = useState(\"\");\r\n\r\n  //Back Yard UI Update\r\n  const [backcolor, setBackColor] = useState(\"\");\r\n  const [backborder, setBackBorder] = useState(\"\");\r\n  const [backselected, setBackSelected] = useState(\"\");\r\n\r\n  //Side Yard UI Update\r\n  const [sidecolor, setSideColor] = useState(\"\");\r\n  const [sideborder, setSideBorder] = useState(\"\");\r\n  const [sideselected, setSideSelected] = useState(\"\");\r\n\r\n  //Entertainment UI Update\r\n  const [entertainmentcolor, setEntertainmentColor] = useState(\"\");\r\n  const [entertainmentborder, setEntertainmentBorder] = useState(\"\");\r\n  const [entertainmentselected, setEntertainmentSelected] = useState(\"\");\r\n\r\n  //Driveway UI Update\r\n  const [drivewaycolor, setDrivewayColor] = useState(\"\");\r\n  const [drivewayborder, setDrivewayBorder] = useState(\"\");\r\n  const [drivewayselected, setDrivewaySelected] = useState(\"\");\r\n\r\n  //Other UI Update\r\n  const [othercolor, setOtherColor] = useState(\"\");\r\n  const [otherBorder, setOtherBorder] = useState(\"\");\r\n  const [otherSelected, setOtherSelected] = useState(\"\");\r\n  const [displayOtherDiv, setDisplayOtherDiv] = useState(\"none\");\r\n\r\n  const [otherAreaText, setOtherAreaText] = useState(\"\");\r\n\r\n  //Change Select / Deselected UI for the button text and borders,\r\n  //as well as if it is selected\r\n\r\n  const setFrontBoxColor = async (originalcolor) => {\r\n    if (originalcolor === ColorPalette.PrimaryButtonBlue) {\r\n      setFrontColor(\"black\");\r\n      setFrontBorder(\"4px solid white\");\r\n      setFrontSelected(\"\");\r\n    } else {\r\n      setFrontColor(\"#169ADB\");\r\n      setFrontBorder(\"4px solid #169ADB\");\r\n      setFrontSelected(\"Front Yard\");\r\n    }\r\n  };\r\n\r\n  const setBackBoxColor = async (originalcolor) => {\r\n    if (originalcolor === ColorPalette.PrimaryButtonBlue) {\r\n      setBackColor(\"black\");\r\n      setBackBorder(\"4px solid white\");\r\n      setBackSelected(\"\");\r\n    } else {\r\n      setBackColor(\"#169ADB\");\r\n      setBackBorder(\"4px solid #169ADB\");\r\n      setBackSelected(\"Back Yard\");\r\n    }\r\n  };\r\n\r\n  const setSideBoxColor = async (originalcolor) => {\r\n    if (originalcolor === ColorPalette.PrimaryButtonBlue) {\r\n      setSideColor(\"black\");\r\n      setSideBorder(\"4px solid white\");\r\n      setSideSelected(\"\");\r\n    } else {\r\n      setSideColor(\"#169ADB\");\r\n      setSideBorder(\"4px solid #169ADB\");\r\n      setSideSelected(\"Side Yard\");\r\n    }\r\n  };\r\n\r\n  const setEntertainmentBoxColor = async (originalcolor) => {\r\n    if (originalcolor === ColorPalette.PrimaryButtonBlue) {\r\n      setEntertainmentColor(\"black\");\r\n      setEntertainmentBorder(\"4px solid white\");\r\n      setEntertainmentSelected(\"\");\r\n    } else {\r\n      setEntertainmentColor(\"#169ADB\");\r\n      setEntertainmentBorder(\"4px solid #169ADB\");\r\n      setEntertainmentSelected(\"Entertainment Area\");\r\n    }\r\n  };\r\n\r\n  const setDriveWayBoxColor = async (originalcolor) => {\r\n    if (originalcolor === ColorPalette.PrimaryButtonBlue) {\r\n      setDrivewayColor(\"black\");\r\n      setDrivewayBorder(\"4px solid white\");\r\n      setDrivewaySelected(\"\");\r\n    } else {\r\n      setDrivewayColor(\"#169ADB\");\r\n      setDrivewayBorder(\"4px solid #169ADB\");\r\n      setDrivewaySelected(\"Driveway\");\r\n    }\r\n  };\r\n\r\n  const setOtherBoxColor = async (originalcolor) => {\r\n    if (originalcolor === ColorPalette.PrimaryButtonBlue) {\r\n      setOtherColor(\"black\");\r\n      setOtherBorder(\"4px solid white\");\r\n      setOtherSelected(\"\");\r\n      setDisplayOtherDiv(\"none\");\r\n    } else {\r\n      setOtherColor(\"#169ADB\");\r\n      setOtherBorder(\"4px solid #169ADB\");\r\n      setOtherSelected(\"Other:\");\r\n      setDisplayOtherDiv(\"block\");\r\n    }\r\n  };\r\n\r\n  //Take Global Variables for possible areas of work and combine them into a single string. Push this string as a parameter to a higher function\r\n  //and move onto the next subpage (Project Scope)\r\n\r\n  const DefineProjectArea = async (\r\n    frontselected,\r\n    backselected,\r\n    sideselected,\r\n    entertainmentselected,\r\n    drivewayselected,\r\n    otherSelected,\r\n    otherAreaText\r\n  ) => {\r\n    let projectareastring =\r\n      frontselected +\r\n      \" \" +\r\n      backselected +\r\n      \" \" +\r\n      sideselected +\r\n      \" \" +\r\n      entertainmentselected +\r\n      \" \" +\r\n      drivewayselected +\r\n      \" \" +\r\n      otherSelected +\r\n      otherAreaText;\r\n    onSelectProjectArea(projectareastring);\r\n    onNext();\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <EstimatorDiv>\r\n      <Section1>\r\n        <ProgressBar>\r\n          <ProgressBarWidth width=\"37.5%\"></ProgressBarWidth>\r\n        </ProgressBar>\r\n\r\n        <Header fontsize=\"28px\" marginbottom=\"1%\">\r\n          Project Area\r\n        </Header>\r\n        <BodyPara\r\n          bodycolor=\"#808080\"\r\n          width=\"55%\"\r\n          marginbottom=\"0%\"\r\n          fontsize=\"16px\"\r\n        >\r\n          Tell us where your project is located. If your project takes up a\r\n          larger space, please indicate the scale of the space in the \"Other\"\r\n          section below.{\" \"}\r\n        </BodyPara>\r\n\r\n        <FlexColumnCont\r\n          width=\"60%\"\r\n          mobilewidth=\"70vw\"\r\n          height=\"auto\"\r\n          marginbottom=\"0%\"\r\n        >\r\n          <FlexColumnCont width=\"100%\" justifycontent=\"flex-start\" height=\"80%\">\r\n            <FlexColumnGreenSelectables>\r\n              <SelectableMediumLongButton\r\n                border={frontborder}\r\n                color={frontcolor}\r\n                onClick={() => {\r\n                  setFrontBoxColor(frontcolor);\r\n                }}\r\n              >\r\n                Front Yard\r\n              </SelectableMediumLongButton>\r\n              <SelectableMediumLongButton\r\n                border={backborder}\r\n                color={backcolor}\r\n                onClick={() => {\r\n                  setBackBoxColor(backcolor);\r\n                }}\r\n              >\r\n                Back Yard\r\n              </SelectableMediumLongButton>\r\n              <SelectableMediumLongButton\r\n                border={sideborder}\r\n                color={sidecolor}\r\n                onClick={() => {\r\n                  setSideBoxColor(sidecolor);\r\n                }}\r\n              >\r\n                Side Yard\r\n              </SelectableMediumLongButton>\r\n            </FlexColumnGreenSelectables>\r\n\r\n            <FlexColumnGreenSelectables>\r\n              <SelectableMediumLongButton\r\n                border={entertainmentborder}\r\n                color={entertainmentcolor}\r\n                onClick={() => {\r\n                  setEntertainmentBoxColor(entertainmentcolor);\r\n                }}\r\n              >\r\n                Entertainment\r\n              </SelectableMediumLongButton>\r\n              <SelectableMediumLongButton\r\n                border={drivewayborder}\r\n                color={drivewaycolor}\r\n                onClick={() => {\r\n                  setDriveWayBoxColor(drivewaycolor);\r\n                }}\r\n              >\r\n                Driveway\r\n              </SelectableMediumLongButton>\r\n              <SelectableMediumLongButton\r\n                border={otherBorder}\r\n                color={othercolor}\r\n                onClick={() => {\r\n                  setOtherBoxColor(othercolor);\r\n                }}\r\n              >\r\n                Other\r\n              </SelectableMediumLongButton>\r\n            </FlexColumnGreenSelectables>\r\n          </FlexColumnCont>\r\n        </FlexColumnCont>\r\n\r\n        <FlexColumnCont\r\n          display={displayOtherDiv}\r\n          width=\"55%\"\r\n          margintop=\"2%\"\r\n          marginbottom=\"0\"\r\n          height=\"auto\"\r\n        >\r\n          <FlexRowCont70PercentFlexStart>\r\n            <SmallHeader>\r\n              If selected other, where is the area of work?\r\n            </SmallHeader>\r\n          </FlexRowCont70PercentFlexStart>\r\n          <TextInput300x50\r\n            inputwidth=\"84%\"\r\n            placeholder={\"Area of Work\"}\r\n            inputheight=\"1%\"\r\n            inputborderradius=\"5px\"\r\n            defaultValue={fullName}\r\n            onChange={(e) => {\r\n              setOtherAreaText(e.target.value);\r\n            }}\r\n          ></TextInput300x50>\r\n        </FlexColumnCont>\r\n        <FlexColumnCont\r\n          height=\"8%\"\r\n          margin=\"0\"\r\n          margintop=\"2%\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"space-around\"\r\n          width=\"100%\"\r\n        >\r\n          <GreyNavigationButton\r\n            onClick={() => {\r\n              onBack();\r\n            }}\r\n          >\r\n            Back\r\n          </GreyNavigationButton>\r\n          <GreenNavigationButton\r\n            onClick={() => {\r\n              DefineProjectArea(\r\n                frontselected,\r\n                backselected,\r\n                sideselected,\r\n                entertainmentselected,\r\n                drivewayselected,\r\n                otherSelected,\r\n                otherAreaText\r\n              );\r\n            }}\r\n          >\r\n            Next\r\n          </GreenNavigationButton>\r\n        </FlexColumnCont>\r\n      </Section1>\r\n    </EstimatorDiv>\r\n  );\r\n};\r\n\r\n// }\r\n\r\nProjectArea.defaultProps = {\r\n  onChange: () => {},\r\n  onSelectProjectArea: () => {},\r\n  onPreview: () => {},\r\n  onPersonalInfo: () => {},\r\n  fullName: \"\",\r\n  addressofUser: \"\",\r\n  emailofUser: \"\",\r\n  phoneofUser: \"\",\r\n};\r\n\r\nexport default ProjectArea;\r\n","import React, { useState } from \"react\";\r\nimport {\r\n  BodyPara,\r\n  Header,\r\n  TextInput300x50,\r\n} from \"../../../StylesheetComps/AuthSheet\";\r\nimport { FlexRowCont } from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  EstimatorDiv,\r\n  FlexDivSpaceAround,\r\n  GreenNavigationButton,\r\n  GreyNavigationButton,\r\n  MediumStyledImage,\r\n  ProgressBar,\r\n  ProgressBarWidth,\r\n  Section1,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../../StylesheetComps/Menu\";\r\n\r\nconst ProjectBudget = ({\r\n  open,\r\n  onNext,\r\n  onBack,\r\n  onPreview,\r\n  onPersonalInfo,\r\n  fullName,\r\n  addressofUser,\r\n  emailofUser,\r\n  phoneofUser,\r\n  onSelectProjectBudget,\r\n}) => {\r\n  const [maxbudget, setMaxBudget] = useState(\"\");\r\n\r\n  //When user is ready to proceed, combine min and max budget into string\r\n  //that is passed to a higher function for later, and onNext(); to the\r\n  //Photo Upload Page\r\n\r\n  const DefineProjectBudget = async (maxbudget) => {\r\n    let projectbudgetstring = \"Max Budget:\" + maxbudget;\r\n    onSelectProjectBudget(projectbudgetstring);\r\n    onNext();\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <EstimatorDiv>\r\n      <Section1>\r\n        <ProgressBar>\r\n          <ProgressBarWidth width=\"87.5%\"></ProgressBarWidth>\r\n        </ProgressBar>\r\n\r\n        <Header fontsize=\"28px\" margintop=\"4%\" marginbottom=\"1%\">\r\n          Project Budget\r\n        </Header>\r\n        <BodyPara\r\n          bodycolor=\"#808080\"\r\n          width=\"55%\"\r\n          marginbottom=\"2%\"\r\n          fontsize=\"16px\"\r\n        >\r\n          Select one of the budget ranges below or set your preferred. Setting a\r\n          budget is an important step in creating a project that fits your needs\r\n          and lifestyle. Our team will put together a package of planting and\r\n          materials suited for your budget and offer different options to\r\n          achieve your project goals.\r\n        </BodyPara>\r\n\r\n        <FlexColumnCont\r\n          flexdirection=\"row\"\r\n          mobileflexdirection=\"column\"\r\n          mobilewidth=\"90vw\"\r\n          width=\"85%\"\r\n          height=\"45%\"\r\n          justifycontent=\"space-around\"\r\n        >\r\n          <FlexDivSpaceAround>\r\n            <MediumStyledImage\r\n              height=\"80%\"\r\n              width=\"15vw\"\r\n              mobilewidth=\"90vw\"\r\n              src=\"/Budget_BeforeClose.jpg\"\r\n            ></MediumStyledImage>\r\n            <FlexRowCont>\r\n              <SmallHeaderLeagueSpartan fontsize=\"16px\">\r\n                Before Project\r\n              </SmallHeaderLeagueSpartan>\r\n            </FlexRowCont>\r\n          </FlexDivSpaceAround>\r\n\r\n          <FlexDivSpaceAround\r\n            onClick={() => {\r\n              setMaxBudget(\"Under $10,000\");\r\n            }}\r\n          >\r\n            <MediumStyledImage\r\n              height=\"80%\"\r\n              width=\"15vw\"\r\n              mobilewidth=\"90vw\"\r\n              src=\"/Budget_CloseUp.jpg\"\r\n            ></MediumStyledImage>\r\n            <FlexRowCont>\r\n              <SmallHeaderLeagueSpartan fontsize=\"16px\">\r\n                Under $10,000\r\n              </SmallHeaderLeagueSpartan>\r\n            </FlexRowCont>\r\n          </FlexDivSpaceAround>\r\n\r\n          <FlexDivSpaceAround\r\n            onClick={() => {\r\n              setMaxBudget(\"$10,000-$20,000\");\r\n            }}\r\n          >\r\n            <MediumStyledImage\r\n              height=\"80%\"\r\n              width=\"15vw\"\r\n              mobilewidth=\"90vw\"\r\n              src=\"/mediumbudget.jpg\"\r\n            ></MediumStyledImage>\r\n            <FlexRowCont>\r\n              <SmallHeaderLeagueSpartan fontsize=\"16px\">\r\n                $10,000 - $20,000\r\n              </SmallHeaderLeagueSpartan>\r\n            </FlexRowCont>\r\n          </FlexDivSpaceAround>\r\n\r\n          <FlexDivSpaceAround\r\n            onClick={() => {\r\n              setMaxBudget(\"$50,000+\");\r\n            }}\r\n          >\r\n            <MediumStyledImage\r\n              height=\"80%\"\r\n              width=\"15vw\"\r\n              mobilewidth=\"90vw\"\r\n              src=\"/highbudget.jpg\"\r\n            ></MediumStyledImage>\r\n            <FlexRowCont>\r\n              <SmallHeaderLeagueSpartan fontsize=\"16px\">\r\n                Over $50,000\r\n              </SmallHeaderLeagueSpartan>\r\n            </FlexRowCont>\r\n          </FlexDivSpaceAround>\r\n        </FlexColumnCont>\r\n\r\n        <FlexColumnCont\r\n          width=\"50%\"\r\n          height=\"15%\"\r\n          marginbottom=\"0%\"\r\n          margintop=\"0\"\r\n          alignitems=\"left\"\r\n          flexdirection=\"row\"\r\n          mobileflexdirection=\"column\"\r\n        >\r\n          <FlexColumnCont\r\n            width=\"50%\"\r\n            height=\"100%\"\r\n            flexdirection=\"row\"\r\n            alignitems=\"center\"\r\n            justifycontent=\"center\"\r\n          >\r\n            <SmallHeader width=\"10%\" height=\"auto\">\r\n              Max\r\n            </SmallHeader>\r\n            <TextInput300x50\r\n              value={maxbudget}\r\n              inputwidth=\"60%\"\r\n              inputheight=\"25%\"\r\n              placeholder=\"Maximum Budget\"\r\n              onChange={(e) => {\r\n                setMaxBudget(e.target.value);\r\n              }}\r\n            ></TextInput300x50>\r\n          </FlexColumnCont>\r\n        </FlexColumnCont>\r\n\r\n        <FlexColumnCont\r\n          height=\"8%\"\r\n          margin=\"0\"\r\n          margintop=\"5vh\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"space-around\"\r\n          width=\"100%\"\r\n        >\r\n          <GreyNavigationButton\r\n            onClick={() => {\r\n              onBack();\r\n            }}\r\n          >\r\n            Back\r\n          </GreyNavigationButton>\r\n          <GreenNavigationButton\r\n            onClick={() => {\r\n              DefineProjectBudget(maxbudget);\r\n            }}\r\n          >\r\n            Next\r\n          </GreenNavigationButton>\r\n        </FlexColumnCont>\r\n      </Section1>\r\n    </EstimatorDiv>\r\n  );\r\n};\r\n\r\n// }\r\n\r\nProjectBudget.defaultProps = {\r\n  onChange: () => {},\r\n  onSelectProjectBudget: () => {},\r\n  onPreview: () => {},\r\n  onPersonalInfo: () => {},\r\n  fullName: \"\",\r\n  addressofUser: \"\",\r\n  emailofUser: \"\",\r\n  phoneofUser: \"\",\r\n};\r\n\r\nexport default ProjectBudget;\r\n","import { useEffect, useState } from \"react\";\r\nimport { GetStoreByMetro } from \"../../../API_Functions/Store_Functions\";\r\nimport {\r\n  GetCityList,\r\n  GetMetroList,\r\n} from \"../../../API_Functions/Utility_Functions\";\r\nimport {\r\n  BodyPara,\r\n  Header,\r\n  TextInput300x50,\r\n} from \"../../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  FlexRowContFullWidth,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  GridContainer2Wide,\r\n  GridContainer3Wide,\r\n} from \"../../../StylesheetComps/Div\";\r\nimport {\r\n  EstimatorDiv,\r\n  FlexContBottomGrey,\r\n  FlexInfoCont,\r\n  GreenNavigationButton,\r\n  GreyNavigationButton,\r\n  Image300x200,\r\n  LandscapePara,\r\n  ProgressBar,\r\n  ProgressBarWidth,\r\n  Section1,\r\n  SmallHeaderLeagueSpartan,\r\n  WideFlexInfoCont,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../../StylesheetComps/Menu\";\r\n\r\nconst ProjectOverview = ({\r\n  open,\r\n  onNext,\r\n  onBack,\r\n  fullName,\r\n  phone,\r\n  email,\r\n  address,\r\n  city,\r\n  metro,\r\n  area,\r\n  scope,\r\n  type,\r\n  style,\r\n  budget,\r\n  description,\r\n  imgs,\r\n  pdfs,\r\n  onSubmitCase,\r\n  onSaveCase,\r\n  onOpenSaveCase,\r\n  onSetCaseInformation,\r\n\r\n  contactinfo,\r\n}) => {\r\n  const [imgMap, setImgMap] = useState([]);\r\n  const [PDFMap, setPDFMap] = useState([]);\r\n  const [videoMap] = useState([]);\r\n\r\n  //Project Contact\r\n\r\n  const [NameDisplay, setNameDisplay] = useState(\"none\");\r\n  const [PhoneDisplay, setPhoneDisplay] = useState(\"none\");\r\n  const [EmailDisplay, setEmailDisplay] = useState(\"none\");\r\n  const [AddressDisplay, setAddressDisplay] = useState(\"none\");\r\n  const [CityDisplay, setCityDisplay] = useState(\"none\");\r\n  const [MetroDisplay, setMetroDisplay] = useState(\"none\");\r\n\r\n  const [NameLabelDisplay, setNameLabelDisplay] = useState(\"block\");\r\n  const [PhoneLabelDisplay, setPhoneLabelDisplay] = useState(\"block\");\r\n  const [EmailLabelDisplay, setEmailLabelDisplay] = useState(\"block\");\r\n  const [AddressLabelDisplay, setAddressLabelDisplay] = useState(\"block\");\r\n  const [CityLabelDisplay, setCityLabelDisplay] = useState(\"block\");\r\n  const [MetroLabelDisplay, setMetroLabelDisplay] = useState(\"block\");\r\n\r\n  //Project Details\r\n\r\n  const [ProjectAreaDisplay, setProjectAreaDisplay] = useState(\"none\");\r\n  const [ProjectScopeDisplay, setProjectScopeDisplay] = useState(\"none\");\r\n  const [ProjectTypeDisplay, setProjectTypeDisplay] = useState(\"none\");\r\n  const [ProjectStyleDisplay, setProjectStyleDisplay] = useState(\"none\");\r\n  const [ProjectBudgetDisplay, setProjectBudgetDisplay] = useState(\"none\");\r\n\r\n  const [ProjectAreaLabelDisplay, setProjectAreaLabelDisplay] =\r\n    useState(\"block\");\r\n  const [ProjectScopeLabelDisplay, setProjectScopeLabelDisplay] =\r\n    useState(\"block\");\r\n  const [ProjectTypeLabelDisplay, setProjectTypeLabelDisplay] =\r\n    useState(\"block\");\r\n  const [ProjectStyleLabelDisplay, setProjectStyleLabelDisplay] =\r\n    useState(\"block\");\r\n  const [ProjectBudgetLabelDisplay, setProjectBudgetLabelDisplay] =\r\n    useState(\"block\");\r\n\r\n  const [statusButtonText] = useState(\"Save Project\");\r\n\r\n  const [editContactText, setEditContactText] = useState(\"Edit\");\r\n  const [editContactBGColor, setEditContactBGColor] = useState(\r\n    ColorPalette.PrimaryGrey\r\n  );\r\n\r\n  const [editDetailsText, setEditDetailsText] = useState(\"Edit\");\r\n  const [editDetailsBGColor, setEditDetailsBGColor] = useState(\r\n    ColorPalette.PrimaryGrey\r\n  );\r\n\r\n  const [cityList, setCityList] = useState([]);\r\n  const [metroList, setMetroList] = useState([]);\r\n\r\n  const [ErrorText, setErrorText] = useState(\"\");\r\n  const [ErrorTextDetails] = useState(\"\");\r\n\r\n  const [ProjectArea, setProjectArea] = useState(area);\r\n  const [ProjectScope, setProjectScope] = useState(scope);\r\n  const [ProjectType, setProjectType] = useState(type);\r\n  const [ProjectStyle, setProjectStyle] = useState(style);\r\n  const [ProjectBudget, setProjectBudget] = useState(budget);\r\n\r\n  const [developerMetroId] = useState(3);\r\n\r\n  const [ProjectDescription, setProjectDescription] = useState(description);\r\n\r\n  const GetLocationInfo = async () => {\r\n    let metrodata = await GetMetroList();\r\n    if(contactinfo.Metro_Id !== undefined){\r\n      let citydata = await GetCityList(contactinfo.Metro_Id);\r\n      setCityList(citydata);\r\n    }\r\n\r\n    setMetroList(metrodata);\r\n  };\r\n\r\n  useEffect(() => {\r\n    // setImgMap(imgs)\r\n    if (pdfs !== undefined || pdfs !== null) {\r\n      setPDFMap(\r\n        pdfs.filter((o) => o.File?.includes(\"pdf\") || o.File?.includes(\".PDF\"))\r\n      );\r\n    }\r\n    if (imgs !== undefined || imgs !== null) {\r\n      setImgMap(\r\n        imgs.filter(\r\n          (o) =>\r\n            o.File?.slice(-4) !== \".MOV\" &&\r\n            o.File?.slice(-4) !== \".pdf\" &&\r\n            o.File?.slice(-4) !== \".PDF\" &&\r\n            o.File?.slice(-4) !== \".mp4\" &&\r\n            o.File?.slice(-4) !== \".MP4\"\r\n        )\r\n      );\r\n    }\r\n  }, [imgs]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const EditProjectContactInfo = async () => {\r\n    if (editContactText === \"Edit\") {\r\n      setNameDisplay(\"block\");\r\n      setPhoneDisplay(\"block\");\r\n      setEmailDisplay(\"block\");\r\n      setAddressDisplay(\"block\");\r\n      setCityDisplay(\"block\");\r\n      setMetroDisplay(\"block\");\r\n\r\n      setNameLabelDisplay(\"none\");\r\n      setPhoneLabelDisplay(\"none\");\r\n      setEmailLabelDisplay(\"none\");\r\n      setAddressLabelDisplay(\"none\");\r\n      setCityLabelDisplay(\"none\");\r\n      setMetroLabelDisplay(\"none\");\r\n\r\n      setEditContactText(\"Save\");\r\n      setEditContactBGColor(ColorPalette.PrimaryButtonBlue);\r\n    } else if (\r\n      contactinfo.Name !== \"\" &&\r\n      contactinfo.Address !== \"\" &&\r\n      contactinfo.City_Id !== 0 &&\r\n      contactinfo.Phone !== \"\" &&\r\n      contactinfo.Email !== \"\" &&\r\n      contactinfo.Metro_Id !== 0 &&\r\n      //User should not be able to select 'Developer Metro' / Metro Id = 3\r\n      contactinfo.Metro_Id !== developerMetroId\r\n    ) {\r\n      setNameDisplay(\"none\");\r\n      setPhoneDisplay(\"none\");\r\n      setEmailDisplay(\"none\");\r\n      setAddressDisplay(\"none\");\r\n      setCityDisplay(\"none\");\r\n      setMetroDisplay(\"none\");\r\n\r\n      setNameLabelDisplay(\"block\");\r\n      setPhoneLabelDisplay(\"block\");\r\n      setEmailLabelDisplay(\"block\");\r\n      setAddressLabelDisplay(\"block\");\r\n      setCityLabelDisplay(\"block\");\r\n      setMetroLabelDisplay(\"block\");\r\n\r\n      setEditContactText(\"Edit\");\r\n      setEditContactBGColor(ColorPalette.PrimaryGrey);\r\n      setErrorText(\"\");\r\n    } else {\r\n      setErrorText(\"Please fill in all of the boxes\");\r\n    }\r\n  };\r\n\r\n  const EditProjectDetails = async () => {\r\n    if (editDetailsText === \"Edit\") {\r\n      setProjectAreaDisplay(\"block\");\r\n      setProjectScopeDisplay(\"block\");\r\n      setProjectTypeDisplay(\"block\");\r\n      setProjectStyleDisplay(\"block\");\r\n      setProjectBudgetDisplay(\"block\");\r\n\r\n      setProjectAreaLabelDisplay(\"none\");\r\n      setProjectScopeLabelDisplay(\"none\");\r\n      setProjectTypeLabelDisplay(\"none\");\r\n      setProjectStyleLabelDisplay(\"none\");\r\n      setProjectBudgetLabelDisplay(\"none\");\r\n\r\n      setEditDetailsText(\"Save\");\r\n      setEditDetailsBGColor(ColorPalette.PrimaryButtonBlue);\r\n    } else {\r\n      setProjectAreaDisplay(\"none\");\r\n      setProjectScopeDisplay(\"none\");\r\n      setProjectTypeDisplay(\"none\");\r\n      setProjectStyleDisplay(\"none\");\r\n      setProjectBudgetDisplay(\"none\");\r\n\r\n      setProjectAreaLabelDisplay(\"block\");\r\n      setProjectScopeLabelDisplay(\"block\");\r\n      setProjectTypeLabelDisplay(\"block\");\r\n      setProjectStyleLabelDisplay(\"block\");\r\n      setProjectBudgetLabelDisplay(\"block\");\r\n\r\n      setEditDetailsText(\"Edit\");\r\n      setEditDetailsBGColor(ColorPalette.PrimaryGrey);\r\n    }\r\n  };\r\n\r\n  //Assigns the ID based on the Name Selected\r\n  const SelectCity = async (e) => {\r\n    contactinfo.City_Id = e.target.value;\r\n    cityList.find(function (o, i) {\r\n      if (o.Id == e.target.value) {\r\n        contactinfo.City = o.Name;\r\n      }\r\n      return null;\r\n    });\r\n  };\r\n\r\n  const SelectMetro = async (e) => {\r\n    contactinfo.Metro_Id = e.target.value;\r\n    console.log(\r\n      metroList.find(function (o, i) {\r\n        if (o.Id == e.target.value) {\r\n          contactinfo.Metro = o.Name;\r\n        }\r\n        return null;\r\n      })\r\n    );\r\n    var stores = await GetStoreByMetro(contactinfo.Metro_Id);\r\n    if (stores !== null) {\r\n      contactinfo.Store_Id = stores[0].Id;\r\n    }\r\n  };\r\n\r\n  const UpdateCityList = async (metroid) => {\r\n    if (metroid !== 0 && metroid !== 3) {\r\n      contactinfo.City = \"\";\r\n      contactinfo.City_Id = 0;\r\n      let citydata = await GetCityList(metroid);\r\n      setCityList(citydata);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (contactinfo !== undefined) {\r\n      GetLocationInfo();\r\n    }\r\n  }, [contactinfo]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    setProjectArea(area);\r\n  }, [area]);\r\n\r\n  useEffect(() => {\r\n    setProjectScope(scope);\r\n  }, [scope]);\r\n\r\n  useEffect(() => {\r\n    setProjectType(type);\r\n  }, [type]);\r\n\r\n  useEffect(() => {\r\n    setProjectStyle(style);\r\n  }, [style]);\r\n\r\n  useEffect(() => {\r\n    setProjectBudget(budget);\r\n  }, [budget]);\r\n\r\n  useEffect(() => {\r\n    setProjectDescription(description);\r\n  }, [description]);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <EstimatorDiv>\r\n      <Section1 height=\"auto\">\r\n        <ProgressBar>\r\n          <ProgressBarWidth width=\"100%\"></ProgressBarWidth>\r\n        </ProgressBar>\r\n\r\n        <Header fontsize=\"28px\" marginbottom=\"1%\">\r\n          Project Overview\r\n        </Header>\r\n        <BodyPara\r\n          bodycolor=\"#808080\"\r\n          width=\"80%\"\r\n          marginbottom=\"2%\"\r\n          fontsize=\"16px\"\r\n        >\r\n          Review all of your information and confirm the details. Once you press\r\n          save project, you will have the option to save as a draft or submit,\r\n          and our team will be alerted and get started right away. You will\r\n          receive a confirmation email, as well as a project proposal within 1-2\r\n          days*\r\n        </BodyPara>\r\n\r\n        <FlexColumnFullWidth>\r\n          <FlexColumnCont\r\n            mobiledisplay=\"none\"\r\n            height=\"8%\"\r\n            margin=\"0\"\r\n            margintop=\"2%\"\r\n            marginbottom=\"2%\"\r\n            flexdirection=\"row\"\r\n            justifycontent=\"space-around\"\r\n            width=\"100%\"\r\n          >\r\n            <GreyNavigationButton\r\n              onClick={() => {\r\n                onBack();\r\n              }}\r\n            >\r\n              Back\r\n            </GreyNavigationButton>\r\n\r\n            <GreenNavigationButton\r\n              onClick={() => {\r\n                onSetCaseInformation({\r\n                  contactinfo,\r\n                  ProjectArea,\r\n                  ProjectScope,\r\n                  ProjectType,\r\n                  ProjectStyle,\r\n                  ProjectBudget,\r\n                  ProjectDescription,\r\n                });\r\n                onOpenSaveCase();\r\n              }}\r\n            >\r\n              {statusButtonText}\r\n            </GreenNavigationButton>\r\n          </FlexColumnCont>\r\n          <FlexColumnFullWidth>\r\n            <FlexContBottomGrey mobilewidth=\"90vw\" marginbottom=\"1.5%\">\r\n              <SmallHeaderLeagueSpartan margintop=\"1.5%\">\r\n                Contact Info\r\n              </SmallHeaderLeagueSpartan>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  EditProjectContactInfo();\r\n                }}\r\n                bgcolor={editContactBGColor}\r\n              >\r\n                {editContactText}\r\n              </RegularResponsiveButton>\r\n            </FlexContBottomGrey>\r\n            <BodyPara bodycolor=\"red\" marginbottom=\"2%\" fontsize=\"16px\">\r\n              {ErrorText}\r\n            </BodyPara>\r\n\r\n            <FlexRowContFullWidth>\r\n              <FlexInfoCont mobilewidth=\"100%\">\r\n                <WideFlexInfoCont>\r\n                  <WideFlexInfoCont width=\"30%\">\r\n                    <SmallHeader>Full Name:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                  <TextInput300x50\r\n                    inputdisplay={NameDisplay}\r\n                    inputheight=\"15%\"\r\n                    defaultValue={contactinfo.Name}\r\n                    onChange={(e) => {\r\n                      contactinfo.Name = e.target.value;\r\n                    }}\r\n                  ></TextInput300x50>\r\n                  <SmallHeader display={NameLabelDisplay}>\r\n                    {contactinfo.Name}\r\n                  </SmallHeader>\r\n                </WideFlexInfoCont>\r\n\r\n                <WideFlexInfoCont>\r\n                  <WideFlexInfoCont width=\"30%\">\r\n                    <SmallHeader>Phone Number:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                  <TextInput300x50\r\n                    inputdisplay={PhoneDisplay}\r\n                    inputheight=\"15%\"\r\n                    defaultValue={contactinfo.Phone}\r\n                    onChange={(e) => {\r\n                      contactinfo.Phone = e.target.value;\r\n                    }}\r\n                  ></TextInput300x50>\r\n                  <SmallHeader display={PhoneLabelDisplay}>\r\n                    {contactinfo.Phone}\r\n                  </SmallHeader>\r\n                </WideFlexInfoCont>\r\n\r\n                <WideFlexInfoCont>\r\n                  <WideFlexInfoCont width=\"30%\">\r\n                    <SmallHeader>Email Address:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                  <TextInput300x50\r\n                    inputdisplay={EmailDisplay}\r\n                    inputheight=\"15%\"\r\n                    defaultValue={contactinfo.Email}\r\n                    onChange={(e) => {\r\n                      contactinfo.Email = e.target.value;\r\n                    }}\r\n                  ></TextInput300x50>\r\n                  <SmallHeader display={EmailLabelDisplay}>\r\n                    {contactinfo.Email}\r\n                  </SmallHeader>\r\n                </WideFlexInfoCont>\r\n              </FlexInfoCont>\r\n\r\n              <FlexInfoCont mobilewidth=\"100%\">\r\n                <WideFlexInfoCont>\r\n                  <WideFlexInfoCont width=\"25%\">\r\n                    <SmallHeader>Address:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                  <TextInput300x50\r\n                    inputdisplay={AddressDisplay}\r\n                    inputheight=\"15%\"\r\n                    defaultValue={contactinfo.Street}\r\n                    onChange={(e) => {\r\n                      contactinfo.Street = e.target.value;\r\n                    }}\r\n                  ></TextInput300x50>\r\n                  <SmallHeader display={AddressLabelDisplay}>\r\n                    {contactinfo.Street}\r\n                  </SmallHeader>\r\n                </WideFlexInfoCont>\r\n\r\n                <WideFlexInfoCont>\r\n                  <WideFlexInfoCont width=\"25%\">\r\n                    <SmallHeader>City:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <SmallHeader>{contactinfo.City}</SmallHeader>\r\n                </WideFlexInfoCont>\r\n\r\n                <WideFlexInfoCont>\r\n                  <WideFlexInfoCont width=\"25%\">\r\n                    <SmallHeader>Region:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <SmallHeader>{contactinfo.Metro}</SmallHeader>\r\n                </WideFlexInfoCont>\r\n              </FlexInfoCont>\r\n            </FlexRowContFullWidth>\r\n          </FlexColumnFullWidth>\r\n\r\n          <FlexColumnFullWidth>\r\n            <FlexContBottomGrey\r\n              mobilewidth=\"90vw\"\r\n              margintop=\"3%\"\r\n              marginbottom=\"1.5%\"\r\n            >\r\n              <BodyPara\r\n                mobiledisplay=\"none\"\r\n                bodycolor=\"red\"\r\n                marginbottom=\"2%\"\r\n                fontsize=\"16px\"\r\n              >\r\n                {ErrorTextDetails}\r\n              </BodyPara>\r\n\r\n              <SmallHeaderLeagueSpartan margintop=\"1.5%\">\r\n                Project Details\r\n              </SmallHeaderLeagueSpartan>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  EditProjectDetails();\r\n                }}\r\n                bgcolor={editDetailsBGColor}\r\n              >\r\n                {editDetailsText}\r\n              </RegularResponsiveButton>\r\n            </FlexContBottomGrey>\r\n\r\n            <FlexRowContFullWidth>\r\n              <FlexInfoCont mobilewidth=\"100%\">\r\n                <WideFlexInfoCont>\r\n                  <WideFlexInfoCont width=\"30%\">\r\n                    <SmallHeader>Project Area:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                  <TextInput300x50\r\n                    inputdisplay={ProjectAreaDisplay}\r\n                    inputheight=\"15%\"\r\n                    value={ProjectArea}\r\n                    onChange={(e) => {\r\n                      setProjectArea(e.target.value);\r\n                    }}\r\n                  ></TextInput300x50>\r\n                  <SmallHeader display={ProjectAreaLabelDisplay}>\r\n                    {ProjectArea}\r\n                  </SmallHeader>\r\n                </WideFlexInfoCont>\r\n\r\n                <WideFlexInfoCont>\r\n                  <WideFlexInfoCont width=\"30%\">\r\n                    <SmallHeader>Project Scope:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                  <TextInput300x50\r\n                    inputdisplay={ProjectScopeDisplay}\r\n                    inputheight=\"15%\"\r\n                    value={ProjectScope}\r\n                    onChange={(e) => {\r\n                      setProjectScope(e.target.value);\r\n                    }}\r\n                  ></TextInput300x50>\r\n                  <SmallHeader display={ProjectScopeLabelDisplay}>\r\n                    {ProjectScope}\r\n                  </SmallHeader>\r\n                </WideFlexInfoCont>\r\n\r\n                <WideFlexInfoCont wordwrap=\"break-word\">\r\n                  <WideFlexInfoCont width=\"30%\">\r\n                    <SmallHeader>Project Type:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                  <TextInput300x50\r\n                    inputdisplay={ProjectTypeDisplay}\r\n                    inputheight=\"15%\"\r\n                    value={ProjectType}\r\n                    onChange={(e) => {\r\n                      setProjectType(e.target.value);\r\n                    }}\r\n                  ></TextInput300x50>\r\n                  <SmallHeader display={ProjectTypeLabelDisplay}>\r\n                    {ProjectType}\r\n                  </SmallHeader>\r\n                </WideFlexInfoCont>\r\n              </FlexInfoCont>\r\n\r\n              <FlexInfoCont mobilewidth=\"100%\">\r\n                <WideFlexInfoCont>\r\n                  <WideFlexInfoCont width=\"18%\">\r\n                    <SmallHeader>Style:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                  <TextInput300x50\r\n                    inputdisplay={ProjectStyleDisplay}\r\n                    inputheight=\"15%\"\r\n                    value={ProjectStyle}\r\n                    onChange={(e) => {\r\n                      setProjectStyle(e.target.value);\r\n                    }}\r\n                  ></TextInput300x50>\r\n                  <SmallHeader display={ProjectStyleLabelDisplay}>\r\n                    {ProjectStyle}\r\n                  </SmallHeader>\r\n                </WideFlexInfoCont>\r\n\r\n                <WideFlexInfoCont mobileflexdirection=\"column\">\r\n                  <WideFlexInfoCont width=\"18%\">\r\n                    <SmallHeader>Budget:</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                  <TextInput300x50\r\n                    inputdisplay={ProjectBudgetDisplay}\r\n                    inputheight=\"15%\"\r\n                    value={ProjectBudget}\r\n                    onChange={(e) => {\r\n                      setProjectBudget(e.target.value);\r\n                    }}\r\n                  ></TextInput300x50>\r\n                  <SmallHeader display={ProjectBudgetLabelDisplay}>\r\n                    {ProjectBudget}\r\n                  </SmallHeader>\r\n                </WideFlexInfoCont>\r\n              </FlexInfoCont>\r\n            </FlexRowContFullWidth>\r\n          </FlexColumnFullWidth>\r\n\r\n          <FlexContBottomGrey\r\n            mobilewidth=\"90vw\"\r\n            margintop=\"1%\"\r\n            marginbottom=\"1.5%\"\r\n          />\r\n\r\n          <FlexColumnCont height=\"auto\" margintop=\"5%\">\r\n            <SmallHeader>Project Description:</SmallHeader>\r\n            <LandscapePara\r\n              defaultValue={ProjectDescription}\r\n              onChange={(e) => {\r\n                setProjectDescription(e.target.value);\r\n              }}\r\n            ></LandscapePara>\r\n          </FlexColumnCont>\r\n\r\n          <GridContainer2Wide>\r\n            <GridContainer3Wide>\r\n              {imgMap.map((o, i) => (\r\n                <GridContainer2Wide key={imgMap}>\r\n                  <Image300x200\r\n                    src={window.$IMGURL + o.File}\r\n                    alt={\"File:\" + o}\r\n                  ></Image300x200>\r\n                </GridContainer2Wide>\r\n              ))}\r\n              {videoMap.map((o, i) => (\r\n                <video width=\"320\" height=\"240\" controls>\r\n                  <source src={window.$IMGURL + o} />\r\n                  =Your browser does not support the video tag.\r\n                </video>\r\n              ))}\r\n              {PDFMap.map((o, i) => (\r\n                <div>\r\n                  <a\r\n                    rel=\"noreferrer\"\r\n                    href={window.$IMGURL + o.File}\r\n                    target=\"_blank\"\r\n                  >\r\n                    <Image300x200\r\n                      src={\"/pdficon.png\"}\r\n                      alt={\"File:\" + o.File}\r\n                    ></Image300x200>\r\n                  </a>\r\n                </div>\r\n              ))}\r\n            </GridContainer3Wide>\r\n          </GridContainer2Wide>\r\n        </FlexColumnFullWidth>\r\n\r\n        <FlexColumnCont\r\n          display=\"none\"\r\n          mobiledisplay=\"flex\"\r\n          height=\"8%\"\r\n          margin=\"0\"\r\n          margintop=\"2%\"\r\n          marginbottom=\"2%\"\r\n          mobileflexdirection=\"row\"\r\n          justifycontent=\"space-around\"\r\n          width=\"100%\"\r\n        >\r\n          <GreyNavigationButton\r\n            onClick={() => {\r\n              onBack();\r\n            }}\r\n          >\r\n            Back\r\n          </GreyNavigationButton>\r\n\r\n          <GreenNavigationButton\r\n            onClick={() => {\r\n              onSetCaseInformation({\r\n                contactinfo,\r\n                ProjectArea,\r\n                ProjectScope,\r\n                ProjectType,\r\n                ProjectStyle,\r\n                ProjectBudget,\r\n                ProjectDescription,\r\n              });\r\n              onOpenSaveCase();\r\n            }}\r\n          >\r\n            Save\r\n          </GreenNavigationButton>\r\n        </FlexColumnCont>\r\n      </Section1>\r\n    </EstimatorDiv>\r\n  );\r\n};\r\n\r\n// }\r\n\r\nProjectOverview.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onPersonalInfo: () => {},\r\n  onDrafted: () => {},\r\n  onSaveDraft: () => {},\r\n  onOpenSaveCase: () => {},\r\n  onSubmitCase: () => {},\r\n  onSetCaseInformation: () => {},\r\n  fullName: \"Default Name\",\r\n  phone: \"(604)-XXX-XXXX\",\r\n  email: \"example@email.com\",\r\n  address: \"123 Example St.\",\r\n  city: \"Default City\",\r\n  metro: \"Default Metro\",\r\n  area: \"Default Area\",\r\n  scope: \"Default Scope\",\r\n  type: \"Default Type\",\r\n  style: \"Default Style\",\r\n  budget: \"Default Budget\",\r\n  description: \"Default Description\",\r\n  imgs: [\"name\"],\r\n  contactinfo: [\"default\"],\r\n};\r\n\r\nexport default ProjectOverview;\r\n","import React from \"react\";\r\nimport { BodyPara, Header } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport { FlexColumnContCenterAlign } from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  EstimatorDiv,\r\n  ProgressBar,\r\n  ProgressBarWidth,\r\n  Section1,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  FlexColumnCont,\r\n  Icon,\r\n  SmallHeader,\r\n} from \"../../../StylesheetComps/Menu\";\r\n\r\nconst ProjectPath = ({\r\n  open,\r\n  onNext,\r\n  onSelectSurveyPath,\r\n  onBack,\r\n  onPreview,\r\n  onPersonalInfo,\r\n  fullName,\r\n  addressofUser,\r\n  emailofUser,\r\n  phoneofUser,\r\n}) => {\r\n  if (!open) return null;\r\n  return (\r\n    <EstimatorDiv>\r\n      <Section1>\r\n        <ProgressBar>\r\n          <ProgressBarWidth width=\"25%\"></ProgressBarWidth>\r\n        </ProgressBar>\r\n\r\n        <Header fontsize=\"28px\" marginbottom=\"1%\">\r\n          Tell Us About Yourself\r\n        </Header>\r\n        <BodyPara\r\n          bodycolor=\"#808080\"\r\n          width=\"55%\"\r\n          marginbottom=\"2%\"\r\n          fontsize=\"16px\"\r\n        >\r\n          Choose the level of guidance you need for your project to us determine\r\n          how we can help you better through education, design options, and\r\n          further consultation.{\" \"}\r\n        </BodyPara>\r\n\r\n        <FlexColumnCont\r\n          flexdirection=\"row\"\r\n          width=\"70%\"\r\n          height=\"80%\"\r\n          marginbottom=\"0%\"\r\n          alignitems=\"left\"\r\n        >\r\n          <FlexColumnContCenterAlign>\r\n            <Icon width=\"50%\" borderradius=\"0\" src=\"/Simpleperson.svg\"></Icon>\r\n            <SmallHeaderLeagueSpartan mobilefontsize=\"16px\" fontsize=\"18px\">\r\n              \"I know what I need and want\"\r\n            </SmallHeaderLeagueSpartan>\r\n            <SmallHeader\r\n              mobiledisplay=\"none\"\r\n              fontsize=\"15px\"\r\n              color={ColorPalette.PrimaryGrey}\r\n            >\r\n              Homeowner / Avid Gardener / Landscaper\r\n            </SmallHeader>\r\n            <BodyPara width=\"90%\" fontsize=\"14px\">\r\n              Less consultation and survey options available.\r\n            </BodyPara>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                onSelectSurveyPath(\"simple\");\r\n                onNext();\r\n              }}\r\n            >\r\n              Start\r\n            </RegularResponsiveButton>\r\n          </FlexColumnContCenterAlign>\r\n\r\n          <FlexColumnContCenterAlign>\r\n            <Icon width=\"50%\" borderradius=\"0\" src=\"/Detailedperson.svg\"></Icon>\r\n            <SmallHeaderLeagueSpartan mobilefontsize=\"16px\" fontsize=\"18px\">\r\n              \"I need guidance and consultation\"\r\n            </SmallHeaderLeagueSpartan>\r\n            <SmallHeader\r\n              mobiledisplay=\"none\"\r\n              fontsize=\"15px\"\r\n              color={ColorPalette.PrimaryGrey}\r\n            >\r\n              Homeowner / Beginner Gardener / New to New Rhodes Construction\r\n            </SmallHeader>\r\n            <BodyPara width=\"90%\" fontsize=\"14px\">\r\n              Full consultation and in-depth survey options available.\r\n            </BodyPara>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryTurquoise}\r\n              onClick={() => {\r\n                onSelectSurveyPath(\"detailed\");\r\n                onNext();\r\n              }}\r\n            >\r\n              Start\r\n            </RegularResponsiveButton>\r\n          </FlexColumnContCenterAlign>\r\n        </FlexColumnCont>\r\n      </Section1>\r\n    </EstimatorDiv>\r\n  );\r\n};\r\n\r\n// }\r\n\r\nProjectPath.defaultProps = {\r\n  onChange: () => {},\r\n  onSelectSurveyPath: () => {},\r\n  onPreview: () => {},\r\n  onPersonalInfo: () => {},\r\n  fullName: \"\",\r\n  addressofUser: \"\",\r\n  emailofUser: \"\",\r\n  phoneofUser: \"\",\r\n};\r\n\r\nexport default ProjectPath;\r\n","import React, { useState } from \"react\";\r\n\r\nimport { Header } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { SmallHeader } from \"../../../StylesheetComps/Menu\";\r\nimport {\r\n  BodyPara,\r\n  SelectableMediumLongButton,\r\n} from \"../../../StylesheetComps/AuthSheet\";\r\nimport { FlexColumnCont } from \"../../../StylesheetComps/Menu\";\r\nimport { TextInput300x50 } from \"../../../StylesheetComps/AuthSheet\";\r\nimport {\r\n  GreenNavigationButton,\r\n  GreyNavigationButton,\r\n  FlexColumnGreenSelectables,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  Section1,\r\n  EstimatorDiv,\r\n  ProgressBar,\r\n  ProgressBarWidth,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { FlexRowCont70PercentFlexStart } from \"../../../StylesheetComps/Cont\";\r\nconst ProjectScope = ({\r\n  open,\r\n  onNext,\r\n  onBack,\r\n  onPreview,\r\n  onPersonalInfo,\r\n  fullName,\r\n  addressofUser,\r\n  emailofUser,\r\n  phoneofUser,\r\n  onSelectProjectScope,\r\n}) => {\r\n  //Full Renovation UI Update\r\n  const [renovationcolor, setRenovationColor] = useState(\"black\");\r\n  const [renovationborder, setRenovationBorder] = useState(\"4px solid white\");\r\n  const [renovationselected, setRenovationSelected] = useState(\"\");\r\n\r\n  //Add-On UI Update\r\n  const [addoncolor, setAddOnColor] = useState(\"\");\r\n  const [addonborder, setAddOnBorder] = useState(\"\");\r\n  const [addonselected, setAddOnSelected] = useState(\"\");\r\n\r\n  //Seasonal Cleanup UI Update\r\n  const [seasonalcolor, setSeasonalColor] = useState(\"\");\r\n  const [seasonalborder, setSeasonalBorder] = useState(\"\");\r\n  const [seasonalselected, setSeasonalSelected] = useState(\"\");\r\n\r\n  //Other UI Update\r\n  const [othercolor, setOtherColor] = useState(\"\");\r\n  const [otherborder, setOtherBorder] = useState(\"\");\r\n  const [otherselected, setOtherSelected] = useState(\"\");\r\n\r\n  const [otherScopeOfWork, setOtherScopeOfWork] = useState(\"\");\r\n  const [displayOtherDiv, setDisplayOtherDiv] = useState(\"none\");\r\n\r\n  //Change the UI depending on the selection / deselection of the scope buttons\r\n\r\n  const setRenovationBoxColor = async (originalcolor) => {\r\n    if (originalcolor === ColorPalette.PrimaryButtonBlue) {\r\n      setRenovationColor(\"black\");\r\n      setRenovationBorder(\"4px solid white\");\r\n      setRenovationSelected(\"\");\r\n    } else {\r\n      setRenovationColor(\"#169ADB\");\r\n      setRenovationBorder(\"4px solid #169ADB\");\r\n      setRenovationSelected(\"Full Renovation\");\r\n    }\r\n  };\r\n\r\n  const setAddOnBoxColor = async (originalcolor) => {\r\n    if (originalcolor === ColorPalette.PrimaryButtonBlue) {\r\n      setAddOnColor(\"black\");\r\n      setAddOnBorder(\"4px solid white\");\r\n      setAddOnSelected(\"\");\r\n    } else {\r\n      setAddOnColor(\"#169ADB\");\r\n      setAddOnBorder(\"4px solid #169ADB\");\r\n      setAddOnSelected(\"Add-on\");\r\n    }\r\n  };\r\n\r\n  const setSeasonalBoxColor = async (originalcolor) => {\r\n    if (originalcolor === ColorPalette.PrimaryButtonBlue) {\r\n      setSeasonalColor(\"black\");\r\n      setSeasonalBorder(\"4px solid white\");\r\n      setSeasonalSelected(\"\");\r\n    } else {\r\n      setSeasonalColor(\"#169ADB\");\r\n      setSeasonalBorder(\"4px solid #169ADB\");\r\n      setSeasonalSelected(\"Seasonal Cleanup\");\r\n    }\r\n  };\r\n\r\n  const setOtherBoxColor = async (originalcolor) => {\r\n    if (originalcolor === ColorPalette.PrimaryButtonBlue) {\r\n      setOtherColor(\"black\");\r\n      setOtherBorder(\"4px solid white\");\r\n      setOtherSelected(\"\");\r\n      setDisplayOtherDiv(\"none\");\r\n    } else {\r\n      setOtherColor(\"#169ADB\");\r\n      setOtherBorder(\"4px solid #169ADB\");\r\n      setOtherSelected(\"Other:\");\r\n      setDisplayOtherDiv(\"block\");\r\n    }\r\n  };\r\n\r\n  const DefineProjectScope = async (\r\n    fullRenovation,\r\n    addOn,\r\n    seasonalCleanup,\r\n    other,\r\n    otherScopeOfWork\r\n  ) => {\r\n    let projectscopestring =\r\n      fullRenovation +\r\n      \" \" +\r\n      addOn +\r\n      \" \" +\r\n      seasonalCleanup +\r\n      \" \" +\r\n      other +\r\n      otherScopeOfWork;\r\n    onSelectProjectScope(projectscopestring);\r\n    onNext();\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <EstimatorDiv>\r\n      <Section1>\r\n        <ProgressBar>\r\n          <ProgressBarWidth width=\"50%\"></ProgressBarWidth>\r\n        </ProgressBar>\r\n\r\n        <Header fontsize=\"28px\" marginbottom=\"1%\">\r\n          Project Scope\r\n        </Header>\r\n        <BodyPara\r\n          bodycolor=\"#808080\"\r\n          width=\"55%\"\r\n          marginbottom=\"0%\"\r\n          fontsize=\"16px\"\r\n        >\r\n          Tell us the scope of your project. If your project includes multiple\r\n          services such as landscaping and maintenance, please indicate the\r\n          scope of the space in the \"Other\" section below.\r\n        </BodyPara>\r\n\r\n        <FlexColumnCont\r\n          width=\"60%\"\r\n          mobilewidth=\"70vw\"\r\n          height=\"auto\"\r\n          marginbottom=\"0%\"\r\n        >\r\n          <FlexColumnCont\r\n            width=\"100%\"\r\n            justifycontent=\"flex-start\"\r\n            height=\"100%\"\r\n          >\r\n            <FlexColumnGreenSelectables>\r\n              <SelectableMediumLongButton\r\n                mobilewidth=\"90%\"\r\n                border={renovationborder}\r\n                color={renovationcolor}\r\n                onClick={() => {\r\n                  setRenovationBoxColor(renovationcolor);\r\n                }}\r\n              >\r\n                Full Renovation\r\n              </SelectableMediumLongButton>\r\n              <SelectableMediumLongButton\r\n                mobilewidth=\"90%\"\r\n                border={addonborder}\r\n                color={addoncolor}\r\n                onClick={() => {\r\n                  setAddOnBoxColor(addoncolor);\r\n                }}\r\n              >\r\n                Add-on\r\n              </SelectableMediumLongButton>\r\n              <SelectableMediumLongButton\r\n                mobilewidth=\"90%\"\r\n                border={seasonalborder}\r\n                color={seasonalcolor}\r\n                onClick={() => {\r\n                  setSeasonalBoxColor(seasonalcolor);\r\n                }}\r\n              >\r\n                Cleanup\r\n              </SelectableMediumLongButton>\r\n              <SelectableMediumLongButton\r\n                mobilewidth=\"90%\"\r\n                border={otherborder}\r\n                color={othercolor}\r\n                onClick={() => {\r\n                  setOtherBoxColor(othercolor);\r\n                }}\r\n              >\r\n                Other\r\n              </SelectableMediumLongButton>\r\n            </FlexColumnGreenSelectables>\r\n          </FlexColumnCont>\r\n        </FlexColumnCont>\r\n\r\n        <FlexColumnCont\r\n          display={displayOtherDiv}\r\n          margintop=\"2%\"\r\n          alignitems=\"start\"\r\n          width=\"55%\"\r\n          mobilewidth=\"90vw\"\r\n          mobilejustifycontent=\"flex-start\"\r\n          mobilealignitems=\"center\"\r\n          marginbottom=\"0\"\r\n          height=\"auto\"\r\n        >\r\n          <FlexRowCont70PercentFlexStart>\r\n            <SmallHeader width=\"auto\">\r\n              If selected other, what is the scope of work?\r\n            </SmallHeader>\r\n          </FlexRowCont70PercentFlexStart>\r\n          <TextInput300x50\r\n            inputwidth=\"84%\"\r\n            placeholder={\"Scope of Work\"}\r\n            inputheight=\"1%\"\r\n            inputborderradius=\"5px\"\r\n            defaultValue={fullName}\r\n            onChange={(e) => {\r\n              setOtherScopeOfWork(e.target.value);\r\n            }}\r\n          ></TextInput300x50>\r\n        </FlexColumnCont>\r\n        <FlexColumnCont\r\n          height=\"8%\"\r\n          margin=\"0\"\r\n          margintop=\"2%\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"space-around\"\r\n          width=\"100%\"\r\n        >\r\n          <GreyNavigationButton\r\n            onClick={() => {\r\n              onBack();\r\n            }}\r\n          >\r\n            Back\r\n          </GreyNavigationButton>\r\n          <GreenNavigationButton\r\n            onClick={() => {\r\n              DefineProjectScope(\r\n                renovationselected,\r\n                addonselected,\r\n                seasonalselected,\r\n                otherselected,\r\n                otherScopeOfWork\r\n              );\r\n            }}\r\n          >\r\n            Next\r\n          </GreenNavigationButton>\r\n        </FlexColumnCont>\r\n      </Section1>\r\n    </EstimatorDiv>\r\n  );\r\n};\r\n\r\n// }\r\n\r\nProjectScope.defaultProps = {\r\n  onChange: () => {},\r\n  onSelectProjectScope: () => {},\r\n  onPreview: () => {},\r\n  onPersonalInfo: () => {},\r\n  fullName: \"\",\r\n  addressofUser: \"\",\r\n  emailofUser: \"\",\r\n  phoneofUser: \"\",\r\n};\r\n\r\nexport default ProjectScope;\r\n","import React, { useState } from \"react\";\r\n\r\nimport { Header } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { BodyPara } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { FlexColumnCont } from \"../../../StylesheetComps/Menu\";\r\nimport {\r\n  GreenNavigationButton,\r\n  GreyNavigationButton,\r\n  SmallHeaderLeagueSpartan,\r\n  ProgressBar,\r\n  ProgressBarWidth,\r\n  FlexDivMarginTop,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  Section1,\r\n  EstimatorDiv,\r\n  MediumStyledImage80Opacity,\r\n  SmallIconDisplayNone,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  FlexRowCont,\r\n  FlexRowCont100x8PercentSpaceAround,\r\n} from \"../../../StylesheetComps/Cont\";\r\n\r\nconst ProjectStyle = ({\r\n  open,\r\n  onNext,\r\n  onBack,\r\n  onPreview,\r\n  onPersonalInfo,\r\n  fullName,\r\n  addressofUser,\r\n  emailofUser,\r\n  phoneofUser,\r\n  onSelectProjectStyle,\r\n}) => {\r\n  const [modern, setModern] = useState(\"\");\r\n  const [english, setEnglish] = useState(\"\");\r\n  const [japanese, setJapanese] = useState(\"\");\r\n  const [contemporary, setContemporary] = useState(\"\");\r\n\r\n  const [modernDisplay, setModernDisplay] = useState(\"none\");\r\n  const [englishDisplay, setEnglishDisplay] = useState(\"none\");\r\n  const [japaneseDisplay, setJapaneseDisplay] = useState(\"none\");\r\n  const [contemporaryDisplay, setContemporaryDisplay] = useState(\"none\");\r\n\r\n  const [modernOpacity, setModernOpacity] = useState(\"80%\");\r\n  const [englishOpacity, setEnglishOpacity] = useState(\"80%\");\r\n  const [japaneseOpacity, setJapaneseOpacity] = useState(\"80%\");\r\n  const [contemporaryOpacity, setContemporaryOpacity] = useState(\"80%\");\r\n\r\n  //Display/Hide the checkmarks and set if the values are selected\r\n  //for the associated style\r\n\r\n  const ShowModernDisplayCheckmark = async (modernDisplay) => {\r\n    if (modernDisplay === \"none\") {\r\n      setModernDisplay(\"block\");\r\n      setModernOpacity(\"100%\");\r\n      setModern(\"Modern\");\r\n    } else {\r\n      setModernDisplay(\"none\");\r\n      setModernOpacity(\"80%\");\r\n      setModern(\"\");\r\n    }\r\n  };\r\n\r\n  const ShowEnglishDisplayCheckmark = async (englishDisplay) => {\r\n    if (englishDisplay === \"none\") {\r\n      setEnglishDisplay(\"block\");\r\n      setEnglishOpacity(\"100%\");\r\n      setEnglish(\"Traditional/English\");\r\n    } else {\r\n      setEnglishDisplay(\"none\");\r\n      setEnglishOpacity(\"80%\");\r\n      setEnglish(\"\");\r\n    }\r\n  };\r\n\r\n  const ShowJapaneseDisplayCheckmark = async (japaneseDisplay) => {\r\n    if (japaneseDisplay === \"none\") {\r\n      setJapaneseDisplay(\"block\");\r\n      setJapaneseOpacity(\"100%\");\r\n      setJapanese(\"Japanese\");\r\n    } else {\r\n      setJapaneseDisplay(\"none\");\r\n      setJapaneseOpacity(\"80%\");\r\n      setJapanese(\"\");\r\n    }\r\n  };\r\n\r\n  const ShowContemporaryDisplayCheckmark = async (contemporaryDisplay) => {\r\n    if (contemporaryDisplay === \"none\") {\r\n      setContemporaryDisplay(\"block\");\r\n      setContemporaryOpacity(\"100%\");\r\n      setContemporary(\"Contemporary\");\r\n    } else {\r\n      setContemporaryDisplay(\"none\");\r\n      setContemporaryOpacity(\"80%\");\r\n      setContemporary(\"\");\r\n    }\r\n  };\r\n\r\n  //When user intends to proceed, combine styles into string and pass to\r\n  //higher function, and onNext(); to Project Budget\r\n\r\n  const DefineProjectStyle = async (\r\n    modern,\r\n    english,\r\n    japanese,\r\n    contemporary\r\n  ) => {\r\n    let projectstylestring =\r\n      modern + \" \" + english + \" \" + japanese + \" \" + contemporary;\r\n    onSelectProjectStyle(projectstylestring);\r\n    onNext();\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <EstimatorDiv>\r\n      <Section1 height=\"65vh\">\r\n        <ProgressBar>\r\n          <ProgressBarWidth width=\"81.25%\"></ProgressBarWidth>\r\n        </ProgressBar>\r\n\r\n        <Header fontsize=\"28px\" marginbottom=\"1%\">\r\n          Project Style\r\n        </Header>\r\n        <BodyPara\r\n          bodycolor=\"#808080\"\r\n          width=\"55%\"\r\n          marginbottom=\"0%\"\r\n          fontsize=\"16px\"\r\n        >\r\n          We want to ensure you love the outdoor space you're in, and that comes\r\n          down to style. Let us know which are your favourite styles out of the\r\n          photos below. (Check all that apply)\r\n        </BodyPara>\r\n\r\n        <FlexColumnCont\r\n          width=\"90%\"\r\n          height=\"70%\"\r\n          marginbottom=\"0%\"\r\n          margintop=\"0\"\r\n          alignitems=\"left\"\r\n        >\r\n          <FlexColumnCont\r\n            flexdirection=\"row\"\r\n            width=\"98%\"\r\n            height=\"90%\"\r\n            justifycontent=\"space-around\"\r\n            mobileflexdirection=\"column\"\r\n          >\r\n            <FlexDivMarginTop>\r\n              <SmallHeaderLeagueSpartan>Modern</SmallHeaderLeagueSpartan>\r\n              <br></br>\r\n              <MediumStyledImage80Opacity\r\n                src=\"/Modern.png\"\r\n                opacity={modernOpacity}\r\n                onClick={() => {\r\n                  ShowModernDisplayCheckmark(modernDisplay);\r\n                }}\r\n              ></MediumStyledImage80Opacity>\r\n              <SmallIconDisplayNone\r\n                display={modernDisplay}\r\n                onClick={() => {\r\n                  ShowModernDisplayCheckmark(modernDisplay);\r\n                }}\r\n                src=\"/greencheckmark.svg\"\r\n              ></SmallIconDisplayNone>\r\n              <FlexRowCont></FlexRowCont>\r\n            </FlexDivMarginTop>\r\n\r\n            <FlexDivMarginTop>\r\n              <SmallHeaderLeagueSpartan>\r\n                Traditional/English\r\n              </SmallHeaderLeagueSpartan>\r\n              <br></br>\r\n              <MediumStyledImage80Opacity\r\n                src=\"/English.png\"\r\n                opacity={englishOpacity}\r\n                onClick={() => {\r\n                  ShowEnglishDisplayCheckmark(englishDisplay);\r\n                }}\r\n              ></MediumStyledImage80Opacity>\r\n              <SmallIconDisplayNone\r\n                display={englishDisplay}\r\n                onClick={() => {\r\n                  ShowEnglishDisplayCheckmark(englishDisplay);\r\n                }}\r\n                src=\"/greencheckmark.svg\"\r\n              ></SmallIconDisplayNone>\r\n              <FlexRowCont></FlexRowCont>\r\n            </FlexDivMarginTop>\r\n\r\n            <FlexDivMarginTop>\r\n              <SmallHeaderLeagueSpartan>Japanese</SmallHeaderLeagueSpartan>\r\n              <br></br>\r\n              <MediumStyledImage80Opacity\r\n                src=\"/Japanese.png\"\r\n                opacity={japaneseOpacity}\r\n                onClick={() => {\r\n                  ShowJapaneseDisplayCheckmark(japaneseDisplay);\r\n                }}\r\n              ></MediumStyledImage80Opacity>\r\n              <SmallIconDisplayNone\r\n                display={japaneseDisplay}\r\n                onClick={() => {\r\n                  ShowJapaneseDisplayCheckmark(japaneseDisplay);\r\n                }}\r\n                src=\"/greencheckmark.svg\"\r\n              ></SmallIconDisplayNone>\r\n              <FlexRowCont></FlexRowCont>\r\n            </FlexDivMarginTop>\r\n\r\n            <FlexDivMarginTop>\r\n              <SmallHeaderLeagueSpartan>Contemporary</SmallHeaderLeagueSpartan>\r\n              <br></br>\r\n              <MediumStyledImage80Opacity\r\n                src=\"/Contemporary.jpg\"\r\n                opacity={contemporaryOpacity}\r\n                onClick={() => {\r\n                  ShowContemporaryDisplayCheckmark(contemporaryDisplay);\r\n                }}\r\n              ></MediumStyledImage80Opacity>\r\n              <SmallIconDisplayNone\r\n                display={contemporaryDisplay}\r\n                onClick={() => {\r\n                  ShowContemporaryDisplayCheckmark(contemporaryDisplay);\r\n                }}\r\n                src=\"/greencheckmark.svg\"\r\n              ></SmallIconDisplayNone>\r\n              <FlexRowCont></FlexRowCont>{\" \"}\r\n            </FlexDivMarginTop>\r\n          </FlexColumnCont>\r\n        </FlexColumnCont>\r\n        <FlexRowCont100x8PercentSpaceAround>\r\n          <GreyNavigationButton\r\n            onClick={() => {\r\n              onBack();\r\n            }}\r\n          >\r\n            Back\r\n          </GreyNavigationButton>\r\n          <GreenNavigationButton\r\n            onClick={() => {\r\n              DefineProjectStyle(modern, english, japanese, contemporary);\r\n            }}\r\n          >\r\n            Next\r\n          </GreenNavigationButton>\r\n        </FlexRowCont100x8PercentSpaceAround>\r\n      </Section1>\r\n    </EstimatorDiv>\r\n  );\r\n};\r\n\r\n// }\r\n\r\nProjectStyle.defaultProps = {\r\n  onChange: () => {},\r\n  onSelectProjectStyle: () => {},\r\n  onPreview: () => {},\r\n  onPersonalInfo: () => {},\r\n  fullName: \"\",\r\n  addressofUser: \"\",\r\n  emailofUser: \"\",\r\n  phoneofUser: \"\",\r\n};\r\n\r\nexport default ProjectStyle;\r\n","import React, { useState } from \"react\";\r\n\r\nimport { Header } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { SmallHeader } from \"../../../StylesheetComps/Menu\";\r\nimport {\r\n  BodyPara,\r\n  SelectableMediumLongButton,\r\n} from \"../../../StylesheetComps/AuthSheet\";\r\nimport { FlexColumnCont } from \"../../../StylesheetComps/Menu\";\r\nimport { TextInput300x50 } from \"../../../StylesheetComps/AuthSheet\";\r\nimport {\r\n  FlexColumnGreenSelectables,\r\n  GreenNavigationButton,\r\n  GreyNavigationButton,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  Section1,\r\n  EstimatorDiv,\r\n  ProgressBar,\r\n  ProgressBarWidth,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { FlexRowCont70PercentFlexStart } from \"../../../StylesheetComps/Cont\";\r\nconst ProjectDescType = ({\r\n  open,\r\n  onNext,\r\n  onBack,\r\n  onPreview,\r\n  onPersonalInfo,\r\n  fullName,\r\n  addressofUser,\r\n  emailofUser,\r\n  phoneofUser,\r\n  onSelectProjectType,\r\n}) => {\r\n  //Planting UI Update\r\n  const [plantingcolor, setPlantingColor] = useState(\"black\");\r\n  const [plantingborder, setPlantingBorder] = useState(\"4px solid white\");\r\n  const [planting, setPlanting] = useState(\"\");\r\n\r\n  //Fencing UI Update\r\n  const [fencingcolor, setFencingColor] = useState(\"black\");\r\n  const [fencingborder, setFencingBorder] = useState(\"4px solid white\");\r\n  const [fencing, setFencing] = useState(\"\");\r\n\r\n  //Walkway UI Update\r\n  const [walkwaycolor, setWalkwayColor] = useState(\"black\");\r\n  const [walkwayborder, setWalkwayBorder] = useState(\"4px solid white\");\r\n  const [walkway, setWalkway] = useState(\"\");\r\n\r\n  //Retaining UI Update\r\n  const [retainingcolor, setRetainingColor] = useState(\"black\");\r\n  const [retainingborder, setRetainingBorder] = useState(\"4px solid white\");\r\n  const [retaining, setRetaining] = useState(\"\");\r\n\r\n  //Lawn UI Update\r\n  const [lawncolor, setLawnColor] = useState(\"black\");\r\n  const [lawnborder, setLawnBorder] = useState(\"4px solid white\");\r\n  const [lawn, setLawn] = useState(\"\");\r\n\r\n  //Patio UI Update\r\n  const [patiocolor, setPatioColor] = useState(\"black\");\r\n  const [patioborder, setPatioBorder] = useState(\"4px solid white\");\r\n  const [patio, setPatio] = useState(\"\");\r\n\r\n  //Driveway UI Update\r\n  const [drivewaycolor, setDrivewayColor] = useState(\"black\");\r\n  const [drivewayborder, setDrivewayBorder] = useState(\"4px solid white\");\r\n  const [driveway, setDriveway] = useState(\"\");\r\n\r\n  //Yard Structure UI Update\r\n  const [yardstructurecolor, setYardStructureColor] = useState(\"black\");\r\n  const [yardstructureborder, setYardStructureBorder] =\r\n    useState(\"4px solid white\");\r\n  const [yardstructure, setYardStructure] = useState(\"\");\r\n\r\n  //Water Feature UI Update\r\n  const [waterfeaturecolor, setWaterFeatureColor] = useState(\"black\");\r\n  const [waterfeatureborder, setWaterFeatureBorder] =\r\n    useState(\"4px solid white\");\r\n  const [waterfeature, setWaterFeature] = useState(\"\");\r\n\r\n  //Other UI Update\r\n  const [othercolor, setOtherColor] = useState(\"black\");\r\n  const [otherborder, setOtherBorder] = useState(\"4px solid white\");\r\n  const [other, setOther] = useState(\"\");\r\n  const [displayOtherDiv, setDisplayOtherDiv] = useState(\"none\");\r\n\r\n  const [otherTypeOfWork, setOtherTypeOfWork] = useState(\"\");\r\n\r\n  //Switch to the set the UI Styles + Values for the Project Type Buttons\r\n\r\n  const TypeOfWorkChecked = async (type, color) => {\r\n    switch (type) {\r\n      case \"planting\":\r\n        if (color === \"black\") {\r\n          setPlanting(\"Planting\");\r\n          setPlantingColor(ColorPalette.PrimaryButtonBlue);\r\n          setPlantingBorder(\"4px solid #169ADB\");\r\n        } else {\r\n          setPlanting(\"\");\r\n          setPlantingColor(\"black\");\r\n          setPlantingBorder(\"4px solid white\");\r\n        }\r\n        break;\r\n      case \"fencing\":\r\n        if (color === \"black\") {\r\n          setFencing(\"Fencing\");\r\n          setFencingColor(ColorPalette.PrimaryButtonBlue);\r\n          setFencingBorder(\"4px solid #169ADB\");\r\n        } else {\r\n          setFencing(\"\");\r\n          setFencingColor(\"black\");\r\n          setFencingBorder(\"4px solid white\");\r\n        }\r\n        break;\r\n      case \"walkway\":\r\n        if (color === \"black\") {\r\n          setWalkway(\"Walkway\");\r\n          setWalkwayColor(ColorPalette.PrimaryButtonBlue);\r\n          setWalkwayBorder(\"4px solid #169ADB\");\r\n        } else {\r\n          setWalkway(\"\");\r\n          setWalkwayColor(\"black\");\r\n          setWalkwayBorder(\"4px solid white\");\r\n        }\r\n        break;\r\n      case \"retaining\":\r\n        if (color === \"black\") {\r\n          setRetaining(\"Retaining Walls\");\r\n          setRetainingColor(ColorPalette.PrimaryButtonBlue);\r\n          setRetainingBorder(\"4px solid #169ADB\");\r\n        } else {\r\n          setRetaining(\"\");\r\n          setRetainingColor(\"black\");\r\n          setRetainingBorder(\"4px solid white\");\r\n        }\r\n        break;\r\n      case \"lawn\":\r\n        if (color === \"black\") {\r\n          setLawn(\"Lawn\");\r\n          setLawnColor(ColorPalette.PrimaryButtonBlue);\r\n          setLawnBorder(\"4px solid #169ADB\");\r\n        } else {\r\n          setLawn(\"\");\r\n          setLawnColor(\"black\");\r\n          setLawnBorder(\"4px solid white\");\r\n        }\r\n        break;\r\n      case \"patio\":\r\n        if (color === \"black\") {\r\n          setPatio(\"Patio/Decking\");\r\n          setPatioColor(ColorPalette.PrimaryButtonBlue);\r\n          setPatioBorder(\"4px solid #169ADB\");\r\n        } else {\r\n          setPatio(\"\");\r\n          setPatioColor(\"black\");\r\n          setPatioBorder(\"4px solid white\");\r\n        }\r\n        break;\r\n      case \"driveway\":\r\n        if (color === \"black\") {\r\n          setDriveway(\"Driveway\");\r\n          setDrivewayColor(ColorPalette.PrimaryButtonBlue);\r\n          setDrivewayBorder(\"4px solid #169ADB\");\r\n        } else {\r\n          setDriveway(\"\");\r\n          setDrivewayColor(\"black\");\r\n          setDrivewayBorder(\"4px solid white\");\r\n        }\r\n        break;\r\n      case \"yardstructure\":\r\n        if (color === \"black\") {\r\n          setYardStructure(\"Yard Structure\");\r\n          setYardStructureColor(ColorPalette.PrimaryButtonBlue);\r\n          setYardStructureBorder(\"4px solid #169ADB\");\r\n        } else {\r\n          setYardStructure(\"\");\r\n          setYardStructureColor(\"black\");\r\n          setYardStructureBorder(\"4px solid white\");\r\n        }\r\n        break;\r\n      case \"waterfeature\":\r\n        if (color === \"black\") {\r\n          setWaterFeature(\"Water Feature\");\r\n          setWaterFeatureColor(ColorPalette.PrimaryButtonBlue);\r\n          setWaterFeatureBorder(\"4px solid #169ADB\");\r\n        } else {\r\n          setWaterFeature(\"\");\r\n          setWaterFeatureColor(\"black\");\r\n          setWaterFeatureBorder(\"4px solid white\");\r\n        }\r\n        break;\r\n      case \"other\":\r\n        if (color === \"black\") {\r\n          setDisplayOtherDiv(\"block\");\r\n          setOther(\"Other:\");\r\n          setOtherColor(ColorPalette.PrimaryButtonBlue);\r\n          setOtherBorder(\"4px solid #169ADB\");\r\n        } else {\r\n          setDisplayOtherDiv(\"none\");\r\n          setOther(\"\");\r\n          setOtherColor(\"black\");\r\n          setOtherBorder(\"4px solid white\");\r\n        }\r\n        break;\r\n      default:\r\n    }\r\n  };\r\n\r\n  //When next is clicked, define scope project type, push to higher funcition, and move forward to project description\r\n\r\n  const DefineProjectType = async (\r\n    planting,\r\n    fencing,\r\n    walkway,\r\n    retaining,\r\n    lawn,\r\n    patio,\r\n    driveway,\r\n    yardstructure,\r\n    waterfeature,\r\n    other,\r\n    otherTypeOfWork\r\n  ) => {\r\n    let projectdesctype =\r\n      planting +\r\n      \" \" +\r\n      fencing +\r\n      \" \" +\r\n      walkway +\r\n      \" \" +\r\n      retaining +\r\n      \" \" +\r\n      lawn +\r\n      \" \" +\r\n      patio +\r\n      \" \" +\r\n      driveway +\r\n      \" \" +\r\n      yardstructure +\r\n      \" \" +\r\n      waterfeature +\r\n      \" \" +\r\n      other +\r\n      otherTypeOfWork;\r\n    onSelectProjectType(projectdesctype);\r\n    onNext();\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <EstimatorDiv>\r\n      <Section1>\r\n        <ProgressBar>\r\n          <ProgressBarWidth width=\"62.5%\"></ProgressBarWidth>\r\n        </ProgressBar>\r\n\r\n        <Header fontsize=\"28px\" marginbottom=\"1%\">\r\n          Project Type\r\n        </Header>\r\n        <BodyPara\r\n          bodycolor=\"#808080\"\r\n          width=\"55%\"\r\n          marginbottom=\"2%\"\r\n          fontsize=\"16px\"\r\n        >\r\n          What type of work would you like done? You can always remove or add\r\n          work from your project once you receive your free project estimate\r\n          (Check all that apply).\r\n        </BodyPara>\r\n\r\n        <FlexColumnCont\r\n          width=\"73%\"\r\n          height=\"auto\"\r\n          marginbottom=\"3%\"\r\n          alignitems=\"left\"\r\n        >\r\n          <FlexColumnCont width=\"100%\" height=\"100%\" marginbottom=\"0%\">\r\n            <FlexColumnCont\r\n              width=\"100%\"\r\n              mobilewidth=\"80vw\"\r\n              justifycontent=\"flex-start\"\r\n              height=\"80%\"\r\n            >\r\n              <FlexColumnGreenSelectables>\r\n                <SelectableMediumLongButton\r\n                  mobilewidth=\"90%\"\r\n                  border={plantingborder}\r\n                  color={plantingcolor}\r\n                  onClick={() => {\r\n                    TypeOfWorkChecked(\"planting\", plantingcolor);\r\n                  }}\r\n                >\r\n                  Planting\r\n                </SelectableMediumLongButton>\r\n                <SelectableMediumLongButton\r\n                  mobilewidth=\"90%\"\r\n                  border={fencingborder}\r\n                  color={fencingcolor}\r\n                  onClick={() => {\r\n                    TypeOfWorkChecked(\"fencing\", fencingcolor);\r\n                  }}\r\n                >\r\n                  Fencing\r\n                </SelectableMediumLongButton>\r\n                <SelectableMediumLongButton\r\n                  mobilewidth=\"90%\"\r\n                  border={walkwayborder}\r\n                  color={walkwaycolor}\r\n                  onClick={() => {\r\n                    TypeOfWorkChecked(\"walkway\", walkwaycolor);\r\n                  }}\r\n                >\r\n                  Walkway\r\n                </SelectableMediumLongButton>\r\n                <SelectableMediumLongButton\r\n                  mobilewidth=\"90%\"\r\n                  border={retainingborder}\r\n                  color={retainingcolor}\r\n                  onClick={() => {\r\n                    TypeOfWorkChecked(\"retaining\", retainingcolor);\r\n                  }}\r\n                >\r\n                  Retaining Wall\r\n                </SelectableMediumLongButton>\r\n                <SelectableMediumLongButton\r\n                  mobilewidth=\"90%\"\r\n                  border={lawnborder}\r\n                  color={lawncolor}\r\n                  onClick={() => {\r\n                    TypeOfWorkChecked(\"lawn\", lawncolor);\r\n                  }}\r\n                >\r\n                  Lawn\r\n                </SelectableMediumLongButton>\r\n              </FlexColumnGreenSelectables>\r\n\r\n              <FlexColumnGreenSelectables>\r\n                <SelectableMediumLongButton\r\n                  mobilewidth=\"90%\"\r\n                  border={patioborder}\r\n                  color={patiocolor}\r\n                  onClick={() => {\r\n                    TypeOfWorkChecked(\"patio\", patiocolor);\r\n                  }}\r\n                >\r\n                  Patio/Decking\r\n                </SelectableMediumLongButton>\r\n                <SelectableMediumLongButton\r\n                  mobilewidth=\"90%\"\r\n                  border={drivewayborder}\r\n                  color={drivewaycolor}\r\n                  onClick={() => {\r\n                    TypeOfWorkChecked(\"driveway\", drivewaycolor);\r\n                  }}\r\n                >\r\n                  Driveway\r\n                </SelectableMediumLongButton>\r\n                <SelectableMediumLongButton\r\n                  mobilewidth=\"90%\"\r\n                  border={yardstructureborder}\r\n                  color={yardstructurecolor}\r\n                  onClick={() => {\r\n                    TypeOfWorkChecked(\"yardstructure\", yardstructurecolor);\r\n                  }}\r\n                >\r\n                  Yard Structure\r\n                </SelectableMediumLongButton>\r\n                <SelectableMediumLongButton\r\n                  mobilewidth=\"90%\"\r\n                  border={waterfeatureborder}\r\n                  color={waterfeaturecolor}\r\n                  onClick={() => {\r\n                    TypeOfWorkChecked(\"waterfeature\", waterfeaturecolor);\r\n                  }}\r\n                >\r\n                  Water Feature\r\n                </SelectableMediumLongButton>\r\n                <SelectableMediumLongButton\r\n                  mobilewidth=\"90%\"\r\n                  border={otherborder}\r\n                  color={othercolor}\r\n                  onClick={() => {\r\n                    TypeOfWorkChecked(\"other\", othercolor);\r\n                  }}\r\n                >\r\n                  Other\r\n                </SelectableMediumLongButton>\r\n              </FlexColumnGreenSelectables>\r\n            </FlexColumnCont>\r\n          </FlexColumnCont>\r\n        </FlexColumnCont>\r\n\r\n        <FlexColumnCont\r\n          display={displayOtherDiv}\r\n          margintop=\"0\"\r\n          alignitems=\"left\"\r\n          width=\"55%\"\r\n          marginbottom=\"0\"\r\n          height=\"auto\"\r\n          mobilewidth=\"90vw\"\r\n          mobilealignitems=\"center\"\r\n        >\r\n          <FlexRowCont70PercentFlexStart>\r\n            <SmallHeader>\r\n              If selected other, what is the type of work?\r\n            </SmallHeader>\r\n          </FlexRowCont70PercentFlexStart>\r\n          <TextInput300x50\r\n            inputwidth=\"84%\"\r\n            placeholder={\"Type of Work\"}\r\n            inputheight=\"1%\"\r\n            inputborderradius=\"5px\"\r\n            defaultValue={fullName}\r\n            onChange={(e) => {\r\n              setOtherTypeOfWork(e.target.value);\r\n            }}\r\n          ></TextInput300x50>\r\n        </FlexColumnCont>\r\n        <FlexColumnCont\r\n          height=\"8%\"\r\n          margin=\"0\"\r\n          margintop=\"2%\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"space-around\"\r\n          width=\"100%\"\r\n        >\r\n          <GreyNavigationButton\r\n            onClick={() => {\r\n              onBack();\r\n            }}\r\n          >\r\n            Back\r\n          </GreyNavigationButton>\r\n          <GreenNavigationButton\r\n            onClick={() => {\r\n              DefineProjectType(\r\n                planting,\r\n                fencing,\r\n                walkway,\r\n                retaining,\r\n                lawn,\r\n                patio,\r\n                driveway,\r\n                yardstructure,\r\n                waterfeature,\r\n                other,\r\n                otherTypeOfWork\r\n              );\r\n            }}\r\n          >\r\n            Next\r\n          </GreenNavigationButton>\r\n        </FlexColumnCont>\r\n      </Section1>\r\n    </EstimatorDiv>\r\n  );\r\n};\r\n\r\n// }\r\n\r\nProjectDescType.defaultProps = {\r\n  onChange: () => {},\r\n  onSelectProjectType: () => {},\r\n  onPreview: () => {},\r\n  onPersonalInfo: () => {},\r\n  fullName: \"\",\r\n  addressofUser: \"\",\r\n  emailofUser: \"\",\r\n  phoneofUser: \"\",\r\n};\r\n\r\nexport default ProjectDescType;\r\n","import { useHistory } from \"react-router-dom\";\r\nimport Balloons from \"../../../Animation/balloonlottie.json\";\r\nimport LottieAnimation from \"../../../Lottie\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont70x100Percent,\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { BlankDiv } from \"../../../StylesheetComps/Div\";\r\nimport { Icon30x40pxPointer } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont } from \"../../../StylesheetComps/Menu\";\r\nimport { RegularText } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst Submitted = ({ open, metroId, storeId, caseNumber }) => {\r\n  const history = useHistory();\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FlexColumnFullWidth bgcolor=\"white\">\r\n      <FlexColumnFullWidth>\r\n        <FlexColumnCont70x100Percent>\r\n          <SmallHeaderLeagueSpartan fontsize=\"24px\">\r\n            Thank you for submitting!\r\n          </SmallHeaderLeagueSpartan>\r\n          <RegularText>\r\n            Hang tight! We're so excited to start your project. You'll receive\r\n            an email from us shortly.\r\n          </RegularText>\r\n\r\n          <BlankDiv>\r\n            <LottieAnimation lotti={Balloons} height={300} width={300}>\r\n              {\" \"}\r\n            </LottieAnimation>\r\n          </BlankDiv>\r\n\r\n          <FlexColumnCont\r\n            width=\"60%\"\r\n            margin=\"0\"\r\n            flexdirection=\"row\"\r\n            mobileflexdirection=\"column\"\r\n            justifycontent=\"space-between\"\r\n            mobilewidth=\"100%\"\r\n          >\r\n            <FlexDiv>\r\n              <Icon30x40pxPointer src=\"/Check Mark.svg\"></Icon30x40pxPointer>\r\n              <RegularText>Creation of Estimate</RegularText>\r\n            </FlexDiv>\r\n\r\n            <FlexDiv>\r\n              <Icon30x40pxPointer src=\"/Check Mark.svg\"></Icon30x40pxPointer>\r\n              <RegularText>Material Selection</RegularText>\r\n            </FlexDiv>\r\n\r\n            <FlexDiv>\r\n              <Icon30x40pxPointer src=\"/Check Mark.svg\"></Icon30x40pxPointer>\r\n              <RegularText>3D Rendering</RegularText>\r\n            </FlexDiv>\r\n\r\n            <FlexDiv>\r\n              <Icon30x40pxPointer src=\"/Check Mark.svg\"></Icon30x40pxPointer>\r\n              <RegularText>New Rhodes Construction</RegularText>\r\n            </FlexDiv>\r\n          </FlexColumnCont>\r\n          <br></br>\r\n          <RegularResponsiveButton\r\n            width=\"200px\"\r\n            onClick={() => {\r\n              history.push(\"/CasesPersonal/\" + metroId + \"/\" + storeId);\r\n            }}\r\n          >\r\n            View Project\r\n          </RegularResponsiveButton>\r\n        </FlexColumnCont70x100Percent>\r\n      </FlexColumnFullWidth>\r\n    </FlexColumnFullWidth>\r\n  );\r\n};\r\n\r\nSubmitted.defaultProps = {\r\n  metroId: 0,\r\n  storeId: 0,\r\n  caseNumber: 0,\r\n};\r\n\r\nexport default Submitted;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { AddToHomeScreen } from \"react-pwa-add-to-homescreen\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\nimport { TopDivWhite } from \"../../../MobileComponents/Divs\";\r\nimport {\r\n  MobileLogo30x30px,\r\n  MobileLogo50x50px,\r\n} from \"../../../MobileComponents/Images\";\r\nimport { MenuHeader } from \"../../../MobileComponents/Text\";\r\nimport { Header } from \"../../../StylesheetComps/AuthSheet\";\r\nimport {\r\n  Cont82vw21vh,\r\n  RelativeFlexContAutoWidth13vh,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { MenuMainCont, MobileMainCont } from \"../../../StylesheetComps/Div\";\r\nimport { Image60x50Percent } from \"../../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  FlexColumnCont,\r\n  SmallHeader,\r\n  TopMenuCont,\r\n} from \"../../../StylesheetComps/Menu\";\r\nimport MobileSlideMenu from \"../../MobileSlideMenu\";\r\n\r\nconst ActionMenu = ({\r\n  pageProp,\r\n  hackmyyardbottom,\r\n  dashboardbottom,\r\n  projectsbottom,\r\n  calendarbottom,\r\n  billingbottom,\r\n  mobilePageProp,\r\n}) => {\r\n  const history = useHistory();\r\n  const [moreToggle, setMoreToggle] = useState(false);\r\n\r\n  const [metroId, setMetroId] = useState(0);\r\n  const [storeId, setStoreId] = useState(0);\r\n  const [menuSRC, setMenuSRC] = useState(\"/hamburger.svg\");\r\n\r\n  const CheckStoreEstimates = async (metroId, storeId) => {\r\n    const resp = await axios.get(window.$DBURL + \"store/metro/\" + metroId);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.stores !== null) {\r\n          if (storeId === 0) {\r\n            if (resp.data.stores.length !== 1) {\r\n              history.push(\"/storelistestimate/\" + metroId);\r\n            } else {\r\n              history.push(\r\n                \"/estimate/\" + metroId + \"/\" + resp.data.stores[0].Id\r\n              );\r\n            }\r\n          } else {\r\n            history.push(\"/estimate/\" + metroId + \"/\" + storeId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const ChangeIcon = async () => {\r\n    if (menuSRC === \"/hamburger.svg\") {\r\n      setMenuSRC(\"/CloseMobile.svg\");\r\n    } else {\r\n      setMenuSRC(\"/hamburger.svg\");\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    var user = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    setMetroId(user?.Metro_Id);\r\n    setStoreId(user?.Store_Id);\r\n  }, []);\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    return (\r\n      <div>\r\n        <TopDivWhite>\r\n          <MobileLogo50x50px\r\n            onClick={() => {\r\n              history.push(\"/home\");\r\n            }}\r\n            src=\"/NRCLogoRegularBlack.png\"\r\n          ></MobileLogo50x50px>\r\n          <MenuHeader>{mobilePageProp}</MenuHeader>\r\n          <MobileLogo30x30px\r\n            src={menuSRC}\r\n            onClick={() => {\r\n              setMoreToggle(!moreToggle);\r\n              ChangeIcon(menuSRC);\r\n            }}\r\n          ></MobileLogo30x30px>\r\n        </TopDivWhite>\r\n        <MobileSlideMenu\r\n          open={moreToggle}\r\n          onCloseMenu={() => {\r\n            setMoreToggle(false);\r\n          }}\r\n        ></MobileSlideMenu>\r\n      </div>\r\n    );\r\n  } else {\r\n    return (\r\n      <div>\r\n        <Cont82vw21vh>\r\n          <MobileMainCont>\r\n            <RelativeFlexContAutoWidth13vh>\r\n              <Image60x50Percent\r\n                src={\"/mobileprofile.svg\"}\r\n                onClick={() => {\r\n                  history.push(\"/profile\");\r\n                }}\r\n              ></Image60x50Percent>\r\n\r\n              <AddToHomeScreen />\r\n            </RelativeFlexContAutoWidth13vh>\r\n          </MobileMainCont>\r\n        </Cont82vw21vh>\r\n\r\n        <MenuMainCont></MenuMainCont>\r\n        <TopMenuCont height='15vh' mobiledisplay=\"none\">\r\n          <FlexColumnCont\r\n            marginbottom=\"0%\"\r\n            margin=\"0\"\r\n            width=\"100%\"\r\n            height=\"19%\"\r\n          ></FlexColumnCont>\r\n\r\n          <FlexColumnCont\r\n            margin=\"0px\"\r\n            flexdirection=\"row\"\r\n            justifycontent=\"flex-start\"\r\n            width=\"100%\"\r\n            height=\"24%\"\r\n            alignitems=\"left\"\r\n          >\r\n            <Header\r\n              fontsize=\"160%\"\r\n              marginleft=\"2vw\"\r\n              margintop=\"3%\"\r\n              marginbottom=\"0%\"\r\n            >\r\n              {pageProp}\r\n            </Header>\r\n          </FlexColumnCont>\r\n\r\n          {/* <FlexColumnCont\r\n            margin=\"10px\"\r\n            width=\"100%\"\r\n            height=\"15%\"\r\n            margintop=\"2%\"\r\n            flexdirection=\"row\"\r\n            justifycontent=\"flex-start\"\r\n            alignitems=\"left\"\r\n          >\r\n            <FlexColumnCont\r\n              height=\"100%\"\r\n              width=\"100%\"\r\n              margin=\"0\"\r\n              marginleft=\"1vw\"\r\n              justifycontent=\"flex-start\"\r\n              alignitems=\"left\"\r\n              flexdirection=\"row\"\r\n            ></FlexColumnCont>\r\n          </FlexColumnCont> */}\r\n\r\n          {/* <FlexColumnCont\r\n            margin=\"0\"\r\n            width=\"100%\"\r\n            height=\"20%\"\r\n            flexdirection=\"row\"\r\n            justifycontent=\"flex-start\"\r\n            alignitems=\"left\"\r\n          >\r\n            <FlexColumnCont\r\n              height=\"100%\"\r\n              margin=\"0\"\r\n              justifycontent=\"flex-start\"\r\n              alignitems=\"left\"\r\n              flexdirection=\"row\"\r\n              marginleft=\"2%\"\r\n            >\r\n              <SmallHeader\r\n                height=\"15px\"\r\n                fontsize=\"16px\"\r\n                paddingbottom=\"15px\"\r\n                borderbottom={hackmyyardbottom}\r\n                cursor=\"pointer\"\r\n                hovercolor={ColorPalette.PrimaryGrey}\r\n                margin=\"8px\"\r\n                marginright=\"4%\"\r\n                onClick={() => {\r\n                  CheckStoreEstimates(metroId, storeId);\r\n                }}\r\n              >\r\n                New Project\r\n              </SmallHeader>\r\n              <SmallHeader\r\n                height=\"15px\"\r\n                cursor=\"pointer\"\r\n                paddingbottom=\"15px\"\r\n                borderbottom={dashboardbottom}\r\n                fontsize=\"16px\"\r\n                hovercolor={ColorPalette.PrimaryGrey}\r\n                margin=\"8px\"\r\n                marginright=\"4%\"\r\n                onClick={() => {\r\n                  history.push(\"/home\");\r\n                }}\r\n              >\r\n                Home\r\n              </SmallHeader>\r\n              <SmallHeader\r\n                height=\"15px\"\r\n                cursor=\"pointer\"\r\n                paddingbottom=\"15px\"\r\n                borderbottom={projectsbottom}\r\n                fontsize=\"16px\"\r\n                hovercolor={ColorPalette.PrimaryGrey}\r\n                margin=\"8px\"\r\n                marginright=\"4%\"\r\n                onClick={() => {\r\n                  history.push(\"/CasesPersonal/\" + metroId + \"/\" + storeId);\r\n                }}\r\n              >\r\n                Projects\r\n              </SmallHeader>\r\n         \r\n              <SmallHeader\r\n                height=\"15px\"\r\n                cursor=\"pointer\"\r\n                paddingbottom=\"15px\"\r\n                borderbottom={billingbottom}\r\n                fontsize=\"16px\"\r\n                hovercolor={ColorPalette.PrimaryGrey}\r\n                margin=\"8px\"\r\n                marginright=\"4%\"\r\n                onClick={() => {\r\n                  history.push(\"/billing\");\r\n                }}\r\n              >\r\n                Billing\r\n              </SmallHeader>\r\n            </FlexColumnCont>\r\n          </FlexColumnCont> */}\r\n        </TopMenuCont>\r\n      </div>\r\n    );\r\n  }\r\n};\r\n\r\nActionMenu.defaultProps = {\r\n  pageProp: \"\",\r\n};\r\n\r\nexport default ActionMenu;\r\n","/* eslint-disable */\r\n\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  AddCase,\r\n  GetCaseObject,\r\n  SetCaseTo_Submit,\r\n  UpdateACase,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport SaveProjectWindow from \"../../comps/Estimate Form/ConfirmSave\";\r\nimport Drafted from \"../../comps/Estimate Form/Drafted\";\r\nimport LandscapeDesc from \"../../comps/Estimate Form/Landscape Desc\";\r\nimport PersonalInfo from \"../../comps/Estimate Form/Personal Info\";\r\nimport PhotoUploadComp from \"../../comps/Estimate Form/Photo Upload\";\r\nimport ProjectArea from \"../../comps/Estimate Form/Project Area\";\r\nimport ProjectBudget from \"../../comps/Estimate Form/Project Budget\";\r\nimport ProjectOverview from \"../../comps/Estimate Form/Project Overview\";\r\nimport ProjectPath from \"../../comps/Estimate Form/Project Path\";\r\nimport ProjectScope from \"../../comps/Estimate Form/Project Scope\";\r\nimport ProjectStyle from \"../../comps/Estimate Form/Project Style\";\r\nimport ProjectDescType from \"../../comps/Estimate Form/ProjectDescType\";\r\nimport Submitted from \"../../comps/Estimate Form/Submitted\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\nimport ScrollToTop from \"../../comps/ScrollToTop\";\r\n\r\nimport { GetStoreByMetro } from \"../../API_Functions/Store_Functions\";\r\nimport { GetCurrentTime } from \"../../API_Functions/Utility_Functions\";\r\nimport {\r\n  EstimatePageMainFlexCont,\r\n  EstimatePageRightCont,\r\n  EstimatePageRightView,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nconst EstimateScreen = () => {\r\n  //=============================================================================\r\n  // Estimate Screen / Hack my Yard Form - All Users can access\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Users fill out their information and create their case from this page\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n\r\n  var [caseObj, setCaseObj] = useState({});\r\n\r\n  const [userInfo, setUserInfo] = useState({});\r\n\r\n  //Form Navigation\r\n\r\n  const [personalInfoOpen, setPersonalInfoOpen] = useState(true);\r\n  const [projectPathOpen, setProjectPathOpen] = useState(false);\r\n  const [projectAreaOpen, setProjectAreaOpen] = useState(false);\r\n  const [projectScopeOpen, setProjectScopeOpen] = useState(false);\r\n  const [projectDescTypeOpen, setProjectDescTypeOpen] = useState(false);\r\n  const [landscapeDescOpen, setLandscapeDescOpen] = useState(false);\r\n  const [projectStyleOpen, setProjectStyleOpen] = useState(false);\r\n  const [projectBudgetOpen, setProjectBudgetOpen] = useState(false);\r\n  const [photoUploadOpen, setPhotoUploadOpen] = useState(false);\r\n  const [reviewOpen, setReviewOpen] = useState(false);\r\n  const [submittedOpen, setSubmittedOpen] = useState(false);\r\n  const [draftedOpen, setDraftedOpen] = useState(false);\r\n  const [saveCaseOpen, setSaveCaseOpen] = useState(false);\r\n\r\n  //Project Functionality Page\r\n\r\n  const [description, setDescription] = useState(\"\");\r\n  const [title, setTitle] = useState(\"[Project Name]\");\r\n\r\n  const [surveyPath, setSurveyPath] = useState(\"\");\r\n\r\n  const [projectArea, setProjectArea] = useState(\"\");\r\n\r\n  const [projectScope, setProjectScope] = useState(\"\");\r\n\r\n  const [projectType, setProjectType] = useState(\"\");\r\n\r\n  const [projectStyle, setProjectStyle] = useState(\"N/A\");\r\n\r\n  const [projectBudget, setProjectBudget] = useState(\"\");\r\n\r\n  const [allImgsArray, setAllImgsArray] = useState([]);\r\n  const [pdfArray, setPDFArray] = useState([]);\r\n\r\n  const [metroIdOfUser, setMetroIdOfUser] = useState(0);\r\n  const [storeIdOfUser, setStoreIdOfUser] = useState(0);\r\n\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n\r\n  //Define the user's default information\r\n\r\n  const GetPersonalInfo = async () => {\r\n    let userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    setMetroIdOfUser(userinfo.Metro_Id);\r\n    setStoreIdOfUser(userinfo.Store_Id);\r\n    setRoleNum(userinfo.Role);\r\n  };\r\n\r\n  //When the user submits their personal information\r\n\r\n  const SetCaseInformation = async ({ ContactInfo, Title }) => {\r\n    caseObj.Tittle = Title;\r\n    caseObj.Phone = ContactInfo.current.Phone;\r\n    caseObj.Name = ContactInfo.current.Name;\r\n    caseObj.Email = ContactInfo.current.Email;\r\n    caseObj.Street = ContactInfo.current.Street;\r\n    caseObj.Metro_Id = ContactInfo.current.Metro_Id;\r\n    caseObj.Metro = ContactInfo.current.Metro;\r\n    var stores = await GetStoreByMetro(caseObj.Metro_Id);\r\n    if (stores !== null) {\r\n      caseObj.Store_Id = stores[0].Id;\r\n    }\r\n    caseObj.City = ContactInfo.current.City;\r\n    caseObj.City_Id = ContactInfo.current.City_Id;\r\n    caseObj.CreateTime = await GetCurrentTime();\r\n    setUserInfo(ContactInfo.current);\r\n    setTitle(Title);\r\n  };\r\n\r\n  const UpdateLocalProjectInfo = async ({\r\n    contactinfo,\r\n    ProjectArea,\r\n    ProjectScope,\r\n    ProjectType,\r\n    ProjectStyle,\r\n    ProjectBudget,\r\n    ProjectDescription,\r\n  }) => {\r\n    caseObj.Phone = contactinfo.Phone;\r\n    caseObj.Name = contactinfo.Name;\r\n    caseObj.Email = contactinfo.Email;\r\n    caseObj.Street = contactinfo.Street;\r\n    caseObj.Metro_Id = contactinfo.Metro_Id;\r\n    caseObj.Metro = contactinfo.Metro;\r\n    caseObj.City = contactinfo.City;\r\n    caseObj.City_Id = contactinfo.City_Id;\r\n    caseObj.Tittle = title;\r\n    caseObj.Description =\r\n      \"Project Area:\" +\r\n      ProjectArea +\r\n      \", Project Scope:\" +\r\n      ProjectScope +\r\n      \", Project Type:\" +\r\n      ProjectType +\r\n      \", Project Style:\" +\r\n      ProjectStyle +\r\n      \",Project Budget:\" +\r\n      ProjectBudget +\r\n      \", Description:\" +\r\n      ProjectDescription;\r\n    setProjectArea(ProjectArea);\r\n    setProjectScope(ProjectScope);\r\n    setProjectType(ProjectType);\r\n    setProjectStyle(ProjectStyle);\r\n    setProjectBudget(ProjectBudget);\r\n    setDescription(ProjectDescription);\r\n  };\r\n\r\n  //Save the Description as a global variable\r\n\r\n  const SetDescription = async ({ description }) => {\r\n    setDescription(description);\r\n  };\r\n\r\n  const PushImgsToArray = async ({\r\n    streetView,\r\n    accessTo,\r\n    panorama,\r\n    areaOfWork,\r\n    imgArray,\r\n    PDFMap,\r\n  }) => {\r\n    var requiredImages = [];\r\n    if (streetView !== \"\") {\r\n      requiredImages.push({ File: streetView });\r\n    }\r\n    if (accessTo !== \"\") {\r\n      requiredImages.push({ File: accessTo });\r\n    }\r\n    if (panorama !== \"\") {\r\n      requiredImages.push({ File: panorama });\r\n    }\r\n    if (areaOfWork !== \"\") {\r\n      requiredImages.push({ File: areaOfWork });\r\n    }\r\n    setAllImgsArray(imgArray.concat(requiredImages));\r\n    setPDFArray(PDFMap);\r\n  };\r\n\r\n  const CreateCase = async (caseobj, submitted) => {\r\n    if (caseobj.Id !== 0 && caseobj.Id !== null && caseobj.Id !== undefined) {\r\n      UpdateCase(caseobj, submitted);\r\n    } else {\r\n      SaveCase(caseobj);\r\n    }\r\n  };\r\n\r\n  //When the user presses the 'Save Case' button, create a new case\r\n\r\n  const SaveCase = async (caseobj) => {\r\n    var newcase = await AddCase(caseobj);\r\n    if (newcase !== null) {\r\n      setCaseObj(newcase.Case);\r\n    }\r\n  };\r\n\r\n  const UpdateCase = async (caseobj, submitted) => {\r\n    var updatecase = await UpdateACase(caseobj);\r\n    if (updatecase !== null) {\r\n      setCaseObj(updatecase.Case);\r\n      if (submitted == false) {\r\n        ChangeDisplayToDrafted();\r\n      } else {\r\n        SubmitCase(caseObj);\r\n      }\r\n    }\r\n  };\r\n\r\n  const SubmitCase = async (caseObj) => {\r\n    if (caseObj !== null) {\r\n      let data = await SetCaseTo_Submit(caseObj.Id);\r\n      if (data !== null) {\r\n        ChangeDisplayToSubmitted();\r\n      }\r\n    }\r\n  };\r\n\r\n  const ChangeDisplayToDrafted = async () => {\r\n    setReviewOpen(false);\r\n    setSaveCaseOpen(false);\r\n    setDraftedOpen(true);\r\n    window.scrollTo(0, 0);\r\n  };\r\n\r\n  const ChangeDisplayToSubmitted = async () => {\r\n    setReviewOpen(false);\r\n    setSaveCaseOpen(false);\r\n    setSubmittedOpen(true);\r\n    window.scrollTo(0, 0);\r\n  };\r\n\r\n  //Save the Survey Path that was selected ('detailed' or 'simple') to a global variable to be used later.\r\n\r\n  const SelectSurveyPath = async (surveypath) => {\r\n    setSurveyPath(surveypath);\r\n    window.scrollTo(0, 0);\r\n  };\r\n\r\n  //Save the Project Area that was selected (Front Yard, Back Yard, Side Yard, Entertainment Area, Driveway, Other, OtherText) to a global variable to be used later.\r\n\r\n  const SelectProjectArea = async (projectareatext) => {\r\n    setProjectArea(projectareatext);\r\n    window.scrollTo(0, 0);\r\n  };\r\n\r\n  //Save the Project Scope that was selected (Full Renovation, Add-on, Seasonal Cleanup, Other, OtherText) to a global variable to be used later.\r\n\r\n  const SelectProjectScope = async (projectscopetext) => {\r\n    setProjectScope(projectscopetext);\r\n    window.scrollTo(0, 0);\r\n  };\r\n\r\n  //Save the Project Type that was selected (Planting, Fencing, Walkway, Retaining Walls, Lawn, Patio/Decking, Driveway, Yard Structure, Water Feature, Other, OtherText) to a global variable to be used later.\r\n\r\n  const SelectProjectType = async (projectdesctype) => {\r\n    setProjectType(projectdesctype);\r\n    window.scrollTo(0, 0);\r\n  };\r\n\r\n  //Save the Project Style that was selected (Modern, Traditional/English, Japanese, Contemporary) to a global variable to be used later.\r\n\r\n  const SelectProjectStyle = async (projectstylestring) => {\r\n    setProjectStyle(projectstylestring);\r\n    window.scrollTo(0, 0);\r\n  };\r\n\r\n  //Save the Min and Max budget to a global variable to be used later.\r\n\r\n  const SelectProjectBudget = async (projectbudgetstring) => {\r\n    setProjectBudget(projectbudgetstring);\r\n    window.scrollTo(0, 0);\r\n\r\n    caseObj.Description =\r\n      \"Project Area:\" +\r\n      projectArea +\r\n      \", Project Scope:\" +\r\n      projectScope +\r\n      \", Project Type:\" +\r\n      projectType +\r\n      \", Project Style:\" +\r\n      projectStyle +\r\n      \",Project Budget:\" +\r\n      projectbudgetstring +\r\n      \", Description:\" +\r\n      description;\r\n    CreateCase(caseObj, false);\r\n  };\r\n\r\n  const GetCaseObjectStructure = async () => {\r\n    var data = await GetCaseObject();\r\n    if (data !== null) {\r\n      caseObj = data;\r\n    }\r\n  };\r\n\r\n  //Redirect to different sections depending on if the user chose 'detailed' or 'simple'\r\n\r\n  const DetermineSurveyPath = async (surveyPath, direction) => {\r\n    if (direction === \"forward\") {\r\n      if (surveyPath === \"detailed\") {\r\n        setLandscapeDescOpen(false);\r\n        setProjectStyleOpen(true);\r\n      } else {\r\n        setLandscapeDescOpen(false);\r\n        setProjectBudgetOpen(true);\r\n      }\r\n      window.scrollTo(0, 0);\r\n    } else if (direction === \"backward\") {\r\n      if (surveyPath === \"detailed\") {\r\n        setProjectStyleOpen(true);\r\n        setProjectBudgetOpen(false);\r\n      } else {\r\n        setLandscapeDescOpen(true);\r\n        setProjectBudgetOpen(false);\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    window.scrollTo(0, 0);\r\n    GetPersonalInfo();\r\n    GetCaseObjectStructure();\r\n  }, []);\r\n\r\n  {\r\n    return (\r\n      <EstimatePageMainFlexCont>\r\n        <ScrollToTop />\r\n        <Menu\r\n          onReset={() => {\r\n            setSubmittedOpen(false);\r\n            setReviewOpen(false);\r\n            setPhotoUploadOpen(false);\r\n            setLandscapeDescOpen(false);\r\n            setPersonalInfoOpen(false);\r\n            setDraftedOpen(false);\r\n          }}\r\n        >\r\n          {\" \"}\r\n        </Menu>\r\n\r\n        <EstimatePageRightCont>\r\n          <ActionMenu\r\n            mobilePageProp=\"New Project\"\r\n            pageProp={\"New Project - \" + title}\r\n            hackmyyardbottom={\"4px solid #169ADB\"}\r\n          ></ActionMenu>\r\n          <EstimatePageRightView>\r\n            <PersonalInfo\r\n              open={personalInfoOpen}\r\n              onNext={() => {\r\n                setPersonalInfoOpen(false);\r\n                setProjectPathOpen(true);\r\n                window.scrollTo(0, 0);\r\n              }}\r\n              onPreview={SetCaseInformation}\r\n            ></PersonalInfo>\r\n\r\n            <ProjectPath\r\n              open={projectPathOpen}\r\n              onSelectSurveyPath={SelectSurveyPath}\r\n              onBack={() => {\r\n                setProjectPathOpen(false);\r\n                setPersonalInfoOpen(true);\r\n              }}\r\n              onNext={() => {\r\n                setProjectPathOpen(false);\r\n                setProjectAreaOpen(true);\r\n              }}\r\n            ></ProjectPath>\r\n\r\n            <ProjectArea\r\n              open={projectAreaOpen}\r\n              onSelectProjectArea={SelectProjectArea}\r\n              onBack={() => {\r\n                setProjectPathOpen(true);\r\n                setProjectAreaOpen(false);\r\n              }}\r\n              onNext={() => {\r\n                setProjectAreaOpen(false);\r\n                setProjectScopeOpen(true);\r\n              }}\r\n            ></ProjectArea>\r\n\r\n            <ProjectScope\r\n              open={projectScopeOpen}\r\n              onSelectProjectScope={SelectProjectScope}\r\n              onBack={() => {\r\n                setProjectAreaOpen(true);\r\n                setProjectScopeOpen(false);\r\n              }}\r\n              onNext={() => {\r\n                setProjectDescTypeOpen(true);\r\n                setProjectScopeOpen(false);\r\n              }}\r\n            ></ProjectScope>\r\n\r\n            <ProjectDescType\r\n              open={projectDescTypeOpen}\r\n              onSelectProjectType={SelectProjectType}\r\n              onBack={() => {\r\n                setProjectScopeOpen(true);\r\n                setProjectDescTypeOpen(false);\r\n              }}\r\n              onNext={() => {\r\n                setProjectDescTypeOpen(false);\r\n                setLandscapeDescOpen(true);\r\n              }}\r\n            ></ProjectDescType>\r\n\r\n            <LandscapeDesc\r\n              open={landscapeDescOpen}\r\n              onNext={() => {\r\n                DetermineSurveyPath(surveyPath, \"forward\");\r\n              }}\r\n              onBack={() => {\r\n                setLandscapeDescOpen(false);\r\n                setProjectDescTypeOpen(true);\r\n                window.scrollTo(0, 0);\r\n              }}\r\n              onPreview={SetDescription}\r\n            ></LandscapeDesc>\r\n\r\n            <ProjectStyle\r\n              open={projectStyleOpen}\r\n              onSelectProjectStyle={SelectProjectStyle}\r\n              onBack={() => {\r\n                setLandscapeDescOpen(true);\r\n                setProjectStyleOpen(false);\r\n              }}\r\n              onNext={() => {\r\n                setProjectStyleOpen(false);\r\n                setProjectBudgetOpen(true);\r\n              }}\r\n            ></ProjectStyle>\r\n\r\n            <ProjectBudget\r\n              open={projectBudgetOpen}\r\n              onSelectProjectBudget={SelectProjectBudget}\r\n              onBack={() => {\r\n                DetermineSurveyPath(surveyPath, \"backward\");\r\n              }}\r\n              onNext={() => {\r\n                setPhotoUploadOpen(true);\r\n                setProjectBudgetOpen(false);\r\n              }}\r\n            ></ProjectBudget>\r\n\r\n            <PhotoUploadComp\r\n              open={photoUploadOpen}\r\n              caseObj={caseObj}\r\n              onNext={() => {\r\n                GetPersonalInfo();\r\n                setPhotoUploadOpen(false);\r\n                setReviewOpen(true);\r\n                window.scrollTo(0, 0);\r\n              }}\r\n              onBack={() => {\r\n                setPhotoUploadOpen(false);\r\n                setProjectBudgetOpen(true);\r\n                window.scrollTo(0, 0);\r\n              }}\r\n              onPreview={PushImgsToArray}\r\n            ></PhotoUploadComp>\r\n\r\n            <ProjectOverview\r\n              open={reviewOpen}\r\n              onBack={() => {\r\n                setReviewOpen(false);\r\n                setPhotoUploadOpen(true);\r\n              }}\r\n              onNext={() => {\r\n                setReviewOpen(false);\r\n                setSubmittedOpen(true);\r\n              }}\r\n              onOpenSaveCase={() => {\r\n                setSaveCaseOpen(true);\r\n              }}\r\n              contactinfo={userInfo}\r\n              area={projectArea}\r\n              scope={projectScope}\r\n              type={projectType}\r\n              style={projectStyle}\r\n              budget={projectBudget}\r\n              description={description}\r\n              imgs={allImgsArray}\r\n              pdfs={pdfArray}\r\n              onSetCaseInformation={UpdateLocalProjectInfo}\r\n            ></ProjectOverview>\r\n\r\n            <SaveProjectWindow\r\n              saveOpen={saveCaseOpen}\r\n              onSaveCase={() => {\r\n                CreateCase(caseObj, false);\r\n              }}\r\n              onClose={() => {\r\n                setSaveCaseOpen(false);\r\n              }}\r\n              SaveCase_ChangeStatusToSubmit={() => {\r\n                CreateCase(caseObj, true);\r\n              }}\r\n            ></SaveProjectWindow>\r\n\r\n            <Submitted\r\n              open={submittedOpen}\r\n              metroId={metroIdOfUser}\r\n              storeId={storeIdOfUser}\r\n            ></Submitted>\r\n\r\n            <Drafted\r\n              open={draftedOpen}\r\n              metroId={metroIdOfUser}\r\n              storeId={storeIdOfUser}\r\n            ></Drafted>\r\n          </EstimatePageRightView>\r\n        </EstimatePageRightCont>\r\n      </EstimatePageMainFlexCont>\r\n    );\r\n  }\r\n};\r\n\r\nEstimateScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default EstimateScreen;\r\n","import styled from \"styled-components\";\r\nimport { ColorPalette } from \"../Colors\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const Cont = styled.div`\r\n  display: flex;\r\n  width: ${(props) => (props.width ? props.width : \"\")};\r\n  overflow: visible; /* Ensure sticky works */\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    height: auto;\r\n    position: ${(props) =>\r\n      props.positionmobile ? props.positionmobile : \"\"};\r\n  }\r\n`;\r\n\r\nexport const ContentCont77vw = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"75vw\")};\r\n  height:  ${(props) => (props.height ? props.height : \"auto\")};\r\n  margin: 1%;\r\n  padding: ${(props) => (props.padding ? props.padding : \"2vw\")};\r\n  padding-top:  ${(props) => (props.paddingTop ? props.paddingTop : \"20px\")};\r\n  padding-bottom: ${(props) => (props.paddingbottom ? props.paddingbottom : \"25px\")};\r\n  border: ${(props) => (props.border ? props.border : \"\")};\r\n  border-radius: 10px;\r\n  box-shadow: ${(props) =>\r\n    props.boxshadow\r\n      ? props.boxshadow\r\n      : \"0px 4px 6px \" + ColorPalette.PrimaryGrey};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  justify-content: ${(props) => (props.justifycontent ? props.justifycontent : \"\")};\r\n  background-color: white;\r\n  flex-direction:column;\r\n  @media (max-width: 1006px) {\r\n    width: 92vw;\r\n    margin: ${(props) =>\r\n      props.mobilemargin ? props.mobilemargin : \"3%\"};\r\n    height: auto;\r\n    background-color: white;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n    box-shadow: none;\r\n    padding-bottom: ${(props) =>\r\n      props.mobilepaddingbottom ? props.mobilepaddingbottom : \"5vh\"};\r\n  }\r\n`;\r\n\r\nexport const ContentCont44Percent = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"50%\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  margin: 1%;\r\n  border-radius: 10px;\r\n  box-shadow: ${(props) =>\r\n    props.boxshadow\r\n      ? props.boxshadow\r\n      : \"0px 4px 6px \" + ColorPalette.PrimaryGrey};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  position: ${(props) => (props.position ? props.position : \"\")};\r\n  background-color: white;\r\n  @media (max-width: 1006px) {\r\n    width: 95vw;\r\n    margin: 5%;\r\n    height: auto;\r\n    background-color: white;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n    box-shadow: none;\r\n    padding-bottom: ${(props) =>\r\n      props.mobilepaddingbottom ? props.mobilepaddingbottom : \"5vh\"};\r\n  }\r\n`;\r\n\r\nexport const ContentContQuote = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"95%\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  margin: 1%;\r\n  padding: 1vw;\r\n  padding-bottom: 20px;\r\n  border-radius: 10px;\r\n  box-shadow: ${(props) =>\r\n    props.boxshadow\r\n      ? props.boxshadow\r\n      : \"0px 4px 6px \" + ColorPalette.PrimaryGrey};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  background-color: white;\r\n  @media (max-width: 1006px) {\r\n    width: 95vw;\r\n    margin: 5%;\r\n    height: auto;\r\n    background-color: white;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n    box-shadow: none;\r\n    padding-bottom: ${(props) =>\r\n      props.mobilepaddingbottom ? props.mobilepaddingbottom : \"5vh\"};\r\n  }\r\n  flex-direction: ${(props) =>\r\n    props.mobileflexdirection ? props.mobileflexdirection : \"\"};\r\n`;\r\n\r\nexport const ContentContPropWidth = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"auto\")};\r\n  height: ${(props) => (props.height ? props.height : \"auto\")};\r\n  min-height: 70vh;\r\n  margin: 1%;\r\n  padding: 1vw;\r\n  padding-bottom: 20px;\r\n  border-radius: 10px;\r\n  box-shadow: ${(props) =>\r\n    props.boxshadow\r\n      ? props.boxshadow\r\n      : \"0px 4px 6px \" + ColorPalette.PrimaryGrey};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  background-color: white;\r\n  @media (max-width: 1006px) {\r\n    width: 98vw;\r\n    margin: 0%;\r\n    height: auto;\r\n    background-color: white;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n    padding-bottom: ${(props) =>\r\n      props.mobilepaddingbottom ? props.mobilepaddingbottom : \"5vh\"};\r\n  }\r\n`;\r\n\r\nexport const CaseCardCont = styled.div`\r\nwidth:${(props) => (props.width ? props.width : \"auto\")};\r\nheight:${(props) => (props.height ? props.height : \"5vh\")};\r\nmargin:${(props) => (props.margin ? props.margin : \"\")};\r\nposition:${(props) => (props.position ? props.position : \"\")};\r\ntop:${(props) => (props.top ? props.top : \"\")};\r\nbottom:${(props) => (props.bottom ? props.bottom : \"\")};\r\nleft:${(props) => (props.left ? props.left : \"\")};\r\nright:${(props) => (props.right ? props.right : \"\")};\r\nborder-bottom:${(props) =>\r\n  props.borderbottom ? props.borderbottom : \"1px solid #d3d3d3\"};\r\nbackground-color:${(props) => (props.bgcolor ? props.bgcolor : \"white\")};\r\nalign-items:${(props) => (props.alignitems ? props.alignitems : \"center\")};\r\ndisplay:${(props) => (props.display ? props.display : \"flex\")};\r\npadding:${(props) => (props.padding ? props.padding : \"20px\")};\r\ncursor:${(props) => (props.cursor ? props.cursor : \"pointer\")};\r\nmargin-bottom:${(props) => (props.marginbottom ? props.marginbottom : \"\")};\r\nmargin-top:${(props) => (props.margintop ? props.margintop : \"\")};\r\nborder:${(props) => (props.border ? props.border : \"\")};\r\nflex-direction:${(props) => (props.flexdirection ? props.flexdirection : \"\")};\r\njustify-content:${(props) =>\r\n  props.justifycontent ? props.justifycontent : \"flex-start\"};\r\nmargin-left:${(props) => (props.marginleft ? props.marginleft : \"\")};\r\nborder-radius${(props) => (props.borderradius ? props.borderradius : \"\")};\r\nborder-bottom:${(props) => (props.borderbottom ? props.borderbottom : \"\")};\r\noverflow-y:${(props) => (props.overflowy ? props.overflowy : \"\")};\r\ntransition: padding 0.2s ease, background-color 0.2s ease;\r\n&:hover {\r\n  padding: 25px; \r\n  background-color: #F8F6F6;\r\n}\r\n@media (max-width: 1006px) {\r\n  width:${(props) => (props.mobilewidth ? props.mobilewidth : \"90%\")};\r\n  height:${(props) => (props.mobileheight ? props.mobileheight : \"10vh\")};\r\n  margin:${(props) => (props.mobilemargin ? props.mobilemargin : \"-1%\")};\r\n  margin-top:${(props) =>\r\n    props.mobilemargintop ? props.mobilemargintop : \"5%\"};\r\n  justify-content:${(props) =>\r\n    props.mobilejustifycontent ? props.mobilejustifycontent : \"space-between\"};\r\n  box-shadow:0px 2px 4px #b7b7b7;\r\n  border-radius:10px;\r\n}\r\n`;\r\n\r\nexport default nullProp;\r\n","// Importing React and hooks\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport styled from \"styled-components\";\r\n// Importing API functions\r\nimport { CaseStatus, ProjectStatusColors, ProjectStatusText } from \"../../API_Functions/CaseQuote_Functions\";\r\n\r\n// Importing stylesheet components\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { FlexZoomSpaceBetween, FlexCont76PercentMobile, DivWithDisplay, DivWithMarginPadding } from \"../../StylesheetComps/Cont\";\r\nimport { Div150pxMobile250px, Div150pxMobileDisplayNone, Div80px, StyledDiv } from \"../../StylesheetComps/Div\";\r\nimport { Icon30px20pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { RegularText, TitleFontSize100PercentPointer } from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport moment from \"moment\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\nconst CaseCardContainer = styled(DivWithDisplay)`\r\n  padding: 10px;\r\n  background-color: ${({ isOdd }) => (isOdd ? '#FAFAFA' : '#FFFFFF')};\r\n  display: flex;\r\n  justify-content: space-between;\r\n  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n  transition: all 0.3s ease;\r\n\r\n  &:hover {\r\n    padding: 20px;\r\n    background-color: #F5F5F7;\r\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);\r\n  }\r\n`;\r\n\r\nconst CaseCard = ({index, CaseNumber, DateText, ClientName, Status, CaseId, onDel, StatusText, StatusColor, EstimatorName, isOdd, Address}) => {\r\n\r\n  const [roleNum, setRoleNum] = useState(UserRole.Loading); \r\n  const { Id, storeId } = useParams();\r\n  const history = useHistory();\r\n  const projectpath = `/viewcase/${Id}/${storeId}/${CaseId}`\r\n  \r\n  const GetProfileInfo = async()=>{ \r\n    setRoleNum(JSON.parse(sessionStorage.getItem('userInfo')).Role)\r\n  }\r\n  \r\n  useEffect(() => { \r\n    GetProfileInfo();\r\n  }, []) \r\n\r\n  // if (\r\n  //   roleNum === UserRole.Manager ||\r\n  //   roleNum === UserRole.Admin ||\r\n  //   roleNum === UserRole.Estimator\r\n  // ) {\r\n  //   switch (Status) {\r\n  //     case CaseStatus.Drafted:\r\n  //       StatusText = ProjectStatusText.Draft;\r\n  //       StatusColor = ProjectStatusColors.Draft;\r\n  //       break;\r\n  //     case CaseStatus.Submitted:\r\n  //       StatusText = ProjectStatusText.NeedsEstimating;\r\n  //       StatusColor = ProjectStatusColors.NeedsEstimating;\r\n  //       break;\r\n  //     case CaseStatus.Accepted:\r\n  //       StatusText = ProjectStatusText.EstimatingInProgress;\r\n  //       StatusColor = ProjectStatusColors.EstimatingInProgress;\r\n  //       break;\r\n  //     case CaseStatus.Processed:\r\n  //       StatusText = ProjectStatusText.EstimateSent;\r\n  //       StatusColor = ProjectStatusColors.EstimateSent;\r\n  //       break;\r\n  //     case CaseStatus.PayPending:\r\n  //       StatusText = ProjectStatusText.DepositPaid;\r\n  //       StatusColor = ProjectStatusColors.DepositPaid;\r\n  //       break;\r\n  //     case CaseStatus.Construction:\r\n  //       StatusText = ProjectStatusText.Construction;\r\n  //       StatusColor = ProjectStatusColors.Construction;\r\n  //       break;\r\n  //     case CaseStatus.Closed:\r\n  //       StatusText = ProjectStatusText.Completed;\r\n  //       StatusColor = ProjectStatusColors.Completed;\r\n  //       break;\r\n  //     case CaseStatus.CancelRequested:\r\n  //       StatusText = ProjectStatusText.CancelRequested;\r\n  //       StatusColor = ProjectStatusColors.CancelRequested;\r\n  //       break;\r\n  //     case CaseStatus.Canceled:\r\n  //       StatusText = ProjectStatusText.Canceled;\r\n  //       StatusColor = ProjectStatusColors.Canceled;\r\n  //       break;\r\n  //     default:\r\n  //       StatusText = ProjectStatusText.Draft;\r\n  //       StatusColor = ProjectStatusColors.Draft;\r\n  //       break;\r\n  //   }\r\n  // }\r\n\r\n  if (roleNum === UserRole.Manager || roleNum === UserRole.Admin || roleNum === UserRole.Estimator) {\r\n    switch (Status) {\r\n      case CaseStatus.Drafted:\r\n          StatusText = (\"Drafted\")\r\n          StatusColor = (\"grey\")\r\n        break;\r\n        case CaseStatus.Submitted:\r\n          StatusText = (\"Submitted\")\r\n          StatusColor = (\"rgb(0, 199, 239)\")\r\n          break;\r\n          case CaseStatus.Accepted:\r\n            StatusText = (\"Assigned\")\r\n            StatusColor = ('rgb(98, 36, 217)')\r\n            break;\r\n            case CaseStatus.Processed:\r\n              StatusText = (\"Estimated\")\r\n              StatusColor = (ColorPalette.PrimaryButtonBlue)\r\n              break;\r\n              case CaseStatus.PayPending:\r\n                  StatusText = (\"Accepted Project\")\r\n                  StatusColor = ('rgb(241, 126, 173, 1)')\r\n                  break;\r\n              case CaseStatus.Construction:\r\n                StatusText = (\"In-Progress\")\r\n                StatusColor = ('rgb(100, 198, 162, 1)')\r\n                break;\r\n              case CaseStatus.Closed:\r\n                StatusText = (\"Closed\")\r\n                StatusColor = (\"#263238\")\r\n                break;\r\n                case CaseStatus.CancelRequested:\r\n                  StatusText = (\"Cancel Requested\")\r\n                  StatusColor = (\"#F53838\")\r\n                  break;\r\n                  case CaseStatus.Canceled:\r\n                    StatusText = (\"Cancelled\")\r\n                    StatusColor = (\"#F53838\")\r\n                    break;\r\n                    default:\r\n                      StatusText = (\"Draft\")\r\n                      StatusColor = (\"grey\")\r\n                  }\r\n  }\r\n  \r\n    return (\r\n      <CaseCardContainer isOdd={isOdd} width=\"90%\" onClick={() => { history.push(projectpath) }}>\r\n      <DivWithDisplay justifycontent='space-evenly' width=\"100%\" onClick={() => { history.push(projectpath) }}>\r\n        <DivWithDisplay justifycontent='space-evenly' flexdirection=\"row\">\r\n      \r\n          <StyledDiv width=\"12vw\" mobileWidth=\"250px\">\r\n            <TitleFontSize100PercentPointer>{ClientName}</TitleFontSize100PercentPointer>\r\n          </StyledDiv>\r\n              <StyledDiv width=\"12vw\" mobileWidth=\"250px\">\r\n            <TitleFontSize100PercentPointer>{Address}</TitleFontSize100PercentPointer>\r\n          </StyledDiv>\r\n          <StyledDiv width=\"12vw\" mobileDisplay=\"none\">\r\n            <TitleFontSize100PercentPointer>{moment(DateText).format(\"DD/MM/YYYY\")}</TitleFontSize100PercentPointer>\r\n          </StyledDiv>\r\n          <StyledDiv width=\"12vw\" mobileWidth=\"250px\">\r\n            <TitleFontSize100PercentPointer>{EstimatorName}</TitleFontSize100PercentPointer>\r\n          </StyledDiv>\r\n          <StyledDiv width=\"12vw\" mobileWidth=\"250px\">\r\n            <RegularResponsiveButton bgcolor={StatusColor}>{StatusText}</RegularResponsiveButton>\r\n          </StyledDiv>\r\n          <StyledDiv width=\"5vw\" mobileWidth=\"250px\">\r\n            {/* <Icon30px20pxPointer margintop={'18px'} src='/Garbage_Icon.svg' onClick={onDel}></Icon30px20pxPointer> */}\r\n          </StyledDiv>\r\n        </DivWithDisplay>\r\n      </DivWithDisplay>\r\n      </CaseCardContainer>\r\n    )\r\n    \r\n    \r\n}\r\n\r\nCaseCard.defaultProps = {\r\n    CaseNumber:\"#001\",\r\n    DateText:\"\",\r\n    TimeText:\"\",\r\n    ClientName:\"John Smith\",\r\n    Status:0,\r\n    StatusText:\"Default\",\r\n    CaseId:0,\r\n    DefaultColor:\"#F53838\",\r\n    StatusColor:\"grey\",\r\n    EstimatorName:\"Estimator\"\r\n}\r\n\r\nexport default CaseCard","import React from \"react\";\r\nimport {\r\n  FlexDiv,\r\n  FlexRowCont70PercentSpaceBetween,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Icon30x40pxPointer } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { CaseCardCont } from \"../../StylesheetComps/Projects\";\r\nimport { RegularText } from \"../../StylesheetComps/Titles\";\r\nimport CaseCard from \"../CaseCard\";\r\n\r\nconst ManagerCard = ({ ManagerName, onDel, Email, Phone }) => {\r\n  return (\r\n    <CaseCardCont width=\"79%\">\r\n      <FlexDiv width=\"500px\">\r\n        <RegularText>{ManagerName}</RegularText>\r\n      </FlexDiv>\r\n      <FlexDiv width=\"500px\">\r\n        <RegularText>{Email}</RegularText>\r\n      </FlexDiv>\r\n      <FlexDiv width=\"500px\">\r\n        <RegularText>{Phone}</RegularText>\r\n      </FlexDiv>\r\n      <FlexDiv width=\"50px\">\r\n        <Icon30x40pxPointer\r\n          src=\"/Garbage_Icon.svg\"\r\n          onClick={onDel}\r\n        ></Icon30x40pxPointer>\r\n      </FlexDiv>\r\n    </CaseCardCont>\r\n  );\r\n};\r\n\r\nManagerCard.defaultProps = {\r\n  ManagerName: \"Default Name\",\r\n  StoreLocationName: \"123 Yonge Street\",\r\n  roleID: 0,\r\n  MetroName: \"Toronto\",\r\n  Username: \"\",\r\n  Email: \"\",\r\n  Phone: \"\",\r\n};\r\n\r\nexport default ManagerCard;\r\n","import React, { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont100Percent50Percent,\r\n  Cont60PercentMargin20px,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst AddManagerWindow = ({ open, onClose, onFormComplete, onPreview }) => {\r\n  const [managerName, setManagerName] = useState(\"\");\r\n  const [managerUsername, setManagerUsername] = useState(\"\");\r\n  const [managerEmail, setManagerEmail] = useState(\"\");\r\n  const [managerPhone, setManagerPhone] = useState(\"\");\r\n  const [managerPass, setManagerPass] = useState(\"\");\r\n  const [metroId] = useState(0);\r\n  const [storeId] = useState(0);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <Cont60PercentMargin20px>\r\n      <LeagueSpartanExtraLargeBold>Create Manager</LeagueSpartanExtraLargeBold>\r\n      <LeftItemWindowFixed>\r\n        <Cont100Percent50Percent>\r\n          <LeagueSpartanExtraLargeBold>\r\n            Name of Manager\r\n          </LeagueSpartanExtraLargeBold>\r\n          <TextInput72Percent\r\n            placeholder=\"Name\"\r\n            onChange={(e) => {\r\n              setManagerName(e.target.value);\r\n            }}\r\n            autoComplete=\"new-password\"\r\n          ></TextInput72Percent>\r\n          <LeagueSpartanExtraLargeBold>Username</LeagueSpartanExtraLargeBold>\r\n          <TextInput72Percent\r\n            placeholder=\"Username\"\r\n            onChange={(e) => {\r\n              setManagerUsername(e.target.value);\r\n            }}\r\n            autoComplete=\"new-password\"\r\n          ></TextInput72Percent>\r\n          <LeagueSpartanExtraLargeBold>Email</LeagueSpartanExtraLargeBold>\r\n          <TextInput72Percent\r\n            placeholder=\"Email\"\r\n            onChange={(e) => {\r\n              setManagerEmail(e.target.value);\r\n            }}\r\n            autoComplete=\"new-password\"\r\n          ></TextInput72Percent>\r\n        </Cont100Percent50Percent>\r\n        <Cont100Percent50Percent>\r\n          <LeagueSpartanExtraLargeBold>Phone</LeagueSpartanExtraLargeBold>\r\n\r\n          <TextInput72Percent\r\n            placeholder=\"Phone\"\r\n            onChange={(e) => {\r\n              setManagerPhone(e.target.value);\r\n            }}\r\n            autoComplete=\"new-password\"\r\n          ></TextInput72Percent>\r\n          <LeagueSpartanExtraLargeBold>Password</LeagueSpartanExtraLargeBold>\r\n\r\n          <TextInput72Percent\r\n            placeholder=\"Password\"\r\n            type=\"password\"\r\n            onChange={(e) => {\r\n              setManagerPass(e.target.value);\r\n            }}\r\n            autoComplete=\"new-password\"\r\n          ></TextInput72Percent>\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              onPreview({\r\n                managerName,\r\n                managerUsername,\r\n                managerEmail,\r\n                managerPhone,\r\n                managerPass,\r\n                metroId,\r\n                storeId,\r\n              });\r\n              onFormComplete(\r\n                managerName,\r\n                managerUsername,\r\n                managerEmail,\r\n                managerPhone,\r\n                managerPass,\r\n                metroId,\r\n                storeId\r\n              );\r\n            }}\r\n          >\r\n            Add\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={onClose}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n        </Cont100Percent50Percent>\r\n      </LeftItemWindowFixed>\r\n    </Cont60PercentMargin20px>\r\n  );\r\n};\r\n\r\nAddManagerWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n};\r\n\r\nexport default AddManagerWindow;\r\n","import styled from \"styled-components\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const RightViewFullWidth = styled.div`\r\n  width: 100vw;\r\n  height: ${(props) => (props.height ? props.height : \"100vh\")};\r\n  @media (max-width: 1006px) {\r\n    width: 100vw;\r\n    margin: 0%;\r\n    height: 0vh;\r\n    background-color: white;\r\n  }\r\n`;\r\n\r\nexport const RightView_FlexFullWidth_Column = styled.div`\r\n  width: 100vw;\r\n  height: 100vh;\r\n  display: flex;\r\n  flex-direction: column;\r\n  @media (max-width: 1006px) {\r\n    width: 100vw;\r\n    margin: 0%;\r\n    height: 0vh;\r\n    background-color: white;\r\n  }\r\n`;\r\n\r\nexport default nullProp;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport ManagerCard from \"../../comps/ManagerCard\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport AddManagerWindow from \"../../comps/Windows/AddManager\";\r\n\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { FlexCont100vw100vh, LeftCont } from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont80vwAutoHeight } from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { FlexDiv70x7Percent } from \"../../StylesheetComps/Div\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ManagerListScreen = () => {\r\n  //=============================================================================\r\n  // Manager List Screen - Create Managers / View Managers here\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Admin oriented page\r\n  //=============================================================================\r\n\r\n  //Add Manager\r\n  const [managerArray, setManagerArray] = useState([]);\r\n\r\n  const [isNewManagerOpen, setIsNewManagerOpen] = useState(false);\r\n\r\n  var setManagerName = \"\";\r\n  var setManagerUsername = \"\";\r\n  var setManagerEmail = \"\";\r\n  var setManagerPhone = \"\";\r\n  var setManagerPass = \"\";\r\n\r\n  var newStoreId = 0;\r\n  var newMetroId = 0;\r\n  var setUserId = 0;\r\n\r\n  const GetManagers = async () => {\r\n    try {\r\n      const { data } = await axios.get(\r\n        `${window.$DBURL}/admin/manager/metro/0`\r\n      );\r\n      setManagerArray(data.managers);\r\n    } catch (error) {\r\n      // Handle the error and log it to the console\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const HandleFormComplete = async ({\r\n    managerName,\r\n    managerUsername,\r\n    managerEmail,\r\n    managerPhone,\r\n    managerPass,\r\n    metroId,\r\n    storeId,\r\n  }) => {\r\n    setManagerName = managerName;\r\n    setManagerUsername = managerUsername;\r\n    setManagerEmail = managerEmail;\r\n    setManagerPhone = managerPhone;\r\n    setManagerPass = managerPass;\r\n    newStoreId = storeId;\r\n    newMetroId = metroId;\r\n  };\r\n\r\n  const HandleManagerDel = async () => {\r\n    try {\r\n      // Send a DELETE request to the server using axios.\r\n      const resp = await axios.delete(\r\n        `${window.$DBURL}admin/manager/${setUserId}`\r\n      );\r\n\r\n      // retrieve the updated list of managers by calling the GetManagers() function.\r\n      if (resp.status === 200) {\r\n        GetManagers();\r\n      }\r\n    } catch (error) {\r\n      // If an error occurs, log it to the console for further investigation.\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const HandleNewManager = async () => {\r\n    try {\r\n      // Create an object that contains the manager's information.\r\n      const manager = {\r\n        Name: setManagerName,\r\n        Username: setManagerUsername,\r\n        Password: setManagerPass,\r\n        Phone: setManagerPhone,\r\n        Email: setManagerEmail,\r\n        Metro_Id: newMetroId,\r\n        Store_Id: newStoreId,\r\n      };\r\n\r\n      // Send a POST request to the server using axios. The URL of the server is constructed\r\n      // using the DBURL environment variable and the ID of the new store.\r\n      const resp = await axios.post(\r\n        `${window.$DBURL}admin/manager/${newStoreId}`,\r\n        manager\r\n      );\r\n\r\n      // If the request is successful (i.e. the server responds with a 200 status code),\r\n      // retrieve the updated list of managers by calling the GetManagers() function.\r\n      if (resp.status === 200) {\r\n        GetManagers();\r\n      }\r\n    } catch (error) {\r\n      // If an error occurs, log it to the console for further investigation.\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetManagers();\r\n  }, []);\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <FlexDiv70x7Percent>\r\n            <LeagueSpartanExtraLargeBold>Managers</LeagueSpartanExtraLargeBold>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                setIsNewManagerOpen(true);\r\n              }}\r\n            >\r\n              Create Manager\r\n            </RegularResponsiveButton>\r\n          </FlexDiv70x7Percent>\r\n          <AddManagerWindow\r\n            open={isNewManagerOpen}\r\n            onClose={() => setIsNewManagerOpen(false)}\r\n            onPreview={HandleFormComplete}\r\n            onFormComplete={HandleNewManager}\r\n          ></AddManagerWindow>\r\n          {managerArray.map((o, i) => (\r\n            <ManagerCard\r\n              ManagerName={o.Name}\r\n              StoreLocationName={o.Store_Id}\r\n              MetroName={o.Metro_Id}\r\n              onDel={() => {\r\n                setUserId = o.Id;\r\n                HandleManagerDel();\r\n              }}\r\n            ></ManagerCard>\r\n          ))}\r\n        </RightViewFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nManagerListScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default ManagerListScreen;\r\n","import React from \"react\";\r\nimport {\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Icon30x30 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { CaseCardCont } from \"../../StylesheetComps/Projects\";\r\nimport { Icon30px20pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { RegularText } from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreSupplierCard = ({ SupplierNameText, onDel, onEdit }) => {\r\n  return (\r\n    <CaseCardCont width=\"80%\">\r\n      <FlexRowCont100PercentSpaceBetween>\r\n        <FlexDiv width=\"200px\">\r\n          <Icon30x30 src=\"/managerface.svg\"></Icon30x30>\r\n        </FlexDiv>\r\n        <FlexDiv width=\"200px\">\r\n          <RegularText>{SupplierNameText}</RegularText>\r\n        </FlexDiv>\r\n        <Icon30px20pxPointer\r\n          src={\"/pencil.svg\"}\r\n          onClick={onEdit}\r\n        ></Icon30px20pxPointer>\r\n        <Icon30px20pxPointer\r\n          src=\"/Garbage_Icon.svg\"\r\n          onClick={onDel}\r\n        ></Icon30px20pxPointer>\r\n      </FlexRowCont100PercentSpaceBetween>\r\n    </CaseCardCont>\r\n  );\r\n};\r\n\r\nStoreSupplierCard.defaultProps = {\r\n  SupplierNameText: \"EX. Home Depot\",\r\n};\r\n\r\nexport default StoreSupplierCard;\r\n","import React, { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport { FixedContHeight120vh, FlexDiv } from \"../../../StylesheetComps/Cont\";\r\nimport { FlexColumnDiv } from \"../../../StylesheetComps/Div\";\r\nimport { TextInput100Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { OverlayCont300pxAutoHeight } from \"../../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  LeagueSpartanExtraLargeWidth200px,\r\n  RegularTextBoldRed,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst EditSupplier = ({\r\n  open,\r\n  onClose,\r\n  onChange,\r\n  onFormComplete,\r\n  supplierID,\r\n  onPreview,\r\n  RoleNameProp,\r\n  NameProp,\r\n  EmailProp,\r\n  PhoneProp,\r\n}) => {\r\n  const [error] = useState(null);\r\n  const [roleFullName, setRoleFullName] = useState(\"\");\r\n  const [roleEmail, setRoleEmail] = useState(\"\");\r\n  const [rolePhone, setRolePhone] = useState(\"\");\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <FixedContHeight120vh>\r\n        <OverlayCont300pxAutoHeight>\r\n          <FlexDiv>\r\n            <FlexColumnDiv>\r\n              <LeagueSpartanExtraLargeWidth200px>\r\n                {RoleNameProp} Name\r\n              </LeagueSpartanExtraLargeWidth200px>\r\n              <TextInput100Percent\r\n                defaultValue={NameProp}\r\n                autoComplete=\"new-password\"\r\n                onChange={(e) => {\r\n                  setRoleFullName(e.target.value);\r\n                }}\r\n              ></TextInput100Percent>\r\n              <LeagueSpartanExtraLargeWidth200px>\r\n                Email\r\n              </LeagueSpartanExtraLargeWidth200px>\r\n              <TextInput100Percent\r\n                defaultValue={EmailProp}\r\n                autoComplete=\"new-password\"\r\n                onChange={(e) => {\r\n                  setRoleEmail(e.target.value);\r\n                }}\r\n              ></TextInput100Percent>\r\n              <LeagueSpartanExtraLargeWidth200px>\r\n                Phone\r\n              </LeagueSpartanExtraLargeWidth200px>\r\n              <TextInput100Percent\r\n                defaultValue={PhoneProp}\r\n                autoComplete=\"new-password\"\r\n                onChange={(e) => {\r\n                  setRolePhone(e.target.value);\r\n                }}\r\n              ></TextInput100Percent>\r\n\r\n              <RegularTextBoldRed>{error}</RegularTextBoldRed>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  onPreview({ roleFullName, roleEmail, rolePhone });\r\n                  onFormComplete(roleFullName, roleEmail, rolePhone);\r\n                  onClose();\r\n                }}\r\n              >\r\n                Update Supplier\r\n              </RegularResponsiveButton>\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryRed}\r\n                onClick={onClose}\r\n              >\r\n                Cancel\r\n              </RegularResponsiveButton>\r\n            </FlexColumnDiv>\r\n          </FlexDiv>\r\n        </OverlayCont300pxAutoHeight>\r\n      </FixedContHeight120vh>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nEditSupplier.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  NameProp: \"\",\r\n  EmailProp: \"\",\r\n  PhoneProp: \"\",\r\n  supplierID: 0,\r\n};\r\n\r\nexport default EditSupplier;\r\n","import { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  ContMargin20px,\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexColumnDiv,\r\n  FlexEndDivAutox15Percent,\r\n} from \"../../../StylesheetComps/Div\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  FixedOverlay1000vh,\r\n  OverlayCont450pxAutoHeight,\r\n} from \"../../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  LeagueSpartanExtraLargeWidth200px,\r\n  RegularTextBoldRed,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst NewRoleWindow = ({\r\n  open,\r\n  onClose,\r\n  onChange,\r\n  onFormComplete,\r\n  onPreview,\r\n  RoleNameProp,\r\n}) => {\r\n  const [error, setError] = useState(null);\r\n  const [roleFullName, setRoleFullName] = useState(\"\");\r\n  const [roleUsername, setRoleUsername] = useState(\"\");\r\n  const [roleEmail, setRoleEmail] = useState(\"\");\r\n  const [rolePhone, setRolePhone] = useState(\"\");\r\n  const [rolePassword, setRolePassword] = useState(\"\");\r\n  const [confirmPass, setConfirmPass] = useState(\"\");\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay1000vh>\r\n      {\" \"}\r\n      <ContMargin20px>\r\n        <OverlayCont450pxAutoHeight>\r\n          <FlexDiv>\r\n            <FlexColumnFullWidth>\r\n              <FlexDiv>\r\n                <FlexColumnDiv>\r\n                  <LeagueSpartanExtraLargeWidth200px>\r\n                    {RoleNameProp} Name\r\n                  </LeagueSpartanExtraLargeWidth200px>\r\n                  <TextInput72Percent\r\n                    autoComplete=\"new-password\"\r\n                    onChange={(e) => {\r\n                      setRoleFullName(e.target.value);\r\n                    }}\r\n                  ></TextInput72Percent>\r\n\r\n                  <LeagueSpartanExtraLargeWidth200px>\r\n                    Email\r\n                  </LeagueSpartanExtraLargeWidth200px>\r\n                  <TextInput72Percent\r\n                    autoComplete=\"new-password\"\r\n                    onChange={(e) => {\r\n                      setRoleEmail(e.target.value);\r\n                    }}\r\n                  ></TextInput72Percent>\r\n                  <LeagueSpartanExtraLargeWidth200px>\r\n                    Phone\r\n                  </LeagueSpartanExtraLargeWidth200px>\r\n                  <TextInput72Percent\r\n                    autoComplete=\"new-password\"\r\n                    onChange={(e) => {\r\n                      setRolePhone(e.target.value);\r\n                    }}\r\n                  ></TextInput72Percent>\r\n                </FlexColumnDiv>\r\n\r\n                <FlexColumnDiv>\r\n                  <LeagueSpartanExtraLargeWidth200px>\r\n                    Username\r\n                  </LeagueSpartanExtraLargeWidth200px>\r\n                  <TextInput72Percent\r\n                    autoComplete=\"new-password\"\r\n                    onChange={(e) => {\r\n                      setRoleUsername(e.target.value);\r\n                    }}\r\n                  ></TextInput72Percent>\r\n                  <LeagueSpartanExtraLargeWidth200px>\r\n                    {\" \"}\r\n                    Password\r\n                  </LeagueSpartanExtraLargeWidth200px>\r\n                  <TextInput72Percent\r\n                    autoComplete=\"new-password\"\r\n                    onChange={(e) => {\r\n                      setRolePassword(e.target.value);\r\n                    }}\r\n                    type=\"password\"\r\n                  ></TextInput72Percent>\r\n                  <LeagueSpartanExtraLargeWidth200px>\r\n                    {\" \"}\r\n                    Confirm Password\r\n                  </LeagueSpartanExtraLargeWidth200px>\r\n                  <TextInput72Percent\r\n                    autoComplete=\"new-password\"\r\n                    onChange={(e) => {\r\n                      setConfirmPass(e.target.value);\r\n                    }}\r\n                    type=\"password\"\r\n                  ></TextInput72Percent>\r\n                  <RegularTextBoldRed>{error}</RegularTextBoldRed>\r\n                </FlexColumnDiv>\r\n              </FlexDiv>\r\n              <FlexEndDivAutox15Percent>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    if (confirmPass.length < 8) {\r\n                      setError(\"Password Not Long Enough! (8 Characters)\");\r\n                    } else if (rolePassword !== confirmPass) {\r\n                      setError(\"Passwords don't match!\");\r\n                    } else {\r\n                      onPreview({\r\n                        roleFullName,\r\n                        roleUsername,\r\n                        roleEmail,\r\n                        rolePhone,\r\n                        rolePassword,\r\n                      });\r\n                      onFormComplete(\r\n                        roleFullName,\r\n                        roleUsername,\r\n                        roleEmail,\r\n                        rolePhone,\r\n                        rolePassword\r\n                      );\r\n                    }\r\n                  }}\r\n                >\r\n                  Add\r\n                </RegularResponsiveButton>\r\n                <RegularResponsiveButton\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  onClick={onClose}\r\n                >\r\n                  Cancel\r\n                </RegularResponsiveButton>\r\n              </FlexEndDivAutox15Percent>\r\n            </FlexColumnFullWidth>\r\n          </FlexDiv>\r\n        </OverlayCont450pxAutoHeight>\r\n      </ContMargin20px>{\" \"}\r\n    </FixedOverlay1000vh>\r\n  );\r\n};\r\n\r\nNewRoleWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n};\r\n\r\nexport default NewRoleWindow;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport ManagerCard from \"../../comps/ManagerCard\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport StoreSupplierCard from \"../../comps/StoreSupplierCard\";\r\nimport EditSupplier from \"../../comps/Windows/EditSupplier\";\r\nimport NewRoleWindow from \"../../comps/Windows/NewRole\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexCont100vw100vh,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { FlexDiv70x7Percent } from \"../../StylesheetComps/Div\";\r\nimport {\r\n  HundredPercentFlexDivCenterItems,\r\n  Icon30px20pxPointer,\r\n} from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularTextBoldRed,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst RoleListScreen = ({ RoleName }) => {\r\n  //=============================================================================\r\n  // RoleList Screen - Manager can view all accounts for specific Role\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Manager can create or delete accounts from this page\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  const [roles, setRoles] = useState([]);\r\n  const [suppId, setSuppId] = useState(0);\r\n\r\n  const [NameProp, setNameProp] = useState(\"\");\r\n  const [EmailProp, setEmailProp] = useState(\"\");\r\n  const [PhoneProp, setPhoneProp] = useState(\"\");\r\n\r\n  const [roleOpen, setRoleOpen] = useState(false);\r\n  const [editSuppOpen, setEditSuppOpen] = useState(false);\r\n  const [idForUser, setIdForUser] = useState(0);\r\n  const [errorText, setErrorText] = useState(\"\");\r\n\r\n  var IDFORROLE = 0;\r\n  var setroleFullName = \"\";\r\n  var setroleUsername = \"\";\r\n  var setroleEmail = \"\";\r\n  var setrolePhone = \"\";\r\n  var setrolePassword = \"\";\r\n\r\n  const GetRoleInfo = async () => {\r\n    if (params.role === \"Supplier\") {\r\n      const resp = await axios.get(\r\n        window.$DBURL + \"store/\" + params.Id + \"/supplier\"\r\n      );\r\n      setRoles(Object.values(resp.data)[0]);\r\n    } else if (params.role === \"OwnerOperator\") {\r\n      const resp = await axios.get(\r\n        window.$DBURL + \"store/\" + params.Id + \"/operators\"\r\n      );\r\n      setRoles(Object.values(resp.data)[0]);\r\n    } else if (params.role === \"Worker\") {\r\n      const resp = await axios.get(\r\n        window.$DBURL + \"store/\" + params.Id + \"/crews\"\r\n      );\r\n      setRoles(Object.values(resp.data)[0]);\r\n    } else {\r\n      const resp = await axios.get(\r\n        window.$DBURL + \"store/\" + params.Id + \"/\" + params.role + \"s\"\r\n      );\r\n      setRoles(Object.values(resp.data)[0]);\r\n    }\r\n  };\r\n\r\n  const GetSessionInfo = async () => {};\r\n\r\n  const GetStoreInfo = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"store/\" + params.Id);\r\n    setIdForUser(resp.data.store.Metro_Id);\r\n  };\r\n\r\n  const HandleRoleDel = async (key) => {\r\n    if (params.role === \"OwnerOperator\") {\r\n      const resp = await axios.delete(\r\n        window.$DBURL + \"admin/operator/\" + IDFORROLE\r\n      );\r\n      if (resp.status === 200) {\r\n        GetRoleInfo();\r\n      }\r\n    } else if (params.role === \"Worker\") {\r\n      const resp = await axios.delete(\r\n        window.$DBURL + \"admin/crew/\" + IDFORROLE\r\n      );\r\n      if (resp.status === 200) {\r\n        GetRoleInfo();\r\n      }\r\n    } else {\r\n      const resp = await axios.delete(\r\n        window.$DBURL + \"admin/\" + params.role + \"/\" + IDFORROLE\r\n      );\r\n      if (resp.status === 200) {\r\n        GetRoleInfo();\r\n      }\r\n    }\r\n  };\r\n\r\n  const HandleSupplierDel = async (key) => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL + \"store/\" + params.Id + \"/supplier/\" + IDFORROLE\r\n    );\r\n    if (resp.status === 200) {\r\n      GetRoleInfo();\r\n    }\r\n  };\r\n\r\n  const HandleFormComplete = async ({\r\n    roleFullName,\r\n    roleUsername,\r\n    roleEmail,\r\n    rolePhone,\r\n    rolePassword,\r\n  }) => {\r\n    setroleFullName = roleFullName;\r\n    setroleUsername = roleUsername;\r\n    setroleEmail = roleEmail;\r\n    setrolePhone = rolePhone;\r\n    setrolePassword = rolePassword;\r\n  };\r\n\r\n  const HandleFormUpdate = async ({ roleFullName, roleEmail, rolePhone }) => {\r\n    setroleFullName = roleFullName;\r\n    setroleEmail = roleEmail;\r\n    setrolePhone = rolePhone;\r\n  };\r\n\r\n  const HandleNewRole = async () => {\r\n    if (params.role === \"Supplier\") {\r\n      const resp = await axios\r\n        .post(window.$DBURL + \"store/\" + params.Id + \"/supplier\", {\r\n          Name: setroleFullName,\r\n          Username: setroleUsername,\r\n          Password: setrolePassword,\r\n          Phone: setrolePhone,\r\n          Email: setroleEmail,\r\n          Metro_Id: idForUser,\r\n        })\r\n        .catch(handleErrors);\r\n      if (resp.status === 200) {\r\n        GetRoleInfo();\r\n        setRoleOpen(false);\r\n      }\r\n    } else if (params.role === \"OwnerOperator\") {\r\n      const resp = await axios\r\n        .post(window.$DBURL + \"admin/operator\", {\r\n          Name: setroleFullName,\r\n          Username: setroleUsername,\r\n          Password: setrolePassword,\r\n          Phone: setrolePhone,\r\n          Email: setroleEmail,\r\n          Metro_Id: idForUser,\r\n        })\r\n        .catch(handleErrors);\r\n      if (resp.status === 200) {\r\n        GetRoleInfo();\r\n        setRoleOpen(false);\r\n      }\r\n    } else if (params.role === \"Worker\") {\r\n      const resp = await axios\r\n        .post(window.$DBURL + \"admin/crew\", {\r\n          Name: setroleFullName,\r\n          Username: setroleUsername,\r\n          Password: setrolePassword,\r\n          Phone: setrolePhone,\r\n          Email: setroleEmail,\r\n          Metro_Id: idForUser,\r\n        })\r\n        .catch(handleErrors);\r\n      if (resp.status === 200) {\r\n        GetRoleInfo();\r\n        setRoleOpen(false);\r\n      }\r\n    } else {\r\n      const resp = await axios\r\n        .post(window.$DBURL + \"admin/\" + params.role, {\r\n          Name: setroleFullName,\r\n          Username: setroleUsername,\r\n          Password: setrolePassword,\r\n          Phone: setrolePhone,\r\n          Email: setroleEmail,\r\n          Metro_Id: idForUser,\r\n        })\r\n        .catch(handleErrors);\r\n      if (resp.status === 200) {\r\n        GetRoleInfo();\r\n        setRoleOpen(false);\r\n      }\r\n    }\r\n  };\r\n\r\n  function handleErrors(err) {\r\n    if (err.Message === \"Invalid username! Username already exists.\") {\r\n      setErrorText(\"Invalid username! Username already exists.\");\r\n    } else if (err.request) {\r\n      setErrorText(\"Manager Creation Failed, Username may already be in use.\");\r\n    } else if (err.response) {\r\n      setErrorText(\"Manager Creation Failed, Username may already be in use.\");\r\n    }\r\n  }\r\n\r\n  const HandleUpdateSupp = async () => {\r\n    const resp = await axios.put(\r\n      window.$DBURL + \"store/\" + params.Id + \"/supplier\",\r\n      {\r\n        Id: suppId,\r\n        Name: setroleFullName || NameProp,\r\n        Email: setroleEmail || EmailProp,\r\n        Phone: setrolePhone || PhoneProp,\r\n      }\r\n    );\r\n    if (resp.status === 200) {\r\n      GetRoleInfo();\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetRoleInfo();\r\n    GetStoreInfo();\r\n    GetSessionInfo();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (params.role === \"Supplier\") {\r\n    return (\r\n      <FlexCont100vw100vh>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n\r\n        <FlexColumnCont80vwAutoHeight>\r\n          <ActionMenu />\r\n          <RightViewFullWidth>\r\n            <FlexDiv70x7Percent>\r\n              <HundredPercentFlexDivCenterItems>\r\n                <Icon30px20pxPointer\r\n                  src=\"/backarrow.svg\"\r\n                  onClick={() => {\r\n                    history.push(\"/rolecat/\" + params.Id);\r\n                  }}\r\n                ></Icon30px20pxPointer>\r\n                <LeagueSpartanExtraLargeBold>\r\n                  {params.role + \"s\"}\r\n                </LeagueSpartanExtraLargeBold>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    setRoleOpen(true);\r\n                  }}\r\n                >\r\n                  Create {params.role}\r\n                </RegularResponsiveButton>\r\n              </HundredPercentFlexDivCenterItems>\r\n            </FlexDiv70x7Percent>\r\n            <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n            <EditSupplier\r\n              NameProp={NameProp}\r\n              EmailProp={EmailProp}\r\n              PhoneProp={PhoneProp}\r\n              supplierID={suppId}\r\n              open={editSuppOpen}\r\n              onClose={() => {\r\n                setEditSuppOpen(false);\r\n              }}\r\n              onPreview={HandleFormUpdate}\r\n              onFormComplete={HandleUpdateSupp}\r\n            ></EditSupplier>\r\n            <NewRoleWindow\r\n              open={roleOpen}\r\n              onClose={() => {\r\n                setRoleOpen(false);\r\n              }}\r\n              RoleNameProp={params.role}\r\n              onPreview={HandleFormComplete}\r\n              onFormComplete={HandleNewRole}\r\n            ></NewRoleWindow>\r\n            {roles.map((o, i) => (\r\n              <StoreSupplierCard\r\n                key={o.Id}\r\n                roleID={o.Id}\r\n                SupplierNameText={o.Name}\r\n                StoreLocationName={o.StoreName}\r\n                MetroName={\"\"}\r\n                onDel={() => {\r\n                  IDFORROLE = o.Id;\r\n                  HandleSupplierDel();\r\n                }}\r\n                onEdit={() => {\r\n                  setSuppId(o.Id);\r\n                  setNameProp(o.Name);\r\n                  setEmailProp(o.Email);\r\n                  setPhoneProp(o.Phone);\r\n                  setEditSuppOpen(true);\r\n                }}\r\n              ></StoreSupplierCard>\r\n            ))}\r\n          </RightViewFullWidth>\r\n        </FlexColumnCont80vwAutoHeight>\r\n      </FlexCont100vw100vh>\r\n    );\r\n  } else {\r\n    return (\r\n      <FlexCont100vw100vh>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n\r\n        <FlexColumnCont80vwAutoHeight>\r\n          <ActionMenu />\r\n          <RightViewFullWidth>\r\n            <FlexDiv70x7Percent>\r\n              <HundredPercentFlexDivCenterItems>\r\n                <Icon30px20pxPointer\r\n                  src=\"/backarrow.svg\"\r\n                  onClick={() => {\r\n                    history.push(\"/rolecat/\" + params.Id);\r\n                  }}\r\n                ></Icon30px20pxPointer>\r\n                <LeagueSpartanExtraLargeBold>\r\n                  {params.role + \"s\"}\r\n                </LeagueSpartanExtraLargeBold>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    setRoleOpen(true);\r\n                  }}\r\n                >\r\n                  Create {params.role}\r\n                </RegularResponsiveButton>\r\n              </HundredPercentFlexDivCenterItems>\r\n            </FlexDiv70x7Percent>\r\n            <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n            <NewRoleWindow\r\n              open={roleOpen}\r\n              onClose={() => {\r\n                setRoleOpen(false);\r\n              }}\r\n              RoleNameProp={params.role}\r\n              onPreview={HandleFormComplete}\r\n              onFormComplete={HandleNewRole}\r\n            ></NewRoleWindow>\r\n            {roles.map((o, i) => (\r\n              <ManagerCard\r\n                key={o.User_Id}\r\n                Email={o.Email}\r\n                Phone={o.Phone}\r\n                roleID={o.User_Id}\r\n                ManagerName={o.Name}\r\n                StoreLocationName={o.StoreName}\r\n                MetroName={\"\"}\r\n                onDel={() => {\r\n                  IDFORROLE = o.User_Id;\r\n                  HandleRoleDel();\r\n                }}\r\n              ></ManagerCard>\r\n            ))}\r\n          </RightViewFullWidth>\r\n        </FlexColumnCont80vwAutoHeight>\r\n      </FlexCont100vw100vh>\r\n    );\r\n  }\r\n};\r\n\r\nRoleListScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default RoleListScreen;\r\n","import { Link } from \"react-router-dom\";\r\nimport { FlexCont80PercentAutoHeightPadding } from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  Div30Percent,\r\n  FlexColumnDivSpaceBetween,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon40x40Percent } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { Icon30px20pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { RegularText } from \"../../StylesheetComps/Titles\";\r\n\r\nconst MetroCatCard = ({ MetroName, MetroID, DelMetro, EditMetro }) => {\r\n  return (\r\n    <FlexCont80PercentAutoHeightPadding>\r\n      <Div30Percent>\r\n        <Icon40x40Percent src={\"/metroicon.svg\"}></Icon40x40Percent>\r\n      </Div30Percent>\r\n      <Link\r\n        to={\"/MetroID/\" + MetroID}\r\n        style={{ textDecoration: \"none\", color: \"black\" }}\r\n      >\r\n        <RegularText>{MetroName}</RegularText>\r\n      </Link>\r\n      <FlexColumnDivSpaceBetween>\r\n        <Icon30px20pxPointer\r\n          src={\"/EditIcon.svg\"}\r\n          onClick={EditMetro}\r\n        ></Icon30px20pxPointer>\r\n        <Icon30px20pxPointer\r\n          src={\"/Garbage_Icon.svg\"}\r\n          onClick={DelMetro}\r\n        ></Icon30px20pxPointer>\r\n      </FlexColumnDivSpaceBetween>\r\n    </FlexCont80PercentAutoHeightPadding>\r\n  );\r\n};\r\n\r\nMetroCatCard.defaultProps = {\r\n  Metro: \"Default Name\",\r\n  StoreLocationName: \"123 Yonge Street\",\r\n  MetroName: \"Default Metro Name\",\r\n  MetroID: 0,\r\n  MetroUrl:\r\n    \"https://torontoguardian.com/wp-content/uploads/2019/01/Toronto-skyline-tourism.jpg\",\r\n};\r\n\r\nexport default MetroCatCard;\r\n","import { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont400x400pxFixed,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlayRegular } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Cont100PercentWidth } from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  LeagueSpartanExtraLargeWidth200px,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst NewMetroWindow = ({\r\n  open,\r\n  onClose,\r\n  onChange,\r\n  onFormComplete,\r\n  onPreview,\r\n}) => {\r\n  const [storeNewMetro, setStoreNewMetro] = useState(\"\");\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <FixedOverlayRegular>\r\n        <Cont400x400pxFixed>\r\n          <LeagueSpartanExtraLargeBold>New Region</LeagueSpartanExtraLargeBold>\r\n          <LeftItemWindowFixed>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n            Region Name\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInput72Percent\r\n              onChange={(e) => {\r\n                setStoreNewMetro(e.target.value);\r\n              }}\r\n            ></TextInput72Percent>\r\n            <Cont100PercentWidth\r\n              onClick={() => {\r\n                onPreview({ storeNewMetro });\r\n              }}\r\n            >\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  onFormComplete(storeNewMetro);\r\n                  onClose();\r\n                }}\r\n              >\r\n                Add\r\n              </RegularResponsiveButton>\r\n            </Cont100PercentWidth>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={onClose}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n          </LeftItemWindowFixed>\r\n        </Cont400x400pxFixed>{\" \"}\r\n      </FixedOverlayRegular>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nNewMetroWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n};\r\n\r\nexport default NewMetroWindow;\r\n","import { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont500x200pxFixedNoMobile,\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexDiv,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { ExtraLargeText } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst DeleteMetroWindow = ({ deleteOpen, closeDel, onDeleteFunction }) => {\r\n  if (!deleteOpen) return null;\r\n  return (\r\n    <Cont500x200pxFixedNoMobile>\r\n      <FlexColumnContRedBorderTopRounded>\r\n        <ExtraLargeText>Are you sure you want to delete this?</ExtraLargeText>\r\n        <FlexDiv>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={closeDel}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              closeDel();\r\n              onDeleteFunction();\r\n            }}\r\n          >\r\n            Delete\r\n          </RegularResponsiveButton>\r\n        </FlexDiv>\r\n      </FlexColumnContRedBorderTopRounded>\r\n    </Cont500x200pxFixedNoMobile>\r\n  );\r\n};\r\n\r\nDeleteMetroWindow.defaultProps = {\r\n  onDeleteFunction: () => {},\r\n};\r\n\r\nexport default DeleteMetroWindow;\r\n","import React, { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont400x575px,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  LeagueSpartanExtraLargeWidth200px,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst EditMetroWindow = ({\r\n  open,\r\n  onClose,\r\n  onChange,\r\n  onMetroComplete,\r\n  onPreview,\r\n}) => {\r\n  const [editMetro, setEditMetro] = useState(\"\");\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <Cont400x575px>\r\n      <LeagueSpartanExtraLargeBold>Edit Region</LeagueSpartanExtraLargeBold>\r\n      <LeftItemWindowFixed>\r\n        <LeagueSpartanExtraLargeWidth200px>\r\n          Region Name\r\n        </LeagueSpartanExtraLargeWidth200px>\r\n\r\n        <TextInput72Percent\r\n          placeholder=\"Metro Name\"\r\n          onChange={(e) => {\r\n            setEditMetro(e.target.value);\r\n          }}\r\n        ></TextInput72Percent>\r\n        <RegularResponsiveButton\r\n          onClick={() => {\r\n            onPreview({ editMetro });\r\n            onMetroComplete(editMetro);\r\n            onClose();\r\n          }}\r\n        >\r\n          Add\r\n        </RegularResponsiveButton>\r\n        <RegularResponsiveButton\r\n          bgcolor={ColorPalette.PrimaryRed}\r\n          onClick={onClose}\r\n        >\r\n          Cancel\r\n        </RegularResponsiveButton>\r\n      </LeftItemWindowFixed>\r\n    </Cont400x575px>\r\n  );\r\n};\r\n\r\nEditMetroWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onMetroComplete: () => {},\r\n};\r\n\r\nexport default EditMetroWindow;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport axios from \"axios\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport MetroCatCard from \"../../comps/MetroCatCard\";\r\nimport NewMetroWindow from \"../../comps/Windows/New Metro\";\r\nimport DeleteMetroWindow from \"../../comps/Windows/DeleteMetro\";\r\nimport EditMetroWindow from \"../../comps/Windows/EditMetro\";\r\n\r\nimport {\r\n  LeftCont,\r\n  FlexCont100vw100vh,\r\n  RightCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { GetMetroList } from \"../../API_Functions/Utility_Functions\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport {\r\n  FlexDiv70x7Percent,\r\n  GridDiv80xAutoPercent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\nconst MetroCatScreen = () => {\r\n  //=============================================================================\r\n  // View All Regions Screen - Admin can create Regions\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Page only accessable by Admin\r\n  //=============================================================================\r\n\r\n  const [metroList, getMetroList] = useState([]);\r\n  const [isOpen, setIsOpen] = useState(false);\r\n\r\n  const [delMetroOpen, setDelMetroOpen] = useState(false);\r\n  const [editMetroOpen, setEditMetroOpen] = useState(false);\r\n  const [storeMetroId, setStoreMetroId] = useState(0);\r\n\r\n  const DeleteMetroFunc = async () => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL + \"utilities/metros/\" + storeMetroId\r\n    );\r\n    if (resp.status === 200) {\r\n      GetMetro();\r\n    }\r\n  };\r\n\r\n  const HandleEditMetro = async (newMetroName) => {\r\n    var resp = await axios.put(window.$DBURL + \"utilities/metros\", {\r\n      Name: newMetroName,\r\n      Id: storeMetroId,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetMetro();\r\n    }\r\n  };\r\n\r\n  const GetMetro = async () => {\r\n    var metros = await GetMetroList();\r\n    getMetroList(metros);\r\n  };\r\n\r\n  const HandleNewMetro = async (newMetro) => {\r\n    var resp = await axios.post(window.$DBURL + \"utilities/metros\", {\r\n      Name: newMetro,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetMetro();\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetMetro();\r\n  }, []);\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n      <NewMetroWindow\r\n        open={isOpen}\r\n        onClose={() => setIsOpen(false)}\r\n        onFormComplete={HandleNewMetro}\r\n      ></NewMetroWindow>\r\n      <RightCont>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <FlexDiv70x7Percent>\r\n            <LeagueSpartanExtraLargeBold>\r\n              Metro Areas\r\n            </LeagueSpartanExtraLargeBold>\r\n            <RegularResponsiveButton onClick={() => setIsOpen(true)}>\r\n              Add Metro\r\n            </RegularResponsiveButton>\r\n          </FlexDiv70x7Percent>\r\n          <GridDiv80xAutoPercent>\r\n            {metroList.map((o, i) => (\r\n              <MetroCatCard\r\n                key={i}\r\n                MetroName={\"-\" + o.Name + \"-\"}\r\n                MetroID={o.Id}\r\n                DelMetro={() => {\r\n                  setDelMetroOpen(true);\r\n                  setStoreMetroId(o.Id);\r\n                }}\r\n                EditMetro={() => {\r\n                  setEditMetroOpen(true);\r\n                  setStoreMetroId(o.Id);\r\n                }}\r\n              ></MetroCatCard>\r\n            ))}\r\n\r\n            <DeleteMetroWindow\r\n              deleteOpen={delMetroOpen}\r\n              closeDel={() => setDelMetroOpen(false)}\r\n              onDeleteFunction={DeleteMetroFunc}\r\n            ></DeleteMetroWindow>\r\n          </GridDiv80xAutoPercent>\r\n          <EditMetroWindow\r\n            open={editMetroOpen}\r\n            onClose={() => setEditMetroOpen(false)}\r\n            onMetroComplete={HandleEditMetro}\r\n          ></EditMetroWindow>\r\n        </RightViewFullWidth>\r\n      </RightCont>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nMetroCatScreen.defaultProps = {};\r\n\r\nexport default MetroCatScreen;\r\n","import React from \"react\";\r\nimport { Link, useParams } from \"react-router-dom\";\r\nimport { FlexCont90PercentAutoHeight } from \"../../StylesheetComps/Cont\";\r\nimport { LeagueSpartanRegular } from \"../../StylesheetComps/Titles\";\r\n\r\nconst RoleCatCard = ({ RoleName }) => {\r\n  const params = useParams();\r\n\r\n  return (\r\n    <FlexCont90PercentAutoHeight>\r\n      <Link\r\n        to={\"/rolelist/\" + params.Id + \"/\" + RoleName}\r\n        style={{ textDecoration: \"none\", color: \"black\" }}\r\n      >\r\n        <LeagueSpartanRegular>{RoleName}</LeagueSpartanRegular>\r\n      </Link>\r\n    </FlexCont90PercentAutoHeight>\r\n  );\r\n};\r\n\r\nRoleCatCard.defaultProps = {\r\n  RoleName: \"Default Role\",\r\n};\r\n\r\nexport default RoleCatCard;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport RoleCatCard from \"../../comps/RoleCatCard\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexCont100vw100vh,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport {\r\n  FlexDiv70x7Percent,\r\n  GridDiv80xAutoPercent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  HundredPercentFlexDivCenterItems,\r\n  Icon30px20pxPointer,\r\n} from \"../../StylesheetComps/Quote\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst RoleCatScreen = () => {\r\n  //=============================================================================\r\n  // RoleCat Screen - Managers can view all Role Types and click to go to Rolelist\r\n  //=============================================================================\r\n\r\n  const [rolesMerge, setRolesMerge] = useState([]);\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  const GetRoles = async (o) => {\r\n    var resp = await axios.get(window.$DBURL + \"users/roles\");\r\n    if (resp.status === 200) {\r\n      setRolesMerge(\r\n        resp.data.roles.slice(2, 6).concat(resp.data.roles.slice(8, 10))\r\n      );\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetRoles();\r\n  }, []);\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <FlexDiv70x7Percent>\r\n            <HundredPercentFlexDivCenterItems>\r\n              <Icon30px20pxPointer\r\n                src=\"/backarrow.svg\"\r\n                onClick={() => {\r\n                  history.push(\"/Store/\" + params.Id);\r\n                }}\r\n              ></Icon30px20pxPointer>\r\n              <LeagueSpartanExtraLargeBold>\r\n                View Roles\r\n              </LeagueSpartanExtraLargeBold>\r\n            </HundredPercentFlexDivCenterItems>\r\n          </FlexDiv70x7Percent>\r\n          <GridDiv80xAutoPercent>\r\n            {rolesMerge.map((o, i) => (\r\n              <RoleCatCard\r\n                key={i}\r\n                RoleName={o.Role}\r\n                RoleID={o.RoleType}\r\n              ></RoleCatCard>\r\n            ))}\r\n          </GridDiv80xAutoPercent>\r\n        </RightViewFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nRoleCatScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  RoleName: \"Role Name Ex. Estimator\",\r\n};\r\n\r\nexport default RoleCatScreen;\r\n","import React from \"react\";\r\nimport { UpdateStore } from \"../../../API_Functions/Store_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont400x575pxNoMargin,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay1000vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { LeagueSpartanExtraLargeWidth200px } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst EditStoreWindow = ({ open, onClose, storeobj }) => {\r\n  const UpdateStoreInformation = async (store) => {\r\n    var data = await UpdateStore(store);\r\n    if (data !== null) {\r\n      onClose();\r\n    }\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay1000vh>\r\n      {\" \"}\r\n      <Cont400x575pxNoMargin>\r\n        <LeftItemWindowFixed>\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            Store Name\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n\r\n          <TextInput72Percent\r\n            placeholder=\"Store Name\"\r\n            onChange={(e) => {\r\n              storeobj.Name = e.target.value;\r\n            }}\r\n            defaultValue={storeobj.Name}\r\n          ></TextInput72Percent>\r\n\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            Address\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n\r\n          <TextInput72Percent\r\n            placeholder=\"Address\"\r\n            onChange={(e) => {\r\n              storeobj.Address = e.target.value;\r\n            }}\r\n            defaultValue={storeobj.Address}\r\n          ></TextInput72Percent>\r\n\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            Phone Number\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n\r\n          <TextInput72Percent\r\n            placeholder=\"Phone\"\r\n            onChange={(e) => {\r\n              storeobj.Phone = e.target.value;\r\n            }}\r\n            defaultValue={storeobj.Phone}\r\n          ></TextInput72Percent>\r\n\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            Min. Deposit\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n\r\n          <TextInput72Percent\r\n            placeholder=\"Min. Deposit\"\r\n            onChange={(e) => {\r\n              storeobj.Minimum_Deposit = e.target.value;\r\n            }}\r\n            defaultValue={storeobj.Minimum_Deposit}\r\n          ></TextInput72Percent>\r\n\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            Min. Labor Charge\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n\r\n          <TextInput72Percent\r\n            placeholder=\"Min. Labor Charge\"\r\n            onChange={(e) => {\r\n              storeobj.Minimum_Labor = e.target.value;\r\n            }}\r\n            defaultValue={storeobj.Minimum_Labor}\r\n          ></TextInput72Percent>\r\n\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              UpdateStoreInformation(storeobj);\r\n            }}\r\n          >\r\n            Update\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={onClose}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n        </LeftItemWindowFixed>\r\n      </Cont400x575pxNoMargin>{\" \"}\r\n    </FixedOverlay1000vh>\r\n  );\r\n};\r\n\r\nEditStoreWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  StoreID: 0,\r\n  Name: \"\",\r\n  Address: \"\",\r\n  Phone: \"\",\r\n};\r\n\r\nexport default EditStoreWindow;\r\n","import styled from \"styled-components\";\r\n\r\nconst nullProp = null;\r\n\r\nexport const InputField = styled.input`\r\nmargin-bottom: 20px;\r\npadding: 12px 16px;\r\nfont-size: 16px;\r\nborder: 1px solid #ccc;\r\nmargin-left: 5px;\r\nborder-radius: 8px;\r\noutline: none;\r\ncolor: #333;\r\nbackground-color: #f9f9f9;\r\ntransition: border-color 0.3s ease;\r\nwidth: ${(props) => (props.width ? props.width : \"100%\")};\r\nmin-width:75px;\r\nbox-sizing: border-box;\r\n\r\n&:focus {\r\n  border-color: #007aff; // You can adjust this to match your theme color\r\n}\r\n\r\n::placeholder {\r\n  color: #999;\r\n}\r\n`;\r\n\r\nexport const RegularFuturaOption = styled.option`\r\n  font-family: Futura;\r\n  font-size: 18px;\r\n  cursor: pointer;\r\n  text-align: left;\r\n  margin: 10px;\r\n  width: 200px;\r\n  @media (max-width: 1006px) {\r\n    margin-top: 15%;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n  }\r\n`;\r\n\r\nexport const BlankOption = styled.option``;\r\n\r\nexport const TextInputSmall = styled.input`\r\n  width: ${(props) => (props.inputwidth ? props.inputwidth : \"350px\")};\r\n  height: ${(props) => (props.inputheight ? props.inputheight : \"5px\")};\r\n  border-radius: ${(props) =>\r\n    props.inputborderradius ? props.inputborderradius : \"4px\"};\r\n  background-color: ${(props) =>\r\n    props.inputbgcolor ? props.inputbgcolor : \"#F4F4F4\"};\r\n  border-style: ${(props) =>\r\n    props.inputborderstyle ? props.inputborderstyle : \"solid\"};\r\n  border-color: ${(props) =>\r\n    props.inputbordercolor ? props.inputbordercolor : \"#AAAAAA\"};\r\n  border-width: ${(props) =>\r\n    props.inputborderwidth ? props.inputborderwidth : 2};\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  margin: 0px;\r\n  margin: 10px;\r\n  padding: 12px;\r\n  ::-webkit-file-upload-button {\r\n    display: none;\r\n  }\r\n  outline: none;\r\n  font-size: ${(props) => (props.fontsize ? props.fontsize : \"100%\")};\r\n  font-family: Avenir;\r\n  @media (max-width: 1006px) {\r\n    margin-top: 2vh;\r\n    margin-left: ${(props) =>\r\n      props.inputmarginleftmobile ? props.inputmarginleftmobile : \"0%\"};\r\n    display: ${(props) => (props.mobiledisplay ? props.mobiledisplay : \"\")};\r\n    width: ${(props) => (props.mobilewidth ? props.mobilewidth : \"70vw\")};\r\n  }\r\n`;\r\n\r\nexport default nullProp;\r\n","import React, { useEffect, useState, useRef } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { FlexDiv } from \"../../StylesheetComps/Cont\";\r\n\r\nconst DropdownContainer = styled.div`\r\n  position: relative;\r\n  display: inline-block;\r\n`;\r\n\r\nconst DropdownMenu = styled.div`\r\n  display: ${(props) => (props.show ? \"block\" : \"none\")};\r\n  position: absolute;\r\n  right:5px;\r\n  background-color: #f9f9f9;\r\n  min-width: 180px;\r\n  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);\r\n  z-index: 1;\r\n  border-radius: 0 0 10px 10px; \r\n`;\r\n\r\nconst DropdownLink = styled.a`\r\n  color: black;\r\n  width: 100%;\r\n  padding: 12px 16px;\r\n  text-decoration: none;\r\n  display: block;\r\n  cursor:pointer;\r\n  &:hover {\r\n    background-color: #f1f1f1;\r\n  }\r\n`;\r\n\r\nconst Dropdown = ({currentPage, executeCallback, notifyProposal, deleteProposal, quoteId, iconSrc, duplicateProposal, addOns, deleteItem, saveAndSend, saveEstimate, changeTag, archiveProposal, unArchiveProposal, acceptProposal, resetProposal}) => {\r\n\r\n    const [showMenu, setShowMenu] = useState(false);\r\n    const [staffDisplay, setStaffDisplay] = useState('none');\r\n    const params = useParams();\r\n    const history = useHistory();\r\n    const dropdownRef = useRef(null); // Reference to the dropdown container\r\n\r\n    const toggleMenu = () => {\r\n      setShowMenu(!showMenu);\r\n    };\r\n\r\n    const handleClickOutside = (event) => {\r\n      if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\r\n        setShowMenu(false);\r\n      }\r\n    };\r\n\r\n\r\n    const links = getLinksForPage(currentPage)\r\n\r\n    function getLinksForPage(currentPage) {\r\n      switch (currentPage) {\r\n        case 'homeownerView':\r\n          return [\r\n            { \r\n              label: 'Estimator View', \r\n              url: `/viewestimatestaff/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/0` \r\n            },\r\n            { \r\n              label: 'Construction View', \r\n              url: `/viewestimateconstruction/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/0/0` \r\n            },\r\n            { \r\n              label: 'Accountant View', \r\n              url: `/viewestimateaccountant/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/0/0` \r\n            },\r\n            { \r\n              label: 'SiteMap View', \r\n              url: window.$ISMOBILE === true ? `/sitemapper/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}` : `/sitemapperdesktop/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}`\r\n            },\r\n          ];\r\n        case 'estimatorView':\r\n          return [\r\n            { \r\n              label: 'View Project', \r\n              url: `/viewcase/${params.Id}/${params.storeId}/${params.caseId}` \r\n            },\r\n            { \r\n              label: 'Homeowner View', \r\n              url:  `/viewquoteuser/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/0/0` \r\n            },\r\n            { \r\n              label: 'Construction View', \r\n              url: `/viewestimateconstruction/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/0/0` \r\n            },\r\n            { \r\n              label: 'Accountant View', \r\n              url: `/viewestimateaccountant/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/0/0` \r\n            },\r\n            { \r\n              label: 'SiteMap View', \r\n              url: window.$ISMOBILE === true ? `/sitemapper/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}` : `/sitemapperdesktop/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}`\r\n            },\r\n            { \r\n              label: 'Save Estimate', \r\n              callback: () => {\r\n                saveEstimate(); setShowMenu(false)\r\n                  }, \r\n            },\r\n            { \r\n              label: 'Save & Send', \r\n              callback: () => {\r\n               var userResponse = window.confirm(\"Are you sure you want to send this Estimate?\")\r\n               if (userResponse) {\r\n                // User clicked \"OK\"\r\n                saveAndSend(); setShowMenu(false)\r\n            } else {\r\n                // User clicked \"Cancel\"\r\n                setShowMenu(false);\r\n            }\r\n            \r\n                  }, \r\n            },\r\n          ];\r\n          case 'itemCard':\r\n            return [\r\n              { \r\n                label: 'Add-Ons', \r\n                callback: () => { addOns(); setShowMenu(false) }, \r\n              },\r\n              { \r\n                label: 'Change Tag', \r\n                callback: () => { changeTag(); setShowMenu(false) }, \r\n              },\r\n              { \r\n                label: 'Delete', \r\n                callback: () => { deleteItem(); setShowMenu(false) }, \r\n              },\r\n            ];\r\n            case 'deliveryItemCard':\r\n            return [\r\n              { \r\n                label: 'Delete', \r\n                callback: () => { deleteItem(); setShowMenu(false) }, \r\n              },\r\n            ];\r\n        case 'constructionView':\r\n          return [\r\n            { \r\n              label: 'Homeowner View', \r\n              url:  `/viewquoteuser/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/0/0` \r\n            },\r\n            { \r\n              label: 'Estimator View', \r\n              url: `/viewestimatestaff/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/0` \r\n            },\r\n            { \r\n              label: 'Accountant View', \r\n              url: `/viewestimateaccountant/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/0/0` \r\n            },\r\n            { \r\n              label: 'SiteMap View', \r\n              url: window.$ISMOBILE === true ? `/sitemapper/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}` : `/sitemapperdesktop/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}`\r\n            },\r\n          ];\r\n        case 'proposalCardGuide':\r\n          return [\r\n            { \r\n              label: 'Homeowner View', \r\n              url:  `/viewquoteuser/${params.Id}/${params.storeId}/${params.caseId}/${quoteId}/0/0` \r\n            },\r\n            { \r\n              label: 'Old Estimator View', \r\n              url: `/viewquote/${params.Id}/${params.storeId}/${params.caseId}/${quoteId}/0` \r\n            },\r\n            { \r\n              label: 'Estimator View', \r\n              url: `/viewestimatestaff/${params.Id}/${params.storeId}/${params.caseId}/${quoteId}/0` \r\n            },\r\n            { \r\n              label: 'Construction View', \r\n              url: `/viewestimateconstruction/${params.Id}/${params.storeId}/${params.caseId}/${quoteId}/0/0` \r\n            },\r\n            { \r\n              label: 'Accountant View', \r\n              url: `/viewestimateaccountant/${params.Id}/${params.storeId}/${params.caseId}/${quoteId}/0/0` \r\n            },\r\n            { \r\n              label: 'SiteMap View', \r\n              url: window.$ISMOBILE === true ? `/sitemapper/${params.Id}/${params.storeId}/${params.caseId}/${quoteId}` : `/sitemapperdesktop/${params.Id}/${params.storeId}/${params.caseId}/${quoteId}`\r\n            },\r\n            { \r\n              label: 'Archive Estimate', \r\n              callback: () => { archiveProposal() } \r\n            },\r\n            { \r\n              label: 'Unarchive Estimate', \r\n              callback: () => { unArchiveProposal() } \r\n            },\r\n            // { \r\n            //   label: 'Accept Estimate', \r\n            //   callback: () => { acceptProposal() } \r\n            // },\r\n            // { \r\n            //   label: 'Unselect Estimate', \r\n            //   callback: () => { resetProposal() } \r\n            // },\r\n            { \r\n              label: 'Send', \r\n              callback: () => { notifyProposal() } \r\n            },\r\n            { \r\n              label: 'Duplicate', \r\n              callback: () => { duplicateProposal() } \r\n            },\r\n            { \r\n              label: 'Delete', \r\n              callback: () => { deleteProposal() } \r\n            },\r\n          \r\n          ];\r\n        default:\r\n          return [];\r\n      }\r\n    }\r\n    \r\n          \r\n      useEffect(() => { \r\n        var roleNum = (JSON.parse(sessionStorage.getItem('userInfo')).Role)\r\n        setStaffDisplay(roleNum === 0 ? 'none' : 'block')\r\n        \r\n      }, []) \r\n\r\n      useEffect(() => {\r\n        // Add event listener to handle outside clicks\r\n        document.addEventListener(\"mousedown\", handleClickOutside);\r\n  \r\n        return () => {\r\n          // Remove event listener on cleanup\r\n          document.removeEventListener(\"mousedown\", handleClickOutside);\r\n        };\r\n      }, []); // Empty dependency array ensures this runs once on mount and unmount\r\n  \r\n  \r\n    return (\r\n      <DropdownContainer ref={dropdownRef}>\r\n        <Icon30px30pxPointer src='/threedotmenu.svg'\r\n                    display={staffDisplay}\r\n                    onClick={toggleMenu}\r\n                    >\r\n                      \r\n                    </Icon30px30pxPointer>\r\n        <DropdownMenu show={showMenu}>\r\n          {links.map((link, index) =>\r\n          <FlexDiv>\r\n          <Icon30px30pxPointer display={iconSrc === null || iconSrc === undefined ? 'none' : iconSrc} ></Icon30px30pxPointer>\r\n        <DropdownLink\r\n        key={index}\r\n        href={link.callback ? undefined : link.url}\r\n        onClick={(event) => {\r\n          if (link.url) {\r\n            event.preventDefault();\r\n            history.push(link.url);\r\n          } else if (link.callback) {\r\n            event.preventDefault();\r\n            link.callback();\r\n          }\r\n        }}\r\n      >\r\n        {link.label}\r\n      </DropdownLink>\r\n      </FlexDiv>\r\n          )}\r\n        </DropdownMenu>\r\n      </DropdownContainer>\r\n    );\r\n  };\r\n\r\n  Dropdown.defaultProps = {\r\n    currentPage:'homeownerView',\r\n    executeCallback:()=>{},\r\n    deleteProposal:()=>{},\r\n    notifyProposal:()=>{},\r\n    duplicateProposal:()=>{},\r\n    resetProposal: ()=>{},\r\n    addOns:()=>{},\r\n    deleteItem:()=>{},\r\n    saveAndSend:()=>{},\r\n    saveEstimate:()=>{},\r\n    archiveProposal:()=>{},\r\n    unArchiveProposal:()=>{},\r\n    acceptProposal:()=>{},\r\n    changeTag:()=>{},\r\n    iconSrc:null\r\n  }\r\n  \r\n  export default Dropdown;\r\n  \r\n","import axios from 'axios';\r\n \r\n // get categories of a store with storeid.\r\n export const GetStoreCategories = async(storeid)=>{\r\n    var resp = await axios.get(window.$DBURL+\"catalog/store/\"+ storeid);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n  }\r\n\r\n  // get category info, subcategories and products of a category with id \r\n export const GetCategory = async(catid)=>{\r\n    var resp = await axios.get(window.$DBURL+\"catalog/\"+ catid);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.cate;\r\n    }\r\n    else\r\n    {\r\n        //display error message\r\n\r\n        //and return null. \r\n        return null;\r\n    }\r\n  }\r\n\r\n  //delete a category with category id\r\nexport const DeleteCategory = async(id)=>{\r\n  var resp = await axios.delete(window.$DBURL+\"catalog/\"+ id);    \r\n    if(resp.status === 200){\r\n        return null\r\n    }\r\n}\r\n\r\n//get product info by product id.\r\nexport const GetProduct = async(id)=>{\r\n    var resp = await axios.get(window.$DBURL+\"catalog/prod/\"+ id);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.product;\r\n    }\r\n    else\r\n    {\r\n        //display error message\r\n\r\n        //and return null. \r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteProduct = async(id)=>{\r\n    await axios.delete(window.$DBURL+\"catalog/prod/\"+id);  \r\n}  \r\n\r\n\r\n// get categories of a store with storeid.\r\nexport const GetStoreProducts = async(storeid)=>{\r\n    var resp = await axios.get(window.$DBURL+\"catalog/prod/store/\"+ storeid);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        //display error message \r\n        \r\n        //and return null. \r\n        return null;\r\n    }\r\n  }\r\n\r\n  // get tools of a store with storeid.\r\nexport const GetStoreTools = async(storeid)=>{\r\n    var resp = await axios.get(window.$DBURL+\"store/\"+ storeid+'/tools');\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data;\r\n    }\r\n    else\r\n    {\r\n        //display error message \r\n        \r\n        //and return null. \r\n        return null;\r\n    }\r\n  }\r\n\r\nexport const GetProductObject = async()=>{\r\n    var product = await GetProduct(0);\r\n    return product;\r\n}\r\n\r\nexport const GetCategoryObject = async()=>{\r\n    var cate = await GetCategory(0);\r\n    return cate;\r\n}\r\n\r\n//add a new product\r\nexport const AddProduct = async(product)=>{\r\n    var resp = await axios.post(window.$DBURL+\"catalog/prod/add\",{Product: product});\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.product;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateProduct = async(product)=>{\r\n    var resp = await axios.put(window.$DBURL+\"catalog/prod/update\", {Product: product});\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.product;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const AddCategory = async(category)=>{\r\n    var resp = await axios.post(window.$DBURL+\"catalog/add\",{Category: category});\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.newcate;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateCategory = async(category)=>{\r\n    var resp = await axios.put(window.$DBURL+\"catalog/update\",{Category: category});\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.newcate;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\n//add a new product\r\nexport const AddProductAddon = async(productid, cateid, position)=>{\r\n    var resp = await axios.post(window.$DBURL+\"catalog/product/\" + productid + \r\n        \"/addon/\" + cateid + \"/position/\"+position);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.addons;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const UpdateProductAddon = async(productid, cateid, position)=>{\r\n    var resp = await axios.put(window.$DBURL+\"catalog/product/\" + productid + \r\n        \"/addon/\" + cateid + \"/position/\"+position);\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.addons;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\nexport const DeleteProductAddon = async(productid, cateid)=>{\r\n    var resp = await axios.delete(window.$DBURL+\"catalog/product/\" + productid + \r\n        \"/addon/\" + cateid );\r\n    if(resp.status===200)\r\n    {\r\n        return resp.data.addons;\r\n    }\r\n    else\r\n    {\r\n        return null;\r\n    }\r\n}\r\n","import {\r\n  FlexCont300x150px,\r\n  FlexDiv,\r\n  FlexRowContFullWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Icon30x30, Icon30x40pxPointer } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { LeagueSpartanHeaderSmall, LeagueSpartanLarge } from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreCard = ({ StoreCardHeader, StoreCardImgUrl }) => {\r\n  return (\r\n    <FlexDiv>\r\n      <FlexRowContFullWidth justifycontent=\"space-evenly\">\r\n        <Icon30x40pxPointer src={StoreCardImgUrl}></Icon30x40pxPointer>\r\n        <LeagueSpartanHeaderSmall margin='10px'>{StoreCardHeader}</LeagueSpartanHeaderSmall>\r\n      </FlexRowContFullWidth>\r\n    </FlexDiv>\r\n  );\r\n};\r\n\r\nStoreCard.defaultProps = {\r\n  StoreCardHeader: \"Default Header\",\r\n  StoreCardImgUrl: \"Inventory.svg\",\r\n};\r\n\r\nexport default StoreCard;\r\n","import axios from \"axios\";\r\n\r\nexport const GetTool = async (tool_id) => {\r\n  var resp = await axios.get(window.$DBURL + \"tool/\" + tool_id);\r\n  if (resp.status === 200) {\r\n    return resp.data.tool;\r\n  } else {\r\n    return null;\r\n  }\r\n};\r\n\r\nexport const GetToolObject = async () => {\r\n  var tool = await GetTool(0);\r\n  return tool;\r\n};\r\n\r\nexport const AddTool = async (newtool) => {\r\n  var resp = await axios.post(window.$DBURL + \"tool/add\", { Tool: newtool });\r\n  if (resp.status === 200) {\r\n    return resp.data.tool;\r\n  } else {\r\n    return null;\r\n  }\r\n};\r\n\r\nexport const UpdateTool = async (tool) => {\r\n  var resp = await axios.put(window.$DBURL + \"tool/update\", { Tool: tool });\r\n  if (resp.status === 200) {\r\n    return resp;\r\n  } else {\r\n    return null;\r\n  }\r\n};\r\n\r\nexport const GetToolKit = async (kit_id) => {\r\n  var resp = await axios.get(window.$DBURL + \"tool/kit/\" + kit_id);\r\n  if (resp.status === 200) {\r\n    return resp.data.toolkit;\r\n  } else {\r\n    return null;\r\n  }\r\n};\r\n\r\nexport const GetToolKitObject = async () => {\r\n  var toolkit = await GetToolKit(0);\r\n  return toolkit;\r\n};\r\n\r\nexport const AddToolKit = async (newkit) => {\r\n  var resp = await axios.post(window.$DBURL + \"tool/kit/add\", {\r\n    ToolKit: newkit,\r\n  });\r\n  if (resp.status === 200) {\r\n    return resp.data.toolkit;\r\n  } else {\r\n    return null;\r\n  }\r\n};\r\n\r\nexport const UpdateToolKit = async (kit) => {\r\n  var resp = await axios.put(window.$DBURL + \"tool/kit/update\", {\r\n    ToolKit: kit,\r\n  });\r\n  if (resp.status === 200) {\r\n    return resp;\r\n  } else {\r\n    return null;\r\n  }\r\n};\r\n\r\n// get toolkits of a store with storeid.\r\nexport const GetStoreToolKits = async (storeid) => {\r\n  var resp = await axios.get(window.$DBURL + \"tool/kit/store/\" + storeid);\r\n  if (resp.status === 200) {\r\n    return resp.data;\r\n  } else {\r\n    //display error message\r\n\r\n    //and return null.\r\n    return null;\r\n  }\r\n};\r\n\r\n//delete Toolkit with id\r\nexport const DeleteToolKit = async (id) => {\r\n  var resp = await axios.delete(window.$DBURL + \"tool/kit/\" + id);\r\n  if (resp.status === 200) {\r\n    return null;\r\n  }\r\n};\r\n\r\n//delete  a tool with id\r\nexport const DeleteTool = async (id) => {\r\n  var resp = await axios.delete(window.$DBURL + \"tool/\" + id);\r\n  if (resp.status === 200) {\r\n    return null;\r\n  }\r\n};\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport EditStoreWindow from \"../../comps/Windows/EditStore\";\r\n\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { GetStoreInfo } from \"../../API_Functions/Store_Functions\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight, FlexCont100vw100vh,\r\n  FlexDiv, FlexRowCont60PercentSpaceEvenly, FlexRowCont70PercentSpaceBetween, FlexRowContFullWidth, LeftCont\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { FlexColumnDiv, FlexDiv70x7Percent, FlexDivSpaceBetween } from \"../../StylesheetComps/Div\";\r\nimport { Icon20x20, Icon30x40pxPointer } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularText\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport { InputField } from \"../../StylesheetComps/Inputs\";\r\nimport { InputLabel } from \"@material-ui/core\";\r\nimport  Dropdown  from '../../comps/DropdownMenu'\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { GetStoreProducts, GetStoreTools } from \"../../API_Functions/CatProduct_Functions\";\r\nimport  StoreCard  from '../../comps/StoreCard'\r\nimport { GetStoreToolKits } from \"../../API_Functions/Tool_Functions\";\r\n\r\nconst StoreScreen = () => {\r\n  //=============================================================================\r\n  // Store Screen - Manager views basic information about their store\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Manager can click to view Product Categories, ToolKits, Staff, & Zones\r\n  //=============================================================================\r\n\r\n  const [storeObj, setStoreObj] = useState([]);\r\n  const [originalProductData, setOriginalProductData] = useState([]);\r\nconst [productData, setProductData] = useState([]);\r\n\r\nconst [originalToolData, setOriginalToolData] = useState([]);\r\nconst [toolData, setToolData] = useState([]);\r\n\r\nconst [originalStaffData, setOriginalStaffData] = useState([]);\r\nconst [staffData, setStaffData] = useState([]);\r\n\r\nconst [originalZoneData, setOriginalZoneData] = useState([]);\r\nconst [zoneData, setZoneData] = useState([]);\r\n\r\nconst [toolkitData, setToolkitData] = useState([]);\r\n\r\nconst history = useHistory()\r\n\r\n  const [roleNum, setRoleNum] = useState(0);\r\n  const [managerName, setManagerName] = useState([]);\r\n  const [isEditOpen, setIsEditOpen] = useState(false);\r\n\r\n  const [productSelected, setProductSelected] = useState(true);\r\n  const [toolSelected, setToolSelected] = useState(true);\r\n  const [staffSelected, setStaffSelected] = useState(true);\r\n  const [zoneSelected, setZoneSelected] = useState(true);\r\n\r\n  const params = useParams();\r\n\r\n  // const GetStore = async (storeId) => {\r\n  //   try {\r\n  //     // Attempt to get store information\r\n  //     const data = await GetStoreInfo(storeId);\r\n  //     const productData = await GetStoreProducts(storeId)\r\n  //     const toolData = await GetStoreTools(storeId)\r\n  //     const staffData = await axios.get(window.$DBURL + \"users/roles\");\r\n  //     const zoneData = await axios.get(`${window.$DBURL}store/zonelist/${storeId}`)\r\n  //     const toolkitData = await GetStoreToolKits(storeId)\r\n  //     // Check if data is not null\r\n  //     if (data !== null) {\r\n  //       setStoreObj(data);\r\n  //       setOriginalProductData(productData.products)\r\n  //       setProductData(productData.products)\r\n  //       setOriginalToolData(toolData.tools)\r\n  //       setToolData(toolData.tools)\r\n  //       setOriginalStaffData(staffData.data.roles)\r\n  //       setStaffData(staffData.data.roles)\r\n  //       setOriginalZoneData(zoneData.data.zones)\r\n  //       setZoneData(zoneData.data.zones)\r\n  //       setToolkitData(toolkitData.toolkit)\r\n  //       console.log(toolkitData.toolkit)\r\n  //     }\r\n  //   } catch (error) {\r\n  //     // Handle error if something goes wrong during the `await` operation\r\n  //     console.error(error);\r\n  //   }\r\n  // };\r\n\r\n  const GetStore = async (storeId) => {\r\n    try {\r\n      const data = await GetStoreInfo(storeId);\r\n      const productData = await GetStoreProducts(storeId);\r\n      const toolData = await GetStoreTools(storeId);\r\n      const staffData = await axios.get(window.$DBURL + \"users/roles\");\r\n      const zoneData = await axios.get(`${window.$DBURL}store/zonelist/${storeId}`);\r\n      const toolkitData = await GetStoreToolKits(storeId);\r\n  \r\n      if (data !== null) {\r\n        setStoreObj(data);\r\n  \r\n        // Updated sortByName function to sort names starting with numbers to the bottom\r\n        const sortByName = (a, b) => {\r\n          const startsWithNumberA = /^\\d/.test(a.Name);\r\n          const startsWithNumberB = /^\\d/.test(b.Name);\r\n  \r\n          if (startsWithNumberA && !startsWithNumberB) {\r\n            return 1; // A should come after B\r\n          } else if (!startsWithNumberA && startsWithNumberB) {\r\n            return -1; // A should come before B\r\n          }\r\n          // If both start with a number or both start with a letter, sort alphabetically\r\n          return a.Name.localeCompare(b.Name, undefined, {sensitivity: 'base'});\r\n        };\r\n  \r\n        const sortedProductData = productData.products.sort(sortByName);\r\n        setOriginalProductData(sortedProductData);\r\n        setProductData(sortedProductData);\r\n  \r\n        const sortedToolData = toolData.tools.sort(sortByName);\r\n        setOriginalToolData(sortedToolData);\r\n        setToolData(sortedToolData);\r\n  \r\n        // Adjust the sorting for staff data if necessary, assuming 'Role' is the sorting key\r\n        const sortedStaffData = staffData.data.roles.sort((a, b) => {\r\n          return a.Role.localeCompare(b.Role, undefined, {sensitivity: 'base'});\r\n        });\r\n        setOriginalStaffData(sortedStaffData);\r\n        setStaffData(sortedStaffData);\r\n  \r\n        const sortedZoneData = zoneData.data.zones.sort(sortByName);\r\n        setOriginalZoneData(sortedZoneData);\r\n        setZoneData(sortedZoneData);\r\n  \r\n        // No sorting applied to toolkitData in this example, adjust if needed\r\n        setToolkitData(toolkitData.toolkit);\r\n        console.log(toolkitData.toolkit);\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n  \r\n  \r\n\r\n  const handleSearch = (searchText) => {\r\n    const lowerCaseText = searchText.toLowerCase();\r\n    const textArray = lowerCaseText.split(\" \");\r\n  \r\n    // This is a generalized filter function\r\n    const filterData = (dataList, keyToFilter) => {\r\n      return dataList.filter((item) => {\r\n        // Exclude items with 'DNU' in uppercase in their name\r\n        if (item[keyToFilter] && item[keyToFilter].toUpperCase().includes('DNU')) {\r\n          return false;\r\n        }\r\n  \r\n        // Check for each word in the searchText\r\n        // Ensuring item[keyToFilter] exists to avoid errors on undefined properties\r\n        return textArray.every((word) => item[keyToFilter] && item[keyToFilter].toLowerCase().includes(word));\r\n      });\r\n    };\r\n  \r\n    // Apply the filter to each data set and update the respective states\r\n    // Assuming 'Name' is the key for productData, toolData, and zoneData, and 'Role' for staffData\r\n    setProductData(filterData(originalProductData, 'Name'));\r\n    setToolData(filterData(originalToolData, 'Name'));\r\n    setStaffData(filterData(originalStaffData, 'Role')); // Use 'Role' or the correct key for filtering staffData\r\n    setZoneData(filterData(originalZoneData, 'Name'));\r\n  };  \r\n\r\n  const GetProfileInfo = async () => {\r\n    setManagerName(JSON.parse(sessionStorage.getItem(\"userInfo\")).Name);\r\n  };\r\n\r\n  const GetSuppliers = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"store/\" + params.Id + \"/supplier\"\r\n    );\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.suppliers !== null) {\r\n          // getZoneSuppliers(resp.data.suppliers)\r\n        }\r\n      }\r\n    }\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetStore(params.Id);\r\n    GetProfileInfo();\r\n    GetSuppliers();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    window.scrollTo(0, 0);\r\n  }, []);\r\n\r\n  if (roleNum === UserRole.Manager) {\r\n    return (\r\n      <FlexCont100vw100vh>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n\r\n        <FlexColumnCont80vwAutoHeight>\r\n          <RightViewFullWidth>\r\n            <FlexDiv70x7Percent height='auto' margin='15px'>\r\n              <FlexColumnDiv>\r\n                <FlexDiv>\r\n              <LeagueSpartanExtraLargeBold>\r\n                {storeObj.Name} Inventory Management\r\n              </LeagueSpartanExtraLargeBold>\r\n              <Icon30x40pxPointer onClick={() => {\r\n                  setIsEditOpen(true);\r\n                }} src='/pencil.svg'></Icon30x40pxPointer>\r\n               </FlexDiv>\r\n                <FlexDiv>\r\n                  <RegularText>{storeObj.Address} - {storeObj.Phone}</RegularText>\r\n                </FlexDiv>\r\n                <FlexDiv \r\n              \r\n              >\r\n                <Link\r\n                  to={\"/productcategory/\" + params.Id}\r\n                  style={{ textDecoration: \"none\", color: \"black\" }}\r\n                >\r\n                  <StoreCard\r\n                    StoreCardHeader=\"Manage Products\"\r\n                    StoreCardImgUrl=\"/Inventory.svg\"\r\n                  ></StoreCard>\r\n                </Link>\r\n                <Link\r\n                  to={\"/toolkit/\" + params.Id}\r\n                  style={{ textDecoration: \"none\", color: \"black\" }}\r\n                >\r\n                  <StoreCard\r\n                    StoreCardHeader=\"Manage Tools\"\r\n                    StoreCardImgUrl=\"/Tools.svg\"\r\n                  ></StoreCard>\r\n                </Link>\r\n                <Link\r\n                  to={\"/rolecat/\" + params.Id}\r\n                  style={{ textDecoration: \"none\", color: \"black\" }}\r\n                >\r\n                  <StoreCard\r\n                    StoreCardHeader=\"Manage Staff\"\r\n                    StoreCardImgUrl=\"/Workforce.svg\"\r\n                  ></StoreCard>\r\n                </Link>\r\n                <Link\r\n                  to={\"/Zonelist/\" + params.Id}\r\n                  style={{ textDecoration: \"none\", color: \"black\" }}\r\n                >\r\n                  <StoreCard\r\n                    StoreCardHeader=\"Manage Zones\"\r\n                    StoreCardImgUrl=\"/Zones.svg\"\r\n                  ></StoreCard>\r\n                </Link>\r\n              </FlexDiv>\r\n                </FlexColumnDiv>\r\n            </FlexDiv70x7Percent>\r\n            <EditStoreWindow\r\n              storeobj={storeObj}\r\n              open={isEditOpen}\r\n              onClose={() => {\r\n                setIsEditOpen(false);\r\n              }}\r\n            ></EditStoreWindow>\r\n            <hr></hr>\r\n            <br></br>\r\n            <FlexDiv70x7Percent>\r\n            <FlexColumnDiv width=\"90%\">\r\n            <FlexDivSpaceBetween>\r\n              <div>\r\n              <InputLabel>Search for what you are looking for...</InputLabel>\r\n              </div>\r\n              <FlexDiv>\r\n              <RegularResponsiveButton\r\n  bgcolor={productSelected ? ColorPalette.PrimaryButtonBlue : ColorPalette.PrimaryGrey}\r\n  onClick={() => setProductSelected(!productSelected)}\r\n>\r\n  Products\r\n</RegularResponsiveButton>\r\n\r\n<RegularResponsiveButton\r\n  bgcolor={toolSelected ? ColorPalette.PrimaryButtonBlue : ColorPalette.PrimaryGrey}\r\n  onClick={() => setToolSelected(!toolSelected)}\r\n>\r\n  Tools\r\n</RegularResponsiveButton>\r\n\r\n<RegularResponsiveButton\r\n  bgcolor={staffSelected ? ColorPalette.PrimaryButtonBlue : ColorPalette.PrimaryGrey}\r\n  onClick={() => setStaffSelected(!staffSelected)}\r\n>\r\n  Staff\r\n</RegularResponsiveButton>\r\n\r\n<RegularResponsiveButton\r\n  bgcolor={zoneSelected ? ColorPalette.PrimaryButtonBlue : ColorPalette.PrimaryGrey}\r\n  onClick={() => setZoneSelected(!zoneSelected)}\r\n>\r\n  Zones\r\n</RegularResponsiveButton>\r\n\r\n\r\n              </FlexDiv>\r\n            </FlexDivSpaceBetween>\r\n            <br></br>\r\n<InputField onChange={(e) => {\r\n  const searchText = e.target.value;\r\n  if (!searchText.trim()) {\r\n    // If search text is empty, reset to original data\r\n    setProductData(originalProductData);\r\n    setToolData(originalToolData);\r\n    setStaffData(originalStaffData);\r\n    setZoneData(originalZoneData);\r\n  } else {\r\n    // Otherwise, filter data\r\n    handleSearch(searchText);\r\n  }\r\n}} />\r\n            </FlexColumnDiv>\r\n            </FlexDiv70x7Percent>\r\n            <FlexDiv70x7Percent width='100%' height='60%' overflowy='scroll' alignitems='baseline'>\r\n            <FlexColumnDiv>\r\n  {productSelected && productData?.map((o, i) =>\r\n    <div onClick={()=>{\r\n      history.push(\r\n        \"/productlist/\" + params.Id + \"/\" + o.Category_Id +'/'+o.Id\r\n      );\r\n    }}>\r\n    <FlexRowContFullWidth key={`product-${i}`}>\r\n    <FlexDivSpaceBetween width='63vw'>\r\n    <FlexDiv width='30vw'>\r\n      <Icon20x20 src='/Inventory.svg' />\r\n      <RegularText>\r\n        {o.Name}\r\n      </RegularText>\r\n      </FlexDiv>\r\n      <FlexDiv>\r\n        ${o.UnitPrice.toFixed(2)}\r\n         {' '}\r\n        {o.Supplier.map((supplier, index)=>\r\n        <RegularText>\r\n          {supplier.SupplierName}\r\n        </RegularText>\r\n        )}\r\n        {o.Unit}\r\n      </FlexDiv>\r\n      </FlexDivSpaceBetween>\r\n    </FlexRowContFullWidth>\r\n    <hr></hr>\r\n    </div>\r\n  )}\r\n\r\n  {toolSelected && toolData?.map((o, i) =>\r\n    <FlexDiv key={`tool-${i}`} onClick={()=>{\r\n      var toolKitName = toolkitData.find(toolKit => toolKit.Id === o.ToolKit_Id)?.Name\r\n      history.push(\r\n        \"/toollist/\" + params.Id + \"/\" + o.ToolKit_Id + '/' + toolKitName\r\n      );\r\n    }\r\n    }>\r\n      <Icon20x20 src='/Tools.svg' />\r\n      <RegularText>\r\n        {o.Name}\r\n      </RegularText>\r\n    </FlexDiv>\r\n  )}\r\n\r\n  {staffSelected && staffData?.map((o, i) =>\r\n    <FlexDiv key={`staff-${i}`} onClick={()=>{\r\n      history.push(\"/rolelist/\" + params.Id + \"/\" + o.Role)\r\n    }}>\r\n      <Icon20x20 src='/Workforce.svg' />\r\n      <RegularText>\r\n        {o.Role}\r\n      </RegularText>\r\n    </FlexDiv>\r\n  )}\r\n\r\n  {zoneSelected && zoneData?.map((o, i) =>\r\n    <FlexDiv key={`zone-${i}`} onClick={()=>{\r\n      history.push(\"/Zone/\" + params.Id + \"/\" + o.Id)\r\n    }}>\r\n      <Icon20x20 src='/Zones.svg' />\r\n      <RegularText>\r\n        {o.Name}\r\n      </RegularText>\r\n    </FlexDiv>\r\n  )}\r\n</FlexColumnDiv>\r\n<FlexDiv></FlexDiv>\r\n            </FlexDiv70x7Percent>\r\n          \r\n          </RightViewFullWidth>\r\n        </FlexColumnCont80vwAutoHeight>\r\n      </FlexCont100vw100vh>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nStoreScreen.defaultProps = {};\r\n\r\nexport default StoreScreen;\r\n","import { FlexCont5vhMobile88x5, FlexDiv } from \"../../StylesheetComps/Cont\";\r\nimport { Icon35px100Perc } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { RegularText } from \"../../StylesheetComps/Titles\";\r\n\r\nconst MetroCityCard = ({\r\n  CityNameText,\r\n  onClick,\r\n  CityID,\r\n  EditCity,\r\n  onSetEdit,\r\n}) => {\r\n  return (\r\n    <FlexCont5vhMobile88x5>\r\n      <RegularText>{CityNameText}</RegularText>\r\n      <FlexDiv>\r\n        <Icon35px100Perc\r\n          src={\"/EditIcon.svg\"}\r\n          onClick={() => {\r\n            EditCity();\r\n            onSetEdit = { CityID };\r\n          }}\r\n        ></Icon35px100Perc>\r\n        <Icon35px100Perc\r\n          src=\"/Garbage_Icon.svg\"\r\n          onClick={onClick}\r\n        ></Icon35px100Perc>\r\n      </FlexDiv>\r\n    </FlexCont5vhMobile88x5>\r\n  );\r\n};\r\n\r\nMetroCityCard.defaultProps = {\r\n  CityNameText: \"EX. Mississauga\",\r\n  CityID: 0,\r\n};\r\n\r\nexport default MetroCityCard;\r\n","import { useHistory, useParams } from \"react-router-dom\";\r\nimport { FlexCont5vhMobile88x5, FlexDiv } from \"../../StylesheetComps/Cont\";\r\nimport { Icon35px100Perc } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { RegularText } from \"../../StylesheetComps/Titles\";\r\n\r\nconst MetroStoreCard = ({\r\n  ManagerName,\r\n  StoreLocationName,\r\n  MetroName,\r\n  onClick,\r\n  onDeleteStore,\r\n  StoreID,\r\n  EditStore,\r\n  onSetEdit,\r\n  StoreName,\r\n}) => {\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  return (\r\n    <FlexCont5vhMobile88x5>\r\n      <RegularText\r\n        onClick={() => {\r\n          history.push(\"/storeadmin/\" + params.Id + \"/\" + StoreID);\r\n        }}\r\n      >\r\n        {StoreName}\r\n      </RegularText>\r\n\r\n      <RegularText\r\n        onClick={() => {\r\n          history.push(\"/storeadmin/\" + params.Id + \"/\" + StoreID);\r\n        }}\r\n      >\r\n        {StoreLocationName}\r\n      </RegularText>\r\n      <RegularText>{ManagerName}</RegularText>\r\n      <FlexDiv>\r\n        <Icon35px100Perc\r\n          src={\"/EditIcon.svg\"}\r\n          onClick={() => {\r\n            EditStore();\r\n            onSetEdit = { StoreID };\r\n          }}\r\n        ></Icon35px100Perc>\r\n        <Icon35px100Perc\r\n          src=\"/Garbage_Icon.svg\"\r\n          onClick={onDeleteStore}\r\n        ></Icon35px100Perc>\r\n      </FlexDiv>\r\n    </FlexCont5vhMobile88x5>\r\n  );\r\n};\r\n\r\nMetroStoreCard.defaultProps = {\r\n  ManagerName: \"No Manager\",\r\n  StoreName: \"Default Store Name\",\r\n  StoreLocationName: \"Default Store Address\",\r\n  MetroName: \"Toronto\",\r\n  StoreID: 0,\r\n  onDeleteStore: () => {},\r\n};\r\n\r\nexport default MetroStoreCard;\r\n","import { FlexCont5vhMobile88x5, FlexDiv } from \"../../StylesheetComps/Cont\";\r\nimport { Icon35px100Perc } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { RegularText } from \"../../StylesheetComps/Titles\";\r\n\r\nconst MetroTaxCard = ({\r\n  ManagerName,\r\n  TaxNameText,\r\n  TaxRateText,\r\n  onClick,\r\n  TaxID,\r\n  EditTax,\r\n  onSetEdit,\r\n}) => {\r\n  return (\r\n    <FlexCont5vhMobile88x5>\r\n      <RegularText>{TaxNameText}</RegularText>\r\n      <RegularText>{TaxRateText}</RegularText>\r\n      <FlexDiv>\r\n        <Icon35px100Perc\r\n          src={\"/EditIcon.svg\"}\r\n          onClick={() => {\r\n            EditTax();\r\n            onSetEdit = { TaxID };\r\n          }}\r\n        ></Icon35px100Perc>\r\n        <Icon35px100Perc\r\n          src=\"/Garbage_Icon.svg\"\r\n          onClick={onClick}\r\n        ></Icon35px100Perc>\r\n      </FlexDiv>\r\n    </FlexCont5vhMobile88x5>\r\n  );\r\n};\r\n\r\nMetroTaxCard.defaultProps = {\r\n  TaxRateText: \"EX. 13%\",\r\n  TaxNameText: \"EX. HST\",\r\n  MetroName: \"Toronto\",\r\n  TaxID: 0,\r\n};\r\n\r\nexport default MetroTaxCard;\r\n","import React from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { AddStore } from \"../../../API_Functions/Store_Functions\";\r\n\r\nimport { Cont400x575pxNoMargin } from \"../../../StylesheetComps/Cont\";\r\nimport { Div300x400pxMargin30px } from \"../../../StylesheetComps/Div\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { LeagueSpartanExtraLargeWidth200px } from \"../../../StylesheetComps/Titles\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nconst NewStoreWindow = ({ open, onClose, onChange }) => {\r\n  const params = useParams();\r\n\r\n  var storeobj = {\r\n    Name: \"\",\r\n    Address: \"\",\r\n    Phone: \"\",\r\n    Metro_Id: 0,\r\n    Minimum_Deposit: 0,\r\n    Minimum_Labor: 0,\r\n  };\r\n\r\n  const AddNewStore = async (storeobj, metroid) => {\r\n    storeobj.Metro_Id = metroid;\r\n    var data = await AddStore(storeobj);\r\n    if (data !== null) {\r\n      onClose();\r\n      onChange();\r\n    }\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <Cont400x575pxNoMargin>\r\n      <Div300x400pxMargin30px>\r\n        <LeagueSpartanExtraLargeWidth200px>\r\n          Store Info\r\n        </LeagueSpartanExtraLargeWidth200px>\r\n        <TextInput72Percent\r\n          placeholder=\"Store Name\"\r\n          onChange={(e) => {\r\n            storeobj.Name = e.target.value;\r\n          }}\r\n        ></TextInput72Percent>\r\n        <TextInput72Percent\r\n          placeholder=\"Address\"\r\n          onChange={(e) => {\r\n            storeobj.Address = e.target.value;\r\n          }}\r\n        ></TextInput72Percent>\r\n        <TextInput72Percent\r\n          placeholder=\"Phone\"\r\n          onChange={(e) => {\r\n            storeobj.Phone = e.target.value;\r\n          }}\r\n        ></TextInput72Percent>\r\n        <TextInput72Percent\r\n          placeholder=\"Min Deposit\"\r\n          onChange={(e) => {\r\n            storeobj.Minimum_Deposit = e.target.value;\r\n          }}\r\n        ></TextInput72Percent>\r\n        <TextInput72Percent\r\n          placeholder=\"Min Labor\"\r\n          onChange={(e) => {\r\n            storeobj.Minimum_Labor = e.target.value;\r\n          }}\r\n        ></TextInput72Percent>\r\n\r\n        <RegularResponsiveButton\r\n          onClick={() => {\r\n            AddNewStore(storeobj, params.Id);\r\n          }}\r\n        >\r\n          Add\r\n        </RegularResponsiveButton>\r\n        <RegularResponsiveButton\r\n          bgcolor={ColorPalette.PrimaryRed}\r\n          onClick={onClose}\r\n        >\r\n          Cancel\r\n        </RegularResponsiveButton>\r\n      </Div300x400pxMargin30px>\r\n    </Cont400x575pxNoMargin>\r\n  );\r\n};\r\n\r\nNewStoreWindow.defaultProps = {\r\n  onChange: () => {},\r\n};\r\n\r\nexport default NewStoreWindow;\r\n","import { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont500x200px,\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexDiv,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { ExtraLargeText } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst DeleteWindow = ({ deleteOpen, closeDel, onDeleteFunction }) => {\r\n  if (!deleteOpen) return null;\r\n  return (\r\n    <Cont500x200px>\r\n      <FlexColumnContRedBorderTopRounded>\r\n        <ExtraLargeText>Are you sure you want to delete this?</ExtraLargeText>\r\n        <FlexDiv>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={closeDel}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              closeDel();\r\n              onDeleteFunction();\r\n            }}\r\n          >\r\n            Delete\r\n          </RegularResponsiveButton>\r\n        </FlexDiv>\r\n      </FlexColumnContRedBorderTopRounded>\r\n    </Cont500x200px>\r\n  );\r\n};\r\n\r\nDeleteWindow.defaultProps = {\r\n  onDeleteFunction: () => {},\r\n};\r\n\r\nexport default DeleteWindow;\r\n","import React from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont500x200pxFixedNoMobile,\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexContCenterAlign,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { ExtraLargeText } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst DeleteCityWindow = ({ deleteOpen, closeDel, onDeleteFunction }) => {\r\n  if (!deleteOpen) return null;\r\n  return (\r\n    <Cont500x200pxFixedNoMobile>\r\n      <FlexColumnContRedBorderTopRounded>\r\n        <ExtraLargeText>Are you sure you want to delete this?</ExtraLargeText>\r\n        <FlexContCenterAlign>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={closeDel}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              closeDel();\r\n              onDeleteFunction();\r\n            }}\r\n          >\r\n            Delete\r\n          </RegularResponsiveButton>\r\n        </FlexContCenterAlign>\r\n      </FlexColumnContRedBorderTopRounded>\r\n    </Cont500x200pxFixedNoMobile>\r\n  );\r\n};\r\n\r\nDeleteCityWindow.defaultProps = {\r\n  onDeleteFunction: () => {},\r\n};\r\n\r\nexport default DeleteCityWindow;\r\n","import { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont500x200pxFixedNoMobile,\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexDiv,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { ExtraLargeText } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst DeleteTaxWindow = ({ deleteOpen, closeDel, onDeleteFunction }) => {\r\n  if (!deleteOpen) return null;\r\n  return (\r\n    <Cont500x200pxFixedNoMobile>\r\n      <FlexColumnContRedBorderTopRounded>\r\n        <ExtraLargeText>Are you sure you want to delete this?</ExtraLargeText>\r\n        <FlexDiv>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={closeDel}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              closeDel();\r\n              onDeleteFunction();\r\n            }}\r\n          >\r\n            Delete\r\n          </RegularResponsiveButton>\r\n        </FlexDiv>\r\n      </FlexColumnContRedBorderTopRounded>\r\n    </Cont500x200pxFixedNoMobile>\r\n  );\r\n};\r\n\r\nDeleteTaxWindow.defaultProps = {\r\n  onDeleteFunction: () => {},\r\n};\r\n\r\nexport default DeleteTaxWindow;\r\n","import React, { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont400x400px,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { LeagueSpartanExtraLargeWidth200px } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst EditCityWindow = ({ open, onClose, Name, onFormComplete, onPreview }) => {\r\n  const [storeNewCity, setStoreNewCity] = useState(\"\");\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <Cont400x400px>\r\n        <LeftItemWindowFixed>\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            City Name\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n          <TextInput72Percent\r\n            defaultValue={Name}\r\n            onChange={(e) => {\r\n              setStoreNewCity(e.target.value);\r\n            }}\r\n          ></TextInput72Percent>\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              onPreview({ storeNewCity });\r\n              onFormComplete(storeNewCity);\r\n              onClose();\r\n            }}\r\n          >\r\n            Update\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={onClose}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n        </LeftItemWindowFixed>\r\n      </Cont400x400px>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nEditCityWindow.defaultProps = {\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  Name: \"\",\r\n};\r\n\r\nexport default EditCityWindow;\r\n","import React, { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont400x500px,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { LeagueSpartanExtraLargeWidth200px } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst EditTaxWindow = ({\r\n  open,\r\n  onClose,\r\n  onChange,\r\n  onFormComplete,\r\n  onPreview,\r\n  Name,\r\n  Rate,\r\n}) => {\r\n  const [taxName, setTaxName] = useState(\"\");\r\n  const [taxPercent, setTaxPercent] = useState(0);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <Cont400x500px>\r\n        <LeftItemWindowFixed>\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            Tax Info\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n          <TextInput72Percent\r\n            placeholder=\"Tax Name\"\r\n            defaultValue={Name}\r\n            onChange={(e) => {\r\n              setTaxName(e.target.value);\r\n            }}\r\n          ></TextInput72Percent>\r\n\r\n          <TextInput72Percent\r\n            placeholder=\"Tax Rate\"\r\n            defaultValue={Rate}\r\n            onChange={(e) => {\r\n              setTaxPercent(e.target.value);\r\n            }}\r\n          ></TextInput72Percent>\r\n\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              onPreview({ taxName, taxPercent });\r\n              onFormComplete(taxName, taxPercent);\r\n              onClose();\r\n            }}\r\n          >\r\n            Update\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={onClose}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n        </LeftItemWindowFixed>\r\n      </Cont400x500px>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nEditTaxWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  Name: \"\",\r\n  Rate: 0,\r\n};\r\n\r\nexport default EditTaxWindow;\r\n","import { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont400x400px,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { LeagueSpartanExtraLargeWidth200px } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst NewCityWindow2 = ({ open, onClose, onFormComplete, onPreview }) => {\r\n  const [storeNewCity, setStoreNewCity] = useState(\"\");\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <Cont400x400px>\r\n        <LeftItemWindowFixed>\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            City Name\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n          <TextInput72Percent\r\n            onChange={(e) => {\r\n              setStoreNewCity(e.target.value);\r\n            }}\r\n          ></TextInput72Percent>\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              onPreview({ storeNewCity });\r\n              onFormComplete(storeNewCity);\r\n              onClose();\r\n            }}\r\n          >\r\n            Add\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={onClose}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n        </LeftItemWindowFixed>\r\n      </Cont400x400px>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nNewCityWindow2.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n};\r\n\r\nexport default NewCityWindow2;\r\n","import { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont400x500px,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { LeagueSpartanExtraLargeWidth200px } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst NewTaxWindow = ({\r\n  open,\r\n  onClose,\r\n  onChange,\r\n  onFormComplete,\r\n  onPreview,\r\n}) => {\r\n  const [taxName, setTaxName] = useState(\"\");\r\n  const [taxPercent, setTaxPercent] = useState(0);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <Cont400x500px>\r\n        <LeftItemWindowFixed left=\"50%\">\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            Tax Info\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n          <TextInput72Percent\r\n            placeholder=\"Tax Name\"\r\n            onChange={(e) => {\r\n              setTaxName(e.target.value);\r\n            }}\r\n          ></TextInput72Percent>\r\n\r\n          <TextInput72Percent\r\n            placeholder=\"Tax Rate\"\r\n            onChange={(e) => {\r\n              setTaxPercent(e.target.value);\r\n            }}\r\n          ></TextInput72Percent>\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              onPreview({ taxName, taxPercent });\r\n              onFormComplete(taxName, taxPercent);\r\n              onClose();\r\n            }}\r\n          >\r\n            Add\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={onClose}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n        </LeftItemWindowFixed>\r\n      </Cont400x500px>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nNewTaxWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n};\r\n\r\nexport default NewTaxWindow;\r\n","//Can't test admin so eslinting for now\r\n/* eslint-disable */\r\n\r\nimport axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport styled from \"styled-components\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport MetroCityCard from \"../../comps/MetroCityCard\";\r\nimport MetroStoreCard from \"../../comps/MetroStoreCard\";\r\nimport MetroTaxCard from \"../../comps/MetroTaxCard\";\r\nimport NewStoreWindow from \"../../comps/Windows/AddStore\";\r\nimport DeleteWindow from \"../../comps/Windows/Delete This\";\r\nimport DeleteCityWindow from \"../../comps/Windows/DeleteCity\";\r\nimport DeleteTaxWindow from \"../../comps/Windows/DeleteTax\";\r\nimport EditCityWindow from \"../../comps/Windows/EditCity\";\r\nimport EditStoreWindow from \"../../comps/Windows/EditStore\";\r\nimport EditTaxWindow from \"../../comps/Windows/EditTax\";\r\nimport NewCityWindow2 from \"../../comps/Windows/New City\";\r\nimport NewTaxWindow from \"../../comps/Windows/NewTax\";\r\n\r\nimport { GetStoreInfo } from \"../../API_Functions/Store_Functions\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexCont100vw100vh,\r\n  FlexDiv,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont80vwAutoHeight } from \"../../StylesheetComps/Cont\";\r\nimport { RightView_FlexFullWidth_Column } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { FlexDiv70x7Percent } from \"../../StylesheetComps/Div\";\r\nimport {\r\n  HundredPercentFlexDiv,\r\n  Icon30px20pxPointer,\r\n} from \"../../StylesheetComps/Quote\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ViewSplitCont = styled.div`\r\n  width: 26.5%;\r\n  display: flex;\r\n  flex-direction: column;\r\n`;\r\n\r\nconst MetroIDScreen = () => {\r\n  //=============================================================================\r\n  // Metro Screen - View a Single Metro and its Stores, Taxes, & Cities\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Accessable on by Admin\r\n  //=============================================================================\r\n\r\n  //AXIOS\r\n  const [storeObj, setStoreObj] = useState();\r\n\r\n  const [metroName, getMetroName] = useState([]);\r\n  const [metroStores, getMetroStoresList] = useState([]);\r\n  const [metroTax, getMetroTax] = useState([]);\r\n  const [metrocities, getMetroCities] = useState([]);\r\n  const [managerName1, setManagerName] = useState([]);\r\n\r\n  //OPEN STATES\r\n  const [isOpen, setIsOpen] = useState(false);\r\n  const [isTaxOpen, setIsTaxOpen] = useState(false);\r\n  const [isCityOpen, setIsCityOpen] = useState(false);\r\n  const [isEditOpen, setIsEditOpen] = useState(false);\r\n  const [isEditTaxOpen, setIsEditTaxOpen] = useState(false);\r\n  const [isEditCityOpen, setIsEditCityOpen] = useState(false);\r\n\r\n  const [delOpen, setDelOpen] = useState(false);\r\n  const [delTaxOpen, setDelTaxOpen] = useState(false);\r\n  const [delCityOpen, setDelCityOpen] = useState(false);\r\n\r\n  const [newCityName, setStoreNewCity] = useState(\"\");\r\n  const [newTaxName, setNewTaxName] = useState(\"\");\r\n  const [newTaxRate, setNewTaxRate] = useState(0);\r\n  const [newStoreName, setStoreName] = useState(\"\");\r\n  const [newStoreAddress, setStoreAddress] = useState(\"\");\r\n  const [newStorePhone, setStorePhone] = useState(\"\");\r\n\r\n  const [editTaxName, setEditTaxName] = useState(\"\");\r\n  const [editTaxRate, setEditTaxRate] = useState(0);\r\n\r\n  const [editCityName, setEditCityName] = useState(\"\");\r\n\r\n  const [storeDelId, setStoreId] = useState(0);\r\n  const [taxDelId, setTaxId] = useState(0);\r\n  const [cityDelId, setCityId] = useState(0);\r\n  var [EditStoreId, setEditStoreID] = useState(0);\r\n\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  const GetMetro = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"utilities/metros/\" + params.Id\r\n    );\r\n    if (resp.status == 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.metro !== null) {\r\n          setMetroInfo(resp.data.metro);\r\n          getMetroName(resp.data.metro.Name);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetMetroStores = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"store/metro/\" + params.Id);\r\n    if (resp.status == 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.stores !== null) {\r\n          getMetroStoresList(resp.data.stores);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetMetroTaxes = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"tax/metro/\" + params.Id);\r\n    if (resp.status == 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.tax !== null) {\r\n          getMetroTax(resp.data.tax);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetMetroCities = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"utilities/city/metro/\" + params.Id\r\n    );\r\n    if (resp.status === 200) {\r\n      if (resp.data != null) {\r\n        if (resp.data.cities != null) {\r\n          if (resp.data.cities.length > 0) {\r\n            getMetroCities(resp.data.cities);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetStaff = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"admin/manager/metro/\" + params.Id\r\n    );\r\n    // setManagerName(resp.data)\r\n  };\r\n\r\n  const DeleteStore = async () => {\r\n    const resp = await axios.delete(window.$DBURL + \"store/\" + storeDelId);\r\n    if (resp.status == 200) {\r\n      GetMetroStores();\r\n    }\r\n  };\r\n\r\n  const DeleteTax = async () => {\r\n    const resp = await axios.delete(window.$DBURL + \"tax/\" + taxDelId);\r\n    if (resp.status == 200) {\r\n      GetMetroTaxes();\r\n    }\r\n  };\r\n\r\n  const DeleteCity = async () => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL + \"utilities/city/\" + cityDelId\r\n    );\r\n    if (resp.status == 200) {\r\n      GetMetroCities();\r\n    }\r\n  };\r\n\r\n  const HandleFormComplete = async ({\r\n    storeNewCity,\r\n    taxName,\r\n    taxPercent,\r\n    storeName,\r\n    storeAddress,\r\n    storePhone,\r\n    StoreID,\r\n  }) => {\r\n    setStoreNewCity(storeNewCity);\r\n    setNewTaxName(taxName);\r\n    setNewTaxRate(taxPercent);\r\n    setStoreName(storeName);\r\n    setStoreAddress(storeAddress);\r\n    setStorePhone(storePhone);\r\n    setEditStoreID(StoreID);\r\n  };\r\n\r\n  const HandleNewCity = async (newCity) => {\r\n    var resp = await axios.post(window.$DBURL + \"utilities/city\", {\r\n      Name: newCity,\r\n      Metro_Id: params.Id,\r\n    });\r\n    if (resp.status == 200) {\r\n      GetMetroCities();\r\n    }\r\n  };\r\n\r\n  const HandleEditCity = async (newCity) => {\r\n    var resp = await axios.put(window.$DBURL + \"utilities/city\", {\r\n      Id: cityDelId,\r\n      Name: newCity || editCityName,\r\n      Metro_Id: params.Id,\r\n    });\r\n    if (resp.status == 200) {\r\n      GetMetroCities();\r\n    }\r\n  };\r\n\r\n  const HandleNewTax = async (newTaxName, newTaxRate) => {\r\n    var resp = await axios.post(window.$DBURL + \"tax\", {\r\n      TaxCode: newTaxName,\r\n      Rate: newTaxRate,\r\n      Metro_Id: params.Id,\r\n    });\r\n    if (resp.status == 200) {\r\n      GetMetroTaxes();\r\n    }\r\n  };\r\n\r\n  const HandleEditTax = async (newTaxName, newTaxRate) => {\r\n    var resp = await axios.put(window.$DBURL + \"tax\", {\r\n      Id: taxDelId,\r\n      TaxCode: newTaxName || editTaxName,\r\n      Rate: newTaxRate || editTaxRate,\r\n    });\r\n    if (resp.status == 200) {\r\n      GetMetroTaxes();\r\n    }\r\n  };\r\n\r\n  const GetStoreInformation = async (store_id) => {\r\n    var data = await GetStoreInfo(store_id);\r\n    if (data !== null) {\r\n      setStoreObj(data);\r\n      setIsEditOpen(true);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetMetro();\r\n    GetMetroStores();\r\n    GetMetroTaxes();\r\n    GetMetroCities();\r\n    GetStaff();\r\n  }, []);\r\n\r\n  const [metroInfo, setMetroInfo] = useState([]);\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <RightView_FlexFullWidth_Column>\r\n          <HundredPercentFlexDiv>\r\n            <Icon30px20pxPointer\r\n              src=\"/backarrow.svg\"\r\n              onClick={() => {\r\n                history.push(\"/metrolist\");\r\n              }}\r\n            ></Icon30px20pxPointer>\r\n            <LeagueSpartanExtraLargeBold>\r\n              {metroName}\r\n            </LeagueSpartanExtraLargeBold>\r\n          </HundredPercentFlexDiv>\r\n          <FlexDiv>\r\n            <ViewSplitCont>\r\n              <FlexDiv70x7Percent>\r\n                <LeagueSpartanExtraLargeBold>\r\n                  Stores\r\n                </LeagueSpartanExtraLargeBold>\r\n                <RegularResponsiveButton onClick={() => setIsOpen(true)}>\r\n                  Add Store\r\n                </RegularResponsiveButton>\r\n              </FlexDiv70x7Percent>\r\n              <EditStoreWindow\r\n                storeobj={storeObj}\r\n                StoreID={storeDelId}\r\n                open={isEditOpen}\r\n                onClose={() => {\r\n                  setIsEditOpen(false);\r\n                }}\r\n                StoreId={storeDelId}\r\n              ></EditStoreWindow>\r\n              <NewStoreWindow\r\n                open={isOpen}\r\n                onClose={() => setIsOpen(false)}\r\n                onChange={() => {\r\n                  GetMetroStores();\r\n                }}\r\n              ></NewStoreWindow>\r\n              {metroStores.map((o, i) => (\r\n                <MetroStoreCard\r\n                  key={i}\r\n                  StoreID={o.Id}\r\n                  ManagerName={managerName1}\r\n                  StoreLocationName={o.Address}\r\n                  StoreName={o.Name}\r\n                  onDeleteStore={() => {\r\n                    setDelOpen(true);\r\n                    setStoreId(o.Id);\r\n                  }}\r\n                  EditStore={() => {\r\n                    GetStoreInformation(o.Id);\r\n                  }}\r\n                ></MetroStoreCard>\r\n              ))}\r\n            </ViewSplitCont>\r\n            <ViewSplitCont>\r\n              <DeleteWindow\r\n                deleteOpen={delOpen}\r\n                closeDel={() => setDelOpen(false)}\r\n                onDeleteFunction={DeleteStore}\r\n              ></DeleteWindow>\r\n              <DeleteTaxWindow\r\n                deleteOpen={delTaxOpen}\r\n                closeDel={() => setDelTaxOpen(false)}\r\n                onDeleteFunction={DeleteTax}\r\n              ></DeleteTaxWindow>\r\n              <DeleteCityWindow\r\n                deleteOpen={delCityOpen}\r\n                closeDel={() => setDelCityOpen(false)}\r\n                onDeleteFunction={DeleteCity}\r\n              ></DeleteCityWindow>\r\n\r\n              <FlexDiv70x7Percent>\r\n                <LeagueSpartanExtraLargeBold>Taxes</LeagueSpartanExtraLargeBold>\r\n                <RegularResponsiveButton onClick={() => setIsTaxOpen(true)}>\r\n                  Add Taxes\r\n                </RegularResponsiveButton>\r\n              </FlexDiv70x7Percent>\r\n              <NewTaxWindow\r\n                open={isTaxOpen}\r\n                onClose={() => setIsTaxOpen(false)}\r\n                onFormComplete={HandleNewTax}\r\n                onPreview={HandleFormComplete}\r\n              ></NewTaxWindow>\r\n              <EditTaxWindow\r\n                Name={editTaxName}\r\n                Rate={editTaxRate}\r\n                open={isEditTaxOpen}\r\n                onClose={() => setIsEditTaxOpen(false)}\r\n                onFormComplete={HandleEditTax}\r\n                onPreview={HandleFormComplete}\r\n              ></EditTaxWindow>\r\n              {metroTax.map((o, i) => (\r\n                <MetroTaxCard\r\n                  key={i}\r\n                  TaxID={o.Id}\r\n                  TaxNameText={o.TaxCode}\r\n                  TaxRateText={o.Rate + \"%\"}\r\n                  onClick={() => {\r\n                    setDelTaxOpen(true);\r\n                    setTaxId(o.Id);\r\n                  }}\r\n                  EditTax={() => {\r\n                    setEditTaxName(o.TaxCode);\r\n                    setEditTaxRate(o.Rate);\r\n                    setIsEditTaxOpen(true);\r\n                    setTaxId(o.Id);\r\n                  }}\r\n                ></MetroTaxCard>\r\n              ))}\r\n            </ViewSplitCont>\r\n            <ViewSplitCont>\r\n              <DeleteTaxWindow></DeleteTaxWindow>\r\n              <FlexDiv70x7Percent>\r\n                <LeagueSpartanExtraLargeBold>\r\n                  Cities\r\n                </LeagueSpartanExtraLargeBold>\r\n                <RegularResponsiveButton onClick={() => setIsCityOpen(true)}>\r\n                  Add City\r\n                </RegularResponsiveButton>\r\n              </FlexDiv70x7Percent>\r\n              <NewCityWindow2\r\n                open={isCityOpen}\r\n                onClose={() => setIsCityOpen(false)}\r\n                onFormComplete={HandleNewCity}\r\n                onPreview={HandleFormComplete}\r\n              ></NewCityWindow2>\r\n              <EditCityWindow\r\n                Name={editCityName}\r\n                open={isEditCityOpen}\r\n                onClose={() => setIsEditCityOpen(false)}\r\n                onFormComplete={HandleEditCity}\r\n                onPreview={HandleFormComplete}\r\n              ></EditCityWindow>\r\n              {metrocities.map((o, i) => (\r\n                <MetroCityCard\r\n                  key={i}\r\n                  CityNameText={o.Name}\r\n                  CityID={o.Id}\r\n                  onClick={() => {\r\n                    setDelCityOpen(true);\r\n                    setCityId(o.Id);\r\n                  }}\r\n                  EditCity={() => {\r\n                    setEditCityName(o.Name);\r\n                    setIsEditCityOpen(true);\r\n                    setCityId(o.Id);\r\n                  }}\r\n                ></MetroCityCard>\r\n              ))}\r\n            </ViewSplitCont>\r\n          </FlexDiv>\r\n        </RightView_FlexFullWidth_Column>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nMetroIDScreen.defaultProps = {};\r\n\r\nexport default MetroIDScreen;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport {\r\n  DivWithDisplay,\r\n  DivWithMarginPadding,\r\n  FlexDiv,\r\n  FlexRowContFullWidth\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Icon20x20, Icon30x30 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { RegularText, SmallTitleBold } from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { FlexDivSpaceBetween } from \"../../StylesheetComps/Div\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\nconst CategoryCard = ({ CatHeadText, EditCat, DelCat, catId, onView, selectedCategory }) => {\r\n  const history = useHistory();\r\n  const [roleNum, setRoleNum] = useState(UserRole.Loading);\r\n  const [storeId, setStoreId] = useState(0);\r\n  const [bgColor, setBgColor] = useState('');\r\n\r\n  const GetSessionInfo = async () => {\r\n    try {\r\n      const userInfoString = sessionStorage.getItem(\"userInfo\");\r\n      \r\n      // Check if userInfoString is not null or undefined\r\n      if (!userInfoString) {\r\n        console.error(\"No user info found in session storage.\");\r\n        return; // Early return to stop the function execution\r\n      }\r\n  \r\n      const userInfo = JSON.parse(userInfoString);\r\n  \r\n      // Additional checks to ensure the data structure includes the expected properties\r\n      if (userInfo.Role && userInfo.Store_Id) {\r\n        setRoleNum(userInfo.Role);\r\n        setStoreId(userInfo.Store_Id);\r\n      } else {\r\n        console.error(\"Invalid user info structure.\", userInfo);\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error parsing user info from session storage:\", error);\r\n    }\r\n  };  \r\n\r\n  const [selectedIndex, setSelectedIndex] = useState(null);\r\n  \r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []);\r\n\r\n  if (roleNum === UserRole.Admin || roleNum === UserRole.Manager) {\r\n    return (\r\n      <FlexRowContFullWidth onClick={()=>{\r\n        if(selectedCategory === catId){\r\n          selectedCategory(0)\r\n          setSelectedIndex(0)\r\n        } else {\r\n          selectedCategory(catId)\r\n          setSelectedIndex(catId)\r\n        }\r\n      }} \r\n      // bgcolor={selectedIndex === catId ? ColorPalette.LightGrey : 'white'}\r\n      hovermargin='5px' hoverbgcolor={ColorPalette.LightGrey}>\r\n      <FlexDivSpaceBetween width='90%'>\r\n      <FlexDiv width='30vw'>\r\n        <Icon20x20 src='/Inventory.svg' />\r\n        <RegularText onClick={() => {\r\n              history.push(`/productlist/${storeId}/${catId}/0`);\r\n              onView();\r\n            }}>\r\n        {CatHeadText}\r\n        </RegularText>\r\n        </FlexDiv>\r\n        <FlexDiv>\r\n        <Icon30x30 src={\"/EditIcon.svg\"} onClick={EditCat}></Icon30x30>\r\n        <Icon30x30 src={\"/Garbage_Icon.svg\"}\r\n         onClick={DelCat}\r\n         ></Icon30x30>\r\n        </FlexDiv>\r\n        </FlexDivSpaceBetween>\r\n        <hr></hr>\r\n      </FlexRowContFullWidth>\r\n      // <DivWithMarginPadding height=\"85px\" width=\"120px\">\r\n      //   <DivWithDisplay width=\"120px\">\r\n      //     <SmallTitleBold\r\n      //       onClick={() => {\r\n      //         history.push(`/productlist/${storeId}/${catId}`);\r\n      //         onView();\r\n      //       }}\r\n      //     >\r\n      //       {CatHeadText}\r\n      //     </SmallTitleBold> \r\n      //     <DivWithDisplay>\r\n      //       <DivWithDisplay flexdirection=\"row\" width=\"120px\">\r\n      //         <DivWithDisplay>\r\n      //           <Icon30x30 src={\"/EditIcon.svg\"} onClick={EditCat}></Icon30x30>\r\n      //         </DivWithDisplay>\r\n      //         <DivWithDisplay>\r\n      //         <Icon30x30 src={\"/Garbage_Icon.svg\"} onClick={DelCat}></Icon30x30>\r\n      //         </DivWithDisplay>\r\n      //       </DivWithDisplay>\r\n      //     </DivWithDisplay>\r\n      //   </DivWithDisplay>\r\n      //   <DivWithDisplay></DivWithDisplay>\r\n      // </DivWithMarginPadding>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nCategoryCard.defaultProps = {\r\n  onView: () => {},\r\n  selectedCategory: () => {},\r\n  CatHeadText: \"Fencing\",\r\n  catId: 0,\r\n};\r\n\r\nexport default CategoryCard;\r\n","export default __webpack_public_path__ + \"static/media/RelatedProduct.0457f85a.svg\";","export default __webpack_public_path__ + \"static/media/RelatedTool.51ef08de.svg\";","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { useEffect, useState } from \"react\";\r\nimport RelatedProduct from \"../../RelatedProduct.svg\";\r\nimport RelatedTool from \"../../RelatedTool.svg\";\r\nimport {\r\n  Cont180pxAutoHeight,\r\n  DivWithDisplay,\r\n  DivWithMarginPadding,\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont100x8PercentSpaceAround,\r\n  FlexRowCont60PercentSpaceEvenly,\r\n  FlexRowContFullWidth,\r\n  GridDiv,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  RegularText,\r\n  TitleFontSize100PercentPointer,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { FlexDivSpaceBetween } from \"../../StylesheetComps/Div\";\r\nimport { Icon20x20, Icon30x30 } from \"../../StylesheetComps/Imgs/Icons\";\r\n\r\nconst ProductCard = ({\r\n  ProdHeadText,\r\n  ProdPrice,\r\n  ProdUrl,\r\n  onView,\r\n  relProduct,\r\n  relTool,\r\n  relAddOn,\r\n  onSelect,\r\n}) => {\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []);\r\n\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const GetSessionInfo = async () => {\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n  };\r\n\r\n    return (\r\n      <FlexRowContFullWidth onClick={()=>{onSelect()}} hovermargin='5px' hoverbgcolor={ColorPalette.LightGrey}>\r\n      <FlexDivSpaceBetween width='58%'>\r\n      <FlexDiv justifycontent='space-between' width='40vw'>\r\n        <FlexDiv width='100%'>\r\n        <Icon20x20 src='/Inventory.svg' />\r\n        <RegularText onClick={() => {\r\n              onView();\r\n            }}>\r\n           {ProdHeadText}\r\n        </RegularText>\r\n        </FlexDiv>\r\n        <FlexDiv width='20%'>\r\n        <RegularText >\r\n           {\" $\" + ProdPrice.toFixed(2)}\r\n        </RegularText>\r\n        </FlexDiv>\r\n        </FlexDiv>\r\n        <FlexDiv>\r\n        <Icon30px30pxPointer\r\n              src={RelatedProduct}\r\n              onClick={relProduct}\r\n            ></Icon30px30pxPointer>\r\n         <Icon30px30pxPointer\r\n              src={RelatedTool}\r\n              onClick={relTool}\r\n            ></Icon30px30pxPointer>\r\n              <Icon30px30pxPointer\r\n              src={\"/AddOn_Icon.svg\"}\r\n              onClick={relAddOn}\r\n            ></Icon30px30pxPointer>\r\n        </FlexDiv>\r\n        </FlexDivSpaceBetween>\r\n      </FlexRowContFullWidth>\r\n    );\r\n  \r\n};\r\n\r\nProductCard.defaultProps = {\r\n  ProdHeadText: \"Default Product Name\",\r\n  ProdParaText: \"This item is great and makes your yard look much nicer\",\r\n  ProdButtonText: \"Edit Suppliers\",\r\n  ProdId: 0,\r\n  ProdUrl: \"\",\r\n  ProdSuppliers: \"Supplier Name\",\r\n  ProductSupplierArray: [\"Default Name\"],\r\n  ProdPrice: 0,\r\n};\r\n\r\nexport default ProductCard;\r\n","import axios from \"axios\";\r\nimport React, { useState } from \"react\";\r\nimport { UploadFileToCloud } from \"../../../API_Functions/Utility_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  ContMargin20px,\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FlexCenterDiv100PercentSpaceBetween } from \"../../../StylesheetComps/Div\";\r\nimport { Icon30x30 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { Image200x200pxContain } from \"../../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  TextAreaRegular,\r\n  TextInputRegular,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Icon30px20pxPointer } from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanExtraLargeWidth200px,\r\n  RegularText,\r\n  RegularTextBoldRed,\r\n  TinyTextItalics,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst CategoryAdd = ({\r\n  open,\r\n  onClose,\r\n  onCategoryAdd,\r\n  CatPosProp,\r\n  parentId,\r\n}) => {\r\n  const [errorText] = useState(\"\");\r\n  const [photoDisplay, setPhotoDisplay] = useState(\"none\");\r\n  const hiddenFileInput = React.useRef(null);\r\n  const [CombineInstructionDisplay, setCombineInstructionDisplay] =\r\n    useState(\"none\");\r\n\r\n  const handleClick = (event) => {\r\n    hiddenFileInput.current.click();\r\n  };\r\n\r\n  // Handles file upload event and updates state\r\n  function handleUpload(event) {\r\n    var file = event.target.files[0];\r\n    UploadFile(file);\r\n  }\r\n\r\n  const UploadFile = async (file) => {\r\n    var pic = await UploadFileToCloud(file);\r\n    if (pic !== null) {\r\n      categoryObj.current.ImageUrl = pic;\r\n      setPhotoDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const DeleteImg = async (img) => {\r\n    var respimg = await axios.delete(window.$DBURL + \"utilities/image\", {\r\n      data: { Url: img },\r\n    });\r\n    if (respimg.status === 200) {\r\n      categoryObj.current.ImageUrl = \"-\";\r\n      setPhotoDisplay(\"none\");\r\n    }\r\n  };\r\n\r\n  var cate = {\r\n    CateType: 0,\r\n    Description: \"\",\r\n    Name: \"\",\r\n    ImageUrl: \"\",\r\n    Position: CatPosProp,\r\n    Parent_Id: parentId,\r\n    Combine: false,\r\n    CombineName: \"\",\r\n  };\r\n\r\n  let categoryObj = React.useRef(cate);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      {\" \"}\r\n      <ContMargin20px>\r\n        <LeftItemWindowFixed>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              Category Name\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInputRegular\r\n              placeholder=\"Category Name\"\r\n              onChange={(e) => {\r\n                categoryObj.current.Name = e.target.value;\r\n              }}\r\n            ></TextInputRegular>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              Position\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInputRegular\r\n              placeholder=\"Position\"\r\n              defaultValue={CatPosProp}\r\n              onChange={(e) => {\r\n                categoryObj.current.Position = e.target.value;\r\n              }}\r\n            ></TextInputRegular>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <FlexRowCont100PercentSpaceBetween>\r\n              <RegularText>\r\n                <input\r\n                  type=\"radio\"\r\n                  value={0}\r\n                  name={\"categoryid\"}\r\n                  onChange={(e) => {\r\n                    categoryObj.current.CateType = e.target.value;\r\n                  }}\r\n                ></input>\r\n                Material\r\n              </RegularText>\r\n\r\n              <RegularText>\r\n                <input\r\n                  type=\"radio\"\r\n                  value={1}\r\n                  name={\"categoryid\"}\r\n                  onChange={(e) => {\r\n                    categoryObj.current.CateType = e.target.value;\r\n                  }}\r\n                ></input>\r\n                Add-On\r\n              </RegularText>\r\n\r\n              <RegularText>\r\n                <input\r\n                  type=\"radio\"\r\n                  value={2}\r\n                  name={\"categoryid\"}\r\n                  onChange={(e) => {\r\n                    categoryObj.current.CateType = e.target.value;\r\n                  }}\r\n                ></input>\r\n                Labor\r\n              </RegularText>\r\n            </FlexRowCont100PercentSpaceBetween>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <FlexRowCont100PercentSpaceBetween>\r\n              <RegularText>\r\n                <input\r\n                  type=\"radio\"\r\n                  value={3}\r\n                  name={\"categoryid\"}\r\n                  onChange={(e) => {\r\n                    categoryObj.current.CateType = e.target.value;\r\n                  }}\r\n                ></input>\r\n                Access\r\n              </RegularText>\r\n\r\n              <RegularText>\r\n                <input\r\n                  type=\"radio\"\r\n                  value={4}\r\n                  name={\"categoryid\"}\r\n                  onChange={(e) => {\r\n                    categoryObj.current.CateType = e.target.value;\r\n                  }}\r\n                ></input>\r\n                Removal\r\n              </RegularText>\r\n\r\n              <RegularText>\r\n                <input\r\n                  type=\"radio\"\r\n                  value={5}\r\n                  name={\"categoryid\"}\r\n                  onChange={(e) => {\r\n                    categoryObj.current.CateType = e.target.value;\r\n                  }}\r\n                ></input>\r\n                Open\r\n              </RegularText>\r\n            </FlexRowCont100PercentSpaceBetween>\r\n          </FlexDiv>\r\n\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              Category Description\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextAreaRegular\r\n              maxlength=\"200\"\r\n              onChange={(e) => {\r\n                categoryObj.current.Description = e.target.value;\r\n              }}\r\n            ></TextAreaRegular>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              Combine\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <Icon30px20pxPointer\r\n              src=\"/questionmark.svg\"\r\n              onClick={() => {\r\n                if (CombineInstructionDisplay === \"none\") {\r\n                  setCombineInstructionDisplay(\"block\");\r\n                } else {\r\n                  setCombineInstructionDisplay(\"none\");\r\n                }\r\n              }}\r\n            ></Icon30px20pxPointer>\r\n\r\n            <FlexDiv>\r\n              <RegularText>\r\n                <input\r\n                  type=\"radio\"\r\n                  defaultChecked={false}\r\n                  value={true}\r\n                  name={\"combine\"}\r\n                  onChange={(e) => {\r\n                    categoryObj.current.Combine = e.target.value;\r\n                  }}\r\n                ></input>\r\n                Yes\r\n              </RegularText>\r\n\r\n              <RegularText>\r\n                <input\r\n                  type=\"radio\"\r\n                  defaultChecked={true}\r\n                  value={false}\r\n                  name={\"combine\"}\r\n                  onChange={(e) => {\r\n                    categoryObj.current.Combine = e.target.value;\r\n                  }}\r\n                ></input>\r\n                No\r\n              </RegularText>\r\n            </FlexDiv>\r\n          </FlexDiv>\r\n          <TinyTextItalics maxwidth=\"500px\" display={CombineInstructionDisplay}>\r\n            (If Combine is set to yes, then the labor cost related to products\r\n            of this category will be combined under the name of install\r\n            CombineName when displayed in quote. Don't set Minimum and RoundUp\r\n            for products and their related labor items when Combine is set Yes\r\n            for the category.)\r\n          </TinyTextItalics>\r\n          <br></br>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              CombineName\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInputRegular\r\n              placeholder=\"CombineName\"\r\n              maxlength=\"100\"\r\n              onChange={(e) => {\r\n                categoryObj.current.CombineName = e.target.value;\r\n              }}\r\n            ></TextInputRegular>\r\n          </FlexDiv>\r\n          <br></br>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              Category Picture\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <RegularResponsiveButton\r\n              for=\"catpic\"\r\n              class=\"btn\"\r\n              onClick={handleClick}\r\n            >\r\n              Load Image\r\n            </RegularResponsiveButton>\r\n          </FlexDiv>\r\n          <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n          <FlexDiv>\r\n            <Image200x200pxContain\r\n              display={photoDisplay}\r\n              src={window.$IMGURL + categoryObj.current.ImageUrl}\r\n            ></Image200x200pxContain>\r\n            <Icon30x30\r\n              display={photoDisplay}\r\n              src=\"/Garbage_Icon.svg\"\r\n              onClick={() => {\r\n                DeleteImg(categoryObj.current.ImageUrl);\r\n              }}\r\n            ></Icon30x30>\r\n          </FlexDiv>\r\n          <FlexColumnCont100xAutoPercent></FlexColumnCont100xAutoPercent>\r\n          <TextInputRegular\r\n            inputdisplay=\"none\"\r\n            type=\"file\"\r\n            id=\"catpic\"\r\n            ref={hiddenFileInput}\r\n            name=\"filename\"\r\n            onChange={handleUpload}\r\n          ></TextInputRegular>\r\n          <FlexCenterDiv100PercentSpaceBetween>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                onClose();\r\n                setPhotoDisplay(\"none\");\r\n                categoryObj.current = {\r\n                  CateType: 0,\r\n                  Description: \"\",\r\n                  Name: \"\",\r\n                  ImageUrl: \"\",\r\n                  Position: CatPosProp,\r\n                  Parent_Id: parentId,\r\n                  Combine: false,\r\n                  CombineName: \"\",\r\n                };\r\n              }}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                onCategoryAdd(categoryObj.current);\r\n                setPhotoDisplay(\"none\");\r\n                onClose();\r\n                categoryObj.current = {\r\n                  CateType: 0,\r\n                  Description: \"\",\r\n                  Name: \"\",\r\n                  ImageUrl: \"\",\r\n                  Position: CatPosProp,\r\n                  Parent_Id: parentId,\r\n                  Combine: false,\r\n                  CombineName: \"\",\r\n                };\r\n              }}\r\n            >\r\n              Save\r\n            </RegularResponsiveButton>\r\n          </FlexCenterDiv100PercentSpaceBetween>\r\n        </LeftItemWindowFixed>\r\n      </ContMargin20px>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nCategoryAdd.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onCategoryAdd: () => {},\r\n  onSetFile: () => {},\r\n  onReleaseFile: () => {},\r\n  CatPosProp: 0,\r\n  parentId: 0,\r\n};\r\n\r\nexport default CategoryAdd;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { UploadFileToCloud } from \"../../../API_Functions/Utility_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  BlankDiv,\r\n  FlexCenterDiv100PercentSpaceBetween,\r\n} from \"../../../StylesheetComps/Div\";\r\nimport { Icon30x30 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { Image200x200pxContain } from \"../../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  TextAreaRegular,\r\n  TextInput72Percent,\r\n  TextInputRegular,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  LeagueSpartanRegular,\r\n  RegularText,\r\n  RegularTextBoldRed,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst CategoryEdit = ({\r\n  open,\r\n  onClose,\r\n  onPreview,\r\n  category,\r\n  callCategoryAgain,\r\n}) => {\r\n  var categoryObj = category;\r\n\r\n  var CateTypeReference = {\r\n    Material: 0,\r\n    AddOn: 1,\r\n    Labor: 2,\r\n    Access: 3,\r\n    Removal: 4,\r\n    Open: 5,\r\n  };\r\n\r\n  // catDefaultUrl is the URL/IMG that is displayed on the Front End of the Page. It uses the prop 'category.ImageUrl' to set its value. By default, category.ImageUrl is the Current Img URL\r\n  var [catDefaultUrl, setCatDefaultUrl] = useState(\"\");\r\n\r\n  const [photoDisplay, setPhotoDisplay] = useState(\"block\");\r\n  const [errorText] = useState(\"\");\r\n\r\n  var type1 = false;\r\n  var type2 = false;\r\n  var type3 = false;\r\n  var type4 = false;\r\n  var type5 = false;\r\n  var type6 = false;\r\n\r\n  //DOCUMENTATION OF MATERIAL TYPE\r\n  if (category !== undefined && category !== null) {\r\n    switch (category.CateType) {\r\n      case CateTypeReference.Material:\r\n        type1 = true;\r\n        break;\r\n      case CateTypeReference.AddOn:\r\n        type2 = true;\r\n        break;\r\n      case CateTypeReference.Labor:\r\n        type3 = true;\r\n        break;\r\n      case CateTypeReference.Access:\r\n        type4 = true;\r\n        break;\r\n      case CateTypeReference.Removal:\r\n        type5 = true;\r\n        break;\r\n      case CateTypeReference.Open:\r\n        type6 = true;\r\n        break;\r\n      default:\r\n        type1 = true;\r\n        break;\r\n    }\r\n  }\r\n\r\n  // Handles file upload event and updates state\r\n\r\n  function handleUpload(event) {\r\n    var file = event.target.files[0];\r\n    UploadFile(file);\r\n  }\r\n\r\n  const UploadFile = async (file) => {\r\n    var pic = await UploadFileToCloud(file);\r\n    if (pic !== null) {\r\n      setCatDefaultUrl(pic);\r\n      categoryObj.ImageUrl = pic;\r\n      setPhotoDisplay(\"block\");\r\n      UpdateCategory(categoryObj);\r\n    }\r\n  };\r\n\r\n  //When the Component loads, set the URL of the Img Comp as the URL of the Category\r\n\r\n  useEffect(() => {\r\n    if (category !== undefined) {\r\n      setCatDefaultUrl(category.ImageUrl);\r\n    }\r\n  }, [category]);\r\n\r\n  //When the Delete Button is clicked, pass the img prop to the backend, if the status is 200, clear the URL for both the value and src.\r\n\r\n  const DeleteImg = async (img) => {\r\n    var resp = await axios.delete(window.$DBURL + \"utilities/image\", {\r\n      data: { Url: img },\r\n    });\r\n    if (resp.status === 200) {\r\n      categoryObj.ImageUrl = \"-\";\r\n      setCatDefaultUrl(\"-\");\r\n      UpdateCategory(categoryObj);\r\n    }\r\n  };\r\n\r\n  const UpdateCategory = async (cate) => {\r\n    var resp = await axios.put(window.$DBURL + \"catalog\", {\r\n      CateType: cate.CateType,\r\n      Description: cate.Description,\r\n      Name: cate.Name,\r\n      Id: cate.Id,\r\n      ImageUrl: cate.ImageUrl,\r\n      Position: cate.Position,\r\n      Parent_Id: cate.Parent_Id,\r\n      Combine: cate.Combine,\r\n      CombineName: cate.CombineName,\r\n    });\r\n    if (resp.status === 200) {\r\n      callCategoryAgain();\r\n    }\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <LeftItemWindowFixed width=\"30vw\">\r\n        <FlexDiv>\r\n          <LeagueSpartanRegular>Category Name</LeagueSpartanRegular>\r\n          <TextInputRegular\r\n            placeholder=\"Category Name\"\r\n            defaultValue={category.Name}\r\n            onChange={(e) => {\r\n              categoryObj.Name = e.target.value;\r\n            }}\r\n          ></TextInputRegular>\r\n        </FlexDiv>\r\n        <hr></hr>\r\n        <FlexDiv>\r\n          <LeagueSpartanRegular>Position</LeagueSpartanRegular>\r\n          <TextInputRegular\r\n            placeholder=\"Position\"\r\n            defaultValue={category.Position}\r\n            onChange={(e) => {\r\n              categoryObj.Position = e.target.value;\r\n            }}\r\n          ></TextInputRegular>\r\n        </FlexDiv>\r\n        <hr></hr>\r\n        <LeagueSpartanRegular>Category Type</LeagueSpartanRegular>\r\n        <FlexRowCont100PercentSpaceBetween>\r\n          <RegularText>\r\n            <input\r\n              defaultChecked={type1}\r\n              type=\"radio\"\r\n              value={0}\r\n              name=\"categoryid\"\r\n              onChange={(e) => {\r\n                categoryObj.CateType = e.target.value;\r\n              }}\r\n            ></input>\r\n            Material\r\n          </RegularText>\r\n          <RegularText>\r\n            <input\r\n              defaultChecked={type2}\r\n              type=\"radio\"\r\n              value={1}\r\n              name=\"categoryid\"\r\n              onChange={(e) => {\r\n                categoryObj.CateType = e.target.value;\r\n              }}\r\n            ></input>\r\n            Add-On\r\n          </RegularText>\r\n          <RegularText>\r\n            <input\r\n              defaultChecked={type3}\r\n              type=\"radio\"\r\n              value={2}\r\n              name=\"categoryid\"\r\n              onChange={(e) => {\r\n                categoryObj.CateType = e.target.value;\r\n              }}\r\n            ></input>\r\n            Labor\r\n          </RegularText>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n        <FlexRowCont100PercentSpaceBetween>\r\n          <RegularText>\r\n            <input\r\n              defaultChecked={type4}\r\n              type=\"radio\"\r\n              value={3}\r\n              name=\"categoryid\"\r\n              onChange={(e) => {\r\n                categoryObj.CateType = e.target.value;\r\n              }}\r\n            ></input>\r\n            Access\r\n          </RegularText>\r\n          <RegularText>\r\n            <input\r\n              defaultChecked={type5}\r\n              type=\"radio\"\r\n              value={4}\r\n              name=\"categoryid\"\r\n              onChange={(e) => {\r\n                categoryObj.CateType = e.target.value;\r\n              }}\r\n            ></input>\r\n            Removal\r\n          </RegularText>\r\n          <RegularText>\r\n            <input\r\n              defaultChecked={type6}\r\n              type=\"radio\"\r\n              value={5}\r\n              name=\"categoryid\"\r\n              onChange={(e) => {\r\n                categoryObj.CateType = e.target.value;\r\n              }}\r\n            ></input>\r\n            Open\r\n          </RegularText>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n        <hr></hr>\r\n        <FlexDiv>\r\n          <LeagueSpartanRegular>Category Description</LeagueSpartanRegular>\r\n          <TextAreaRegular\r\n            maxlength=\"200\"\r\n            onChange={(e) => {\r\n              categoryObj.Description = e.target.value;\r\n            }}\r\n            defaultValue={category.Description}\r\n          ></TextAreaRegular>\r\n        </FlexDiv>\r\n        <hr></hr>\r\n        <FlexDiv>\r\n          <LeagueSpartanRegular>Combine</LeagueSpartanRegular>\r\n          <BlankDiv>\r\n            <FlexDiv>\r\n              <RegularText>\r\n                <input\r\n                  defaultChecked={category.Combine}\r\n                  type=\"radio\"\r\n                  value={true}\r\n                  name=\"combine\"\r\n                  onChange={(e) => {\r\n                    categoryObj.Combine = e.target.value;\r\n                  }}\r\n                ></input>\r\n                Yes\r\n              </RegularText>\r\n\r\n              <RegularText>\r\n                <input\r\n                  defaultChecked={!category.Combine}\r\n                  type=\"radio\"\r\n                  value={false}\r\n                  name=\"combine\"\r\n                  onChange={(e) => {\r\n                    categoryObj.Combine = e.target.value;\r\n                  }}\r\n                ></input>\r\n                No\r\n              </RegularText>\r\n            </FlexDiv>\r\n          </BlankDiv>\r\n        </FlexDiv>\r\n        <FlexDiv>\r\n          <LeagueSpartanRegular>Combine Name</LeagueSpartanRegular>\r\n          <TextAreaRegular\r\n            maxlength=\"100\"\r\n            onChange={(e) => {\r\n              categoryObj.CombineName = e.target.value;\r\n            }}\r\n            defaultValue={category.CombineName}\r\n          ></TextAreaRegular>\r\n        </FlexDiv>\r\n        <hr></hr>\r\n\r\n        <FlexDiv>\r\n          <LeagueSpartanRegular>Category Picture</LeagueSpartanRegular>\r\n          <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n          <FlexDiv>\r\n            <Image200x200pxContain\r\n              display={photoDisplay}\r\n              src={window.$IMGURL + catDefaultUrl}\r\n            ></Image200x200pxContain>\r\n            <Icon30x30\r\n              display={photoDisplay}\r\n              src=\"/Garbage_Icon.svg\"\r\n              onClick={() => {\r\n                DeleteImg(catDefaultUrl);\r\n                setCatDefaultUrl(\"\");\r\n                setPhotoDisplay(\"none\");\r\n              }}\r\n            ></Icon30x30>\r\n          </FlexDiv>\r\n        </FlexDiv>\r\n        <TextInput72Percent\r\n          type=\"file\"\r\n          id=\"catpic\"\r\n          name=\"filename\"\r\n          onChange={handleUpload}\r\n        ></TextInput72Percent>\r\n        <FlexCenterDiv100PercentSpaceBetween>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              onClose();\r\n              setPhotoDisplay(\"block\");\r\n            }}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              onPreview(categoryObj);\r\n              UpdateCategory(categoryObj);\r\n              onClose();\r\n              setPhotoDisplay(\"block\");\r\n            }}\r\n          >\r\n            Save\r\n          </RegularResponsiveButton>\r\n        </FlexCenterDiv100PercentSpaceBetween>\r\n      </LeftItemWindowFixed>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nCategoryEdit.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  callCategoryAgain: () => {},\r\n  onImgDelete: () => {},\r\n};\r\n\r\nexport default CategoryEdit;\r\n","import React from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont500x200pxFixedNoMobile,\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexContCenterAlign,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { ExtraLargeText } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst DeleteCatWindow = ({ deleteOpen, closeDel, onDeleteFunction }) => {\r\n  if (!deleteOpen) return null;\r\n  return (\r\n    <Cont500x200pxFixedNoMobile>\r\n      <FlexColumnContRedBorderTopRounded>\r\n        <ExtraLargeText>Are you sure you want to delete this?</ExtraLargeText>\r\n        <FlexContCenterAlign>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={closeDel}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              closeDel();\r\n              onDeleteFunction();\r\n            }}\r\n          >\r\n            Delete\r\n          </RegularResponsiveButton>\r\n        </FlexContCenterAlign>\r\n      </FlexColumnContRedBorderTopRounded>\r\n    </Cont500x200pxFixedNoMobile>\r\n  );\r\n};\r\n\r\nDeleteCatWindow.defaultProps = {\r\n  onDeleteFunction: () => {},\r\n};\r\n\r\nexport default DeleteCatWindow;\r\n","/* eslint-disable */\r\n\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  AddCategory,\r\n  DeleteCategory,\r\n  GetCategory,\r\n  GetStoreCategories,\r\n  GetStoreProducts,\r\n} from \"../../API_Functions/CatProduct_Functions\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport CategoryCard from \"../../comps/CategoryCard\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ProductCard from \"../../comps/ProductCard\";\r\nimport CategoryAdd from \"../../comps/Windows/CategoryAdd\";\r\nimport CategoryEdit from \"../../comps/Windows/CategoryEdit\";\r\nimport DeleteCatWindow from \"../../comps/Windows/DeleteCat\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  DivWithDisplay,\r\n  DivWithMarginPadding,\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n  GridDiv,\r\n  Grid_300Div,\r\n  LeftCont,\r\n  OverflowDiv,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexDiv70x7Percent,\r\n  GridContainer200pxWidth,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  SmallHeaderLeagueSpartan,\r\n  TextInput72Percent,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { StyledHRGreyBreak } from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport { InputField } from \"../../StylesheetComps/Inputs\";\r\n\r\nconst ProductCategoryScreen = () => {\r\n  //=============================================================================\r\n  // Product Category Screen - Manager can view / edit Product Categories\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Click on Category to view Products / Subcategories in this Category.\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [unfilteredProducts, setUnfilteredProducts] = useState([]);\r\n  const [productList, setProductList] = useState([]);\r\n  const [inputValue, setInputValue] = useState(\"\");\r\n\r\n  const [storeCategories, getStoreCategories] = useState([]);\r\n  const [isEditCatOpen, setisEditCatOpen] = useState(false);\r\n  const [isAddCatOpen, setisAddCatOpen] = useState(false);\r\n  const [catId, setCatId] = useState(0);\r\n  const [delCatOpen, setDelCatOpen] = useState(false);\r\n  const [maxPos, setMaxPos] = useState(0);\r\n  const [category, setCategory] = useState();\r\n\r\n  const GetStoreCategoriesFunc = async (category_id) => {\r\n    var data = await GetStoreCategories(category_id);\r\n    if (data != null) {\r\n      getStoreCategories(data.cate);\r\n      setMaxPos(\r\n        Math.max.apply(\r\n          Math,\r\n          data.cate.map(function (o) {\r\n            return o.Position;\r\n          })\r\n        )\r\n      );\r\n      setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n    }\r\n  };\r\n\r\n  const GetSingleCat = async (category_id) => {\r\n    var data = await GetCategory(category_id);\r\n    if (data !== null) {\r\n      setCategory(data);\r\n      setisEditCatOpen(true);\r\n    }\r\n  };\r\n\r\n  const FilterProducts = (productlist, text) => {\r\n    if (text === \"\") {\r\n      setProductList([]);\r\n    } else {\r\n      setProductList(\r\n        productlist.filter((o) => {\r\n          return o.Name.toLowerCase().includes(text.toLowerCase());\r\n        })\r\n      );\r\n    }\r\n  };\r\n\r\n  const setStoreProducts = async (storeid) => {\r\n    var data = await GetStoreProducts(storeid);\r\n    if (data != null) {\r\n      setUnfilteredProducts(data.products);\r\n    }\r\n  };\r\n\r\n  const DeleteCategoryFunc = async (category_id) => {\r\n    var data = await DeleteCategory(category_id);\r\n    if (data === null) {\r\n      GetStoreCategoriesFunc(params.Id);\r\n    }\r\n  };\r\n\r\n  const HandleNewCat = async (categoryobj) => {\r\n    categoryobj.Store_Id = params.Id;\r\n    categoryobj.Position = maxPos + 1;\r\n    var data = await AddCategory(categoryobj);\r\n    if (data !== null) {\r\n      GetStoreCategoriesFunc(params.Id);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    if (\r\n      JSON.parse(sessionStorage.getItem(\"userInfo\")).Role === UserRole.User ||\r\n      JSON.parse(sessionStorage.getItem(\"userInfo\")).Role === UserRole.VIP\r\n    ) {\r\n      // GetStoreCategoriesFuncUser();\r\n    } else {\r\n      GetStoreCategoriesFunc(params.Id);\r\n    }\r\n  }, [isEditCatOpen]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    setStoreProducts(params.Id);\r\n  }, []);\r\n\r\n  if (roleNum === UserRole.Admin || roleNum === UserRole.Manager) {\r\n    return (\r\n      <DivWithDisplay flexdirection=\"row\"  >\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n\r\n      <FlexColumnFullWidth height=\"100vh\">\r\n        <DivWithDisplay width=\"100%\">\r\n          <DivWithDisplay  >\r\n            <DivWithDisplay alignitems=\"left\" flexdirection='row'>\r\n                            <Icon30px30pxPointer\r\n                            margin=\"10px\"\r\n                src=\"/backarrow.svg\"\r\n                onClick={() => {\r\n                  history.push(\"/Store/\" + params.Id);\r\n                }}\r\n              ></Icon30px30pxPointer>\r\n              <SmallHeaderLeagueSpartan width=\"auto\">\r\n                Product Categories\r\n              </SmallHeaderLeagueSpartan>\r\n              <RegularResponsiveButton\r\n              margin='8px'\r\n                onClick={() => {\r\n                  setisAddCatOpen(true);\r\n                }}\r\n              >\r\n                {\" \"}\r\n                Add Category{\" \"}\r\n              </RegularResponsiveButton>\r\n            </DivWithDisplay>\r\n            <DivWithDisplay flexdirection=\"row\">\r\n             \r\n              <InputField\r\n                value={inputValue}\r\n                onChange={(e) => {\r\n                  setInputValue(e.target.value);\r\n                  FilterProducts(unfilteredProducts, e.target.value);\r\n                }}\r\n                inputwidth=\"70%\"\r\n                inputheight=\"25%\"\r\n                inputborderadius=\"10px\"\r\n                placeholder=\"Type in product name to search \"\r\n              ></InputField>\r\n            </DivWithDisplay>\r\n            <StyledHRGreyBreak></StyledHRGreyBreak>\r\n\r\n            <CategoryAdd\r\n              open={isAddCatOpen}\r\n              CatPosProp={maxPos}\r\n              parentId={0}\r\n              onClose={() => {\r\n                setisAddCatOpen(false);\r\n              }}\r\n              onCategoryAdd={HandleNewCat}\r\n            ></CategoryAdd>\r\n            <CategoryEdit\r\n              category={category}\r\n              open={isEditCatOpen}\r\n              onClose={() => {\r\n                setisEditCatOpen(false);\r\n                GetStoreCategoriesFunc(params.Id);\r\n              }}\r\n            ></CategoryEdit>\r\n            <DivWithDisplay flexdirection=\"column\" overflowy=\"auto\">\r\n              {/* <Grid_300Div> */}\r\n                {productList.map((o, i) => (\r\n                  \r\n                    <ProductCard\r\n                      key={i}\r\n                      ProdUrl={o.ImageUrl}\r\n                      ProdId={o.Id}\r\n                      ProdHeadText={o.Name}\r\n                      ProdSuppliers={o.Supplier}\r\n                      ProdPrice={o.UnitPrice}\r\n                      relProduct={() => {\r\n                        history.push(\r\n                          \"/productlist/\" + params.Id + \"/\" + o.Category_Id+\"/0\"\r\n                        );\r\n                      }}\r\n                      relTool={() => {\r\n                        history.push(\r\n                          \"/productlist/\" + params.Id + \"/\" + o.Category_Id+\"/0\"\r\n                        );\r\n                      }}\r\n                      onView={() => {\r\n                        history.push(\r\n                          \"/productlist/\" + params.Id + \"/\" + o.Category_Id+\"/0\"\r\n                        );\r\n                      }}\r\n                    ></ProductCard>\r\n                  \r\n                ))}   \r\n              {/* </Grid_300Div> */}\r\n            </DivWithDisplay>\r\n              <DeleteCatWindow\r\n                deleteOpen={delCatOpen}\r\n                closeDel={() => setDelCatOpen(false)}\r\n                onDeleteFunction={() => {\r\n                  DeleteCategoryFunc(catId);\r\n                }}\r\n              ></DeleteCatWindow>\r\n              \r\n              {storeCategories.map((o, i) => (\r\n                <CategoryCard\r\n                  key={i}\r\n                  catId={o.Id}\r\n                  CatHeadText={o.Name}\r\n                  categoryId={o.Id}\r\n                  CatName={o.Name}\r\n                  CatParaText={o.Description}\r\n                  CatUrl={o.ImageUrl == null ? null : o.ImageUrl}\r\n                  DelCat={() => {\r\n                    setDelCatOpen(true);\r\n                    setCatId(o.Id);\r\n                  }}\r\n                  EditCat={() => {\r\n                    GetSingleCat(o.Id);\r\n                    setCatId(o.Id);\r\n                  }}\r\n                ></CategoryCard>\r\n              ))}\r\n          </DivWithDisplay>\r\n        </DivWithDisplay>\r\n        </FlexColumnFullWidth>\r\n      </DivWithDisplay>\r\n    \r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop\r\n        style={{ zIndex: 2 }}\r\n        //  className={classes.Backdrop}\r\n        open\r\n      >\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nProductCategoryScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  MetroName: \"EXAMPLE Toronto\",\r\n};\r\n\r\nexport default ProductCategoryScreen;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport axios from \"axios\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  Cont450pxAutoHeight,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  LeagueSpartanExtraLargeWidth200px,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst CityList = styled.div`\r\n  width: 80%;\r\n  height: 40px;\r\n  border-radius: 4px;\r\n  background-color: white;\r\n  color: black;\r\n  font-size: 20px;\r\n  font-weight: 500;\r\n  display: flex;\r\n  justify-content: center;\r\n  text-align: center;\r\n  margin: 20px;\r\n  margin-left: 20px;\r\n  line-height: 40px;\r\n  cursor: pointer;\r\n`;\r\n\r\nconst ZoneCityWindow = ({ zoneOpen, onClose, onFormComplete, onPreview }) => {\r\n  const params = useParams();\r\n  const [metroCities, getMetroCities] = useState([]);\r\n\r\n  const GetCities = async () => {\r\n    const respcurrentcities = await axios.get(\r\n      window.$DBURL + \"store/zone/\" + params.zoneId + \"/cities\"\r\n    );\r\n    let openDaysSync = respcurrentcities.data.cities.map(({ Name }) => Name);\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"utilities/city/metro/\" + params.Id\r\n    );\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.cities !== null) {\r\n          getMetroCities(\r\n            resp.data.cities.filter(function (o) {\r\n              return !openDaysSync.includes(o.Name);\r\n            })\r\n          );\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetCities();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!zoneOpen) return null;\r\n\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <Cont450pxAutoHeight>\r\n        <LeagueSpartanExtraLargeBold>\r\n          Add City to Zone\r\n        </LeagueSpartanExtraLargeBold>\r\n        <LeftItemWindowFixed>\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            Pick City to Add to Zone\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n          {metroCities.map((o, i) => (\r\n            <CityList\r\n              key={i}\r\n              onClick={() => {\r\n                onPreview(o.Id);\r\n                onFormComplete(o.Id);\r\n                onClose();\r\n              }}\r\n            >\r\n              {o.Name}\r\n            </CityList>\r\n          ))}\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={onClose}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n        </LeftItemWindowFixed>\r\n      </Cont450pxAutoHeight>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nZoneCityWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n};\r\n\r\nexport default ZoneCityWindow;\r\n","import React from \"react\";\r\nimport { Icon35px100Perc } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { FlexDiv, ContAutoWidth5vh } from \"../../../StylesheetComps/Cont\";\r\nimport { RegularTextBold } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst ZoneCityCard = ({ CityNameText, delCityFromZone }) => {\r\n  return (\r\n    <ContAutoWidth5vh>\r\n      <RegularTextBold>{CityNameText}</RegularTextBold>\r\n      <FlexDiv>\r\n        <Icon35px100Perc\r\n          src=\"/Garbage_Icon.svg\"\r\n          onClick={delCityFromZone}\r\n        ></Icon35px100Perc>\r\n      </FlexDiv>\r\n    </ContAutoWidth5vh>\r\n  );\r\n};\r\n\r\nZoneCityCard.defaultProps = {\r\n  CityNameText: \"EX. Mississauga\",\r\n  MetroName: \"Toronto\",\r\n  CityID: 0,\r\n};\r\n\r\nexport default ZoneCityCard;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport axios from \"axios\";\r\nimport Input from \"../../../comps/Input\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  Cont450pxAutoHeight,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\n\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  LeagueSpartanExtraLargeWidth200px,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst CityList = styled.div`\r\n  width: 80%;\r\n  height: 40px;\r\n  border-radius: 4px;\r\n  background-color: white;\r\n  color: black;\r\n  font-size: 20px;\r\n  font-weight: 500;\r\n  display: flex;\r\n  justify-content: center;\r\n  text-align: center;\r\n  margin: 20px;\r\n  margin-left: 20px;\r\n  line-height: 40px;\r\n  cursor: pointer;\r\n`;\r\n\r\nconst ZoneSupplierWindow = ({\r\n  zoneOpen,\r\n  onClose,\r\n  onFormComplete,\r\n  onPreview,\r\n}) => {\r\n  const params = useParams();\r\n  const [zoneSuppliers, getZoneSuppliers] = useState([]);\r\n  const [posInput, setPosInput] = useState(\"none\");\r\n  const [addName, setAddName] = useState(\"\");\r\n  const [positionSupp, setPositionSupp] = useState(0);\r\n  const [supplierId, setSupplierId] = useState(0);\r\n\r\n  const GetSuppliers = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"store/\" + params.Id + \"/supplier\"\r\n    );\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.suppliers !== null) {\r\n          getZoneSuppliers(resp.data.suppliers);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSuppliers();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!zoneOpen) return null;\r\n\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <Cont450pxAutoHeight>\r\n        <LeagueSpartanExtraLargeBold>\r\n          Add Supplier to Zone\r\n        </LeagueSpartanExtraLargeBold>\r\n        <LeftItemWindowFixed>\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            Pick Supplier to Add to Zone\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n          {zoneSuppliers.map((o, i) => (\r\n            <div>\r\n              <CityList\r\n                key={i}\r\n                onClick={() => {\r\n                  setSupplierId(o.Id);\r\n                  setPosInput(\"block\");\r\n                  setAddName(o.Name);\r\n                }}\r\n              >\r\n                {o.Name}\r\n              </CityList>\r\n              <hr></hr>\r\n            </div>\r\n          ))}\r\n          <Input\r\n            inputwidth=\"71%\"\r\n            inputheight={\"50%\"}\r\n            placeholder={\"Enter Position\"}\r\n            inputdisplay={posInput}\r\n            onChange={(e) => {\r\n              setPositionSupp(e.target.value);\r\n            }}\r\n          ></Input>\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              onPreview({ supplierId, positionSupp });\r\n              onFormComplete(supplierId, positionSupp);\r\n              onClose();\r\n            }}\r\n          >\r\n            Add {addName}\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={onClose}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n        </LeftItemWindowFixed>\r\n      </Cont450pxAutoHeight>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nZoneSupplierWindow.defaultProps = {\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n};\r\n\r\nexport default ZoneSupplierWindow;\r\n","import axios from \"axios\";\r\nimport React from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport Input from \"../../comps/Input\";\r\nimport { ContAutoWidth5vh } from \"../../StylesheetComps/Cont\";\r\nimport { FlexDiv50Percent } from \"../../StylesheetComps/Div\";\r\nimport { Icon30px20pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { RegularTextBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ZoneSupplierCard = ({\r\n  SupplierNameText,\r\n  SupplierId,\r\n  RemoveFromZone,\r\n  SupplierPosition,\r\n}) => {\r\n  const params = useParams();\r\n\r\n  var supplierPos = 0;\r\n\r\n  const UpdatePosOfSupplier = async () => {\r\n    const resp = await axios.put(\r\n      window.$DBURL +\r\n        \"store/zone/\" +\r\n        params.zoneId +\r\n        \"/supplier/\" +\r\n        SupplierId +\r\n        \"/position/\" +\r\n        supplierPos\r\n    );\r\n    if (resp.status === 200) {\r\n    }\r\n  };\r\n\r\n  return (\r\n    <ContAutoWidth5vh>\r\n      <FlexDiv50Percent>\r\n        <RegularTextBold>{SupplierNameText}</RegularTextBold>\r\n      </FlexDiv50Percent>\r\n\r\n      <FlexDiv50Percent>\r\n        <RegularTextBold>Position:</RegularTextBold>\r\n        <Input\r\n          type=\"number\"\r\n          defaultValue={SupplierPosition}\r\n          value={SupplierPosition}\r\n          inputheight={\"20%\"}\r\n          maxlength={1}\r\n          inputwidth={\"10%\"}\r\n          placeholder=\"\"\r\n          onChange={(e) => {\r\n            supplierPos = e.target.value;\r\n            if (supplierPos !== \"\") {\r\n              UpdatePosOfSupplier();\r\n              e.target.blur();\r\n            }\r\n          }}\r\n        ></Input>\r\n      </FlexDiv50Percent>\r\n      <Icon30px20pxPointer\r\n        src=\"/Garbage_Icon.svg\"\r\n        onClick={RemoveFromZone}\r\n      ></Icon30px20pxPointer>\r\n    </ContAutoWidth5vh>\r\n  );\r\n};\r\n\r\nZoneSupplierCard.defaultProps = {\r\n  SupplierNameText: \"EX. Home Depot\",\r\n  SupplierId: 0,\r\n  SupplierPosition: 0,\r\n  onPreview: () => {},\r\n};\r\n\r\nexport default ZoneSupplierCard;\r\n","/* eslint-disable */\r\n\r\nimport axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport styled from \"styled-components\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ZoneCityWindow from \"../../comps/Windows/ZoneCity\";\r\nimport ZoneCityCard from \"../../comps/Windows/ZoneCityCard\";\r\nimport ZoneSupplierWindow from \"../../comps/Windows/ZoneSupplier\";\r\nimport ZoneSupplierCard from \"../../comps/ZoneSupplierCard\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\nimport {\r\n  FlexCont100vw100vh,\r\n  FlexDiv,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont80vwAutoHeight } from \"../../StylesheetComps/Cont\";\r\nimport { RightView_FlexFullWidth_Column } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { FlexDiv70x7Percent } from \"../../StylesheetComps/Div\";\r\nimport {\r\n  HundredPercentFlexDiv,\r\n  Icon30px20pxPointer,\r\n} from \"../../StylesheetComps/Quote\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ViewSplitCont = styled.div`\r\n  width: 40%;\r\n  display: flex;\r\n  flex-direction: column;\r\n`;\r\n\r\nconst ZoneScreen = () => {\r\n  //=============================================================================\r\n  // Zone Screen - View Single Zone and its Suppliers and Cities\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Accessable only by Admin\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  const [zone, getZone] = useState([]);\r\n  const [zoneCities, getZoneCities] = useState([]);\r\n  const [zoneSuppliers, getZoneSuppliers] = useState([]);\r\n  const [zoneName, getZoneName] = useState(\"\");\r\n  var cityIdDeletion = 0;\r\n  var setZoneDelId = 0;\r\n  var positionSuppProp = 0;\r\n\r\n  const GetZone = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"store/zone/\" + params.zoneId);\r\n    if (resp.status == 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.zone !== null) {\r\n          getZone(resp.data.zone);\r\n          getZoneName(resp.data.zone.Name);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetCities = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"store/zone/\" + params.zoneId + \"/cities\"\r\n    );\r\n    if (resp.status == 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.cities !== null) {\r\n          getZoneCities(resp.data.cities);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetSuppliers = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"store/zone/\" + params.zoneId + \"/supplier\"\r\n    );\r\n    if (resp.status == 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.suppliers !== null) {\r\n          getZoneSuppliers(resp.data.suppliers);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const AddCityToZone = async () => {\r\n    const resp = await axios.post(\r\n      window.$DBURL + \"store/zone/\" + params.zoneId + \"/city/\" + setCityId\r\n    );\r\n    if (resp.status == 200) {\r\n      GetCities();\r\n    }\r\n  };\r\n\r\n  const AddSupplierToZone = async () => {\r\n    const resp = await axios.post(\r\n      window.$DBURL +\r\n        \"store/zone/\" +\r\n        params.zoneId +\r\n        \"/supplier/\" +\r\n        setSupplierId +\r\n        \"/position/\" +\r\n        positionSuppProp\r\n    );\r\n    if (resp.status == 200) {\r\n      GetSuppliers();\r\n    }\r\n  };\r\n\r\n  var setCityId = 0;\r\n  const HandleFormCityId = async (cityId) => {\r\n    setCityId = cityId;\r\n  };\r\n\r\n  var setSupplierId = 0;\r\n  const HandleFormSupplierId = async ({ supplierId, positionSupp }) => {\r\n    setSupplierId = supplierId;\r\n    positionSuppProp = positionSupp;\r\n  };\r\n\r\n  const HandleSupplierRemove = async () => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL +\r\n        \"store/zone/\" +\r\n        params.zoneId +\r\n        \"/supplier/\" +\r\n        setZoneDelId\r\n    );\r\n    if (resp.status == 200) {\r\n      GetSuppliers();\r\n    }\r\n  };\r\n\r\n  const HandleCityRemove = async () => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL + \"store/zone/\" + params.zoneId + \"/city/\" + cityIdDeletion\r\n    );\r\n    if (resp.status == 200) {\r\n      GetCities();\r\n    }\r\n  };\r\n\r\n  const [addCityOpen, onAddCityOpen] = useState(false);\r\n  const [addSupplierOpen, onAddSupplierOpen] = useState(false);\r\n\r\n  useEffect(() => {\r\n    GetZone();\r\n    GetCities();\r\n    GetSuppliers();\r\n  }, []);\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <RightView_FlexFullWidth_Column>\r\n          <HundredPercentFlexDiv>\r\n            <Icon30px20pxPointer\r\n              src=\"/backarrow.svg\"\r\n              onClick={() => {\r\n                history.push(\"/zonelist/\" + params.Id);\r\n              }}\r\n            ></Icon30px20pxPointer>\r\n            <LeagueSpartanExtraLargeBold>\r\n              {zoneName}\r\n            </LeagueSpartanExtraLargeBold>\r\n          </HundredPercentFlexDiv>\r\n          <FlexDiv>\r\n            <ViewSplitCont>\r\n              <FlexDiv70x7Percent>\r\n                <LeagueSpartanExtraLargeBold>\r\n                  Suppliers\r\n                </LeagueSpartanExtraLargeBold>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    onAddSupplierOpen(true);\r\n                  }}\r\n                >\r\n                  Add Supplier\r\n                </RegularResponsiveButton>\r\n              </FlexDiv70x7Percent>\r\n              <ZoneSupplierWindow\r\n                zoneOpen={addSupplierOpen}\r\n                onClose={() => {\r\n                  onAddSupplierOpen(false);\r\n                }}\r\n                onFormComplete={AddSupplierToZone}\r\n                onPreview={HandleFormSupplierId}\r\n              ></ZoneSupplierWindow>\r\n\r\n              {zoneSuppliers.map((o, i) => (\r\n                <ZoneSupplierCard\r\n                  key={i}\r\n                  onPreview={GetSuppliers}\r\n                  SupplierNameText={o.User.Name}\r\n                  SupplierPosition={o.Position}\r\n                  SupplierId={o.User.Id}\r\n                  RemoveFromZone={() => {\r\n                    setZoneDelId = o.User.Id;\r\n                    HandleSupplierRemove();\r\n                  }}\r\n                ></ZoneSupplierCard>\r\n              ))}\r\n            </ViewSplitCont>\r\n            <ViewSplitCont>\r\n              <FlexDiv70x7Percent>\r\n                <LeagueSpartanExtraLargeBold>\r\n                  Cities\r\n                </LeagueSpartanExtraLargeBold>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    onAddCityOpen(true);\r\n                  }}\r\n                >\r\n                  Add City\r\n                </RegularResponsiveButton>\r\n              </FlexDiv70x7Percent>\r\n              <ZoneCityWindow\r\n                zoneOpen={addCityOpen}\r\n                onClose={() => {\r\n                  onAddCityOpen(false);\r\n                }}\r\n                onFormComplete={AddCityToZone}\r\n                onPreview={HandleFormCityId}\r\n              ></ZoneCityWindow>\r\n              {zoneCities.map((o, i) => (\r\n                <ZoneCityCard\r\n                  key={i}\r\n                  CityNameText={o.Name}\r\n                  delCityFromZone={() => {\r\n                    cityIdDeletion = o.Id;\r\n                    HandleCityRemove();\r\n                  }}\r\n                ></ZoneCityCard>\r\n              ))}\r\n            </ViewSplitCont>\r\n          </FlexDiv>\r\n        </RightView_FlexFullWidth_Column>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nZoneScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  ZoneName: \"EXAMPLE Zone #1\",\r\n};\r\n\r\nexport default ZoneScreen;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { CaseStatus } from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { StyledHRGreyBreak } from \"../../StylesheetComps/Titles\";\r\n\r\nconst CardContainer = styled.div`\r\n  background-color: #ffffff;\r\n  margin: auto; /* Center the card and add spacing between cards */\r\n  border-radius: 12px;\r\n  // box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n  display: flex;\r\n  flex-direction: column;\r\n  width: 90%; /* Ensure the card fits within the screen with appropriate margins */\r\n  max-width: 600px; /* Limit the width for better readability on large screens */\r\n  transition: box-shadow 0.2s ease, transform 0.2s ease;\r\n  cursor: pointer;\r\n\r\n  @media (max-width: 768px) {\r\n    width: 95%; /* Adjust for smaller devices */\r\n    padding-top: 5px;\r\n    padding-bottom: 5px;\r\n  }\r\n`;\r\n\r\n\r\nconst InfoGroup = styled.div`\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n`;\r\n\r\nconst HeaderGroup = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n`;\r\n\r\nconst CardHeader = styled.h1`\r\n  font-family: 'Avenir', sans-serif;\r\n  font-size: 16px;\r\n  font-weight: 600;\r\n  color: #333;\r\n  margin: 0;\r\n`;\r\n\r\nconst MobileHeader = styled.span`\r\n  font-family: 'Avenir', sans-serif;\r\n  font-size: 14px;\r\n  font-weight: 400;\r\n  color: #555;\r\n  margin-top: 4px;\r\n`;\r\n\r\nconst StatusButton = styled.button`\r\n  background-color: ${({ bgcolor }) => bgcolor || \"#333\"};\r\n  color: #fff;\r\n  font-family: 'San Francisco', 'Helvetica Neue', sans-serif;\r\n  padding: 10px 16px;\r\n  border: none;\r\n  border-radius: 8px;\r\n  font-size: 14px;\r\n  font-weight: 600;\r\n  cursor: pointer;\r\n  transition: opacity 0.2s ease;\r\n\r\n  &:hover {\r\n    opacity: 0.9;\r\n  }\r\n\r\n  &:focus {\r\n    outline: none;\r\n    box-shadow: 0 0 0 2px rgba(0, 122, 255, 0.3);\r\n  }\r\n`;\r\n\r\nconst DetailsGroup = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 8px;\r\n  margin-top: 8px;\r\n`;\r\n\r\nconst DetailItem = styled.p`\r\n  font-family: 'Avenir', sans-serif;\r\n  font-size: 14px;\r\n  color: #555;\r\n  margin: 0;\r\n\r\n  strong {\r\n    color: #333;\r\n    font-weight: 600;\r\n  }\r\n`;\r\n\r\nconst getStatusDetails = (status) => {\r\n  switch (status) {\r\n    case CaseStatus.Drafted:\r\n      return { text: \"Draft\", color: ColorPalette.DarkGrey };\r\n    case CaseStatus.Submitted:\r\n      return { text: \"Submitted\", color: ColorPalette.PrimaryRed };\r\n    case CaseStatus.Accepted:\r\n      return { text: \"Assigned\", color: ColorPalette.PrimaryButtonBlue };\r\n    case CaseStatus.Processed:\r\n      return { text: \"Estimated\", color: ColorPalette.PrimaryButtonBlue };\r\n    case CaseStatus.Closed:\r\n      return { text: \"Closed\", color: ColorPalette.DarkGrey };\r\n    case CaseStatus.PayPending:\r\n      return { text: \"Pending\", color: ColorPalette.PrimaryYellow };\r\n    case CaseStatus.Construction:\r\n      return { text: \"In-Progress\", color: ColorPalette.PrimaryOrange };\r\n    case CaseStatus.CancelRequested:\r\n      return { text: \"Cancelling\", color: ColorPalette.PrimaryRed };\r\n    case CaseStatus.Canceled:\r\n      return { text: \"Cancelled\", color: ColorPalette.PrimaryRed };\r\n    default:\r\n      return { text: \"Draft\", color: ColorPalette.DarkGrey };\r\n  }\r\n};\r\n\r\nconst StaffCaseCardMobile = ({\r\n  address,\r\n  homeowner,\r\n  phone,\r\n  status,\r\n  onClick,\r\n}) => {\r\n  const { text: StatusText, color: StatusColor } = getStatusDetails(status);\r\n\r\n  return (\r\n    <CardContainer onClick={onClick}>\r\n      <InfoGroup>\r\n        <HeaderGroup>\r\n          <CardHeader>{address}</CardHeader>\r\n          <MobileHeader>{homeowner}</MobileHeader>\r\n        </HeaderGroup>\r\n        <StatusButton bgcolor={StatusColor}>{StatusText}</StatusButton>\r\n      </InfoGroup>\r\n      <DetailsGroup>\r\n        <DetailItem>\r\n          <strong>Phone:</strong> {phone}\r\n        </DetailItem>\r\n      </DetailsGroup>\r\n      <StyledHRGreyBreak></StyledHRGreyBreak>\r\n    </CardContainer>\r\n  );\r\n};\r\n\r\nStaffCaseCardMobile.defaultProps = {\r\n  address: \"No address provided\",\r\n  homeowner: \"No homeowner provided\",\r\n  phone: \"No phone provided\",\r\n  status: \"Draft\",\r\n};\r\n\r\nexport default StaffCaseCardMobile;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport { FlexColumnContRedBorderTopRounded } from \"../../../StylesheetComps/Cont\";\r\nimport { Div400x75px, Div450x175px } from \"../../../StylesheetComps/Div\";\r\nimport { ExtraLargeTextMobileRegular } from \"../../../StylesheetComps/Titles\";\r\n\r\n// Mobile specific styled components\r\nconst MobileFlexColumnCont = styled.div`\r\n  position: fixed;\r\n  left: 5%; // give some spacing from the edge\r\n  top: 10%; // start a bit closer to the top\r\n  transform: translateX(-5%); // Adjust for the changed left\r\n  width: 90%; // almost full screen for mobile\r\n  background-color: white;\r\n  border-radius: 15px; // reduced border-radius for mobile\r\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n  padding: 20px; // slightly reduced padding\r\n  overflow: hidden;\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  transition: all 0.3s ease;\r\n`;\r\n\r\nconst MobileDivContainer = styled(Div450x175px)`\r\n  width: 90%; // you can set your preferred width\r\n  height: auto; // adjust the height\r\n  margin: 0 auto; // center the div\r\n`;\r\n\r\nconst MobileButton = styled(RegularResponsiveButton)`\r\n  width: 100%;\r\n  margin: 5px 0; // give some spacing between buttons\r\n`;\r\n\r\nconst DeleteConfirmWindow = ({ deleteOpen, closeDel, onDeleteFunction }) => {\r\n  if (!deleteOpen) return null;\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    return (\r\n      <MobileFlexColumnCont>\r\n        <MobileDivContainer>\r\n          <ExtraLargeTextMobileRegular>\r\n            Are you sure you want to delete this?\r\n          </ExtraLargeTextMobileRegular>\r\n          <Div400x75px> {/* you can replace this with another mobile div if needed */}\r\n            <MobileButton\r\n              bgcolor={ColorPalette.PrimaryGrey}\r\n              onClick={closeDel}\r\n            >\r\n              Cancel\r\n            </MobileButton>\r\n            <MobileButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                closeDel();\r\n                onDeleteFunction();\r\n              }}\r\n            >\r\n              Delete\r\n            </MobileButton>\r\n          </Div400x75px>\r\n        </MobileDivContainer>\r\n      </MobileFlexColumnCont>\r\n    );\r\n  }\r\n\r\n  // Default return for non-mobile\r\n  return (\r\n    <FlexColumnContRedBorderTopRounded>\r\n      <Div450x175px>\r\n        <ExtraLargeTextMobileRegular>\r\n          Are you sure you want to delete this?\r\n        </ExtraLargeTextMobileRegular>\r\n        <Div400x75px>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={closeDel}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              closeDel();\r\n              onDeleteFunction();\r\n            }}\r\n          >\r\n            Delete\r\n          </RegularResponsiveButton>\r\n        </Div400x75px>\r\n      </Div450x175px>\r\n    </FlexColumnContRedBorderTopRounded>\r\n  );\r\n};\r\n\r\nDeleteConfirmWindow.defaultProps = {\r\n  onDeleteFunction: () => {},\r\n};\r\n\r\nexport default DeleteConfirmWindow;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { CaseStatus } from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\nimport StaffCaseCardMobile from \"../../MobileComponents/StaffProjectCard\";\r\nimport { GreenButtonWidth12VWHeight40, TextInput300x50 } from \"../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexCont76PercentMobile,\r\n  FlexContMobileTopVH,\r\n  FlexContzIndex1,\r\n  FlexDiv,\r\n  FlexRowCont70PercentFlexStart,\r\n  FlexRowContFlexStartAutoHeight,\r\n  LeftCont\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport {\r\n  Div150pxMobile250px,\r\n  Div150pxMobileDisplayNone,\r\n  Div80px,\r\n  StyledDiv,\r\n  StyledFlexDiv\r\n} from \"../../StylesheetComps/Div\";\r\nimport { HundredPercentFlexDiv } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LargeHeaderBold,\r\n  LeagueFontSize100Percent,\r\n  StyledHRGreenBreakDashed,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport CaseCard from \"../../comps/CaseCard\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport DeleteConfirmWindow from \"../../comps/Windows/DeleteProduct\";\r\nimport styled from 'styled-components'\r\nimport QuickProjectForm from \"../../comps/Windows/AddProjectOBO\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport IconButton from \"../../comps/IconButton\";\r\n\r\nconst InputContainer = styled.div`\r\n`;\r\n\r\nconst InputField = styled.input`\r\n  padding: 12px 16px;\r\n  border: 1px solid #d1d1d6; /* Neutral light border */\r\n  border-radius: 10px;\r\n  width: 85%;\r\n  margin: 10px;\r\n  font-size: 16px;\r\n  font-family: -apple-system, 'Helvetica Neue', sans-serif;\r\n  background-color: #f9f9f9;\r\n  transition: border-color 0.2s ease, box-shadow 0.2s ease;\r\n\r\n  &:focus {\r\n    border-color: #007aff; /* Signature blue focus */\r\n    box-shadow: 0 0 8px rgba(0, 122, 255, 0.3); /* Subtle glow */\r\n    outline: none;\r\n    background-color: #ffffff; /* Emphasize focus with brighter background */\r\n  }\r\n\r\n  &:hover {\r\n    border-color: #c7c7cc; /* Slightly darker on hover */\r\n  }\r\n\r\n  &::placeholder {\r\n    color: #c7c7cc; /* Neutral placeholder */\r\n    font-weight: 300;\r\n  }\r\n`;\r\n\r\n\r\nconst Dropdown = styled.select`\r\n  appearance: none;\r\n  background-color: #ffffff; /* Clean, minimal background */\r\n  border: 1px solid #d1d1d6; /* Light border for definition */\r\n  border-radius: 10px;\r\n  padding: 12px 16px;\r\n  font-size: 16px;\r\n  font-family: -apple-system, 'Helvetica Neue', sans-serif;\r\n  font-weight: 400;\r\n  color: #333;\r\n  box-shadow: none; /* Minimized shadow for simplicity */\r\n  transition: border-color 0.2s ease, box-shadow 0.2s ease;\r\n  cursor: pointer;\r\n  width: 80%;\r\n  margin-bottom: 20px;\r\n  margin-right: 13px;\r\n  &:hover {\r\n    border-color: #c7c7cc; /* Slightly darker border on hover */\r\n  }\r\n\r\n  &:focus {\r\n    outline: none;\r\n    border-color: #007aff; /* Apple's signature blue for focus */\r\n    box-shadow: 0 0 8px rgba(0, 122, 255, 0.3); /* Subtle glow */\r\n    background-color: #f9f9f9; /* Slightly differentiated focus background */\r\n  }\r\n\r\n  &::placeholder {\r\n    color: #c7c7cc; /* Light neutral placeholder color */\r\n  }\r\n\r\n  /* Custom arrow styling for the dropdown */\r\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6' fill='%23666'%3E%3Cpath d='M5 6L0 0h10L5 6z'/%3E%3C/svg%3E\");\r\n  background-repeat: no-repeat;\r\n  background-position: right 12px center;\r\n  background-size: 10px 6px;\r\n`;\r\n\r\n\r\nconst DropdownOption = styled.option`\r\n  font-size: 16px;\r\n  font-weight: 500;\r\n  color: #333;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n  max-width: 600px;\r\n  margin: 0 auto;\r\n  padding: 20px;\r\n`;\r\n\r\nconst DropdownLabel = styled.label`\r\n  display: block;\r\n  margin-bottom: 10px;\r\n  font-size: 12px;\r\n  font-weight: 600;\r\n  color: #333;\r\n`;\r\n\r\n\r\nconst CasesScreen = () => {\r\n  //=============================================================================\r\n  // Staff Cases Page - Staff Redirected here from \"Store Cases\" in Menu\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Displays all cases of a store that staff can interact with\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n  const [cases, setCases] = useState([]);\r\n  const [caseId, setCaseId] = useState(0);\r\n  const [storeCases, setStoreCases] = useState([]);\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [deleteCase, setDeleteCase] = useState(false);\r\n\r\n  const bottomBorderConst = \"2px solid \" + ColorPalette.PrimaryButtonBlue;\r\n\r\n\r\n\r\n  const [assignedBorder, setAssignedBorder] = useState(\"\");\r\n  const [allBorder, setAllBorder] = useState(bottomBorderConst);\r\n  const [newBorder, setNewBorder] = useState(\"\");\r\n  const [acceptedBorder, setAcceptedBorder] = useState(\"\");\r\n  const [processedBorder, setProcessedBorder] = useState(\"\");\r\n  const [paypendingBorder, setPayPendingBorder] = useState(\"\");\r\n  const [inprogressBorder, setInProgressBorder] = useState(\"\");\r\n  const [cancelRequestedBorder, setCancelRequestedBorder] = useState(\"\");\r\n  const [cancelledBorder, setCancelledBorder] = useState(\"\");\r\n  const [closedBorder, setClosedBorder] = useState(\"\");\r\n  const [displayQuickProject, setDisplayQuickProject] = useState(\"none\");\r\n  const [selectedBorder, setSelectedBorder] = useState('');\r\n\r\n  const handleSortChange = (e) => {\r\n    const selectedOption = caseOptions.find(option => option.value === e.target.value);\r\n    if (selectedOption) {\r\n      if (selectedOption.value === \"mine\" || selectedOption.value === \"all\") {\r\n        selectedOption.sortFunction();\r\n      } else {\r\n        SortCaseAccordingToStatus(storeCases, selectedOption.caseStatus);\r\n      }\r\n      selectedOption.setBorder(bottomBorderConst);\r\n    }\r\n  };\r\n\r\n\r\n  const GetCases = async (storeId, userId) => {\r\n    if (storeId > 0) {\r\n      try {\r\n        // Get the cases for the given store using Axios\r\n        const response = await axios.get(\r\n          `${window.$DBURL}case/store/${storeId}`\r\n        );\r\n\r\n        // If the request was successful and the data is not null\r\n        if (response.status === 200 && response.data) {\r\n          // Set the store cases and filter the cases by user\r\n          setStoreCases(response.data.Cases);\r\n          var arr = response.data.Cases;\r\n          setCases(\r\n            response.data.Cases\r\n          );\r\n          // Set the role number using the user info stored in session storage\r\n          const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n          setRoleNum(userInfo.Role);\r\n        }\r\n      } catch (error) {\r\n        // Handle any errors that may have occurred\r\n        console.error(error);\r\n      }\r\n    }\r\n  };\r\n\r\n  const HandleCaseDel = async (caseId) => {\r\n    try {\r\n      // Delete the case using the provided caseId\r\n      const response = await axios.delete(`${window.$DBURL}case/${caseId}`);\r\n\r\n      // If the case was successfully deleted, get the updated cases and sort them\r\n      if (response.status === 200) {\r\n        const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n        GetCases(params.storeId, userInfo.Id);\r\n        SortMyCases(userInfo.Id);\r\n      }\r\n    } catch (error) {\r\n      // Handle any errors that may have occurred\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const FilterCase = (text) => {\r\n    setCases(\r\n      storeCases.filter((o) => {\r\n        return (\r\n          (o.Name && o.Name.toLowerCase().includes(text.toLowerCase())) ||\r\n          (o.CaseNumber && o.CaseNumber.includes(text)) ||\r\n          (o.Phone && o.Phone.includes(text)) ||\r\n          (o.Street && o.Street.toLowerCase().includes(text.toLowerCase()))\r\n        );\r\n      })\r\n    );\r\n  };\r\n\r\n\r\n  const SortAll = () => {\r\n    ResetBorderUI();\r\n    setCases(\r\n      storeCases.filter((o) => {\r\n        return (\r\n          o.CaseStatus === CaseStatus.Drafted ||\r\n          CaseStatus.Submitted ||\r\n          CaseStatus.Accepted ||\r\n          CaseStatus.Processed ||\r\n          CaseStatus.Closed ||\r\n          CaseStatus.CancelRequested\r\n        );\r\n      })\r\n    );\r\n  };\r\n\r\n  const SortCaseAccordingToStatus = async (cases, status) => {\r\n    ResetBorderUI();\r\n    if (cases !== null) {\r\n      setCases(\r\n        cases.filter((o) => {\r\n          return o.CaseStatus === status;\r\n        })\r\n      );\r\n    }\r\n  };\r\n\r\n  function SortMyCases(userId) {\r\n    ResetBorderUI();\r\n    setCases(\r\n      storeCases.filter((o) => {\r\n        return o.Estimator_Id === userId;\r\n      })\r\n    );\r\n  }\r\n\r\n  const ResetBorderUI = async () => {\r\n    setAssignedBorder(\"\");\r\n    setAllBorder(\"\");\r\n    setNewBorder(\"\");\r\n    setAcceptedBorder(\"\");\r\n    setProcessedBorder(\"\");\r\n    setPayPendingBorder(\"\");\r\n    setInProgressBorder(\"\");\r\n    setCancelRequestedBorder(\"\");\r\n    setCancelledBorder(\"\");\r\n    setClosedBorder(\"\");\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetCases(params.storeId, JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const caseOptions = [\r\n    { label: \"Assigned To Me\", value: \"mine\", sortFunction: () => SortMyCases(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id), setBorder: setAssignedBorder },\r\n    { label: \"All\", value: \"all\", sortFunction: SortAll, setBorder: setAllBorder },\r\n    { label: \"Submitted\", value: \"submitted\", caseStatus: CaseStatus.Submitted, setBorder: setNewBorder },\r\n    { label: \"Assigned\", value: \"assigned\", caseStatus: CaseStatus.Accepted, setBorder: setAcceptedBorder },\r\n    { label: \"Estimated\", value: \"estimated\", caseStatus: CaseStatus.Processed, setBorder: setProcessedBorder },\r\n    { label: \"Accepted Project\", value: \"payPending\", caseStatus: CaseStatus.PayPending, setBorder: setPayPendingBorder },\r\n    { label: \"In-Progress\", value: \"inProgress\", caseStatus: CaseStatus.Construction, setBorder: setInProgressBorder },\r\n    { label: \"Cancel Requested\", value: \"cancelRequested\", caseStatus: CaseStatus.CancelRequested, setBorder: setCancelRequestedBorder },\r\n    { label: \"Cancelled\", value: \"cancelled\", caseStatus: CaseStatus.Canceled, setBorder: setCancelledBorder },\r\n    { label: \"Closed\", value: \"closed\", caseStatus: CaseStatus.Closed, setBorder: setClosedBorder },\r\n  ];\r\n\r\n  if(window.$ISMOBILE === true) {\r\n    return (\r\n      <FlexContzIndex1>\r\n        {/* <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont> */}\r\n\r\n        <FlexColumnCont80vwAutoHeight>\r\n          <ActionMenu mobilePageProp=\"Estimate Dashboard\"></ActionMenu>\r\n\r\n          <div style={{display:displayQuickProject}}>\r\n          <QuickProjectForm open={displayQuickProject === 'flex' ? true : false} onClose={()=>{setDisplayQuickProject('none')}}></QuickProjectForm>\r\n          </div>\r\n\r\n          <InputContainer>\r\n          <InputField\r\n                placeholder=\"Search for Project (Address, Name, Phone)\"\r\n                font_size=\"12px\"\r\n                onChange={(e) => {\r\n                  FilterCase(e.target.value);\r\n                }}\r\n              >\r\n          </InputField>\r\n          <FlexDiv>\r\n          <IconButton src='/whiteplus_icon.svg' fontsize={'10px'} text='New Project' bgcolor={ColorPalette.PrimaryButtonBlue}\r\n          onClick={() => {\r\n            setDisplayQuickProject('flex')\r\n          }}></IconButton>\r\n          {/* <RegularResponsiveButton\r\n          marginright='10px'\r\n          marginleft='10px'\r\n          bgcolor={ColorPalette.PrimaryButtonBlue}\r\n          onClick={() => {\r\n            setDisplayQuickProject('flex')\r\n          }}\r\n        >\r\n        Create Project\r\n        </RegularResponsiveButton> */}\r\n      <Dropdown id=\"case-select\" onChange={handleSortChange}>\r\n        <DropdownOption>Filter Project By Status</DropdownOption>\r\n        {caseOptions.map(option => (\r\n          <DropdownOption key={option.value} value={option.value}>\r\n            {option.label}\r\n          </DropdownOption>\r\n        ))}\r\n      </Dropdown>\r\n          </FlexDiv>\r\n        \r\n          </InputContainer>\r\n  \r\n          {cases.map((o, i) => (\r\n                <StaffCaseCardMobile\r\n                  onClick={()=>{history.push(`/viewcase/${params.Id}/${params.storeId}/${o.Id}`)}}\r\n                  key={i}\r\n                  homeowner={o.Name}\r\n                  address={o.Street}\r\n                  status={o.CaseStatus}\r\n                  phone={o.Phone}\r\n                ></StaffCaseCardMobile>\r\n            ))}\r\n          <br></br>\r\n          <br></br>\r\n          <br></br>\r\n        </FlexColumnCont80vwAutoHeight>\r\n      </FlexContzIndex1>\r\n    );\r\n  } else{\r\n  if (\r\n    roleNum === UserRole.Admin ||\r\n    roleNum === UserRole.Manager ||\r\n    roleNum === UserRole.Estimator ||\r\n    roleNum === UserRole.Accountant\r\n  ) {\r\n    return (\r\n      <FlexContMobileTopVH>\r\n        <LeftCont>\r\n          <Menu></Menu>\r\n        </LeftCont>\r\n\r\n        <FlexColumn81vwLightGrey>\r\n          {/* <ActionMenu /> */}\r\n          <RightViewFullWidth>\r\n            <FlexRowContFlexStartAutoHeight height='10vh'>\r\n              <TextInput300x50\r\n                placeholder=\"Search by Name / Phone / Case Number\"\r\n                font_size=\"12px\"\r\n                inputheight=\"10%\"\r\n                inputwidth=\"43.5%\"\r\n                inputmargintop=\"10px\"\r\n                inputmarginleft=\"10px\"\r\n                margin=\"10px\"\r\n                onChange={(e) => {\r\n                  FilterCase(e.target.value);\r\n                }}\r\n              ></TextInput300x50>\r\n           <Wrapper>\r\n      <DropdownLabel htmlFor=\"case-select\">Case Status:</DropdownLabel>\r\n      <Dropdown id=\"case-select\" onChange={handleSortChange}>\r\n        {caseOptions.map(option => (\r\n          <DropdownOption key={option.value} value={option.value}>\r\n            {option.label}\r\n          </DropdownOption>\r\n        ))}\r\n      </Dropdown>\r\n    </Wrapper>\r\n            </FlexRowContFlexStartAutoHeight>\r\n\r\n            {/* <FlexCont76PercentMobile>\r\n    <StyledFlexDiv basis=\"250px\">\r\n        <LeagueFontSize100Percent>Case Number</LeagueFontSize100Percent>\r\n    </StyledFlexDiv>\r\n    <StyledFlexDiv basis=\"210px\">\r\n        <LeagueFontSize100Percent>Homeowner</LeagueFontSize100Percent>\r\n    </StyledFlexDiv>\r\n    <StyledFlexDiv basis=\"290px\" mobileDisplay=\"none\">\r\n        <LeagueFontSize100Percent>Submitted Time</LeagueFontSize100Percent>\r\n    </StyledFlexDiv>\r\n    <StyledFlexDiv basis=\"220px\">\r\n        <LeagueFontSize100Percent>Estimator</LeagueFontSize100Percent>\r\n    </StyledFlexDiv>\r\n    <StyledFlexDiv basis=\"220px\">\r\n        <LeagueFontSize100Percent>Status</LeagueFontSize100Percent>\r\n    </StyledFlexDiv>\r\n</FlexCont76PercentMobile> */}\r\n\r\n\r\n\r\n            <DeleteConfirmWindow\r\n              deleteOpen={deleteCase}\r\n              onDeleteFunction={() => {\r\n                HandleCaseDel(caseId);\r\n              }}\r\n              closeDel={() => {\r\n                setDeleteCase(false);\r\n              }}\r\n            ></DeleteConfirmWindow>\r\n            {cases.map((o, i) => (\r\n              <div key={i}>\r\n                <CaseCard\r\n                isOdd={i % 2 !== 0}\r\n                  index={cases.length - i}\r\n                  key={i}\r\n                  Address = {o.Street}\r\n                  Status={o.CaseStatus}\r\n                  EstimatorName={o.Estimator}\r\n                  CaseId={o.Id}\r\n                  ClientName={o.Name}\r\n                  CaseNumber={\"#\" + o.CaseNumber}\r\n                  DateText={o.CreateTime}\r\n\r\n                  onDel={() => {\r\n                    setCaseId(o.Id);\r\n                    setDeleteCase(true);\r\n                  }}\r\n                ></CaseCard>\r\n              </div>\r\n            ))}\r\n          </RightViewFullWidth>\r\n        </FlexColumn81vwLightGrey>\r\n      </FlexContMobileTopVH>\r\n    );\r\n  } else if (roleNum === UserRole.Estimator) {\r\n    return (\r\n      <FlexContMobileTopVH>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ActionMenu />\r\n          <RightViewFullWidth>\r\n            <HundredPercentFlexDiv>\r\n              <FlexRowCont70PercentFlexStart>\r\n                <LargeHeaderBold\r\n                  borderbottom={assignedBorder}\r\n                  head_text=\"My Assignments\"\r\n                  font_size=\"16px\"\r\n                  onClick={() => {\r\n                    SortMyCases(\r\n                      JSON.parse(sessionStorage.getItem(\"userInfo\")).Id\r\n                    );\r\n                    setAssignedBorder(bottomBorderConst);\r\n                  }}\r\n                >\r\n                  Assigned\r\n                </LargeHeaderBold>\r\n                <LargeHeaderBold\r\n                  borderbottom={newBorder}\r\n                  head_text=\"New\"\r\n                  font_size=\"16px\"\r\n                  onClick={() => {\r\n                    SortCaseAccordingToStatus(storeCases, CaseStatus.Submitted);\r\n                    setNewBorder(bottomBorderConst);\r\n                  }}\r\n                >\r\n                  New\r\n                </LargeHeaderBold>\r\n                <LargeHeaderBold\r\n                  borderbottom={cancelRequestedBorder}\r\n                  head_text=\"Cancel Requested\"\r\n                  font_size=\"16px\"\r\n                  onClick={() => {\r\n                    SortCaseAccordingToStatus(\r\n                      storeCases,\r\n                      CaseStatus.CancelRequested\r\n                    );\r\n                    setCancelRequestedBorder(bottomBorderConst);\r\n                  }}\r\n                >\r\n                  Cancel Requested\r\n                </LargeHeaderBold>\r\n                <LargeHeaderBold\r\n                  borderbottom={cancelledBorder}\r\n                  head_text=\"Cancelled\"\r\n                  font_size=\"16px\"\r\n                  onClick={() => {\r\n                    SortCaseAccordingToStatus(storeCases, CaseStatus.Canceled);\r\n                    setCancelledBorder(bottomBorderConst);\r\n                  }}\r\n                >\r\n                  Cancelled\r\n                </LargeHeaderBold>\r\n                <LargeHeaderBold\r\n                  borderbottom={closedBorder}\r\n                  head_text=\"Closed\"\r\n                  font_size=\"16px\"\r\n                  onClick={() => {\r\n                    SortCaseAccordingToStatus(storeCases, CaseStatus.Closed);\r\n                    setClosedBorder(bottomBorderConst);\r\n                  }}\r\n                >\r\n                  Closed\r\n                </LargeHeaderBold>\r\n              </FlexRowCont70PercentFlexStart>\r\n            </HundredPercentFlexDiv>\r\n\r\n            <FlexCont76PercentMobile>\r\n    <StyledDiv width=\"80px\">\r\n        <LeagueFontSize100Percent>Index</LeagueFontSize100Percent>\r\n    </StyledDiv>\r\n    <StyledDiv width=\"150px\" mobileWidth=\"250px\">\r\n        <LeagueFontSize100Percent>Case Number</LeagueFontSize100Percent>\r\n    </StyledDiv>\r\n    <StyledDiv width=\"150px\" mobileWidth=\"250px\">\r\n        <LeagueFontSize100Percent>Homeowner</LeagueFontSize100Percent>\r\n    </StyledDiv>\r\n    <StyledDiv width=\"200px\" mobileDisplay=\"none\">\r\n        <LeagueFontSize100Percent>Submitted Time</LeagueFontSize100Percent>\r\n    </StyledDiv>\r\n    <StyledDiv width=\"150px\" mobileWidth=\"250px\">\r\n        <LeagueFontSize100Percent>Estimator</LeagueFontSize100Percent>\r\n    </StyledDiv>\r\n    <StyledDiv width=\"150px\" mobileWidth=\"250px\">\r\n        <LeagueFontSize100Percent>Status</LeagueFontSize100Percent>\r\n    </StyledDiv>\r\n    <StyledDiv width=\"150px\" mobileWidth=\"250px\">\r\n        <LeagueFontSize100Percent>Delete</LeagueFontSize100Percent>\r\n    </StyledDiv>\r\n</FlexCont76PercentMobile>\r\n\r\n\r\n            {cases.map((o, i) => (\r\n              <CaseCard\r\n                Status={o.CaseStatus}\r\n                CaseId={o.Id}\r\n                EstimatorName={o.Estimator}\r\n                ClientName={o.Name}\r\n                key={i}\r\n                CaseNumber={\"#\" + o.CaseNumber}\r\n                DateText={o.CreateTime}\r\n                onDel={() => {\r\n                  HandleCaseDel(o.Id);\r\n                }}\r\n              ></CaseCard>\r\n            ))}\r\n          </RightViewFullWidth>\r\n        </FlexColumn81vwLightGrey>\r\n      </FlexContMobileTopVH>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n}\r\n\r\nCasesScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default CasesScreen;\r\n","import { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContFlexStart,\r\n  LeftItemWindowFixed\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont } from \"../../../StylesheetComps/Menu\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  RegularText\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst ConfirmWindow = ({\r\n  open,\r\n  onClose,\r\n  confirmtext,\r\n  leftbuttontext,\r\n  rightbuttontext,\r\n  leftbuttoncolor,\r\n  rightbuttoncolor,\r\n  left,\r\n  LeftFunction,\r\n  RightFunction,\r\n  width,\r\n  top,\r\n}) => {\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexRowContFlexStart>\r\n        <LeftItemWindowFixed left={left} top={top} width={width}>\r\n          <RegularText>{confirmtext}</RegularText>\r\n          <br></br>\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <RegularResponsiveButton\r\n              bgcolor={leftbuttoncolor}\r\n              onClick={LeftFunction}\r\n            >\r\n              {leftbuttontext}\r\n            </RegularResponsiveButton>{\" \"}\r\n            <RegularResponsiveButton\r\n              bgcolor={rightbuttoncolor}\r\n              onClick={RightFunction}\r\n            >\r\n              {rightbuttontext}\r\n            </RegularResponsiveButton>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n\r\n          <FlexColumnCont></FlexColumnCont>\r\n        </LeftItemWindowFixed>\r\n      </FlexRowContFlexStart>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nConfirmWindow.defaultProps = {\r\n  RightFunction: () => {},\r\n  LeftFunction: () => {},\r\n  rightbuttoncolor: ColorPalette.PrimaryButtonBlue,\r\n  leftbuttoncolor: ColorPalette.PrimaryButtonBlue,\r\n  left: \"40%\",\r\n  top: \"5%\",\r\n};\r\n\r\nexport default ConfirmWindow;\r\n","// Importing React hooks\r\nimport { useEffect, useState } from \"react\";\r\n\r\n// Importing API functions\r\nimport {\r\n  AddProductAddon,\r\n  GetCategory,\r\n} from \"../../API_Functions/CatProduct_Functions\";\r\n\r\n// Importing stylesheet components\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFullWidth,\r\n  LeftItemWindowFixed,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanRegular,\r\n  StyledHRPropColour,\r\n  TitleFontSize100PercentPointer,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\n// Importing a custom component\r\nimport ConfirmWindow from \"../Windows/ConfirmWIndow\";\r\n\r\nconst CategoryContentList = ({\r\n  open,\r\n  categoryid,\r\n  productObj,\r\n  RefreshCategoryList,\r\n}) => {\r\n  const [subCategories, setSubCategories] = useState([]);\r\n  const [categoryObj, setCategoryObj] = useState({});\r\n  const [confirmWindowOpen, setIsConfirmWindowOpen] = useState(false);\r\n  const [parentId, setParentId] = useState(0);\r\n\r\n  const GetCurrentCategories = async (cateid) => {\r\n    try {\r\n      const data = await GetCategory(cateid);\r\n      if (data !== null) {\r\n        setSubCategories(data.SubCategories);\r\n        setParentId(data.Parent_Id);\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const AddNewProductAddOnCategory = async (productId, cateId) => {\r\n    try {\r\n      const position = productObj?.Addons.length + 1;\r\n      const data = await AddProductAddon(productId, cateId, position);\r\n      if (data !== null) {\r\n        RefreshCategoryList();\r\n      }\r\n    } catch (error) {\r\n      // handle error\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetCurrentCategories(categoryid);\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <LeftItemWindowFixed left=\"47vw\">\r\n      <FlexRowContFullWidth>\r\n        <FlexColumnFullWidth>\r\n          <StyledHRPropColour\r\n            border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n          ></StyledHRPropColour>\r\n          <br></br>\r\n          <FlexRowContFlexStart>\r\n            <Icon30px30pxPointer\r\n              display={parentId !== 0 ? \"block\" : \"none\"}\r\n              onClick={() => {\r\n                GetCurrentCategories(parentId);\r\n              }}\r\n              src=\"/leftarrow.svg\"\r\n            ></Icon30px30pxPointer>\r\n            <LeagueSpartanRegular>Subcategories</LeagueSpartanRegular>\r\n          </FlexRowContFlexStart>\r\n          {subCategories.map((o, i) => (\r\n            <TitleFontSize100PercentPointer\r\n              onClick={() => {\r\n                setIsConfirmWindowOpen(true);\r\n                setCategoryObj(o);\r\n              }}\r\n            >\r\n              {o.Name}\r\n            </TitleFontSize100PercentPointer>\r\n          ))}\r\n          <br></br>\r\n          <StyledHRPropColour\r\n            border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n          ></StyledHRPropColour>\r\n          <br></br>\r\n\r\n          <FlexColumnCont></FlexColumnCont>\r\n        </FlexColumnFullWidth>\r\n        <ConfirmWindow\r\n          leftbuttontext={\"Create Addon\"}\r\n          rightbuttontext={\"Open Category\"}\r\n          confirmtext={\"Select an Option\"}\r\n          open={confirmWindowOpen}\r\n          LeftFunction={() => {\r\n            AddNewProductAddOnCategory(productObj?.Id, categoryObj?.Id);\r\n            setIsConfirmWindowOpen(false);\r\n          }}\r\n          RightFunction={() => {\r\n            GetCurrentCategories(categoryObj?.Id);\r\n            setParentId(categoryObj?.Parent_Id);\r\n            setIsConfirmWindowOpen(false);\r\n          }}\r\n          onClose={() => {\r\n            setIsConfirmWindowOpen(false);\r\n          }}\r\n        ></ConfirmWindow>\r\n      </FlexRowContFullWidth>\r\n    </LeftItemWindowFixed>\r\n  );\r\n};\r\n\r\nCategoryContentList.defaultProps = {\r\n  RefreshCategoryList: () => {},\r\n};\r\n\r\nexport default CategoryContentList;\r\n","import { useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { DeleteProductAddon } from \"../../API_Functions/CatProduct_Functions\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont60PercentFlexStart,\r\n  FlexRowContFlexStart,\r\n  LeftItemWindowFixed,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../StylesheetComps/OverlayCont\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanTiny,\r\n  RegularText,\r\n  StyledHRPropColour,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport CategoryContentList from \"../CategoryContentList\";\r\nimport ConfirmWindow from \"../Windows/ConfirmWIndow\";\r\n\r\nconst ProductAddOn = ({ open, onClose, productObj, RefreshAddOnList }) => {\r\n  const params = useParams();\r\n\r\n  const [categoryContentVisible, setIsCategoryContentVisible] = useState(false);\r\n  const [isConfirmDeleteVisible, setIsConfirmDeleteVisible] = useState(false);\r\n\r\n  const [deleteId, setDeleteId] = useState(0);\r\n\r\n  const RemoveAddon = async (productid, cateid) => {\r\n    const data = await DeleteProductAddon(productid, cateid);\r\n    if (data !== null) {\r\n      RefreshAddOnList();\r\n      setIsConfirmDeleteVisible(false);\r\n    }\r\n  };\r\n\r\n  const ResetView = async () => {};\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexRowContFlexStart>\r\n        <LeftItemWindowFixed>\r\n          <SmallHeaderLeagueSpartan width=\"500px\">\r\n            {productObj?.Name}\r\n          </SmallHeaderLeagueSpartan>\r\n          <StyledHRPropColour\r\n            border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n          ></StyledHRPropColour>\r\n          <br></br>\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <FlexRowCont60PercentFlexStart>\r\n              <LeagueSpartanTiny>Addon Categories</LeagueSpartanTiny>\r\n            </FlexRowCont60PercentFlexStart>\r\n            <LeagueSpartanTiny>Position</LeagueSpartanTiny>\r\n            <LeagueSpartanTiny>Delete</LeagueSpartanTiny>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n          {productObj?.Addons.map((o, i) => (\r\n            <FlexRowCont100PercentSpaceBetween overflowy=\"auto\">\r\n              <FlexRowCont60PercentFlexStart>\r\n                <RegularText>{o.Category}</RegularText>\r\n              </FlexRowCont60PercentFlexStart>\r\n              <RegularText>{o.Position}</RegularText>\r\n              <Icon30px30pxPointer\r\n                onClick={() => {\r\n                  setDeleteId(o.Category_Id);\r\n                  setIsConfirmDeleteVisible(true);\r\n                }}\r\n                src=\"/Garbage_Icon.svg\"\r\n              ></Icon30px30pxPointer>\r\n            </FlexRowCont100PercentSpaceBetween>\r\n          ))}\r\n          <ConfirmWindow\r\n            open={isConfirmDeleteVisible}\r\n            left=\"5%\"\r\n            leftbuttontext=\"Return\"\r\n            rightbuttontext=\"Remove\"\r\n            leftbuttoncolor={ColorPalette.PrimaryGrey}\r\n            rightbuttoncolor={ColorPalette.PrimaryRed}\r\n            confirmtext=\"Are you sure you want to remove this Addon?\"\r\n            LeftFunction={() => {\r\n              setIsConfirmDeleteVisible(false);\r\n            }}\r\n            RightFunction={() => {\r\n              RemoveAddon(productObj?.Id, deleteId);\r\n            }}\r\n          ></ConfirmWindow>\r\n          <br></br>\r\n          <StyledHRPropColour\r\n            border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n          ></StyledHRPropColour>\r\n          <br></br>\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                ResetView();\r\n                setIsCategoryContentVisible(false);\r\n                onClose();\r\n              }}\r\n            >\r\n              Close\r\n            </RegularResponsiveButton>{\" \"}\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                setIsCategoryContentVisible(true);\r\n              }}\r\n            >\r\n              Create AddOn\r\n            </RegularResponsiveButton>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n        </LeftItemWindowFixed>\r\n\r\n        <CategoryContentList\r\n          categoryid={params.cateId}\r\n          open={categoryContentVisible}\r\n          productObj={productObj}\r\n          RefreshCategoryList={() => {\r\n            RefreshAddOnList();\r\n          }}\r\n        ></CategoryContentList>\r\n      </FlexRowContFlexStart>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nProductAddOn.defaultProps = {\r\n  open: false,\r\n  onClose: () => {},\r\n  productObj: {},\r\n  RefreshAddOnList: () => {},\r\n};\r\n\r\nexport default ProductAddOn;\r\n","import axios from \"axios\";\r\nimport { useState } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport { StickyCont400x400px } from \"../../../StylesheetComps/Cont\";\r\nimport { Div300pxMargin30px } from \"../../../StylesheetComps/Div\";\r\nimport { FixedOverlay1000vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Cont100PercentWidth } from \"../../../StylesheetComps/Quote\";\r\nimport Input from \"../../Input\";\r\n\r\nconst CityList = styled.div`\r\n  width: 80%;\r\n  height: 40px;\r\n  border-radius: 4px;\r\n  background-color: white;\r\n  color: black;\r\n  font-size: 20px;\r\n  font-weight: 500;\r\n  display: flex;\r\n  justify-content: center;\r\n  text-align: center;\r\n  margin: 20px;\r\n  margin-left: 20px;\r\n  line-height: 40px;\r\n  cursor: pointer;\r\n`;\r\n\r\nconst SupplierCont = styled.div``;\r\n\r\nconst EditSupplierCard = ({\r\n  open,\r\n  onClose,\r\n  RefreshSupplierList,\r\n  SupplierArray,\r\n  productid,\r\n}) => {\r\n  const [supplierId, setSupplierId] = useState(0);\r\n  const [itemName, setItemName] = useState(\"\");\r\n  const [posInput, setPosInput] = useState(\"none\");\r\n  const [positionSupp, setPositionSupp] = useState(0);\r\n\r\n  const AddSupplierToProduct = async (product_id, supplier_id, position) => {\r\n    const resp = await axios.post(\r\n      window.$DBURL +\r\n        \"catalog/product/\" +\r\n        product_id +\r\n        \"/supplier/\" +\r\n        supplier_id +\r\n        \"/position/\" +\r\n        position\r\n    );\r\n    if (resp.status === 200) {\r\n      RefreshSupplierList();\r\n      onClose();\r\n    }\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <FixedOverlay1000vh>\r\n        <StickyCont400x400px>\r\n          <Div300pxMargin30px>\r\n            {SupplierArray.map((o, i) => (\r\n              <SupplierCont\r\n                onClick={() => {\r\n                  setSupplierId(o.Id);\r\n                  setItemName(o.Name);\r\n                  setPosInput(\"block\");\r\n                }}\r\n              >\r\n                <CityList>{o.Name}</CityList>\r\n                <hr></hr>\r\n              </SupplierCont>\r\n            ))}\r\n            <Input\r\n              inputwidth=\"71%\"\r\n              inputheight={\"50%\"}\r\n              placeholder={\"Enter Position\"}\r\n              inputdisplay={posInput}\r\n              onChange={(e) => {\r\n                setPositionSupp(e.target.value);\r\n              }}\r\n            ></Input>\r\n            <Cont100PercentWidth>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  AddSupplierToProduct(productid, supplierId, positionSupp);\r\n                }}\r\n              >\r\n                Add {itemName}\r\n              </RegularResponsiveButton>\r\n            </Cont100PercentWidth>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={onClose}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n          </Div300pxMargin30px>\r\n        </StickyCont400x400px>{\" \"}\r\n      </FixedOverlay1000vh>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nEditSupplierCard.defaultProps = {\r\n  onChange: () => {},\r\n  RefreshSupplierList: () => {},\r\n  defaultName: \"\",\r\n  SupplierArray: [\"Default Name\"],\r\n};\r\n\r\nexport default EditSupplierCard;\r\n","import axios from \"axios\";\r\nimport { useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  FlexColumnContHalfHeightSpaceBetween,\r\n  FlexColumnFullWidth,\r\n  FlexCont70PercentAuto,\r\n  FlexDiv,\r\n  FlexRowCont100PercentFlexEnd,\r\n  FlexRowCont60PercentFlexStart,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFullWidth,\r\n  FlexRowContHalfHeight,\r\n  FlexRowContHalfHeightFlexStart,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport DeleteConfirmWindow from \"../Windows/DeleteProduct\";\r\n\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { useEffect } from \"react\";\r\nimport { AddProduct } from \"../../API_Functions/CatProduct_Functions\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { Icon30x40pxPointer } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { Image300x200 } from \"../../StylesheetComps/LandscapeForm\";\r\nimport { SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport { AbsoluteOverlayDivFullWidth } from \"../../StylesheetComps/OverlayCont\";\r\nimport { Icon30px20pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanLarge,\r\n  LeagueSpartanTiny,\r\n  MediumHeader,\r\n  RegularTextWithMargins,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport EditSupplierCard from \"../Windows/EditProductSupplier\";\r\nimport { FlexColumnDiv, FlexDivSpaceAround } from \"../../StylesheetComps/Div\";\r\n\r\nconst ProductInfoCard = ({\r\n  open,\r\n  onView,\r\n  onClose,\r\n  onDelete,\r\n  EditProd,\r\n  Product,\r\n  RefreshProductInfoCard,\r\n}) => {\r\n  const params = useParams();\r\n  const [deleteProduct, setDeleteProduct] = useState(false);\r\n  const [editSupplierDisplay, setEditSupplierDisplay] = useState(false);\r\n  const [supplierList, setSupplierList] = useState([]);\r\n\r\n  const CreateDuplicateProduct = async (product) => {\r\n    var data = await AddProduct(product);\r\n    if (data !== null) {\r\n      Product = data;\r\n    }\r\n  };\r\n\r\n  const SetSupplierOptions = async (storeid) => {\r\n    const supplierlist = await axios.get(\r\n      window.$DBURL + \"/store/\" + storeid + \"/supplier\"\r\n    );\r\n    if (supplierlist.status === 200) {\r\n      setSupplierList(supplierlist.data.suppliers);\r\n    }\r\n  };\r\n\r\n  const RemoveSupplierFromProduct = async (productid, supplierid) => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL + \"catalog/product/\" + productid + \"/supplier/\" + supplierid\r\n    );\r\n    if (resp.status === 200) {\r\n      RefreshProductInfoCard();\r\n      SetSupplierOptions(params.Id);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetSupplierOptions(params.Id);\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  if (Product !== undefined && Product !== null) {\r\n    return (\r\n      <AbsoluteOverlayDivFullWidth>\r\n        <FlexCont70PercentAuto width='55%' onClick={onView}>\r\n          <EditSupplierCard\r\n            open={editSupplierDisplay}\r\n            SupplierArray={supplierList}\r\n            onClose={() => {\r\n              setEditSupplierDisplay(false);\r\n              RefreshProductInfoCard();\r\n            }}\r\n            productid={Product.Id}\r\n          ></EditSupplierCard>\r\n          <FlexRowContHalfHeight>\r\n            <FlexRowCont60PercentFlexStart>\r\n              <FlexColumnFullWidth>\r\n                <LeagueSpartanLarge whitespace=\"wrap\">\r\n                  {Product.Name}\r\n                </LeagueSpartanLarge>\r\n                <Image300x200\r\n                  display={Product.ImageUrl === \"\" ? \"none\" : \"block\"}\r\n                  src={window.$IMGURL + Product.ImageUrl}\r\n                ></Image300x200>\r\n              </FlexColumnFullWidth>\r\n            </FlexRowCont60PercentFlexStart>\r\n            <FlexDivSpaceAround width='35%'>\r\n              <FlexColumnDiv alignitems='center'>\r\n            <LeagueSpartanTiny>Edit Product</LeagueSpartanTiny>\r\n            <Icon30x40pxPointer onClick={EditProd} src='/EditIcon.svg'>\r\n            </Icon30x40pxPointer>\r\n            </FlexColumnDiv>\r\n            <FlexColumnDiv alignitems='center'>\r\n              <LeagueSpartanTiny>Duplicate Product</LeagueSpartanTiny>\r\n            <Icon30x40pxPointer onClick={async () => {\r\n                await CreateDuplicateProduct(Product);\r\n                onClose();\r\n              }} src='/Duplicate_Icon.svg'>\r\n            </Icon30x40pxPointer>\r\n            </FlexColumnDiv>\r\n            <FlexColumnDiv alignitems='center'>\r\n            <LeagueSpartanTiny>Suppliers</LeagueSpartanTiny>\r\n            <Icon30x40pxPointer\r\n              onClick={() => {\r\n                setEditSupplierDisplay(true);\r\n              }}\r\n              src=\"/Supplier_Icon.svg\"\r\n            ></Icon30x40pxPointer>\r\n            </FlexColumnDiv>\r\n           \r\n            </FlexDivSpaceAround>\r\n\r\n            <Icon30x40pxPointer\r\n              onClick={() => {\r\n                onClose();\r\n              }}\r\n              src=\"/Close.svg\"\r\n            ></Icon30x40pxPointer>\r\n        \r\n          </FlexRowContHalfHeight>\r\n\r\n          <FlexRowContHalfHeightFlexStart></FlexRowContHalfHeightFlexStart>\r\n\r\n          {/* <FlexColumnContHalfHeightSpaceBetween> */}\r\n            {/* <FlexRowContFlexStart>\r\n              <LeagueSpartanHeaderSmall>Suppliers:</LeagueSpartanHeaderSmall>\r\n              {Product.Supplier.map((o, i) => (\r\n                <FlexDiv key={i}>\r\n                  <MediumHeader marginright=\"0px\">{o.User.Name}</MediumHeader>\r\n                  <Icon30px20pxPointer\r\n                    onClick={() => {\r\n                      RemoveSupplierFromProduct(Product.Id, o.User.Id);\r\n                    }}\r\n                    src=\"/Garbage_Icon.svg\"\r\n                  ></Icon30px20pxPointer>\r\n                  <MediumHeader marginright=\"0px\">,</MediumHeader>\r\n                </FlexDiv>\r\n              ))}\r\n            </FlexRowContFlexStart> */}\r\n\r\n            {/* <FlexRowContFlexStart>\r\n              <LeagueSpartanHeaderSmall>Product Link:</LeagueSpartanHeaderSmall>\r\n              <a\r\n                href={\"https://\" + Product.ProductLink}\r\n                target={\"_blank\"}\r\n                rel=\"noreferrer\"\r\n              >\r\n                <SmallHeader>{Product.ProductLink}</SmallHeader>\r\n              </a>\r\n            </FlexRowContFlexStart> */}\r\n\r\n          {/* </FlexColumnContHalfHeightSpaceBetween> */}\r\n\r\n          <FlexRowContHalfHeightFlexStart>\r\n            <LeagueSpartanHeaderSmall>Description:</LeagueSpartanHeaderSmall>\r\n            <RegularTextWithMargins>\r\n              {Product.Description}\r\n            </RegularTextWithMargins>\r\n          </FlexRowContHalfHeightFlexStart>\r\n\r\n          <FlexRowContHalfHeightFlexStart>\r\n            <LeagueSpartanHeaderSmall>Taxes:</LeagueSpartanHeaderSmall>\r\n            {Product.SalesTax.map((o, i) => (\r\n              <RegularTextWithMargins key={i}>\r\n                {o.TaxCode}: {o.Rate}%\r\n              </RegularTextWithMargins>\r\n            ))}\r\n            \r\n            {/* <FlexRowContFlexStart>\r\n              <LeagueSpartanHeaderSmall>SKU:</LeagueSpartanHeaderSmall>\r\n              <SmallHeader>\r\n                {Product.Code === null ? \"N/A\" : Product.Code}\r\n              </SmallHeader>\r\n            </FlexRowContFlexStart> */}\r\n          </FlexRowContHalfHeightFlexStart>\r\n\r\n          <FlexRowContHalfHeightFlexStart>\r\n            <LeagueSpartanHeaderSmall>Pricing:</LeagueSpartanHeaderSmall>\r\n            <RegularTextWithMargins>\r\n              Original Price: ${Product.OriginalPrice.toFixed(4)}\r\n            </RegularTextWithMargins>\r\n            <RegularTextWithMargins>\r\n              Markup: {Product.Markup.toFixed(2)}%\r\n            </RegularTextWithMargins>\r\n            <RegularTextWithMargins>\r\n              UnitPrice: ${Product.UnitPrice.toFixed(2)}\r\n            </RegularTextWithMargins>\r\n            <RegularTextWithMargins>\r\n              Unit: {Product.Unit}\r\n            </RegularTextWithMargins>\r\n          </FlexRowContHalfHeightFlexStart>\r\n\r\n          <FlexRowContHalfHeightFlexStart>\r\n          <LeagueSpartanHeaderSmall>Installation:</LeagueSpartanHeaderSmall>\r\n            <RegularTextWithMargins>\r\n              Install Speed: {Product.InstallSpeed.toFixed(4)}\r\n            </RegularTextWithMargins>\r\n            <RegularTextWithMargins>\r\n              Allowance: {Product.Allowance}%\r\n            </RegularTextWithMargins>\r\n            <RegularTextWithMargins>\r\n              Setup Time: {Product.SetupTime} Hours\r\n            </RegularTextWithMargins>\r\n            <RegularTextWithMargins>\r\n              Minimum: {Product.Minimum}\r\n            </RegularTextWithMargins>\r\n          </FlexRowContHalfHeightFlexStart>\r\n\r\n          <FlexRowContHalfHeightFlexStart>\r\n          <LeagueSpartanHeaderSmall>Conversion:</LeagueSpartanHeaderSmall>\r\n            <RegularTextWithMargins>\r\n              Convert: {Product.Convert === false ? \"No\" : \"Yes\"}\r\n            </RegularTextWithMargins>\r\n            <RegularTextWithMargins>\r\n              Denominator: {Product.Denominator}\r\n            </RegularTextWithMargins>\r\n            <RegularTextWithMargins>\r\n              Display Unit:{\" \"}\r\n              {Product.DisplayUnit === \"\" ? \"N/A\" : Product.DisplayUnit}\r\n            </RegularTextWithMargins>\r\n          </FlexRowContHalfHeightFlexStart>\r\n\r\n          <FlexRowContFullWidth>\r\n            <FlexRowCont100PercentFlexEnd>\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryRed}\r\n                onClick={() => {\r\n                  setDeleteProduct(true);\r\n                }}\r\n              >\r\n                Delete Product\r\n              </RegularResponsiveButton>\r\n            </FlexRowCont100PercentFlexEnd>\r\n\r\n            <DeleteConfirmWindow\r\n              deleteOpen={deleteProduct}\r\n              onDeleteFunction={onDelete}\r\n              closeDel={() => {\r\n                setDeleteProduct(false);\r\n              }}\r\n            ></DeleteConfirmWindow>\r\n          </FlexRowContFullWidth>\r\n        </FlexCont70PercentAuto>\r\n      </AbsoluteOverlayDivFullWidth>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nProductInfoCard.defaultProps = {\r\n  ProductID: 0,\r\n  ProductAdd: 0,\r\n  RefreshProductInfoCard: () => {},\r\n};\r\n\r\nexport default ProductInfoCard;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCategory,\r\n  GetStoreCategories,\r\n  GetStoreProducts,\r\n} from \"../../API_Functions/CatProduct_Functions\";\r\nimport Input from \"../../comps/Input\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  AutoSizeOverflowY,\r\n  Cont100Percent80PercentOverflowY,\r\n  FlexColumnContFullWidthOverflowY,\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n  FlexFixedCont,\r\n  FlexRowCont,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont100x8PercentSpaceAround,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFullWidth,\r\n  LeftItemWindowFixed,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { BlankDiv, FlexDivCenter } from \"../../StylesheetComps/Div\";\r\nimport { TextInput72Percent } from \"../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport { FixedOverlay1000vh } from \"../../StylesheetComps/OverlayCont\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanRegular,\r\n  StyledHRPropColour,\r\n  TinyTextItalics,\r\n  TitleFontSize100PercentPointer,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport DeleteConfirmWindow from \"../Windows/DeleteProduct\";\r\n\r\nconst ProductRelation = ({\r\n  open,\r\n  GetRelationsAgain,\r\n  onClose,\r\n  onFormComplete,\r\n  onRelationId,\r\n  RelatedProducts,\r\n  onPreview,\r\n  ProductName,\r\n  ProductID,\r\n  onDelRelation,\r\n  UpdateRFactor,\r\n}) => {\r\n  const [storeNewMetro] = useState(\"\");\r\n  const [RhFactor, setRhFactor] = useState(0);\r\n  const [Position, setPosition] = useState(0);\r\n  const [storeProducts, setStoreProducts] = useState([]);\r\n  const [allProductsInStore, setAllProductsInStore] = useState([]);\r\n  // const [storeSubCategories, setStoreSubCategories] = useState([]);\r\n  const [storeCategories, getStoreCategories] = useState([]);\r\n\r\n  const params = useParams();\r\n  const [ProductRelationId, setProductRelationId] = useState(0);\r\n  const [InputDisplay, setInputDisplay] = useState(\"none\");\r\n  const [RFactorDisplay, setRFactorDisplay] = useState(\"none\");\r\n  const [addItemDisplay, setAddItemDisplay] = useState(\"none\");\r\n  const [editItemDisplay, setEditItemDisplay] = useState(\"none\");\r\n  const [ItemName, setItemName] = useState(\"\");\r\n\r\n  const [rFactorDisplayPropCont, setRFactorDisplayPropCont] = useState(\"flex\");\r\n  const [secondaryProdCateType, setSecondaryProdCateType] = useState(1000);\r\n\r\n  const [relatedId, setRelatedId] = useState(0);\r\n  const [RFactorValue, setRFactorValue] = useState(0);\r\n  const [PositionValue, setPositionValue] = useState(0);\r\n\r\n  const [rfactorText, setRfactorText] = useState(0);\r\n  const [positionText, setPositionText] = useState(0);\r\n  const [productText, setProductText] = useState(\"\");\r\n\r\n  const [confirmDelete, setConfirmDelete] = useState(false);\r\n\r\n  const [parentId, setParentId] = useState(0);\r\n\r\n  const [rfactorDisplayProp, setRfactorDisplayProp] = useState(\"none\");\r\n  const [positionDisplayProp, setPositionDisplayProp] = useState(\"none\");\r\n  const [deleteItemId, setDeleteItemId] = useState(0);\r\n\r\n  const GetAllStoreProducts = async (storeid) => {\r\n    var data = await GetStoreProducts(storeid);\r\n    if (data !== null) {\r\n      setAllProductsInStore(data.products);\r\n    }\r\n  };\r\n\r\n  const GetStoreCategoriesFunct = async (storeid) => {\r\n    var data = await GetStoreCategories(storeid);\r\n    if (data != null) {\r\n      getStoreCategories(data.cate);\r\n    }\r\n  };\r\n\r\n  const GetCurrentCategories = async (cateid) => {\r\n    var data = await GetCategory(cateid);\r\n    if (data !== null) {\r\n      getStoreCategories(data.SubCategories);\r\n      setParentId(data.Parent_Id);\r\n    }\r\n  };\r\n\r\n  const Get_SubCategory_Product = async (catid) => {\r\n    var cate = await GetCategory(catid);\r\n    if (cate != null) {\r\n      // setStoreSubCategories(cate.SubCategories);\r\n      setStoreProducts(cate.Products);\r\n    }\r\n  };\r\n\r\n  const HandleAddRelation = async (\r\n    prod_id,\r\n    relatedprod_id,\r\n    rfactor,\r\n    position\r\n  ) => {\r\n    var resp = await axios.post(window.$DBURL + \"catalog/relation\", {\r\n      Id: prod_id,\r\n      Related_Id: relatedprod_id,\r\n      RFactor: rfactor,\r\n      Position: position,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetRelationsAgain();\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetStoreCategoriesFunct(params.Id);\r\n    GetAllStoreProducts(params.Id);\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    switch (secondaryProdCateType) {\r\n      case 2:\r\n        setRFactorDisplayPropCont(\"none\");\r\n        break;\r\n      case 3:\r\n        setRFactorDisplayPropCont(\"none\");\r\n        break;\r\n      default:\r\n        setRFactorDisplayPropCont(\"flex\");\r\n    }\r\n  }, [secondaryProdCateType]);\r\n\r\n  var relatedProductId = 0;\r\n\r\n  const ShowEditRelatedItemUI = async (o) => {\r\n    relatedProductId = o.Id;\r\n    setRFactorValue(o.RFactor);\r\n    setPositionValue(o.Position);\r\n    setRelatedId(o.Id);\r\n    setRfactorText(o.RFactor.toFixed(4));\r\n    setProductText(o.Name);\r\n    setPositionText(o.Position);\r\n    setAddItemDisplay(\"none\");\r\n    setEditItemDisplay(\"block\");\r\n  };\r\n\r\n  const CloseAndResetWindow = async (reset) => {\r\n    onFormComplete(reset);\r\n    onClose();\r\n    getStoreCategories([]);\r\n    // setStoreSubCategories([]);\r\n    setStoreProducts([]);\r\n    setInputDisplay(\"none\");\r\n    setStoreProducts([]);\r\n    setRFactorDisplay(\"none\");\r\n    setAddItemDisplay(\"none\");\r\n    // setCategoryName(\"\");\r\n  };\r\n\r\n  const ShowLinkNewProductUI = async () => {\r\n    setEditItemDisplay(\"none\");\r\n    setAddItemDisplay(\"flex\");\r\n  };\r\n\r\n  const SelectCategory = async (o) => {\r\n    Get_SubCategory_Product(o.Id);\r\n    // setIconSrc(\"/rightarrow.svg\");\r\n    // setCategoryName(o.Name);\r\n  };\r\n\r\n  const SelectProduct = async (o) => {\r\n    setProductRelationId(o.Id);\r\n    setSecondaryProdCateType(o.CateType);\r\n    setRFactorDisplay(\"block\");\r\n    setInputDisplay(\"block\");\r\n    setItemName(o.Name);\r\n  };\r\n\r\n  const ShowRFactorInfo = async (display) => {\r\n    if (display === \"none\") {\r\n      setRfactorDisplayProp(\"block\");\r\n    } else if (display === \"block\") {\r\n      setRfactorDisplayProp(\"none\");\r\n    }\r\n  };\r\n\r\n  const ShowPositionInfo = async (display) => {\r\n    if (display === \"none\") {\r\n      setPositionDisplayProp(\"block\");\r\n    } else if (display === \"block\") {\r\n      setPositionDisplayProp(\"none\");\r\n    }\r\n  };\r\n\r\n  const AddRelatedProduct = async (id, relatedid, rfactor, position) => {\r\n    HandleAddRelation(id, relatedid, rfactor, position);\r\n    alert(\"Item added\");\r\n  };\r\n\r\n  const FilterProducts = (productlist, text) => {\r\n    // setCategoryName(\"Search Results:\");\r\n    // setStoreSubCategories([]);\r\n    setStoreProducts(\r\n      productlist.filter((o) => {\r\n        return o.Name.toLowerCase().includes(text.toLowerCase());\r\n      })\r\n    );\r\n  };\r\n\r\n  const ResetAddUI = async () => {\r\n    setEditItemDisplay(\"none\");\r\n    setRfactorText(\"\");\r\n    setPositionText(\"\");\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <FixedOverlay1000vh>\r\n        <FlexFixedCont>\r\n          <LeftItemWindowFixed minwidth=\"40vw\">\r\n            <Cont100Percent80PercentOverflowY overflowx=\"hidden\">\r\n              <FlexDivCenter>\r\n                <LeagueSpartanRegular>{ProductName}</LeagueSpartanRegular>\r\n              </FlexDivCenter>\r\n              <FlexDiv>\r\n                <LeagueSpartanRegular>\r\n                  Current Linked Products:\r\n                </LeagueSpartanRegular>\r\n              </FlexDiv>\r\n\r\n              <FlexRowCont100PercentSpaceBetween>\r\n                <SmallHeader>Delete:</SmallHeader>\r\n                <SmallHeader width=\"180px\">Name:</SmallHeader>\r\n                <SmallHeader>RFactor:</SmallHeader>\r\n                <SmallHeader>Position:</SmallHeader>\r\n                <SmallHeader>Edit:</SmallHeader>\r\n              </FlexRowCont100PercentSpaceBetween>\r\n              <StyledHRPropColour\r\n                border={`0.5px solid ${ColorPalette.PrimaryGrey}`}\r\n              ></StyledHRPropColour>\r\n              <AutoSizeOverflowY>\r\n                <DeleteConfirmWindow\r\n                  deleteOpen={confirmDelete}\r\n                  onDeleteFunction={() => {\r\n                    relatedProductId = deleteItemId;\r\n                    onRelationId({ relatedProductId });\r\n                    setConfirmDelete(false);\r\n                  }}\r\n                  closeDel={() => {\r\n                    setConfirmDelete(false);\r\n                  }}\r\n                ></DeleteConfirmWindow>\r\n                {RelatedProducts.map((o, i) => (\r\n                  <FlexRowCont100PercentSpaceBetween>\r\n                    <Icon30px30pxPointer\r\n                      src=\"/Garbage_Icon.svg\"\r\n                      onClick={() => {\r\n                        setConfirmDelete(true);\r\n                        setDeleteItemId(o.Id);\r\n                      }}\r\n                    ></Icon30px30pxPointer>\r\n                    <SmallHeader width=\"150px\">{o.Name}</SmallHeader>\r\n\r\n                    <p>{o.RFactor.toFixed(4)}</p>\r\n                    <p>{o.Position}</p>\r\n\r\n                    <Icon30px30pxPointer\r\n                      src=\"/Editicon.svg\"\r\n                      onClick={() => {\r\n                        ShowEditRelatedItemUI(o);\r\n                      }}\r\n                    ></Icon30px30pxPointer>\r\n                  </FlexRowCont100PercentSpaceBetween>\r\n                ))}\r\n              </AutoSizeOverflowY>\r\n              <FlexRowCont\r\n                onClick={() => {\r\n                  onPreview({ storeNewMetro });\r\n                }}\r\n              >\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    ShowLinkNewProductUI();\r\n                  }}\r\n                >\r\n                  Link New Product\r\n                </RegularResponsiveButton>\r\n                <RegularResponsiveButton\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  onClick={() => {\r\n                    CloseAndResetWindow(storeNewMetro);\r\n                  }}\r\n                >\r\n                  Close\r\n                </RegularResponsiveButton>\r\n              </FlexRowCont>\r\n            </Cont100Percent80PercentOverflowY>\r\n          </LeftItemWindowFixed>\r\n\r\n          <LeftItemWindowFixed\r\n            width=\"40vw\"\r\n            display={addItemDisplay}\r\n            left=\"47vw\"\r\n          >\r\n            <FlexColumnFullWidth>\r\n              <TextInput72Percent\r\n                onChange={(e) => {\r\n                  FilterProducts(allProductsInStore, e.target.value);\r\n                }}\r\n                placeholder=\"Search for a product\"\r\n              ></TextInput72Percent>\r\n              <FlexRowContFullWidth alignitems=\"baseline\">\r\n                <FlexColumnFullWidth>\r\n                  <StyledHRPropColour\r\n                    border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n                  ></StyledHRPropColour>\r\n                  <br></br>\r\n                  <FlexRowContFlexStart>\r\n                    <Icon30px30pxPointer\r\n                      onClick={() => {\r\n                        if (parentId === 0) {\r\n                          GetStoreCategoriesFunct(params.Id);\r\n                          Get_SubCategory_Product(0);\r\n                        } else {\r\n                          GetCurrentCategories(parentId);\r\n                          Get_SubCategory_Product(parentId);\r\n                        }\r\n                      }}\r\n                      src=\"/leftarrow.svg\"\r\n                    ></Icon30px30pxPointer>\r\n                    <LeagueSpartanRegular>Subcategories</LeagueSpartanRegular>\r\n                  </FlexRowContFlexStart>\r\n                  {storeCategories.map((o, i) => (\r\n                    <TitleFontSize100PercentPointer\r\n                      onClick={() => {\r\n                        SelectCategory(o);\r\n                        GetCurrentCategories(o?.Id);\r\n                      }}\r\n                    >\r\n                      {o.Name}\r\n                    </TitleFontSize100PercentPointer>\r\n                  ))}\r\n                  <br></br>\r\n                  <StyledHRPropColour\r\n                    border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n                  ></StyledHRPropColour>\r\n                  <br></br>\r\n\r\n                  <FlexColumnCont></FlexColumnCont>\r\n                </FlexColumnFullWidth>\r\n\r\n                <FlexColumnFullWidth>\r\n                  <StyledHRPropColour\r\n                    border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n                  ></StyledHRPropColour>\r\n                  <br></br>\r\n                  <FlexRowContFlexStart>\r\n                    <LeagueSpartanRegular>Products</LeagueSpartanRegular>\r\n                  </FlexRowContFlexStart>\r\n                  {storeProducts.map((o, i) => (\r\n                    <TitleFontSize100PercentPointer\r\n                      onClick={() => {\r\n                        SelectProduct(o);\r\n                      }}\r\n                    >\r\n                      {o.Name}\r\n                    </TitleFontSize100PercentPointer>\r\n                  ))}\r\n\r\n                  <FlexColumnCont></FlexColumnCont>\r\n                </FlexColumnFullWidth>\r\n\r\n                <FlexColumnContFullWidthOverflowY>\r\n                  <StyledHRPropColour\r\n                    width=\"95%\"\r\n                    border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n                  ></StyledHRPropColour>\r\n                  <br></br>\r\n                  <FlexColumnFullWidth display={RFactorDisplay}>\r\n                    <FlexColumnFullWidth display={rFactorDisplayPropCont}>\r\n                      <BlankDiv>\r\n                        <LeagueSpartanRegular>RFactor</LeagueSpartanRegular>\r\n                        <Icon30px30pxPointer\r\n                          src=\"/questionmark.svg\"\r\n                          onClick={() => {\r\n                            ShowRFactorInfo(rfactorDisplayProp);\r\n                          }}\r\n                        ></Icon30px30pxPointer>\r\n                      </BlankDiv>\r\n                      <TinyTextItalics display={rfactorDisplayProp}>\r\n                        (RFactor is the ratio of quantity of linked product to\r\n                        primary product. Ex. If primary product quanity is 2,\r\n                        linked product quantity is 1, then RFactor is 1/2 = 0.5.\r\n                        RFactor is not required for labor hours)\r\n                      </TinyTextItalics>\r\n                      <Input\r\n                        placeholder={\"RFactor\"}\r\n                        inputwidth=\"80%\"\r\n                        inputheight={\"5%\"}\r\n                        inputdisplay={InputDisplay}\r\n                        onChange={(e) => {\r\n                          setRhFactor(e.target.value);\r\n                        }}\r\n                      ></Input>\r\n                    </FlexColumnFullWidth>\r\n                    <FlexColumnFullWidth>\r\n                      <BlankDiv>\r\n                        <LeagueSpartanRegular>Position</LeagueSpartanRegular>\r\n                        <Icon30px30pxPointer\r\n                          src=\"/questionmark.svg\"\r\n                          onClick={() => {\r\n                            ShowPositionInfo(positionDisplayProp);\r\n                          }}\r\n                        ></Icon30px30pxPointer>\r\n                      </BlankDiv>\r\n                      <TinyTextItalics display={positionDisplayProp}>\r\n                        (Position is the place where the product will be\r\n                        displayed on screen. Position 2 will be displayed after\r\n                        position 1, for example)\r\n                      </TinyTextItalics>\r\n                      <Input\r\n                        placeholder={\"Position\"}\r\n                        inputwidth=\"80%\"\r\n                        inputheight={\"5%\"}\r\n                        inputdisplay={InputDisplay}\r\n                        onChange={(e) => {\r\n                          setPosition(e.target.value);\r\n                        }}\r\n                      ></Input>\r\n                    </FlexColumnFullWidth>\r\n                    <RegularResponsiveButton\r\n                      height=\"50px\"\r\n                      onClick={() => {\r\n                        AddRelatedProduct(\r\n                          ProductID,\r\n                          ProductRelationId,\r\n                          RhFactor,\r\n                          Position\r\n                        );\r\n                      }}\r\n                    >\r\n                      Add {ItemName}\r\n                    </RegularResponsiveButton>\r\n                  </FlexColumnFullWidth>\r\n                </FlexColumnContFullWidthOverflowY>\r\n              </FlexRowContFullWidth>\r\n            </FlexColumnFullWidth>\r\n          </LeftItemWindowFixed>\r\n\r\n          <LeftItemWindowFixed display={editItemDisplay} left=\"50%\">\r\n            <FlexColumnFullWidth overflowx=\"hidden\">\r\n              <LeagueSpartanRegular>Edit {productText}</LeagueSpartanRegular>\r\n              <FlexColumnFullWidth>\r\n                <BlankDiv>\r\n                  <LeagueSpartanRegular>RFactor:</LeagueSpartanRegular>\r\n                  <TextInput72Percent\r\n                    key={rfactorText}\r\n                    defaultValue={rfactorText}\r\n                    onChange={(e) => {\r\n                      setRFactorValue(e.target.value);\r\n                    }}\r\n                  ></TextInput72Percent>\r\n                </BlankDiv>\r\n                <BlankDiv>\r\n                  <LeagueSpartanRegular>Position:</LeagueSpartanRegular>\r\n                  <TextInput72Percent\r\n                    key={positionText}\r\n                    defaultValue={positionText}\r\n                    onChange={(e) => {\r\n                      setPositionValue(e.target.value);\r\n                    }}\r\n                  ></TextInput72Percent>\r\n                </BlankDiv>\r\n                <br></br>\r\n                <FlexRowCont100x8PercentSpaceAround>\r\n                  <RegularResponsiveButton\r\n                    onClick={() => {\r\n                      UpdateRFactor({ RFactorValue, PositionValue, relatedId });\r\n                    }}\r\n                  >\r\n                    Save\r\n                  </RegularResponsiveButton>\r\n                  <RegularResponsiveButton\r\n                    bgcolor={ColorPalette.PrimaryRed}\r\n                    onClick={() => {\r\n                      ResetAddUI();\r\n                    }}\r\n                  >\r\n                    Close\r\n                  </RegularResponsiveButton>\r\n                </FlexRowCont100x8PercentSpaceAround>\r\n                <br></br>\r\n              </FlexColumnFullWidth>\r\n            </FlexColumnFullWidth>\r\n          </LeftItemWindowFixed>\r\n        </FlexFixedCont>{\" \"}\r\n      </FixedOverlay1000vh>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nProductRelation.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  onRelationId: () => {},\r\n  GetRelationsAgain: () => {},\r\n  UpdateRFactor: () => {},\r\n  UpdatePosition: () => {},\r\n  ProductID: 0,\r\n  ProductName: \"\",\r\n  RelatedProducts: [\"name\"],\r\n  StoreID: 0,\r\n};\r\n\r\nexport default ProductRelation;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport Input from \"../../comps/Input\";\r\nimport { TextInput300x50 } from \"../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  Cont100Percent80PercentOverflowY,\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n  FlexFixedCont,\r\n  FlexRowCont,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFullWidth,\r\n  LeftItemWindowFixed,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { BlankDiv, FlexDivCenter } from \"../../StylesheetComps/Div\";\r\nimport { Icon20x20 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { TextInput72Percent } from \"../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport { FixedOverlay1000vh } from \"../../StylesheetComps/OverlayCont\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanRegular,\r\n  RegularText,\r\n  SmallText,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst ProductToolRelation = ({\r\n  UpdateRelatedTool,\r\n  open,\r\n  onClose,\r\n  GetRelationsAgain,\r\n  onRelationId,\r\n  RelatedTools,\r\n  ProductName,\r\n  ProductID,\r\n}) => {\r\n  const [storeToolkits, setStoreToolkits] = useState([]);\r\n  // const [storeSubToolkits, setStoreSubToolkits] = useState([]);\r\n  const [storeTools, setStoreTools] = useState([]);\r\n  const [allToolsInStore, setAllToolsInStore] = useState([]);\r\n  const params = useParams();\r\n  const [ProductRelationId, setProductRelationId] = useState(0);\r\n  const [ItemName, setItemName] = useState(\"\");\r\n  const [subToolKitHeader, setSubToolKitHeader] = useState(\"SubToolKit:\");\r\n  const [RFactorDisplay, setRFactorDisplay] = useState(\"none\");\r\n  const [addItemDisplay, setAddItemDisplay] = useState(\"none\");\r\n  // const [iconSrc, setIconSrc] = useState(\"/leftarrow.svg\");\r\n  const [categoryName, setCategoryName] = useState(\"\");\r\n\r\n  //EDIT RFACTOR\r\n  const [editTriggerInputDisplay, setEditTriggerInputDisplay] =\r\n    useState(\"none\");\r\n  const [editTriggerLabelDisplay, setEditTriggerLabelDisplay] =\r\n    useState(\"flex\");\r\n  const [editTriggerId, setEditTriggerId] = useState(0);\r\n  const [triggerValue, setTriggerValue] = useState(0);\r\n  const [isNewToolDeliveryChecked, setIsNewToolDeliveryChecked] =\r\n    useState(false);\r\n\r\n  const [triggerDisplayProp, setTriggerDisplayProp] = useState(\"none\");\r\n  const [toolsDisplayProp, setToolsDisplayProp] = useState(\"none\");\r\n\r\n  const [parentId, setParentId] = useState(0);\r\n\r\n  var relatedProductId = 0;\r\n\r\n  const GetStoreToolKitsFunc = async (store_id) => {\r\n    var resp = await axios.get(window.$DBURL + \"tool/kit/store/\" + store_id);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        setStoreToolkits(resp.data.toolkit);\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetStoreTools = async (store_id) => {\r\n    var resp = await axios.get(window.$DBURL + \"store/\" + store_id + \"/tools\");\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.tools !== null) {\r\n          setAllToolsInStore(resp.data.tools);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetToolsOfKit = async (kitId) => {\r\n    var resp = await axios.get(window.$DBURL + \"tool/kit/\" + kitId);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.toolkit !== null) {\r\n          setCategoryName(resp.data.toolkit.Name);\r\n          setParentId(resp.data.toolkit.Parent_Id);\r\n          if (resp.data.toolkit.Tools !== null) {\r\n            if (resp.data.toolkit.Tools.length > 0) {\r\n              setStoreTools(resp.data.toolkit.Tools);\r\n            }\r\n          }\r\n          if (resp.data.toolkit.SubKits !== null) {\r\n            setSubToolKitHeader(resp.data.toolkit.Name);\r\n            setStoreToolkits(resp.data.toolkit.SubKits);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const HandleAddRelation = async () => {\r\n    var resp = await axios.post(window.$DBURL + \"tool/prodtool\", {\r\n      Product_Id: ProductID,\r\n      Tool_Id: ProductRelationId,\r\n      Trigger: triggerValue,\r\n      ListAsDelivery: isNewToolDeliveryChecked,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetRelationsAgain();\r\n      setIsNewToolDeliveryChecked(false);\r\n    }\r\n  };\r\n\r\n  const FilterTools = (toollist, text) => {\r\n    if (toolsDisplayProp === \"none\") {\r\n      setToolsDisplayProp(\"flex\");\r\n    }\r\n    setCategoryName(\"Search Results:\");\r\n    setStoreTools(\r\n      toollist.filter((o) => {\r\n        return o.Name.toLowerCase().includes(text.toLowerCase());\r\n      })\r\n    );\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetStoreTools(params.Id);\r\n    GetStoreToolKitsFunc(params.Id);\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const UpdateCheckbox = async (\r\n    o,\r\n    i,\r\n    checkboxCheck,\r\n    triggerValue,\r\n    editTriggerId\r\n  ) => {\r\n    if (checkboxCheck === true) {\r\n      checkboxCheck = true;\r\n      UpdateRelatedTool({ triggerValue, editTriggerId, checkboxCheck });\r\n    } else {\r\n      checkboxCheck = false;\r\n      UpdateRelatedTool({ triggerValue, editTriggerId, checkboxCheck });\r\n    }\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <FixedOverlay1000vh>\r\n        <FlexFixedCont>\r\n          <LeftItemWindowFixed minwidth=\"40vw\">\r\n            <Cont100Percent80PercentOverflowY overflowx=\"hidden\">\r\n              <FlexDivCenter>\r\n                <LeagueSpartanRegular>{ProductName}</LeagueSpartanRegular>\r\n              </FlexDivCenter>\r\n\r\n              <FlexDiv>\r\n                <LeagueSpartanRegular>\r\n                  Current Linked Tools:\r\n                </LeagueSpartanRegular>\r\n              </FlexDiv>\r\n\r\n              <FlexDiv>\r\n                <FlexColumnCont\r\n                  borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n                  flexdirection=\"row\"\r\n                  justifycontent=\"flex-start\"\r\n                >\r\n                  <FlexColumnCont\r\n                    width=\"36%\"\r\n                    flexdirection=\"row\"\r\n                    justifycontent=\"flex-start\"\r\n                  >\r\n                    <SmallHeader>Name:</SmallHeader>\r\n                  </FlexColumnCont>\r\n                  <FlexColumnCont\r\n                    width=\"40%\"\r\n                    flexdirection=\"row\"\r\n                    justifycontent=\"flex-start\"\r\n                  >\r\n                    <SmallHeader>Trigger:</SmallHeader>\r\n                  </FlexColumnCont>\r\n                  <FlexColumnCont\r\n                    width=\"20%\"\r\n                    flexdirection=\"row\"\r\n                    justifycontent=\"flex-start\"\r\n                  >\r\n                    <SmallHeader>List-As-Delivery:</SmallHeader>\r\n                  </FlexColumnCont>\r\n                </FlexColumnCont>\r\n              </FlexDiv>\r\n              <FlexColumnFullWidth overflowy=\"auto\">\r\n                {RelatedTools.map((o, i) => (\r\n                  <FlexColumnCont\r\n                    borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n                    justifycontent=\"flex-start\"\r\n                    flexdirection=\"row\"\r\n                  >\r\n                    <FlexColumnCont\r\n                      justifycontent=\"flex-start\"\r\n                      width=\"36%\"\r\n                      height=\"100%\"\r\n                      flexdirection=\"row\"\r\n                    >\r\n                      <RegularText>{o.Name}</RegularText>\r\n                    </FlexColumnCont>\r\n\r\n                    <FlexColumnCont\r\n                      width=\"40%\"\r\n                      height=\"100%\"\r\n                      flexdirection=\"row\"\r\n                      justifycontent=\"flex-start\"\r\n                    >\r\n                      <FlexColumnCont\r\n                        display={editTriggerInputDisplay}\r\n                        width=\"35%\"\r\n                        justifycontent=\"flex-start\"\r\n                        height=\"100%\"\r\n                        flexdirection=\"row\"\r\n                      >\r\n                        <TextInput300x50\r\n                          inputwidth=\"30%\"\r\n                          inputheight=\"20%\"\r\n                          inputmargin=\"0\"\r\n                          inputdisplay={editTriggerInputDisplay}\r\n                          defaultValue={o.Trigger}\r\n                          onChange={(e) => {\r\n                            setEditTriggerInputDisplay(\"block\");\r\n                            setEditTriggerId(o.Id);\r\n                            setTriggerValue(e.target.value);\r\n                          }}\r\n                        ></TextInput300x50>\r\n                      </FlexColumnCont>\r\n                      <RegularResponsiveButton\r\n                        display={editTriggerInputDisplay}\r\n                        onClick={() => {\r\n                          let checkboxCheck = o.ListAsDelivery;\r\n                          UpdateRelatedTool({\r\n                            triggerValue,\r\n                            editTriggerId,\r\n                            checkboxCheck,\r\n                          });\r\n                          setEditTriggerInputDisplay(\"none\");\r\n                          setEditTriggerLabelDisplay(\"flex\");\r\n                        }}\r\n                      >\r\n                        Save\r\n                      </RegularResponsiveButton>\r\n\r\n                      <FlexColumnCont\r\n                        display={editTriggerLabelDisplay}\r\n                        width=\"40%\"\r\n                        height=\"100%\"\r\n                        flexdirection=\"row\"\r\n                      >\r\n                        <RegularText>{o.Trigger}</RegularText>\r\n                        <Icon30px30pxPointer\r\n                          src=\"/Editicon.svg\"\r\n                          onClick={() => {\r\n                            relatedProductId = o.Id;\r\n                            setEditTriggerInputDisplay(true);\r\n                            setEditTriggerLabelDisplay(\"none\");\r\n                          }}\r\n                        ></Icon30px30pxPointer>\r\n                      </FlexColumnCont>\r\n                    </FlexColumnCont>\r\n\r\n                    <FlexColumnCont\r\n                      width=\"20%\"\r\n                      height=\"100%\"\r\n                      justifycontent=\"space-between\"\r\n                      flexdirection=\"row\"\r\n                    >\r\n                      <TextInput300x50\r\n                        defaultChecked={o.ListAsDelivery}\r\n                        onChange={(e) => {\r\n                          setEditTriggerInputDisplay(\"none\");\r\n                          setEditTriggerLabelDisplay(\"flex\");\r\n                          UpdateCheckbox(\r\n                            o,\r\n                            i,\r\n                            e.target.checked,\r\n                            o.Trigger,\r\n                            o.Id\r\n                          );\r\n                        }}\r\n                        inputwidth=\"50%\"\r\n                        inputheight=\"25px\"\r\n                        type=\"checkbox\"\r\n                      ></TextInput300x50>\r\n                      <Icon30px30pxPointer\r\n                        src=\"/Garbage_Icon.svg\"\r\n                        onClick={() => {\r\n                          relatedProductId = o.Id;\r\n                          onRelationId({ relatedProductId });\r\n                        }}\r\n                      ></Icon30px30pxPointer>\r\n                    </FlexColumnCont>\r\n                  </FlexColumnCont>\r\n                ))}\r\n              </FlexColumnFullWidth>\r\n\r\n              <FlexRowCont>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    setAddItemDisplay(\"flex\");\r\n                  }}\r\n                >\r\n                  Add\r\n                </RegularResponsiveButton>\r\n                <RegularResponsiveButton\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  onClick={() => {\r\n                    onClose();\r\n                    setRFactorDisplay(\"none\");\r\n                    setAddItemDisplay(\"none\");\r\n                    setCategoryName(\"\");\r\n                    setStoreTools([]);\r\n                    setToolsDisplayProp(\"none\");\r\n                  }}\r\n                >\r\n                  Close\r\n                </RegularResponsiveButton>\r\n              </FlexRowCont>\r\n            </Cont100Percent80PercentOverflowY>\r\n          </LeftItemWindowFixed>\r\n\r\n          <LeftItemWindowFixed\r\n            width=\"45vw\"\r\n            left=\"48vw\"\r\n            display={addItemDisplay}\r\n          >\r\n            <FlexColumnFullWidth>\r\n              <TextInput72Percent\r\n                onChange={(e) => {\r\n                  FilterTools(allToolsInStore, e.target.value);\r\n                }}\r\n                placeholder=\"Search for a Tool\"\r\n              ></TextInput72Percent>\r\n              <FlexColumnFullWidth>\r\n                <FlexRowContFullWidth alignitems=\"baseline\">\r\n                  <FlexColumnFullWidth display=\"flex\">\r\n                    <FlexColumnFullWidth overflowy=\"auto\">\r\n                      <FlexRowContFlexStart>\r\n                        <Icon30px30pxPointer\r\n                          onClick={() => {\r\n                            if (parentId === 0) {\r\n                              GetStoreToolKitsFunc(params.Id);\r\n                              setSubToolKitHeader(\"\");\r\n                              setCategoryName(\"\");\r\n                              setStoreTools([]);\r\n                            } else {\r\n                              GetToolsOfKit(parentId);\r\n                            }\r\n                          }}\r\n                          src=\"/leftarrow.svg\"\r\n                        ></Icon30px30pxPointer>\r\n                        <LeagueSpartanRegular>\r\n                          {subToolKitHeader} Subcategories\r\n                        </LeagueSpartanRegular>\r\n                      </FlexRowContFlexStart>\r\n                      {storeToolkits.map((o, i) => (\r\n                        <BlankDiv>\r\n                          <FlexRowContFullWidth\r\n                            onClick={() => {\r\n                              setRFactorDisplay(\"none\");\r\n                              setStoreTools([]);\r\n                              GetToolsOfKit(o.Id);\r\n                              setToolsDisplayProp(\"flex\");\r\n                            }}\r\n                          >\r\n                            <FlexRowContFullWidth>\r\n                              <RegularText>{o.Name}</RegularText>\r\n                            </FlexRowContFullWidth>\r\n                          </FlexRowContFullWidth>\r\n                        </BlankDiv>\r\n                      ))}\r\n                    </FlexColumnFullWidth>\r\n                  </FlexColumnFullWidth>\r\n                  <FlexColumnFullWidth display={toolsDisplayProp}>\r\n                    {/* <LeagueSpartanRegular>{categoryName}</LeagueSpartanRegular> */}\r\n                    {/* <LeagueSpartanRegular>\r\n                      {subToolKitHeader}\r\n                    </LeagueSpartanRegular>\r\n                    <FlexColumnFullWidth maxheight=\"280px\" overflowy=\"auto\">\r\n                      {storeSubToolkits.map((o, i) => (\r\n                        <BlankDiv>\r\n                          <FlexRowContFullWidth\r\n                            onClick={() => {\r\n                              setRFactorDisplay(\"none\");\r\n                              setStoreSubToolkits([]);\r\n                              setStoreTools([]);\r\n                              GetToolsOfKit(o.Id);\r\n                              setToolsDisplayProp(\"flex\");\r\n                              setIconSrc(\"/rightarrow.svg\");\r\n                            }}\r\n                          >\r\n                            <FlexRowContFullWidth>\r\n                              <RegularText>{o.Name}</RegularText>\r\n                            </FlexRowContFullWidth>\r\n                            <Icon20x20 src=\"/Green Button.svg\"></Icon20x20>\r\n                            <Icon20x20 src={iconSrc}></Icon20x20>\r\n                          </FlexRowContFullWidth>\r\n                        </BlankDiv>\r\n                      ))}\r\n                    </FlexColumnFullWidth> */}\r\n                    <FlexColumnFullWidth overflowy=\"auto\" maxheight=\"auto\">\r\n                      <FlexRowContFlexStart>\r\n                        <LeagueSpartanRegular>\r\n                          {categoryName} Tools:\r\n                        </LeagueSpartanRegular>\r\n                      </FlexRowContFlexStart>\r\n                      {storeTools.map((o, i) => (\r\n                        <BlankDiv>\r\n                          <FlexRowContFullWidth\r\n                            onClick={() => {\r\n                              setProductRelationId(o.Id);\r\n                              setRFactorDisplay(\"block\");\r\n                              setItemName(o.Name);\r\n                            }}\r\n                          >\r\n                            <FlexRowContFullWidth>\r\n                              <RegularText>{o.Name}</RegularText>\r\n                            </FlexRowContFullWidth>\r\n                          </FlexRowContFullWidth>\r\n                        </BlankDiv>\r\n                      ))}\r\n                    </FlexColumnFullWidth>\r\n                  </FlexColumnFullWidth>\r\n                  <FlexColumnFullWidth overflowy=\"auto\">\r\n                    <FlexColumnFullWidth display={RFactorDisplay}>\r\n                      <FlexDiv>\r\n                        <LeagueSpartanRegular>{\"Trigger\"}</LeagueSpartanRegular>\r\n                        <Icon20x20\r\n                          src=\"/questionmark.svg\"\r\n                          onClick={() => {\r\n                            if (triggerDisplayProp === \"none\") {\r\n                              setTriggerDisplayProp(\"block\");\r\n                            } else if (triggerDisplayProp === \"block\") {\r\n                              setTriggerDisplayProp(\"none\");\r\n                            }\r\n                          }}\r\n                        ></Icon20x20>\r\n                      </FlexDiv>\r\n                      <SmallText display={triggerDisplayProp}>\r\n                        (Trigger is minimum loads that a tool will be\r\n                        automatically added in an estimate. Ex. The skidsteer will be\r\n                        used if the material to be transported is more than 5\r\n                        loads of the skidsteer. Skidsteer will be not used if\r\n                        material is less than 5 loads. Then the Trigger for\r\n                        skidsteer is 5.)\r\n                      </SmallText>\r\n                      <Input\r\n                        placeholder={\"Trigger\"}\r\n                        inputwidth=\"80%\"\r\n                        inputheight={\"5%\"}\r\n                        inputdisplay={RFactorDisplay}\r\n                        onChange={(e) => {\r\n                          setTriggerValue(e.target.value);\r\n                        }}\r\n                      ></Input>\r\n                      <FlexRowCont>\r\n                        <LeagueSpartanRegular>\r\n                          {\"List-As-Delivery\"}\r\n                        </LeagueSpartanRegular>\r\n                        <TextInput300x50\r\n                          checked={isNewToolDeliveryChecked}\r\n                          onChange={(e) => {\r\n                            setIsNewToolDeliveryChecked(e.target.checked);\r\n                          }}\r\n                          inputwidth=\"50%\"\r\n                          inputheight=\"25px\"\r\n                          type=\"checkbox\"\r\n                        ></TextInput300x50>\r\n                      </FlexRowCont>\r\n\r\n                      <RegularResponsiveButton\r\n                        onClick={() => {\r\n                          HandleAddRelation();\r\n                          // setRFactorDisplay(\"none\");\r\n                          // setAddItemDisplay(\"none\");\r\n                          setStoreTools([]);\r\n                          setToolsDisplayProp(\"none\");\r\n                          setCategoryName(\"\");\r\n\r\n                          GetStoreToolKitsFunc(params.Id);\r\n                          setSubToolKitHeader(\"\");\r\n                        }}\r\n                      >\r\n                        Add {ItemName}\r\n                      </RegularResponsiveButton>\r\n                    </FlexColumnFullWidth>\r\n                  </FlexColumnFullWidth>\r\n                </FlexRowContFullWidth>\r\n              </FlexColumnFullWidth>\r\n            </FlexColumnFullWidth>\r\n          </LeftItemWindowFixed>\r\n        </FlexFixedCont>{\" \"}\r\n      </FixedOverlay1000vh>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nProductToolRelation.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  onRelationId: () => {},\r\n  GetRelationsAgain: () => {},\r\n  UpdateRelatedTool: () => {},\r\n  ProductID: 0,\r\n  ProductName: \"\",\r\n  RelatedTools: [\"name\"],\r\n  StoreID: 0,\r\n};\r\n\r\nexport default ProductToolRelation;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  AddProduct,\r\n  GetCategory,\r\n  GetProduct,\r\n  UpdateProduct,\r\n} from \"../../../API_Functions/CatProduct_Functions\";\r\nimport { GetTaxesForStore } from \"../../../API_Functions/Store_Functions\";\r\nimport { UploadFileToCloud } from \"../../../API_Functions/Utility_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont85vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n  FlexRowContFullWidth,\r\n  FlexRowContHalfHeightFlexStart,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FlexColumnDiv, FlexDivMargins } from \"../../../StylesheetComps/Div\";\r\nimport { Icon15x15, Icon20x20 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { Image40x40px } from \"../../../StylesheetComps/Imgs/Images\";\r\nimport { TextAreaLarge } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  HundredPercentFlexDiv,\r\n  Icon30px20pxPointer,\r\n} from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  RegularText,\r\n  RegularTextBoldRed,\r\n  SmallTitleBold,\r\n  StyledHRPropColour,\r\n  TinyTextItalics,\r\n  TitleFontSize100PercentPointer,\r\n} from \"../../../StylesheetComps/Titles\";\r\nimport Input from \"../../Input\";\r\n\r\nconst ProductWindow = ({\r\n  open,\r\n  onClose,\r\n  updateProp,\r\n  productID,\r\n  categoryId,\r\n  onUpdated,\r\n  taxbordercolor,\r\n}) => {\r\n  const [productObj, setProdcutObj] = useState(null);\r\n\r\n  const params = useParams();\r\n\r\n  const [editTaxDisplay, setEditTaxDisplay] = useState(\"none\");\r\n  const [photoDisplay, setPhotoDisplay] = useState(\"block\");\r\n  const [errorText] = useState(\"\");\r\n  const [taxMap, setTaxMap] = useState([]);\r\n\r\n  const [productUrlDisplay, setProductUrlDisplay] = useState(\"\");\r\n  const [positionDisplayProp, setPositionDisplayProp] = useState(\"none\");\r\n  const [installSpeedDisplayProp, setInstallSpeedDisplayProp] =\r\n    useState(\"none\");\r\n  const [\r\n    installSpeedDisplayPropContainer,\r\n    setInstallSpeedDisplayPropContainer,\r\n  ] = useState(\"flex\");\r\n  const [RoundupInstructionDisplay, setRoundupInstructionDisplay] =\r\n    useState(\"none\");\r\n  const [RestockInstructionDisplay, setRestockInstructionDisplay] =\r\n    useState(\"none\");\r\n\r\n  const [reStockDisplayProp, setReStockDisplayProp] = useState(\"none\");\r\n  const [convertUnitDisplayProp, setConvertUnitDisplayProp] = useState(\"none\");\r\n  const [convertUnitInstructionDisplay, setConvertUnitInstructionDisplay] =\r\n    useState(\"none\");\r\n  const [denominatorInstructionDisplay, setDenominatorInstructionDisplay] =\r\n    useState(\"none\");\r\n  const [displayUnitInstructionDisplay, setDisplayUnitInstructionDisplay] =\r\n    useState(\"none\");\r\n\r\n  var file = \"\";\r\n  var roundYes = productObj?.RoundUp;\r\n  var roundNo = !productObj?.RoundUp;\r\n  var convertYes = productObj?.Convert;\r\n  var convertNo = !productObj?.Convert;\r\n  var reStockYes = productObj?.ReStock;\r\n  var reStockNo = !productObj?.ReStock;\r\n  var roundToHalfYes = productObj?.RoundToHalf;\r\n  var roundToHalfNo = !productObj?.RoundToHalf;\r\n\r\n  function handleUpload(event) {\r\n    file = event.target.files[0];\r\n    UploadFile(productObj, file);\r\n  }\r\n\r\n  const UploadFile = async (product, file) => {\r\n    var pic = await UploadFileToCloud(file);\r\n    if (pic !== null) {\r\n      setProductUrlDisplay(pic);\r\n      product.ImageUrl = pic;\r\n      setPhotoDisplay(\"block\");\r\n      setProdcutObj(product);\r\n    }\r\n  };\r\n\r\n  const GetProductInfo = async (product_id) => {\r\n    var product = await GetProduct(product_id);\r\n    setProdcutObj(product);\r\n\r\n    if (product !== null) {\r\n      if (product.ImageUrl !== null) {\r\n        setProductUrlDisplay(product.ImageUrl);\r\n      }\r\n      if (product.ReStock === true) {\r\n        setReStockDisplayProp(\"flex\");\r\n      }\r\n      if (product.Convert === true) {\r\n        setConvertUnitDisplayProp(\"flex\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const SetTaxOptions = async (storeid) => {\r\n    const taxlist = await GetTaxesForStore(storeid);\r\n    setTaxMap(taxlist);\r\n  };\r\n\r\n  const DeleteTax = async (product, taxid) => {\r\n    if (product.Id === 0) {\r\n      product.SalesTax?.forEach((element, index) => {\r\n        if (element.Tax_Id === taxid) product.SalesTax.splice(index, 1);\r\n      });\r\n    } else {\r\n      product.SalesTax?.forEach(async (element, index) => {\r\n        if (element.Tax_Id === taxid) {\r\n          await axios.delete(window.$DBURL + \"tax/prodtax/\" + element.Id);\r\n          product.SalesTax.splice(index, 1);\r\n        }\r\n      });\r\n    }\r\n    setProdcutObj(product);\r\n  };\r\n\r\n  const AddProductTax = async (product, taxid) => {\r\n    if (product.Id === 0) {\r\n      product.SalesTax.push({ Tax_Id: taxid });\r\n    } else {\r\n      var resp = await axios.post(window.$DBURL + \"tax/prodtax\", {\r\n        Product_Id: product.Id,\r\n        Tax_Id: taxid,\r\n      });\r\n      if (resp.status === 200) {\r\n        product.SalesTax.push(resp.data.tax);\r\n      }\r\n    }\r\n    setProdcutObj(product);\r\n  };\r\n\r\n  // useEffect(() => {\r\n  //   GetProductInfo(productID);\r\n  // }, [productData]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const SaveProduct = async (product, catid) => {\r\n    if (product.Id === 0) {\r\n      var cate = await GetCategory(catid);\r\n      if (cate !== null) {\r\n        product.CateType = cate.CateType;\r\n        product.Category_Id = cate.Id;\r\n      }\r\n      await AddProduct(product);\r\n    } else await UpdateProduct(product);\r\n\r\n    onUpdated();\r\n    onClose();\r\n    setPhotoDisplay(\"block\");\r\n    setEditTaxDisplay(\"none\");\r\n    //GetProductInfo(product.Id);\r\n    //SetTaxOptions(params.Id);\r\n  };\r\n\r\n  useEffect(() => {\r\n    switch (productObj?.CateType) {\r\n      case 2:\r\n        setInstallSpeedDisplayPropContainer(\"none\");\r\n        break;\r\n      case 3:\r\n        setInstallSpeedDisplayPropContainer(\"none\");\r\n        break;\r\n      default:\r\n    }\r\n  }, [productObj?.CateType]);\r\n\r\n  useEffect(() => {\r\n    SetTaxOptions(params.Id);\r\n  }, [productObj]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    GetProductInfo(productID);\r\n    SetTaxOptions(params.Id);\r\n  }, [updateProp, productID]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const Calculateunitprice_Originalprice_change = async (e) => {\r\n    var product = productObj;\r\n    product.OriginalPrice = e.target.value;\r\n\r\n    var calculation =\r\n      productObj.OriginalPrice * (1 + productObj.Markup / 100.0);\r\n    product.UnitPrice = calculation;\r\n\r\n    setProdcutObj(product);\r\n  };\r\n\r\n  const CalculateUnitPrice_Markup_change = async (e) => {\r\n    var product = productObj;\r\n    product.Markup = e.target.value;\r\n    var calculation =\r\n      productObj.OriginalPrice * (1 + productObj.Markup / 100.0);\r\n    product.UnitPrice = calculation;\r\n\r\n    setProdcutObj(product);\r\n  };\r\n\r\n  const Initialize_Instruction_Display = async () => {\r\n    setPositionDisplayProp(\"none\");\r\n    setDisplayUnitInstructionDisplay(\"none\");\r\n    setInstallSpeedDisplayProp(\"none\");\r\n    setRoundupInstructionDisplay(\"none\");\r\n    setRestockInstructionDisplay(\"none\");\r\n    setConvertUnitInstructionDisplay(\"none\");\r\n    setDenominatorInstructionDisplay(\"none\");\r\n  };\r\n\r\n  if (!open) {\r\n    return null;\r\n  } else if (productObj === null){\r\n    return <div></div>\r\n  } else {\r\n    return (\r\n      <FixedOverlay200vh>\r\n        {\" \"}\r\n        <Cont85vwAutoHeight>\r\n          <FlexColumnFullWidth flexdirection=\"row\" height=\"95vh\">\r\n            <FlexColumnFullWidth overflowy=\"auto\">\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Product Name</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"Product Name\"\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    defaultValue={productObj.Name}\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Name = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Description</SmallTitleBold>\r\n                </FlexDiv>\r\n\r\n                <HundredPercentFlexDiv>\r\n                  <TextAreaLarge\r\n                    placeholder=\"Description of Product\"\r\n                    defaultValue={productObj.Description}\r\n                    inputwidth=\"100%\"\r\n                    inputheight=\"10px\"\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Description = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></TextAreaLarge>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Manager's Notes</SmallTitleBold>\r\n                </FlexDiv>\r\n\r\n                <HundredPercentFlexDiv>\r\n                  <TextAreaLarge\r\n                    placeholder=\"Manager's Notes\"\r\n                    defaultValue={productObj.Notes}\r\n                    inputwidth=\"100%\"\r\n                    inputheight=\"10px\"\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Notes = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></TextAreaLarge>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Original Price ($)</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    type=\"number\"\r\n                    placeholder=\"Original Price ($)\"\r\n                    defaultValue={productObj.OriginalPrice}\r\n                    inputwidth=\"100%\"\r\n                    inputheight=\"10px\"\r\n                    onChange={(e) => {\r\n                      Calculateunitprice_Originalprice_change(e);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Markup (%)</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    type=\"number\"\r\n                    placeholder=\"Markup (%)\"\r\n                    defaultValue={productObj.Markup}\r\n                    inputwidth=\"100%\"\r\n                    inputheight=\"10px\"\r\n                    onChange={(e) => {\r\n                      CalculateUnitPrice_Markup_change(e);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              {/* <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Unit Price ($)</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <EditProductPara>\r\n                    {\"$\" + productObj.UnitPrice.toFixed(2)}\r\n                  </EditProductPara>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart> */}\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Unit for Price (Feet, Etc.)</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"Unit\"\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    defaultValue={productObj.Unit}\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Unit = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexDiv>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    SaveProduct(productObj, categoryId);\r\n                  }}\r\n                >\r\n                  Save\r\n                </RegularResponsiveButton>\r\n                <RegularResponsiveButton\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  onClick={() => {\r\n                    setPhotoDisplay(\"block\");\r\n                    setEditTaxDisplay(\"none\");\r\n                    onClose();\r\n                  }}\r\n                >\r\n                  Cancel\r\n                </RegularResponsiveButton>\r\n              </FlexDiv>\r\n            </FlexColumnFullWidth>\r\n            <FlexColumnFullWidth overflowy=\"auto\">\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Position</SmallTitleBold>\r\n                  <Icon15x15\r\n                    src=\"/questionmark.svg\"\r\n                    onClick={() => {\r\n                      if (positionDisplayProp === \"none\") {\r\n                        Initialize_Instruction_Display();\r\n                      } else {\r\n                        setPositionDisplayProp(\"none\");\r\n                      }\r\n                    }}\r\n                  ></Icon15x15>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"Position\"\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    defaultValue={productObj.Position}\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Position = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n              <TinyTextItalics display={positionDisplayProp}>\r\n                (Position is the place where the product will be displayed on\r\n                screen. Position 2 will be displayed after position 1, for\r\n                example)\r\n              </TinyTextItalics>\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Install Instructions</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"Disclaimer\"\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    defaultValue={productObj.Disclaimer}\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Disclaimer = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Product Link</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"Product Link\"\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    defaultValue={productObj.ProductLink}\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.ProductLink = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Product SKU</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"Product Link\"\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    defaultValue={productObj.Code}\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Code = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Allowance(%)</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"Allowance\"\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    defaultValue={productObj.Allowance}\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Allowance = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Setup Time(Hours)</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"0\"\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    defaultValue={productObj.SetupTime}\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.SetupTime = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart\r\n                displayProp={installSpeedDisplayPropContainer}\r\n              >\r\n                <FlexDiv>\r\n                  <SmallTitleBold>\r\n                    Install Speed (Hours per {productObj.Unit})\r\n                  </SmallTitleBold>\r\n                  <Icon15x15\r\n                    src=\"/questionmark.svg\"\r\n                    onClick={() => {\r\n                      if (installSpeedDisplayProp === \"none\") {\r\n                        Initialize_Instruction_Display();\r\n                        setInstallSpeedDisplayProp(\"block\");\r\n                      } else {\r\n                        setInstallSpeedDisplayProp(\"none\");\r\n                      }\r\n                    }}\r\n                  ></Icon15x15>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"Install Speed\"\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    defaultValue={productObj.InstallSpeed}\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.InstallSpeed = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n              <TinyTextItalics display={installSpeedDisplayProp}>\r\n                (InstallSpeed is the time needed by installation of one unit of\r\n                this item, hours/unit. Ex. Installation of 1 sqft of turf is 12\r\n                minutes, so the InstallSpeed of truf is 12/60 = 0.2 hour/sqft.)\r\n              </TinyTextItalics>\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Minimum</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    defaultValue={productObj.Minimum}\r\n                    placeholder=\"Minimum\"\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Minimum = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold># of Product in Stock</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"# of Product in Stock\"\r\n                    defaultValue={productObj.Stock}\r\n                    inputwidth=\"100%\"\r\n                    inputheight=\"10px\"\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Stock = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Round Up</SmallTitleBold>\r\n                  <Icon15x15\r\n                    src=\"/questionmark.svg\"\r\n                    onClick={() => {\r\n                      if (RoundupInstructionDisplay === \"none\") {\r\n                        Initialize_Instruction_Display();\r\n                        setRoundupInstructionDisplay(\"block\");\r\n                      } else {\r\n                        setRoundupInstructionDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  ></Icon15x15>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <FlexDiv>\r\n                    <FlexDivMargins>\r\n                      <input\r\n                        defaultChecked={roundYes}\r\n                        type=\"radio\"\r\n                        id=\"yesRU\"\r\n                        name=\"roundUp\"\r\n                        onChange={() => {\r\n                          var product = productObj;\r\n                          product.RoundUp = true;\r\n                          setProdcutObj(product);\r\n                        }}\r\n                      />\r\n                      <label htmlFor=\"yesRU\">Yes</label>\r\n                      <br />\r\n                      <input\r\n                        defaultChecked={roundNo}\r\n                        type=\"radio\"\r\n                        id=\"noRU\"\r\n                        name=\"roundUp\"\r\n                        onChange={() => {\r\n                          var product = productObj;\r\n                          product.RoundUp = false;\r\n                          setProdcutObj(product);\r\n                        }}\r\n                      />\r\n                      <label htmlFor=\"noRU\">No</label>\r\n                      <br />\r\n                    </FlexDivMargins>\r\n                  </FlexDiv>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n              <TinyTextItalics display={RoundupInstructionDisplay}>\r\n                (Round up will round the fraction to integer. Ex, 1.2 hours will\r\n                round up to 2 hours, 4.4 hours will round up to 5.)\r\n              </TinyTextItalics>\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Restock</SmallTitleBold>\r\n                  <Icon15x15\r\n                    src=\"/questionmark.svg\"\r\n                    onClick={() => {\r\n                      if (RestockInstructionDisplay === \"none\") {\r\n                        Initialize_Instruction_Display();\r\n                      } else {\r\n                        setRestockInstructionDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  ></Icon15x15>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <FlexDiv>\r\n                    <FlexDivMargins>\r\n                      <input\r\n                        defaultChecked={reStockYes}\r\n                        type=\"radio\"\r\n                        id=\"yesRS\"\r\n                        name=\"reStock\"\r\n                        onChange={() => {\r\n                          var product = productObj;\r\n                          product.ReStock = true;\r\n                          setProdcutObj(product);\r\n                          setReStockDisplayProp(\"flex\");\r\n                        }}\r\n                      />\r\n                      <label htmlFor=\"yesRS\">Yes</label>\r\n                      <br />\r\n                      <input\r\n                        defaultChecked={reStockNo}\r\n                        type=\"radio\"\r\n                        id=\"noRS\"\r\n                        name=\"reStock\"\r\n                        onChange={() => {\r\n                          var product = productObj;\r\n                          product.ReStock = false;\r\n                          setProdcutObj(product);\r\n                          setReStockDisplayProp(\"none\");\r\n                        }}\r\n                      />\r\n                      <label htmlFor=\"noRS\">No</label>\r\n                      <br />\r\n                    </FlexDivMargins>\r\n                  </FlexDiv>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n              <TinyTextItalics display={RestockInstructionDisplay}>\r\n                (Restock allows adding restock cost for unused products that\r\n                need to be restocked.)\r\n              </TinyTextItalics>\r\n\r\n              <FlexRowContHalfHeightFlexStart displayProp={reStockDisplayProp}>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Pack Size</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"Pack Size\"\r\n                    defaultValue={productObj.PackSize}\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.PackSize = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart displayProp={reStockDisplayProp}>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Charge Rate</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    placeholder=\"Charge Rate\"\r\n                    defaultValue={productObj.Charge_Rate}\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Charge_Rate = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n            </FlexColumnFullWidth>\r\n\r\n            <FlexColumnFullWidth overflowy=\"auto\">\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Round To Half</SmallTitleBold>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <FlexDiv>\r\n                    <FlexDivMargins>\r\n                      <input\r\n                        defaultChecked={roundToHalfYes}\r\n                        type=\"radio\"\r\n                        id=\"yes\"\r\n                        name=\"flexible\"\r\n                        onChange={() => {\r\n                          var product = productObj;\r\n                          product.RoundToHalf = true;\r\n                          setProdcutObj(product);\r\n                        }}\r\n                      />\r\n                      <label htmlFor=\"yes\">Yes</label>\r\n                      <br />\r\n                      <input\r\n                        defaultChecked={roundToHalfNo}\r\n                        type=\"radio\"\r\n                        id=\"no\"\r\n                        name=\"flexible\"\r\n                        onChange={() => {\r\n                          var product = productObj;\r\n                          product.RoundToHalf = false;\r\n                          setProdcutObj(product);\r\n                        }}\r\n                      />\r\n                      <label htmlFor=\"no\">No</label>\r\n                      <br />\r\n                    </FlexDivMargins>\r\n                  </FlexDiv>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Convert Unit</SmallTitleBold>\r\n                  <Icon15x15\r\n                    src=\"/questionmark.svg\"\r\n                    onClick={() => {\r\n                      if (convertUnitInstructionDisplay === \"none\") {\r\n                        Initialize_Instruction_Display();\r\n                        setConvertUnitInstructionDisplay(\"block\");\r\n                      } else {\r\n                        setConvertUnitInstructionDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  ></Icon15x15>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <FlexDiv>\r\n                    <FlexDivMargins>\r\n                      <input\r\n                        type=\"radio\"\r\n                        id=\"yesConvert\"\r\n                        defaultChecked={convertYes}\r\n                        name=\"convert\"\r\n                        onChange={() => {\r\n                          var product = productObj;\r\n                          product.Convert = true;\r\n                          setProdcutObj(product);\r\n                          setConvertUnitDisplayProp(\"flex\");\r\n                        }}\r\n                      />\r\n                      <label htmlFor=\"yesConvert\">Yes</label>\r\n                      <br />\r\n                      <input\r\n                        type=\"radio\"\r\n                        id=\"noConvert\"\r\n                        defaultChecked={convertNo}\r\n                        name=\"convert\"\r\n                        onChange={() => {\r\n                          var product = productObj;\r\n                          product.Convert = false;\r\n                          setProdcutObj(product);\r\n                          setConvertUnitDisplayProp(\"none\");\r\n                          setDenominatorInstructionDisplay(\"none\");\r\n                          setDisplayUnitInstructionDisplay(\"none\");\r\n                        }}\r\n                      />\r\n                      <label htmlFor=\"noConvert\">No</label>\r\n                      <br />\r\n                    </FlexDivMargins>\r\n                  </FlexDiv>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n              <TinyTextItalics display={convertUnitInstructionDisplay}>\r\n                Convert unit will convert this unit and quantity to the display\r\n                unit on quote, ex. 27 cubic ft will be converted to 1 cubic\r\n                yard.\r\n              </TinyTextItalics>\r\n\r\n              <FlexRowContHalfHeightFlexStart\r\n                displayProp={convertUnitDisplayProp}\r\n              >\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Denominator</SmallTitleBold>\r\n                  <Icon15x15\r\n                    src=\"/questionmark.svg\"\r\n                    onClick={() => {\r\n                      if (denominatorInstructionDisplay === \"none\") {\r\n                        setDenominatorInstructionDisplay(\"block\");\r\n                        setDisplayUnitInstructionDisplay(\"none\");\r\n                        setPositionDisplayProp(\"none\");\r\n                        setInstallSpeedDisplayProp(\"none\");\r\n                        setRoundupInstructionDisplay(\"none\");\r\n                        setRestockInstructionDisplay(\"none\");\r\n                        setConvertUnitInstructionDisplay(\"none\");\r\n                      } else if (denominatorInstructionDisplay === \"block\") {\r\n                        setDenominatorInstructionDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  ></Icon15x15>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    defaultValue={productObj.Denominator}\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.Denominator = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n              <TinyTextItalics display={denominatorInstructionDisplay}>\r\n                Denominator is the number to divide in conversion. Ex.\r\n                denominator is 27 when converting cubic feet to cubic yard; 9\r\n                when converting sq ft to sq yard.\r\n              </TinyTextItalics>\r\n\r\n              <FlexRowContHalfHeightFlexStart\r\n                displayProp={convertUnitDisplayProp}\r\n              >\r\n                <FlexDiv>\r\n                  <SmallTitleBold>Display Unit</SmallTitleBold>\r\n                  <Icon15x15\r\n                    src=\"/questionmark.svg\"\r\n                    onClick={() => {\r\n                      if (displayUnitInstructionDisplay === \"none\") {\r\n                        Initialize_Instruction_Display();\r\n                        setDisplayUnitInstructionDisplay(\"block\");\r\n                      } else if (displayUnitInstructionDisplay === \"block\") {\r\n                        setDisplayUnitInstructionDisplay(\"none\");\r\n                      }\r\n                    }}\r\n                  ></Icon15x15>\r\n                </FlexDiv>\r\n                <HundredPercentFlexDiv>\r\n                  <Input\r\n                    defaultValue={productObj.DisplayUnit}\r\n                    inputheight=\"10px\"\r\n                    inputwidth=\"100%\"\r\n                    onChange={(e) => {\r\n                      var product = productObj;\r\n                      product.DisplayUnit = e.target.value;\r\n                      setProdcutObj(product);\r\n                    }}\r\n                  ></Input>\r\n                </HundredPercentFlexDiv>\r\n              </FlexRowContHalfHeightFlexStart>\r\n              <TinyTextItalics display={displayUnitInstructionDisplay}>\r\n                Displayed unit on quote after unit conversion.\r\n              </TinyTextItalics>\r\n\r\n              <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n              <FlexRowContHalfHeightFlexStart>\r\n                <Image40x40px\r\n                  photoprops1={photoDisplay}\r\n                  src={window.$IMGURL + productUrlDisplay}\r\n                  alt=\"No Image\"\r\n                ></Image40x40px>\r\n                <Icon20x20\r\n                  deletephotoprops={photoDisplay}\r\n                  src=\"/Garbage_Icon.svg\"\r\n                  onClick={() => {\r\n                    // DeleteImg(productObj.ImageUrl);\r\n                    setPhotoDisplay(\"none\");\r\n                  }}\r\n                ></Icon20x20>\r\n              </FlexRowContHalfHeightFlexStart>\r\n              <Input type=\"file\" onChange={handleUpload}></Input>\r\n\r\n              <FlexColumnDiv>\r\n                <FlexRowContFullWidth>\r\n                  <SmallTitleBold>Current Taxes</SmallTitleBold>\r\n                  <RegularResponsiveButton\r\n                  \r\n                    onClick={() => {\r\n                      setEditTaxDisplay(\"flex\");\r\n                    }}\r\n                  >Add Tax</RegularResponsiveButton>\r\n                </FlexRowContFullWidth>\r\n                <StyledHRPropColour\r\n                  border={`0.5px solid ${ColorPalette.PrimaryGrey}`}\r\n                ></StyledHRPropColour>\r\n                {productObj.SalesTax.map((x, i) => (\r\n                  <FlexRowContFullWidth>\r\n                    <RegularText key={i} taxbordercolor={taxbordercolor}>\r\n                      {x.TaxCode} {x.Rate}%\r\n                    </RegularText>\r\n                    <Icon30px20pxPointer\r\n                      src=\"/Garbage_Icon.svg\"\r\n                      onClick={() => {\r\n                        DeleteTax(productObj, x.Tax_Id);\r\n                        SetTaxOptions(params.Id);\r\n                      }}\r\n                    ></Icon30px20pxPointer>\r\n                  </FlexRowContFullWidth>\r\n                ))}\r\n              </FlexColumnDiv>\r\n              <FlexColumnDiv display={editTaxDisplay}>\r\n                <SmallTitleBold>Select Tax to Add to Product</SmallTitleBold>\r\n                <StyledHRPropColour\r\n                  border={`0.5px dotted ${ColorPalette.PrimaryGrey}`}\r\n                ></StyledHRPropColour>\r\n                {taxMap.map((o, i) => (\r\n                  <FlexRowContFullWidth\r\n                    onClick={() => {\r\n                      AddProductTax(productObj, o.Id);\r\n                      SetTaxOptions(params.Id);\r\n                      setEditTaxDisplay(\"none\");\r\n                    }}\r\n                  >\r\n                    <TitleFontSize100PercentPointer key={i}>\r\n                      • {o.TaxCode} {o.Rate}%\r\n                    </TitleFontSize100PercentPointer>\r\n                  </FlexRowContFullWidth>\r\n                ))}\r\n              </FlexColumnDiv>\r\n            </FlexColumnFullWidth>\r\n          </FlexColumnFullWidth>\r\n        </Cont85vwAutoHeight>\r\n      </FixedOverlay200vh>\r\n    );\r\n  }\r\n};\r\n\r\nProductWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onUpdated: () => {},\r\n  RemoveImg: () => {},\r\n  UpdateTaxData: () => {},\r\n\r\n  taxbordercolor: \"black\",\r\n  productID: 0,\r\n  categoryId: 0,\r\n  updateProp: 0,\r\n  packSizeProp: 0,\r\n  chargeRateProp: 0,\r\n  reStockProp: false,\r\n};\r\n\r\nexport default ProductWindow;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport styled from \"styled-components\";\r\nimport {\r\n  FlexColumnCont90x95Percent,\r\n  FlexColumnCont95x30Percent,\r\n  FlexColumnContGreenBorderTopRounded550pxHeight,\r\n  FlexRowCont,\r\n  FlexRowContFlexStart,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  LandscapePara,\r\n  MediumStyledImage,\r\n  SmallHeaderLeagueSpartan,\r\n  TextInputRegular,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { AddCasePhoto } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { Icon20x20 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { LinkText } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { GetCategory, GetStoreCategories, UpdateCategory, UpdateProduct } from \"../../../API_Functions/CatProduct_Functions\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { LeagueHeader14px } from \"../../../MobileComponents/Text\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\nconst ListContainer = styled.div`\r\n  width: 100%; // Or you can set a specific width\r\n  height: 100%; // Set a fixed height or adjust as necessary\r\n  overflow-y: auto; // Enables vertical scrolling\r\n  padding: 10px;\r\n  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); // subtle shadow for depth\r\n`;\r\n\r\nconst SleekRowContainer = styled.div`\r\n  display: flex;\r\n  align-items: baseline;\r\n  justify-content: flex-start;\r\n  padding: 12px 20px;\r\n  background-color: ${props => props.isSelected ? '#f0f0f0' : '#ffffff'}; // Slightly grey when selected\r\n  border-bottom: 1px solid #e0e0e0;\r\n  transition: background-color 0.3s ease, transform 0.3s ease;\r\n\r\n  &:hover {\r\n    background-color: #f9f9f9;\r\n    transform: translateY(-2px);\r\n  }\r\n`;\r\n\r\n// Styling the title for each item\r\nconst ItemTitle = styled.h2`\r\n  font-size: 16px;\r\n  color: #2c2c2e; // Dark charcoal, almost black\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\r\n  font-weight: 500; // Medium weight for readability\r\n  margin: 0;\r\n  transition: color 0.3s ease;\r\n\r\n  ${SleekRowContainer}:hover & {\r\n    color: #1a1a1a; // Slightly darker on hover\r\n  }\r\n`;\r\n\r\n\r\nconst MoveToFolder = ({\r\n  open,\r\n  onClose,\r\n  movedItemName,\r\n  movedItemObject,\r\n  CloseWindow,\r\n  CancelUpload,\r\n  previewsrc,\r\n  imgtype,\r\n  caseObj,\r\n  AssignIdToImage,\r\n}) => {\r\n\r\nconst params = useParams();\r\nconst [categories, setCategories] = useState([])\r\nconst [selectedItemIndex, setSelectedItemIndex] = useState(null);\r\nconst [selectedCategory, setSelectedCategory] = useState({});\r\nconst [currentParentId, setCurrentParentId] = useState(0);  // Assume 0 means top-level\r\n\r\nconst GetAllStoreFolders = async (storeid) => {\r\n    const resp = await GetStoreCategories(storeid);\r\n    if(resp){\r\n        setCategories(resp.cate)\r\n    }\r\n}\r\n\r\nconst handleFilterFolders = async (text) => {\r\nconsole.log(selectedItemIndex)\r\n}\r\n\r\nconst handleDoubleClick = async (categoryId) => {\r\n    try {\r\n        const subcategories = await GetCategory(categoryId);\r\n        if (subcategories && Array.isArray(subcategories.SubCategories)) {\r\n            if (subcategories.SubCategories.length > 0) {\r\n                setCategories(subcategories.SubCategories);\r\n                setCurrentParentId(subcategories.Parent_Id); // Update the current parent ID\r\n            } else {\r\n                window.alert('No Subcategories for selection');\r\n            }\r\n        } else {\r\n            console.error('Invalid subcategories data:', subcategories);\r\n        }\r\n    } catch (error) {\r\n        console.error('Error fetching subcategories:', error);\r\n        window.alert('Failed to load subcategories.');\r\n    }\r\n};\r\n\r\nconst MoveToNewCategory = async (categoryobj, newcategoryobj) => {\r\n    console.log(categoryobj, newcategoryobj);\r\n\r\n    // Update the Category_Id of categoryobj with the Id of newcategoryobj\r\n    categoryobj.Category_Id = newcategoryobj.Id;\r\n\r\n    // Log the updated object for verification\r\n    console.log('Updated Category Object:', categoryobj);\r\n\r\n    const resp = await UpdateProduct(categoryobj)\r\n    if(resp){\r\n        console.log(resp)\r\n    }\r\n}\r\n\r\n\r\nconst handleBackClick = async () => {\r\n    // Check if the currentParentId is valid and not the top level\r\n    if (currentParentId !== 0) {\r\n        try {\r\n            const parentCategory = await GetCategory(currentParentId);\r\n            if (parentCategory && Array.isArray(parentCategory.SubCategories)) {\r\n                setCategories(parentCategory.SubCategories);\r\n                // Set to the parent of the current category, or to top level if none exists\r\n                setCurrentParentId(parentCategory.Parent_Id || 0);\r\n            } else {\r\n                // If no valid parent is found, navigate back to the top level\r\n                GetAllStoreFolders(params.Id);\r\n                setCurrentParentId(0); // Reset to indicate top-level\r\n            }\r\n        } catch (error) {\r\n            console.error('Error fetching parent category:', error);\r\n            // On error, also navigate back to the top level\r\n            GetAllStoreFolders(params.Id);\r\n            setCurrentParentId(0); // Reset to indicate top-level on error\r\n        }\r\n    } else {\r\n        // If already at the top level with Parent_Id 0, fetch top-level categories again\r\n        GetAllStoreFolders(params.Id);\r\n    }\r\n};\r\n\r\nuseEffect(() => {\r\nGetAllStoreFolders(params.Id)\r\n}, [])\r\n\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContGreenBorderTopRounded550pxHeight>\r\n        <FlexRowCont\r\n          height=\"100%\"\r\n          justifycontent=\"flex-start\"\r\n          alignitems=\"baseline\"\r\n        >\r\n            <button onClick={handleBackClick}>\r\n    Back\r\n</button>\r\n          <FlexColumnCont90x95Percent>\r\n            <SmallHeaderLeagueSpartan>Move {movedItemName}</SmallHeaderLeagueSpartan>\r\n            <br></br>\r\n            <ListContainer>\r\n  {Array.isArray(categories) && categories.map((o, i) => (\r\n    <SleekRowContainer\r\n      key={i}\r\n      isSelected={selectedItemIndex === i}\r\n      onClick={() => {setSelectedItemIndex(o.Id); setSelectedCategory(o)}}\r\n      onDoubleClick={() => handleDoubleClick(o.Id)}\r\n    >\r\n      <ItemTitle>{o.Name}</ItemTitle>\r\n    </SleekRowContainer>\r\n  ))}\r\n</ListContainer>\r\n            <FlexColumnCont95x30Percent>\r\n            \r\n            </FlexColumnCont95x30Percent>\r\n            <FlexRowCont justifycontent=\"flex-end\">\r\n              <LinkText\r\n                \r\n              >\r\n                Cancel\r\n              </LinkText>\r\n              <RegularResponsiveButton\r\n                onClick={()=>{\r\n                    MoveToNewCategory(movedItemObject, selectedCategory)\r\n                }}\r\n              >\r\n                Move To Category\r\n              </RegularResponsiveButton>\r\n            </FlexRowCont>\r\n          </FlexColumnCont90x95Percent>\r\n          <Icon20x20\r\n            onClick={()=>{onClose()}}\r\n            src=\"/Close.svg\"\r\n          ></Icon20x20>\r\n        </FlexRowCont>\r\n      </FlexColumnContGreenBorderTopRounded550pxHeight>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nMoveToFolder.defaultProps = {\r\n  onClose:()=>{},\r\n  movedItemName: 'Item Name'\r\n};\r\n\r\nexport default MoveToFolder;\r\n","/* eslint-disable */\r\n\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCategory,\r\n  GetProduct,\r\n} from \"../../API_Functions/CatProduct_Functions\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport CategoryCard from \"../../comps/CategoryCard\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ProductAddOn from \"../../comps/ProductAddOns\";\r\nimport ProductCard from \"../../comps/ProductCard\";\r\nimport ProductInfoCard from \"../../comps/ProductInfoCard\";\r\nimport ProductRelation from \"../../comps/productRel\";\r\nimport ProductToolRelation from \"../../comps/ProductRelTools\";\r\nimport CategoryAdd from \"../../comps/Windows/CategoryAdd\";\r\nimport CategoryEdit from \"../../comps/Windows/CategoryEdit\";\r\nimport DeleteCatWindow from \"../../comps/Windows/DeleteCat\";\r\nimport EditSupplierCard from \"../../comps/Windows/EditProductSupplier\";\r\nimport ProductWindow from \"../../comps/Windows/ProductWindow\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  DivWithDisplay,\r\n  DivWithMarginPadding,\r\n  FlexColumnCont80x100Percent,\r\n  FlexDiv,\r\n  FlexRowCont55x15Percent,\r\n  FlexRowContFlexStart,\r\n  FlexRowContHalfHeightFlexStart,\r\n  GridDiv,\r\n  Grid_300Div,\r\n  LeftCont,\r\n  OverflowDiv,\r\n  RightCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { SmallHeaderLeagueSpartan, TextInput100Percent } from \"../../StylesheetComps/LandscapeForm\";\r\nimport { Icon30px20pxPointer, Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanRegular,\r\n  LeagueSpartanRegularMinWidth,\r\n  StyledHRGreenBreak,\r\n  StyledHRGreyBreak,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport { InputField } from \"../../StylesheetComps/Inputs\";\r\nimport { FlexColumnDiv } from \"../../StylesheetComps/Div\";\r\nimport styled from \"styled-components\";\r\nimport MoveToFolder from \"../../comps/Windows/MoveToFolder\";\r\n\r\nconst IconBar = styled.div`\r\n  display: flex;\r\n  justify-content: flex-start;\r\n  align-items: center;\r\n  padding: 24px;\r\n  gap: 16px;\r\n  margin: 5px;\r\n  border-radius: 12px;\r\n  border: none;\r\n  background-color: #ffffff;\r\n  width: 80%;\r\n  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\r\n  box-sizing: border-box;\r\n  overflow: hidden;\r\n  background-color: ${ColorPalette.LightGrey};\r\n  &:hover {\r\n    box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15);\r\n  }\r\n\r\n  @media (max-width: 768px) {\r\n    justify-content: space-between;\r\n  }\r\n`;\r\n\r\nconst IconWrapper = styled.div`\r\n  position: relative;\r\n  display: inline-block;\r\n`;\r\n\r\nconst Tooltip = styled.span`\r\n  visibility: hidden;\r\n  width: 120px;\r\n  background-color: black;\r\n  color: white;\r\n  text-align: center;\r\n  border-radius: 6px;\r\n  padding: 5px 0;\r\n  position: absolute;\r\n  z-index: 1;\r\n  bottom: 100%;\r\n  left: 50%;\r\n  transform: translateX(-50%);\r\n  opacity: 0;\r\n  transition: opacity 0.3s, visibility 0.3s;\r\n`;\r\n\r\nconst Icon = styled.img`\r\n  width: 40px;\r\n  height: 25px;\r\n  cursor: pointer;\r\n  \r\n  &:hover + ${Tooltip} {\r\n    visibility: visible;\r\n    opacity: 1;\r\n  }\r\n`;\r\n\r\n\r\nconst ProductListScreen = () => {\r\n  //========================================== ===================================\r\n  // Product List Screen - View Products and Subcategories here.\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Manager can click to view more information / edit a product or subcat.\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  const [storeProducts, setStoreProducts] = useState([]);\r\n  const [unfilteredProducts, setUnfilteredProducts] = useState([]);\r\n  const [subCategories, getSubCategories] = useState([]);\r\n\r\n  const [productRelations, setProductRelations] = useState([]);\r\n  const [productAddOns, setProductAddOns] = useState([]);\r\n  const [productToolRelations, setProductToolRelations] = useState([]);\r\n  const [supplierList, setSupplierList] = useState([]);\r\n  const [isEditProductOpen, setIsEditProductOpen] = useState(false);\r\n  const [isProductOpen, setIsProductOpen] = useState(false);\r\n  const [isProductRelOpen, setIsProductRelOpen] = useState(false);\r\n  const [isProductToolRelOpen, setIsProductToolRelOpen] = useState(false);\r\n  const [isProductAddOnRelOpen, setIsProductAddOnRelOpen] = useState(false);\r\n\r\n  const [supplierCallSwitch] = useState(0);\r\n  const [productCallSwitch, setProductCallSwitch] = useState(0);\r\n\r\n  const [prodListDisplayState, setProdListDisplayState] = useState(\"grid\");\r\n\r\n  const [productObj, setProductObj] = useState(null);\r\n\r\n  const [catType, setCatType] = useState(0);\r\n  const [catName, setCatName] = useState(\"\");\r\n\r\n  const [productNameRel, setProductName] = useState(\"\");\r\n\r\n  const [ProdInfoName] = useState(\"\");\r\n  const [ImageUrl, setImageUrl] = useState(\"\");\r\n  const [ProductID, setProductID] = useState(0);\r\n  const [previousCatId, setPreviousCatId] = useState(0);\r\n  const [previousParentId, setPreviousParentId] = useState(0);\r\n\r\n  const [editSuppOpen, setEditSuppOpen] = useState(false);\r\n\r\n  const [TaxesVar, setTaxesVar] = useState([]);\r\n  const [maxPos] = useState(0);\r\n\r\n  const [isAddSubCatOpen, setisAddSubCatOpen] = useState(false);\r\n  const [delCatOpen, setDelCatOpen] = useState(false);\r\n\r\n  const [catId, setCatId] = useState(0);\r\n  const [catePos, setCatePos] = useState(0);\r\n  const [isEditCatOpen, setisEditCatOpen] = useState(false);\r\n  const [categoryObj, setCategoryObj] = useState();\r\n  const [getInfo] = useState(true);\r\n\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n\r\n  const [selectedCategory, setSelectedCategory] = useState({});\r\n  const [selectedCategoryName, setSelectedCategoryName] = useState(\"\");\r\n  const [showFolderOptions, setShowFolderOptions] = useState(false);\r\n  const [showMoveToFolderWindow, setShowMoveToFolderWindow] = useState(false);\r\n\r\n  const [selectedItem, setSelectedItem] = useState();\r\n  const [selectedItemName, setSelectedItemName] = useState(\"\");\r\n\r\n  var NewRelatedProductId = 0;\r\n\r\n  const GetProductInfo = async (product_id) => {\r\n    var data = await GetProduct(product_id);\r\n    setProductObj(data);\r\n  };\r\n\r\n  const AddProductForCategory = async (cateid) => {\r\n    setProductID(0);\r\n    var cate = await GetCategory(cateid);\r\n    var data = await GetProduct(0);\r\n\r\n    if (data !== null) {\r\n      data.CateType = cate.CateType;\r\n      data.Category_Id = cate.Id;\r\n      setProductObj(data);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (productObj !== null) {\r\n      if (productObj.Id === 0) {\r\n        setIsEditProductOpen(true);\r\n        setIsProductOpen(false);\r\n      }\r\n    }\r\n  }, [productObj]);\r\n\r\n  const RefreshProductList = async () => {\r\n    await GetStoreProductsFunc();\r\n  };\r\n\r\n  const RefreshProductOnUpdated = async () => {\r\n    await GetStoreProductsFunc();\r\n  };\r\n\r\n  const GetProductTaxInfo = async (Id) => {\r\n    var resp = await axios.get(window.$DBURL + \"catalog/prod/\" + Id);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.product !== null) {\r\n          setTaxesVar(resp.data.product.SalesTax);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetRelatedProducts = async (product_id) => {\r\n    if (product_id !== 0) {\r\n      var data = await GetProduct(product_id);\r\n      if (data !== null) {\r\n        setProductRelations(data.RelatedProducts);\r\n      }\r\n      if (isProductRelOpen === false) {\r\n        setIsProductRelOpen(true);\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetProductInfoTool = async (related_id) => {\r\n    var resp = await axios.get(window.$DBURL + \"catalog/prod/\" + related_id);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.product !== null) {\r\n          setProductToolRelations(resp.data.product.RelatedTools);\r\n        }\r\n      }\r\n    }\r\n    setIsProductToolRelOpen(true);\r\n  };\r\n\r\n  const GetProductInfoToolAgain = async () => {\r\n    var resp = await axios.get(window.$DBURL + \"catalog/prod/\" + ProductID);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.product !== null) {\r\n          setProductToolRelations(resp.data.product.RelatedTools);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetProductInfoSupplier = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"store/\" + params.Id + \"/supplier\"\r\n    );\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.suppliers !== null) {\r\n          setSupplierList(resp.data.suppliers);\r\n        }\r\n      }\r\n    }\r\n    setIsProductOpen(false);\r\n    setEditSuppOpen(true);\r\n  };\r\n\r\n  const GetStoreCategoriesFunc = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"catalog/\" + params.cateId);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.cate !== null) {\r\n          getSubCategories(resp.data.cate.SubCategories);\r\n          setCatType(resp.data.cate.CateType);\r\n          setCatName(resp.data.cate.Name);\r\n          setPreviousParentId(resp.data.cate.Parent_Id);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetSingleCat = async (id) => {\r\n    const resp = await axios.get(window.$DBURL + \"catalog/\" + id);\r\n    if ((resp.status = 200)) {\r\n      var cate = resp.data.cate;\r\n      setCategoryObj(cate);\r\n      setCatePos(cate.Position);\r\n      setisEditCatOpen(true);\r\n    }\r\n  };\r\n\r\n  const GetProductsOfSameCategory = async (categoryid) => {\r\n    var data = await GetCategory(categoryid);\r\n    if (data !== null) {\r\n      if (isProductAddOnRelOpen === false) {\r\n        setIsProductAddOnRelOpen(true);\r\n      }\r\n    }\r\n  };\r\n\r\n  const HandleNewCat = async (categoryObj) => {\r\n    var resp = await axios.post(window.$DBURL + \"catalog\", {\r\n      CateType: categoryObj.CateType,\r\n      Description: categoryObj.Description,\r\n      Name: categoryObj.Name,\r\n      Store_Id: params.Id,\r\n      ImageUrl: categoryObj.ImageUrl,\r\n      Position: maxPos + 1,\r\n      Parent_Id: params.cateId,\r\n      Combine: categoryObj.Combine,\r\n      CombineName: categoryObj.CombineName,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetStoreProductsFunc();\r\n      GetStoreCategoriesFunc();\r\n    }\r\n  };\r\n\r\n  const DeleteCategoryFunc = async () => {\r\n    const resp = await axios.delete(window.$DBURL + \"catalog/\" + catId);\r\n    if (resp.status === 200) {\r\n      GetStoreProductsFunc();\r\n      GetStoreCategoriesFunc();\r\n    }\r\n  };\r\n\r\n  const GetStoreProductsFunc = async () => {\r\n    var resp = await axios.get(\r\n      window.$DBURL + \"catalog/prod/cate/\" + params.cateId\r\n    );\r\n    if (resp.status === 200) {\r\n      var product = resp.data.product;\r\n      setStoreProducts(product);\r\n      setUnfilteredProducts(product);\r\n      if (product != null) {\r\n      }\r\n    } else {\r\n      setStoreProducts([]);\r\n    }\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n  };\r\n\r\n  const HandleDelete = async () => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL + \"catalog/prod/\" + ProductID\r\n    );\r\n    if (resp.status === 200) {\r\n      GetStoreProductsFunc();\r\n    }\r\n  };\r\n\r\n  const HandleRelationId = async ({ relatedProductId }) => {\r\n    NewRelatedProductId = relatedProductId;\r\n    HandleRelationDel();\r\n  };\r\n\r\n  const HandleUpdateRelationship = async ({\r\n    RFactorValue,\r\n    PositionValue,\r\n    relatedId,\r\n  }) => {\r\n    UpdateRelationship(ProductID, relatedId, RFactorValue, PositionValue);\r\n  };\r\n\r\n  const UpdateRelationship = async (prod_id, related_id, rfactor, position) => {\r\n    const resp = await axios.put(window.$DBURL + \"catalog/relation\", {\r\n      Id: prod_id,\r\n      Related_Id: related_id,\r\n      RFactor: rfactor,\r\n      Position: position,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetRelatedProducts(ProductID);\r\n    }\r\n  };\r\n\r\n  const UpdateRelatedToolInfo = async (value) => {\r\n    const resp = await axios.put(window.$DBURL + \"tool/prodtool\", {\r\n      Product_Id: ProductID,\r\n      Tool_Id: value.editTriggerId,\r\n      Trigger: value.triggerValue,\r\n      ListAsDelivery: value.checkboxCheck,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetProductInfoToolAgain();\r\n    }\r\n  };\r\n\r\n  const HandleRelationDel = async () => {\r\n    const resp = await axios.delete(window.$DBURL + \"catalog/relation\", {\r\n      headers: { Id: ProductID, Related_Id: NewRelatedProductId },\r\n      data: { Id: ProductID, Related_Id: NewRelatedProductId },\r\n    });\r\n    if (resp.status === 200) {\r\n      GetRelatedProducts(ProductID);\r\n    }\r\n  };\r\n\r\n  const HandleRelationIdTool = async ({ relatedProductId }) => {\r\n    NewRelatedProductId = relatedProductId;\r\n    HandleRelationDelTool();\r\n  };\r\n\r\n  const HandleRelationDelTool = async () => {\r\n    const resp = await axios.delete(window.$DBURL + \"tool/prodtool\", {\r\n      headers: { Product_Id: ProductID, Tool_Id: NewRelatedProductId },\r\n      data: { Product_Id: ProductID, Tool_Id: NewRelatedProductId },\r\n    });\r\n    if (resp.status === 200) {\r\n      GetProductInfoToolAgain();\r\n    }\r\n  };\r\n\r\n  const FilterProducts = (productlist, text) => {\r\n    if (text === \"\") {\r\n      setStoreProducts(unfilteredProducts);\r\n    } else {\r\n      setStoreProducts(\r\n        productlist.filter((o) => {\r\n          return o.Name.toLowerCase().includes(text.toLowerCase());\r\n        })\r\n      );\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetStoreProductsFunc();\r\n    GetStoreCategoriesFunc();\r\n  }, [params.cateId]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetStoreCategoriesFunc();\r\n    GetStoreProductsFunc();\r\n  }, [isEditCatOpen]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if(params.productId !== 0 && params.productId !== '0' && ProductID === 0){\r\n        setIsProductOpen(true);\r\n        setProductID(params.productId);\r\n        GetProductInfo(params.productId);\r\n    }\r\n  }, [params.productId]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (roleNum === UserRole.Admin || roleNum === UserRole.Manager) {\r\n    return (\r\n      <FlexDiv>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n\r\n        <RightCont>\r\n          <br></br>\r\n          <RightViewFullWidth >\r\n            <MoveToFolder movedItemObject={selectedItem} movedItemName={selectedItemName}  open={showMoveToFolderWindow} onClose={()=>{setShowMoveToFolderWindow(false)}}></MoveToFolder>\r\n            \r\n            <DivWithDisplay flexdirection=\"row\">\r\n              <Icon30px30pxPointer\r\n                src=\"/backarrow.svg\"\r\n                margin=\"10px\"\r\n                onClick={() => {\r\n                  if (previousParentId === 0) {\r\n                    history.push(\"/productcategory/\" + params.Id);\r\n                  } else {\r\n                    history.push(\r\n                      \"/productlist/\" + params.Id + \"/\" + previousParentId+'/0'\r\n                    );\r\n                    setPreviousCatId(previousParentId);\r\n                  }\r\n                }}\r\n              ></Icon30px30pxPointer>\r\n              <SmallHeaderLeagueSpartan width=\"100px\">\r\n                Products\r\n              </SmallHeaderLeagueSpartan>\r\n                <DivWithDisplay flexdirection=\"row\">\r\n                  <RegularResponsiveButton\r\n                    bgcolor={ColorPalette.PrimaryButtonBlue}\r\n                    onClick={() => {\r\n                      AddProductForCategory(params.cateId);\r\n                    }}\r\n                  >\r\n                    Add Product\r\n                  </RegularResponsiveButton>\r\n\r\n                  <RegularResponsiveButton\r\n                    bgcolor={ColorPalette.SecondaryGreen}\r\n                    onClick={() => {\r\n                      setisAddSubCatOpen(true);\r\n                    }}\r\n                  >\r\n                    Add Subcategory\r\n                  </RegularResponsiveButton>\r\n              </DivWithDisplay>\r\n            </DivWithDisplay>\r\n            <br></br>\r\n            <InputField\r\n            width='80%'\r\n                  placeholder=\"Search for a Product\"\r\n                  onChange={(e) => {\r\n                    FilterProducts(unfilteredProducts, e.target.value);\r\n                  }}\r\n                ></InputField>\r\n                \r\n                {\r\n  showFolderOptions ? (\r\n    <IconBar>\r\n    <LeagueSpartanRegular>{selectedItemName}</LeagueSpartanRegular>\r\n    <IconWrapper>\r\n      <Icon onClick={() => setShowFolderOptions(false)} src='/close.svg' alt=\"Close\" />\r\n      <Tooltip>Close</Tooltip>\r\n    </IconWrapper>\r\n    <IconWrapper>\r\n      <Icon src='/folder_icon.svg' alt=\"Open Folder\" />\r\n      <Tooltip>Open Folder</Tooltip>\r\n    </IconWrapper>\r\n    <IconWrapper>\r\n      <Icon src='/folder_move_icon.svg' alt=\"Move Folder\" onClick={()=>{setShowMoveToFolderWindow(true)}} />\r\n      <Tooltip>Move Folder</Tooltip>\r\n    </IconWrapper>\r\n    <IconWrapper>\r\n      <Icon src='/edit_document_icon.svg' alt=\"Edit Document\" />\r\n      <Tooltip>Edit Document</Tooltip>\r\n    </IconWrapper>\r\n  </IconBar>  \r\n  ) : null\r\n}\r\n\r\n             {/* Add/Edit pop up windows */}\r\n            <DivWithDisplay>\r\n              <EditSupplierCard\r\n                productid={ProductID}\r\n                open={editSuppOpen}\r\n                SupplierArray={supplierList}\r\n                onClose={() => {\r\n                  setEditSuppOpen(false);\r\n                  GetProductInfo(ProductID);\r\n                  setIsProductOpen(true);\r\n                }}\r\n              ></EditSupplierCard>\r\n\r\n              <ProductRelation\r\n                open={isProductRelOpen}\r\n                GetRelationsAgain={() => {\r\n                  GetRelatedProducts(ProductID);\r\n                }}\r\n                onRelationId={HandleRelationId}\r\n                StoreID={params.Id}\r\n                UpdateRFactor={HandleUpdateRelationship}\r\n                UpdatePosition={HandleUpdateRelationship}\r\n                RelatedProducts={productRelations}\r\n                ProductName={productNameRel}\r\n                ProductID={ProductID}\r\n                onClose={() => {\r\n                  setProductObj(null);\r\n                  setIsProductRelOpen(false);\r\n                }}\r\n              ></ProductRelation>\r\n\r\n              <ProductToolRelation\r\n                UpdateRelatedTool={UpdateRelatedToolInfo}\r\n                open={isProductToolRelOpen}\r\n                GetRelationsAgain={GetProductInfoToolAgain}\r\n                RelatedTools={productToolRelations}\r\n                onRelationId={HandleRelationIdTool}\r\n                StoreID={params.Id}\r\n                RelatedProducts={productRelations}\r\n                ProductName={productNameRel}\r\n                ProductID={ProductID}\r\n                onClose={() => {\r\n                  setProductObj(null);\r\n                  setIsProductToolRelOpen(false);\r\n                }}\r\n              >\r\n                {\" \"}\r\n              </ProductToolRelation>\r\n\r\n              <ProductAddOn\r\n                productObj={productObj}\r\n                open={isProductAddOnRelOpen}\r\n                RefreshAddOnList={() => {\r\n                  GetProductInfo(ProductID);\r\n                }}\r\n                // onRelationId={HandleRelationId}\r\n                StoreID={params.Id}\r\n                // UpdateRFactor={HandleUpdateRelationship}\r\n                // UpdatePosition={HandleUpdateRelationship}\r\n                RelatedProducts={productObj?.Addons}\r\n                ProductName={productNameRel}\r\n                ProductID={ProductID}\r\n                onClose={() => {\r\n                  setProductObj(null);\r\n                  setIsProductAddOnRelOpen(false);\r\n                }}\r\n              ></ProductAddOn>\r\n\r\n              <ProductInfoCard\r\n                Product={productObj}\r\n                ProductAdd={supplierCallSwitch}\r\n                EditProd={() => {\r\n                  setIsEditProductOpen(true);\r\n                  setIsProductOpen(false);\r\n                }}\r\n                editSupp={() => {\r\n                  GetProductInfoSupplier();\r\n                }}\r\n                RefreshProductInfoCard={() => {\r\n                  GetProductInfo(ProductID);\r\n                }}\r\n                open={isProductOpen}\r\n                ProductURL={ImageUrl}\r\n                ProductID={ProductID}\r\n                onClose={() => {\r\n                  setProductObj(null);\r\n                  setIsProductOpen(false);\r\n                  RefreshProductList();\r\n                }}\r\n                ProdInfoHead={ProdInfoName}\r\n                onDelete={() => {\r\n                  setIsProductOpen(false);\r\n                  HandleDelete();\r\n                }}\r\n              ></ProductInfoCard>\r\n\r\n              <DeleteCatWindow\r\n                deleteOpen={delCatOpen}\r\n                closeDel={() => setDelCatOpen(false)}\r\n                onDeleteFunction={DeleteCategoryFunc}\r\n              ></DeleteCatWindow>\r\n\r\n              <ProductWindow\r\n                categoryId={params.cateId}\r\n                updateProp={productCallSwitch}\r\n                open={isEditProductOpen}\r\n                productID={ProductID}\r\n                onUpdated={() => {\r\n                  RefreshProductOnUpdated();\r\n                }}\r\n                onClose={() => {\r\n                  setProductID(0);\r\n                  setProductObj(null);\r\n                  setProductCallSwitch(0);\r\n                  setIsEditProductOpen(false);\r\n                  setIsProductOpen(false);\r\n                }}\r\n                UpdateTaxData={() => {\r\n                  GetProductTaxInfo(ProductID);\r\n                }}\r\n              ></ProductWindow>\r\n\r\n              <CategoryAdd\r\n                open={isAddSubCatOpen}\r\n                CatPosProp={catePos}\r\n                parentId={params.cateId}\r\n                onClose={() => {\r\n                  setisAddSubCatOpen(false);\r\n                }}\r\n                onCategoryAdd={HandleNewCat}\r\n              ></CategoryAdd>\r\n              <CategoryEdit\r\n                open={isEditCatOpen}\r\n                category={categoryObj}\r\n                callCategoryAgain={() => {\r\n                  GetStoreProductsFunc();\r\n                  GetStoreCategoriesFunc();\r\n                }}\r\n                onClose={() => {\r\n                  setisEditCatOpen(false);\r\n                }}\r\n              ></CategoryEdit>\r\n            </DivWithDisplay>\r\n            <FlexColumnDiv height='75vh'  margin='25px' onClick={() => {\r\n                setProdListDisplayState(\"none\");\r\n              }}>\r\n            <DivWithDisplay width='auto' flexdirection='column' alignitems=\"left\" display={subCategories.length > 0 ? 'block' : 'none'}>\r\n              <LeagueSpartanRegular>\r\n                {catName}'s Subcategories\r\n              </LeagueSpartanRegular>\r\n              <StyledHRGreenBreak></StyledHRGreenBreak>\r\n              <DivWithDisplay width='85%' overflowx=\"hidden\">\r\n                  {subCategories.map((o, i) => (\r\n                    <CategoryCard\r\n                      key={i}\r\n                      catId={o.Id}\r\n                      CatHeadText={o.Name}\r\n                      categoryId={o.Id}\r\n                      CatName={o.Name}\r\n                      CatParaText={o.Description}\r\n                      CatUrl={o.ImageUrl}\r\n                      onView={() => {\r\n                          setPreviousCatId(o.Parent_Id);\r\n                          setPreviousParentId(o.Parent_Id);\r\n                      }}\r\n                      selectedCategory={(categoryId)=>{setSelectedCategory(o); setSelectedCategoryName(o.Name); setShowFolderOptions(true);}}\r\n                      DelCat={() => {\r\n                        // console.log(o.Name)\r\n                        setDelCatOpen(true);\r\n                        setCatId(o.Id);\r\n                      }}\r\n                      EditCat={() => {\r\n                        setCatId(o.Id);\r\n                        GetSingleCat(o.Id);\r\n                      }}\r\n                    ></CategoryCard>\r\n                  ))}\r\n              </DivWithDisplay>\r\n              </DivWithDisplay>\r\n              <DivWithDisplay width='auto' flexdirection='column' alignitems=\"left\" display={storeProducts.length > 0 ? 'block' : 'none'}>\r\n                <LeagueSpartanRegularMinWidth>\r\n                  {catName}'s Products\r\n                </LeagueSpartanRegularMinWidth>\r\n              <StyledHRGreenBreak></StyledHRGreenBreak>\r\n\r\n              <DivWithDisplay  height='100%' overflowy='scroll' flexdirection=\"column\"  width=\"80vw\" >\r\n                {storeProducts.map((o, i) => (               \r\n                    <ProductCard\r\n                      onSelect={()=>{setSelectedItem(o); setSelectedItemName(o.Name); setShowFolderOptions(true)}}\r\n                      key={i}\r\n                      ProdPrice={o.UnitPrice}\r\n                      getInfo={getInfo}\r\n                      relTool={() => {\r\n                        setProductID(o.Id);\r\n                        setProductName(o.Name);\r\n                        GetProductInfoTool(o.Id);\r\n                      }}\r\n                      relProduct={() => {\r\n                        setProductID(o.Id);\r\n                        setProductName(o.Name);\r\n                        GetRelatedProducts(o.Id);\r\n                      }}\r\n                      relAddOn={() => {\r\n                        setProductID(o.Id);\r\n                        setProductName(o.Name);\r\n                        GetProductsOfSameCategory(o.Category_Id);\r\n                        GetProductInfo(o.Id);\r\n                      }}\r\n                      ProdUrl={o.ImageUrl}\r\n                      ProdId={o.Id}\r\n                      ProdHeadText={o.Name}\r\n                      ProdParaText={o.Description}\r\n                      ProdSuppliers={o.Supplier}\r\n                      onView={() => {\r\n                        setIsProductOpen(true);\r\n                        setProductID(o.Id);\r\n                        setImageUrl(o.ImageUrl);\r\n                        GetProductInfo(o.Id);\r\n                      }}\r\n                    ></ProductCard>\r\n                ))}\r\n              </DivWithDisplay>\r\n            </DivWithDisplay>\r\n            </FlexColumnDiv>\r\n          </RightViewFullWidth>\r\n        </RightCont>\r\n      </FlexDiv>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nProductListScreen.defaultProps = {};\r\n\r\nexport default ProductListScreen;\r\n","import RelatedProduct from \"../../RelatedProduct.svg\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { FlexCont10vw15vh, FlexDiv, FlexRowContFullWidth } from \"../../StylesheetComps/Cont\";\r\nimport { FlexDivSpaceBetween } from \"../../StylesheetComps/Div\";\r\nimport { Icon20x20, Icon30x40pxPointer } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { RegularText, TitleFontSize100PercentPointer } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ToolCard = ({ ToolHeadText, onView, relToolProd }) => {\r\n  return (\r\n    // <FlexCont10vw15vh>\r\n    //   <TitleFontSize100PercentPointer onClick={onView}>\r\n    //     {ToolHeadText}\r\n    //   </TitleFontSize100PercentPointer>\r\n    //   <Icon30x40pxPointer\r\n    //     src={RelatedProduct}\r\n    //     onClick={relToolProd}\r\n    //   ></Icon30x40pxPointer>\r\n    // </FlexCont10vw15vh>\r\n\r\n<FlexRowContFullWidth hovermargin='5px' hoverbgcolor={ColorPalette.LightGrey}>\r\n<FlexDivSpaceBetween width='90%'>\r\n<FlexDiv width='30vw'>\r\n  <Icon20x20 src='/Tools.svg' />\r\n  <RegularText onClick={onView}>\r\n           {ToolHeadText}\r\n  </RegularText>\r\n  </FlexDiv>\r\n  <FlexDiv>\r\n  <Icon30px30pxPointer src={RelatedProduct} onClick={relToolProd}></Icon30px30pxPointer>\r\n  </FlexDiv>\r\n  </FlexDivSpaceBetween>\r\n  <hr></hr>\r\n</FlexRowContFullWidth>\r\n  );\r\n};\r\n\r\nToolCard.defaultProps = {\r\n  ToolHeadText: \"Excavator\",\r\n  ToolParaText: \"\",\r\n  ToolId: 0,\r\n  ToolUrl:\r\n    \"https://cdn.app.compendium.com/uploads/user/a862d463-3ea6-443a-9187-e1040e91eb0e/cb33b26c-b911-43cf-9a4a-0406a7cd3abe/File/7d892f09940824516f16df249bd8bc25/excavator_blog_640x428.jpg\",\r\n};\r\n\r\nexport default ToolCard;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { useState } from \"react\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n  FlexRowCont70PercentSpaceBetween,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { OverlayDiv200vh400vw } from \"../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  LeagueSpartanLarge,\r\n  MediumHeaderMarginLeft,\r\n  RegularText,\r\n  RegularTextBoldRed,\r\n  StyledHRPropColour,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport DeleteConfirmWindow from \"../Windows/DeleteProduct\";\r\n\r\nconst ToolInfoCard = ({ open, Tool, onClose, onDelete, onEdit }) => {\r\n  const [deleteTool, setDeleteTool] = useState(false);\r\n\r\n  if (!open) return null;\r\n  if (Tool !== null && Tool !== undefined) {\r\n    return (\r\n      <OverlayDiv200vh400vw>\r\n        {\" \"}\r\n        <FlexColumnFullWidth bgcolor=\"white\" width=\"500px\" height=\"80vh\">\r\n          <FlexColumnFullWidth>\r\n            <FlexDiv>\r\n              <LeagueSpartanLarge>{Tool.Name}</LeagueSpartanLarge>\r\n            </FlexDiv>\r\n            <FlexRowCont70PercentSpaceBetween>\r\n              <RegularText>\r\n                {\"$\" + Tool.RentalRate + \" per \" + Tool.RUnit}\r\n              </RegularText>\r\n              <DeleteConfirmWindow\r\n                deleteOpen={deleteTool}\r\n                onDeleteFunction={onDelete}\r\n                closeDel={() => {\r\n                  setDeleteTool(false);\r\n                }}\r\n              ></DeleteConfirmWindow>\r\n              <RegularResponsiveButton onClick={onEdit}>\r\n                Edit Tool\r\n              </RegularResponsiveButton>\r\n            </FlexRowCont70PercentSpaceBetween>\r\n            <a href={Tool.VideoUrl} target={\"_blank\"} rel=\"noreferrer\">\r\n              <RegularText>{Tool.VideoUrl}</RegularText>\r\n            </a>\r\n            <FlexDiv>\r\n              <MediumHeaderMarginLeft>\r\n                Stock: {Tool.Stock}\r\n              </MediumHeaderMarginLeft>\r\n              <MediumHeaderMarginLeft>\r\n                Capacity: {Tool.Capacity} {Tool.CapUnit}\r\n              </MediumHeaderMarginLeft>\r\n            </FlexDiv>\r\n            <StyledHRPropColour\r\n              border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n            ></StyledHRPropColour>\r\n            <FlexDiv>\r\n              <MediumHeaderMarginLeft>\r\n                Height: {Tool.Height}\r\n              </MediumHeaderMarginLeft>\r\n              <MediumHeaderMarginLeft>\r\n                Width: {Tool.Width}\r\n              </MediumHeaderMarginLeft>\r\n              <MediumHeaderMarginLeft>\r\n                Length: {Tool.Length}\r\n              </MediumHeaderMarginLeft>\r\n              <MediumHeaderMarginLeft>\r\n                Weight: {Tool.Weight}\r\n              </MediumHeaderMarginLeft>\r\n            </FlexDiv>\r\n            <StyledHRPropColour\r\n              border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n            ></StyledHRPropColour>\r\n            <FlexDiv>\r\n              <MediumHeaderMarginLeft>\r\n                Min. Rental: {Tool.MinRental}\r\n              </MediumHeaderMarginLeft>\r\n              <MediumHeaderMarginLeft>\r\n                Move Cost Per Machine: ${Tool.MoveCost}\r\n              </MediumHeaderMarginLeft>\r\n            </FlexDiv>\r\n            <StyledHRPropColour\r\n              border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n            ></StyledHRPropColour>\r\n            <FlexDiv>\r\n              <MediumHeaderMarginLeft>\r\n                Load Time: {Tool.LoadTime}\r\n              </MediumHeaderMarginLeft>\r\n              <MediumHeaderMarginLeft>\r\n                Unload Time: {Tool.UnloadTime}\r\n              </MediumHeaderMarginLeft>\r\n            </FlexDiv>\r\n            <StyledHRPropColour\r\n              border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n            ></StyledHRPropColour>\r\n            <MediumHeaderMarginLeft>\r\n              Speed: {Tool.Speed} {Tool.SpeedUnit}\r\n            </MediumHeaderMarginLeft>\r\n            <StyledHRPropColour\r\n              border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n            ></StyledHRPropColour>\r\n            <FlexDiv>\r\n              {Tool?.Taxes?.map((o, i) => (\r\n                <MediumHeaderMarginLeft key={i}>\r\n                  {o.TaxCode}: {o.Rate}%\r\n                </MediumHeaderMarginLeft>\r\n              ))}\r\n            </FlexDiv>\r\n            <RegularTextBoldRed\r\n              onClick={() => {\r\n                setDeleteTool(true);\r\n              }}\r\n            >\r\n              Delete\r\n            </RegularTextBoldRed>\r\n          </FlexColumnFullWidth>\r\n        </FlexColumnFullWidth>\r\n        <RegularResponsiveButton\r\n          onClick={() => {\r\n            onClose();\r\n          }}\r\n          bgcolor={ColorPalette.PrimaryRed}\r\n        >\r\n          Exit\r\n        </RegularResponsiveButton>\r\n      </OverlayDiv200vh400vw>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nToolInfoCard.defaultProps = {\r\n  ToolID: 0,\r\n};\r\n\r\nexport default ToolInfoCard;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport {\r\n  Cont185pxBoxShadowCenter,\r\n  FlexColumnCont98xAutoFlexEnd,\r\n  FlexContCenterAlign,\r\n  FlexDiv,\r\n  FlexRowContFullWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnDivAutoMargin, FlexDivSpaceBetween } from \"../../StylesheetComps/Div\";\r\nimport { Icon20x20, Icon30x30 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { Cont100PercentWidth } from \"../../StylesheetComps/Quote\";\r\nimport { RegularText, SmallTitleBold } from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\nconst ToolkitCard = ({ KitHeadText, KitUrl, EditKit, DelKit, kitId }) => {\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []);\r\n\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [storeId, setStoreId] = useState(0);\r\n  const GetSessionInfo = async () => {\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n    setStoreId(JSON.parse(sessionStorage.getItem(\"userInfo\")).Store_Id);\r\n  };\r\n\r\n  if (roleNum === UserRole.Admin || roleNum === UserRole.Manager) {\r\n    return (\r\n      // <Cont185pxBoxShadowCenter>\r\n      //   <FlexContCenterAlign>\r\n      //     <SmallTitleBold\r\n      //       onClick={() => {\r\n      //         history.push(\r\n      //           \"/toollist/\" + storeId + \"/\" + kitId + \"/\" + KitHeadText\r\n      //         );\r\n      //       }}\r\n      //     >\r\n      //       {\" \"}\r\n      //       {KitHeadText}\r\n      //     </SmallTitleBold>\r\n      //     <FlexColumnCont98xAutoFlexEnd>\r\n      //       <FlexColumnDivAutoMargin>\r\n      //         <Icon30x30 src={\"/EditIcon.svg\"} onClick={EditKit}></Icon30x30>\r\n      //         <Icon30x30 src={\"/Garbage_Icon.svg\"} onClick={DelKit}></Icon30x30>\r\n      //       </FlexColumnDivAutoMargin>\r\n      //     </FlexColumnCont98xAutoFlexEnd>\r\n      //   </FlexContCenterAlign>\r\n      //   <Cont100PercentWidth></Cont100PercentWidth>\r\n      // </Cont185pxBoxShadowCenter>\r\n      <FlexRowContFullWidth hovermargin='5px' hoverbgcolor={ColorPalette.LightGrey}>\r\n      <FlexDivSpaceBetween width='90%'>\r\n      <FlexDiv width='30vw'>\r\n        <Icon20x20 src='/Tools.svg' />\r\n        <RegularText        onClick={() => {\r\n              history.push(\r\n                \"/toollist/\" + storeId + \"/\" + kitId + \"/\" + KitHeadText\r\n              );\r\n            }}>\r\n            {KitHeadText}\r\n        </RegularText>\r\n        </FlexDiv>\r\n        <FlexDiv>\r\n        <Icon30x30 src={\"/EditIcon.svg\"} onClick={EditKit}></Icon30x30>\r\n               <Icon30x30 src={\"/Garbage_Icon.svg\"} onClick={DelKit}></Icon30x30>\r\n        </FlexDiv>\r\n        </FlexDivSpaceBetween>\r\n        <hr></hr>\r\n      </FlexRowContFullWidth>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nToolkitCard.defaultProps = {\r\n  KitHeadText: \"Tool Kit Default Name\",\r\n  KitParaText: \"Default Text for a Tool Kit\",\r\n  KitButtonText: \"View Tools\",\r\n  KitUrl: \"\",\r\n  kitId: 0,\r\n};\r\n\r\nexport default ToolkitCard;\r\n","/* eslint-disable */\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport Input from \"../../Input\";\r\nimport axios from \"axios\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { Icon30x40pxPointer } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { Cont85vwAutoHeight } from \"../../../StylesheetComps/Cont\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { GetTool, UpdateTool } from \"../../../API_Functions/Tool_Functions\";\r\nimport {\r\n  GetStoreInfo,\r\n  GetTaxesForStore,\r\n} from \"../../../API_Functions/Store_Functions\";\r\nimport { FlexColumnDiv } from \"../../../StylesheetComps/Div\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport { SmallTitleBold } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst InnerCont = styled.div`\r\n  display: flex;\r\n  width: 85vw;\r\n`;\r\n\r\nconst LeftInfoCont = styled.div`\r\n  width: 23vw;\r\n  background-color: white;\r\n  padding: 20px;\r\n  margin: 10px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow-y: auto;\r\n`;\r\n\r\nconst TaxesP = styled.p`\r\n  // border-color: ${(props) =>\r\n    props.taxbordercolor ? props.taxbordercolor : \"black\"};\r\n  font-family: Futura;\r\n  font-size: 18px;\r\n  position: relative;\r\n  cursor: pointer;\r\n  padding: 15px;\r\n  // border-style: ${(props) =>\r\n    props.taxborderstyle ? props.taxborderstyle : \"solid\"};\r\n  // border-width: ${(props) =>\r\n    props.inputborderwidth ? props.inputborderwidth : 1};\r\n`;\r\n\r\nconst ButtonDiv = styled.div`\r\n  display: flex;\r\n  margin-top: 8%;\r\n`;\r\n\r\nconst SectionCont = styled.div`\r\n  display: flex;\r\n  border-bottom: 1px dotted #d3d3d3;\r\n  margin-top: 5%;\r\n  margin-bottom: 2%;\r\n`;\r\n\r\nconst ItemCont = styled.div`\r\n  display: flex;\r\n  width: 250px;\r\n`;\r\n\r\nconst HeaderCont = styled.div`\r\n  display: flex;\r\n  width: 100px;\r\n`;\r\n\r\nconst TaxInner = styled.div`\r\n  display: flex;\r\n  align-items: center;\r\n  text-align: center;\r\n`;\r\n\r\nconst TaxHeaderCont = styled.div`\r\n  display: flex;\r\n  align-items: center;\r\n  // justify-content:center;\r\n`;\r\n\r\nconst AddTaxesCont = styled.div`\r\n  display: ${(props) => (props.addtaxdisplay ? props.addtaxdisplay : \"none\")};\r\n  flex-direction: column;\r\n`;\r\n\r\nconst ExplainerPara = styled.p`\r\n  font-size: 12px;\r\n  color: black;\r\n  font-family: Avenir;\r\n  margin-left: 10px;\r\n  display: ${(props) => (props.displayProp ? props.displayProp : \"none\")};\r\n`;\r\n\r\nconst QuestionMarkImg = styled.img`\r\n  width: 15px;\r\n  height: 25px;\r\n  margin-bottom: auto;\r\n  cursor: pointer;\r\n  padding: 5px;\r\n`;\r\n\r\nconst DividingHR = styled.hr`\r\n  border: 0.5px dotted #d3d3d3;\r\n`;\r\n\r\nconst EditToolWindow = ({ open, onClose, StoreId, toolId, onUpdatedTool }) => {\r\n  const [Tool, setTool] = useState(null);\r\n  const [taxMap, setTaxMap] = useState();\r\n  const [editTaxDisplay, setEditTaxDisplay] = useState(\"none\");\r\n  const [rentalRateInstructionDisplay, setRentalRateInstructionDisplay] =\r\n    useState(\"none\");\r\n\r\n  const DeleteTax = async (tooltax_id, tool_id) => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL + \"tax/tooltax/\" + tooltax_id\r\n    );\r\n    if (resp.status === 200) {\r\n      GetUpdatedToolTaxes(tool_id);\r\n    }\r\n  };\r\n\r\n  const AddToolTax = async (tool_id, tax_id) => {\r\n    const resp = await axios.post(window.$DBURL + \"tax/tooltax\", {\r\n      Tool_Id: tool_id,\r\n      Tax_Id: tax_id,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetUpdatedToolTaxes(tool_id);\r\n      SetTaxOptions(StoreId);\r\n    }\r\n  };\r\n\r\n  const GetUpdatedToolTaxes = async (tool_id) => {\r\n    var data = await GetTool(tool_id);\r\n    if (data !== null) {\r\n      if (data.Taxes.length > 0) {\r\n        var tool = { ...Tool };\r\n        tool.Taxes = data.Taxes;\r\n        setTool(tool);\r\n      } else {\r\n        var tool = { ...Tool };\r\n        tool.Taxes = [];\r\n        setTool(tool);\r\n      }\r\n    }\r\n  };\r\n\r\n  const SetTaxOptions = async (storeid) => {\r\n    const taxlist = await GetTaxesForStore(storeid);\r\n\r\n    setTaxMap(\r\n      taxlist.filter(function (o) {\r\n        if (Tool != null) {\r\n          return !Tool?.Taxes.includes(o.TaxCode);\r\n        } else {\r\n          return o;\r\n        }\r\n      })\r\n    );\r\n  };\r\n\r\n  const SetTaxes_ForStore = async (storeid) => {\r\n    var store = await GetStoreInfo(storeid);\r\n    if (store !== null) {\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetTaxOptions(StoreId);\r\n  }, [Tool]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const GetToolInfo = async (tool_id) => {\r\n    var tool = await GetTool(tool_id);\r\n    setTool(tool);\r\n  };\r\n\r\n  const SaveToolInfo = async (tool) => {\r\n    var data = await UpdateTool(tool);\r\n    if (data !== null) {\r\n      onUpdatedTool();\r\n      onClose();\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetToolInfo(toolId);\r\n  }, [toolId]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    SetTaxes_ForStore(StoreId);\r\n    GetToolInfo(toolId);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    GetToolInfo(toolId);\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      {\" \"}\r\n      <Cont85vwAutoHeight>\r\n        <InnerCont>\r\n          <LeftInfoCont>\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Tool Name</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Tool Name\"\r\n                  key={Tool?.Name}\r\n                  defaultValue={Tool?.Name}\r\n                  inputwidth=\"60%\"\r\n                  inputheight=\"10px\"\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.Name = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n            <hr />\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Rental Rate ($ per hour)</SmallTitleBold>\r\n                <QuestionMarkImg\r\n                  src=\"/questionmark.svg\"\r\n                  onClick={() => {\r\n                    if (rentalRateInstructionDisplay === \"none\") {\r\n                      setRentalRateInstructionDisplay(\"block\");\r\n                    } else if (rentalRateInstructionDisplay === \"block\") {\r\n                      setRentalRateInstructionDisplay(\"none\");\r\n                    }\r\n                  }}\r\n                ></QuestionMarkImg>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Rental Rate\"\r\n                  key={Tool?.RentalRate}\r\n                  defaultValue={Tool?.RentalRate}\r\n                  inputwidth=\"60%\"\r\n                  inputheight=\"10px\"\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.RentalRate = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n            <ExplainerPara displayProp={rentalRateInstructionDisplay}>\r\n              Leave RentalRate blank or set to 0 for Trash bins(containers) and\r\n              for items whose charge isn't based on daily/hourly rate. Set it a\r\n              number greater than 0.00001 if you want to count rental length but\r\n              not cost.\r\n            </ExplainerPara>\r\n\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>{\"Min. Rental (Hours) \"}</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder={\"Minimum Rental \"}\r\n                  key={Tool?.MinRental}\r\n                  defaultValue={Tool?.MinRental}\r\n                  inputwidth=\"60%\"\r\n                  inputheight=\"10px\"\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.MinRental = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Move Cost Per Machine ($)</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Move Cost Per Machine\"\r\n                  key={Tool?.MoveCost}\r\n                  defaultValue={Tool?.MoveCost}\r\n                  inputwidth=\"60%\"\r\n                  inputheight=\"10px\"\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.MoveCost = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Speed (KM/HR)</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Speed (KM/HR)\"\r\n                  key={Tool?.Speed}\r\n                  defaultValue={Tool?.Speed}\r\n                  inputwidth=\"60%\"\r\n                  inputheight=\"10px\"\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.Speed = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n\r\n            <ButtonDiv>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  onClose();\r\n                  SaveToolInfo(Tool);\r\n                }}\r\n              >\r\n                Save\r\n              </RegularResponsiveButton>\r\n\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryRed}\r\n                onClick={() => {\r\n                  onClose();\r\n                  GetToolInfo(toolId);\r\n                }}\r\n              >\r\n                Cancel\r\n              </RegularResponsiveButton>\r\n            </ButtonDiv>\r\n          </LeftInfoCont>\r\n          <DividingHR></DividingHR>\r\n          <LeftInfoCont>\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Width (Feet)</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Width (Feet)\"\r\n                  key={Tool?.Width}\r\n                  defaultValue={Tool?.Width}\r\n                  inputwidth=\"60%\"\r\n                  inputheight=\"10px\"\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.Width = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Length (Feet)</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Length (Feet)\"\r\n                  key={Tool?.Length}\r\n                  defaultValue={Tool?.Length}\r\n                  inputwidth=\"60%\"\r\n                  inputheight=\"10px\"\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.Length = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Height (Feet)</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Height (Feet)\"\r\n                  key={Tool?.Height}\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  defaultValue={Tool?.Height}\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.Height = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Weight (LBS)</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Weight (LBS)\"\r\n                  key={Tool?.Weight}\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  defaultValue={Tool?.Weight}\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.Weight = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Capacity (Cubic Feet)</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Capacity (Cubic Feet)\"\r\n                  key={Tool?.Capacity}\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  defaultValue={Tool?.Capacity}\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.Capacity = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Load Time (Hours)</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Load Time (Hours)\"\r\n                  key={Tool?.LoadTime}\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  defaultValue={Tool?.LoadTime}\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.LoadTime = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Unload Time (Hours)</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"Unload Time (Hours)\"\r\n                  key={Tool?.UnloadTime}\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  defaultValue={Tool?.UnloadTime}\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.UnloadTime = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n          </LeftInfoCont>\r\n          <DividingHR></DividingHR>\r\n          <LeftInfoCont>\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Stock</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"# of Tool in Stock\"\r\n                  key={Tool?.Stock}\r\n                  defaultValue={Tool?.Stock}\r\n                  inputheight=\"10px\"\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.Stock = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Video</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  placeholder=\"YouTube URL\"\r\n                  key={Tool?.VideoUrl}\r\n                  defaultValue={Tool?.VideoUrl}\r\n                  inputheight=\"10px\"\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.VideoUrl = e.target.value;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n\r\n            <SectionCont>\r\n              <HeaderCont>\r\n                <SmallTitleBold>Use with Obstruction</SmallTitleBold>\r\n              </HeaderCont>\r\n              <ItemCont>\r\n                <Input\r\n                  type=\"checkbox\"\r\n                  key={Tool?.UseWithObstruct}\r\n                  defaultChecked={Tool?.UseWithObstruct}\r\n                  inputheight=\"20px\"\r\n                  inputwidth=\"20%\"\r\n                  onChange={(e) => {\r\n                    var tool = Tool;\r\n                    tool.UseWithObstruct = e.target.checked;\r\n                    setTool(tool);\r\n                  }}\r\n                ></Input>\r\n              </ItemCont>\r\n            </SectionCont>\r\n\r\n            <FlexColumnDiv>\r\n              <TaxHeaderCont>\r\n                <SmallTitleBold>Current Taxes</SmallTitleBold>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    setEditTaxDisplay(\"flex\");\r\n                  }}\r\n                >\r\n                  Add Tax\r\n                </RegularResponsiveButton>\r\n              </TaxHeaderCont>\r\n              {Tool?.Taxes.map((o, i) => (\r\n                <TaxInner key={i}>\r\n                  <TaxesP>\r\n                    {o.TaxCode} {o.Rate}%\r\n                  </TaxesP>\r\n                  <Icon30x40pxPointer\r\n                    onClick={() => {\r\n                      DeleteTax(o.Id, toolId);\r\n                      SetTaxOptions(StoreId);\r\n                    }}\r\n                    src=\"/Garbage_Icon.svg\"\r\n                  ></Icon30x40pxPointer>\r\n                </TaxInner>\r\n              ))}\r\n            </FlexColumnDiv>\r\n            <AddTaxesCont addtaxdisplay={editTaxDisplay}>\r\n              <SmallTitleBold>Select Tax to Add to Product</SmallTitleBold>\r\n              {taxMap.map((o, i) => (\r\n                <TaxInner\r\n                  key={i}\r\n                  onClick={() => {\r\n                    AddToolTax(toolId, o.Id);\r\n                    setEditTaxDisplay(\"none\");\r\n                  }}\r\n                >\r\n                  <TaxesP>\r\n                    {o.TaxCode} {o.Rate}%\r\n                  </TaxesP>\r\n                </TaxInner>\r\n              ))}\r\n            </AddTaxesCont>\r\n          </LeftInfoCont>\r\n        </InnerCont>\r\n      </Cont85vwAutoHeight>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nEditToolWindow.defaultProps = {\r\n  onChange: () => {},\r\n};\r\n\r\nexport default EditToolWindow;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { GetTaxesForStore } from \"../../../API_Functions/Store_Functions\";\r\nimport { AddTool, GetToolObject } from \"../../../API_Functions/Tool_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont85vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContCenterAlign,\r\n  FlexDiv,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  Div175px,\r\n  FlexColumnDiv,\r\n  FlexDivMargins,\r\n  GridContainer3Wide,\r\n} from \"../../../StylesheetComps/Div\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Icon30px30pxPointer } from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularText,\r\n  SmallTitleBold,\r\n  TinyTextItalics,\r\n} from \"../../../StylesheetComps/Titles\";\r\nimport Input from \"../../Input\";\r\n\r\nconst NewToolWindow = ({ open, onClose, onNewTool }) => {\r\n  const params = useParams();\r\n  const [taxMap, setTaxMap] = useState([]);\r\n\r\n  const [checkboxCheck] = useState(false);\r\n  const [rentalRateInstructionDisplay, setRentalRateInstructionDisplay] =\r\n    useState(\"none\");\r\n\r\n  const [toolObj, setToolObj] = useState({});\r\n\r\n  const GetToolObjectStructure = async () => {\r\n    var data = await GetToolObject();\r\n    if (data !== null) {\r\n      setToolObj(data);\r\n    }\r\n  };\r\n\r\n  const SetTaxForStore = async (store_id) => {\r\n    var tax = await GetTaxesForStore(store_id);\r\n\r\n    if (tax != null) {\r\n      setTaxMap(tax);\r\n    }\r\n  };\r\n\r\n  const HandleTaxes = (taxid, taxcode, taxrate) => {\r\n    const index = toolObj.Taxes.findIndex((o) => {\r\n      if (o.TaxCode === taxcode) {\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    });\r\n\r\n    if (index === -1) {\r\n      toolObj.Taxes = [\r\n        ...toolObj.Taxes,\r\n        {\r\n          Id: toolObj.Taxes.length,\r\n          Tax_Id: taxid,\r\n          TaxCode: taxcode,\r\n          Rate: taxrate,\r\n        },\r\n      ];\r\n    } else {\r\n      toolObj.Taxes.splice(index, 1);\r\n    }\r\n  };\r\n\r\n  const AddNewTool = async (toolobj) => {\r\n    var data = await AddTool(toolobj);\r\n    if (data !== null) {\r\n      onNewTool();\r\n      onClose();\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetTaxForStore(params.Id);\r\n    GetToolObjectStructure();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      {\" \"}\r\n      <Cont85vwAutoHeight>\r\n        <FlexDiv>\r\n          <FlexColumnFullWidth>\r\n            <LeagueSpartanExtraLargeBold>{`New ${params.kitName} Tool`}</LeagueSpartanExtraLargeBold>\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Tool Name</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Tool Name\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.Name = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n            <FlexDivMargins>\r\n              <FlexDiv>\r\n                <SmallTitleBold>Rental Rate ($ per hour)</SmallTitleBold>\r\n                <Icon30px30pxPointer\r\n                  src=\"/questionmark.svg\"\r\n                  onClick={() => {\r\n                    if (rentalRateInstructionDisplay === \"none\") {\r\n                      setRentalRateInstructionDisplay(\"block\");\r\n                    } else if (rentalRateInstructionDisplay === \"block\") {\r\n                      setRentalRateInstructionDisplay(\"none\");\r\n                    }\r\n                  }}\r\n                ></Icon30px30pxPointer>\r\n              </FlexDiv>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Rental Rate\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.RentalRate = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n            <TinyTextItalics display={rentalRateInstructionDisplay}>\r\n              Leave RentalRate blank or set to 0 for Trash bins(containers) or\r\n              items whose charge isn't based on daily/hourly rate. Set it a\r\n              number greater than 0.00001 if you want to count rental length but\r\n              not cost.\r\n            </TinyTextItalics>\r\n\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>{\"Min. Rental (Hours) \"}</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder={\"Minimum Rental \"}\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.MinRental = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Move Cost Per Machine ($)</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Move Cost Per Machine\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.MoveCost = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Speed (KM/HR)</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Speed (KM/HR)\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.Speed = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n\r\n            <FlexDiv>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  toolObj.CapUnit = \"Cubic Feet\";\r\n                  toolObj.RUnit = \"hour\";\r\n                  toolObj.SpeedUnit = \"km/hr\";\r\n                  toolObj.ToolKit_Id = params.kitId;\r\n                  toolObj.Store_Id = params.Id;\r\n                  AddNewTool(toolObj);\r\n                }}\r\n              >\r\n                Save\r\n              </RegularResponsiveButton>\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryRed}\r\n                onClick={() => {\r\n                  onClose();\r\n                }}\r\n              >\r\n                Cancel\r\n              </RegularResponsiveButton>\r\n            </FlexDiv>\r\n          </FlexColumnFullWidth>\r\n          <FlexColumnFullWidth>\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Width (Feet)</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Width (Feet)\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.Width = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Length (Feet)</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Length (Feet)\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.Length = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Height (Feet)</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Height (Feet)\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.Height = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Weight (LBS)</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Weight (LBS)\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.Weight = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Capacity (Cubic Feet)</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Capacity (Cubic Feet)\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.Capacity = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Load Time (Hours)</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Load Time (Hours)\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.LoadTime = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Unload Time (Hours)</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"Unload Time (Hours)\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.UnloadTime = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n          </FlexColumnFullWidth>\r\n          <FlexColumnFullWidth>\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Number of Item in Stock</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"# of Tool in Stock\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.Stock = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Use with Obstruction</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  type=\"checkbox\"\r\n                  inputheight=\"20px\"\r\n                  inputwidth=\"20%\"\r\n                  onChange={(e) => {\r\n                    toolObj.UseWithObstruct = e.target.checked;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n\r\n            <FlexDivMargins>\r\n              <Div175px>\r\n                <SmallTitleBold>Tool Video YouTube URL</SmallTitleBold>\r\n              </Div175px>\r\n              <FlexDiv>\r\n                <Input\r\n                  placeholder=\"YouTube URL\"\r\n                  inputheight=\"10px\"\r\n                  inputwidth=\"60%\"\r\n                  onChange={(e) => {\r\n                    toolObj.VideoUrl = e.target.value;\r\n                  }}\r\n                ></Input>\r\n              </FlexDiv>\r\n            </FlexDivMargins>\r\n\r\n            <GridContainer3Wide>\r\n              <FlexColumnDiv>\r\n                {taxMap.map((o, i) => (\r\n                  <FlexContCenterAlign key={i}>\r\n                    <input\r\n                      type=\"checkbox\"\r\n                      onClick={() => {\r\n                        HandleTaxes(o.Id, o.TaxCode, o.Rate);\r\n                      }}\r\n                      checked={checkboxCheck[i]}\r\n                    ></input>\r\n                    <RegularText>\r\n                      {o.TaxCode} {o.Rate}%\r\n                    </RegularText>\r\n                  </FlexContCenterAlign>\r\n                ))}\r\n              </FlexColumnDiv>\r\n            </GridContainer3Wide>\r\n          </FlexColumnFullWidth>\r\n        </FlexDiv>\r\n      </Cont85vwAutoHeight>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nNewToolWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onNewTool: () => {},\r\n};\r\n\r\nexport default NewToolWindow;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  AddToolKit,\r\n  GetToolKitObject,\r\n} from \"../../../API_Functions/Tool_Functions\";\r\nimport { UploadFileToCloud } from \"../../../API_Functions/Utility_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  ContMargin20px,\r\n  FlexDiv,\r\n  FlexRowCont60PercentSpaceEvenly,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { Icon45x45 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { Image200x200pxContain } from \"../../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  TextAreaRegular,\r\n  TextInput100Percent,\r\n  TextInputReusable,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  LeagueSpartanExtraLargeWidth200px,\r\n  RegularTextBoldRed,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst SubToolKitAdd = ({ open, onClose, onNewSubToolkit }) => {\r\n  const params = useParams();\r\n\r\n  const [toolkitObj, setToolkitObj] = useState({});\r\n\r\n  const [errorText] = useState(\"\");\r\n  const [ToolKitImgDisplay, setToolKitImgDisplay] = useState(\"\");\r\n  const [photoDisplay, setPhotoDisplay] = useState(\"none\");\r\n\r\n  const hiddenFileInput = React.useRef(null);\r\n\r\n  const handleClick = (event) => {\r\n    hiddenFileInput.current.click();\r\n  };\r\n\r\n  var file = \"\";\r\n\r\n  function handleUpload(event) {\r\n    file = event.target.files[0];\r\n    UploadFile(file);\r\n  }\r\n\r\n  const UploadFile = async (file) => {\r\n    var pic = await UploadFileToCloud(file);\r\n    if (pic !== null) {\r\n      setToolKitImgDisplay(pic);\r\n      toolkitObj.ImageUrl = pic;\r\n      setPhotoDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const GetSubkitObjectStructure = async () => {\r\n    var data = await GetToolKitObject();\r\n    if (data !== null) {\r\n      setToolkitObj(data);\r\n    }\r\n  };\r\n\r\n  const AddNewSubToolkit = async (toolkit) => {\r\n    var data = await AddToolKit(toolkit);\r\n    if (data !== null) {\r\n      onNewSubToolkit();\r\n      onClose();\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSubkitObjectStructure();\r\n  }, []);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      {\" \"}\r\n      <ContMargin20px>\r\n        <LeftItemWindowFixed>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              ToolKit Name\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInputReusable\r\n              placeholder=\"ToolKit Name\"\r\n              onChange={(e) => {\r\n                toolkitObj.Name = e.target.value;\r\n              }}\r\n            ></TextInputReusable>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              Code\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInputReusable\r\n              placeholder=\"ToolKit Code\"\r\n              onChange={(e) => {\r\n                toolkitObj.Code = e.target.value;\r\n              }}\r\n            ></TextInputReusable>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              Position\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInputReusable\r\n              placeholder=\"Position\"\r\n              onChange={(e) => {\r\n                toolkitObj.Position = e.target.value;\r\n              }}\r\n            ></TextInputReusable>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              ToolKit Description\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextAreaRegular\r\n              maxlength=\"100\"\r\n              onChange={(e) => {\r\n                toolkitObj.Description = e.target.value;\r\n              }}\r\n            ></TextAreaRegular>\r\n          </FlexDiv>\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            ToolKit Picture\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n          <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n          <FlexDiv>\r\n            <Image200x200pxContain\r\n              display={photoDisplay}\r\n              src={window.$IMGURL + ToolKitImgDisplay}\r\n            ></Image200x200pxContain>\r\n            <Icon45x45\r\n              display={photoDisplay}\r\n              src=\"/Garbage_Icon.svg\"\r\n              onClick={() => {\r\n                setToolKitImgDisplay(\"\");\r\n                setPhotoDisplay(\"none\");\r\n                toolkitObj.ImageUrl = \"\";\r\n              }}\r\n            ></Icon45x45>\r\n          </FlexDiv>\r\n          <button for=\"ToolKitpic\" class=\"btn\" onClick={handleClick}>\r\n            Load Image\r\n          </button>\r\n          <br></br>\r\n          <TextInput100Percent\r\n            display=\"none\"\r\n            type=\"file\"\r\n            id=\"ToolKitpic\"\r\n            ref={hiddenFileInput}\r\n            name=\"filename\"\r\n            onChange={handleUpload}\r\n          ></TextInput100Percent>\r\n          <br></br>\r\n          <FlexRowCont60PercentSpaceEvenly>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                toolkitObj.Parent_Id = params.kitId;\r\n                toolkitObj.Store_Id = params.Id;\r\n                AddNewSubToolkit(toolkitObj);\r\n                setToolKitImgDisplay(\"\");\r\n                setPhotoDisplay(\"none\");\r\n              }}\r\n            >\r\n              Save\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                onClose();\r\n                setToolKitImgDisplay(\"\");\r\n                setPhotoDisplay(\"none\");\r\n              }}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n          </FlexRowCont60PercentSpaceEvenly>\r\n        </LeftItemWindowFixed>\r\n      </ContMargin20px>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nSubToolKitAdd.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onToolKitAdd: () => {},\r\n  onSetFile: () => {},\r\n  onReleaseFile: () => {},\r\n  ToolKitPosProp: 0,\r\n};\r\n\r\nexport default SubToolKitAdd;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { UpdateToolKit } from \"../../../API_Functions/Tool_Functions\";\r\nimport { UploadFileToCloud } from \"../../../API_Functions/Utility_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont500x850px,\r\n  FlexDiv,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FlexDivCenter } from \"../../../StylesheetComps/Div\";\r\nimport {\r\n  Image200x200pxContain,\r\n  Image40x40px,\r\n} from \"../../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  TextAreaRegular,\r\n  TextInput100Percent,\r\n  TextInputReusable,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  LeagueSpartanExtraLargeWidth200px,\r\n  RegularTextBoldRed,\r\n  StyledHRPropColour,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst SubToolKitEdit = ({\r\n  open,\r\n  onClose,\r\n  onUpdatedSubtoolkit,\r\n  onImgDelete,\r\n  subtoolkitobj,\r\n}) => {\r\n  const [photoDisplay, setPhotoDisplay] = useState(\"block\");\r\n\r\n  const [ToolKitDefaultUrl, setToolKitDefaultUrl] = useState(\"block\");\r\n\r\n  const [errorText] = useState(\"\");\r\n\r\n  var file = \"\";\r\n\r\n  function handleUpload(event) {\r\n    file = event.target.files[0];\r\n    UploadFile(file);\r\n  }\r\n\r\n  const UploadFile = async (file) => {\r\n    var pic = await UploadFileToCloud(file);\r\n    if (pic !== null) {\r\n      setToolKitDefaultUrl(pic);\r\n      subtoolkitobj.ImageUrl = pic;\r\n      setPhotoDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const UpdateSubtoolKit = async (subtoolkit) => {\r\n    var data = await UpdateToolKit(subtoolkit);\r\n    if (data !== null) {\r\n      onUpdatedSubtoolkit();\r\n    }\r\n  };\r\n\r\n  const DeleteImg = async (img) => {\r\n    var resp = await axios.delete(window.$DBURL + \"utilities/image\", {\r\n      data: { Url: img },\r\n    });\r\n    if (resp.status === 200) {\r\n      subtoolkitobj.ImageUrl = \"\";\r\n      setToolKitDefaultUrl(\"\");\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (file) {\r\n      const reader = new FileReader();\r\n      reader.onloadend = () => {};\r\n      reader.readAsDataURL(file);\r\n    }\r\n  }, [file]);\r\n\r\n  useEffect(() => {\r\n    setToolKitDefaultUrl(subtoolkitobj.ImageUrl);\r\n  }, [subtoolkitobj.ImageUrl]);\r\n\r\n  if (!open) return null;\r\n  if (subtoolkitobj !== null && subtoolkitobj !== undefined) {\r\n    return (\r\n      <FixedOverlay200vh>\r\n        {\" \"}\r\n        <Cont500x850px>\r\n          <LeftItemWindowFixed bgcolor=\"White\">\r\n            <FlexDiv>\r\n              <LeagueSpartanExtraLargeWidth200px>\r\n                ToolKit Name\r\n              </LeagueSpartanExtraLargeWidth200px>\r\n              <TextInputReusable\r\n                key={subtoolkitobj.Name}\r\n                placeholder=\"ToolKit Name\"\r\n                defaultValue={subtoolkitobj.Name}\r\n                onChange={(e) => {\r\n                  subtoolkitobj.Name = e.target.value;\r\n                }}\r\n              ></TextInputReusable>\r\n            </FlexDiv>\r\n            <hr></hr>\r\n            <FlexDiv>\r\n              <LeagueSpartanExtraLargeWidth200px>\r\n                Code\r\n              </LeagueSpartanExtraLargeWidth200px>\r\n              <TextInputReusable\r\n                key={subtoolkitobj.Code}\r\n                placeholder=\"ToolKit Code\"\r\n                defaultValue={subtoolkitobj.Code}\r\n                onChange={(e) => {\r\n                  subtoolkitobj.Code = e.target.value;\r\n                }}\r\n              ></TextInputReusable>\r\n            </FlexDiv>\r\n            <hr></hr>\r\n            <FlexDiv>\r\n              <LeagueSpartanExtraLargeWidth200px>\r\n                Position\r\n              </LeagueSpartanExtraLargeWidth200px>\r\n              <TextInputReusable\r\n                key={subtoolkitobj.Position}\r\n                placeholder=\"Position\"\r\n                defaultValue={subtoolkitobj.Position}\r\n                onChange={(e) => {\r\n                  subtoolkitobj.Position = e.target.value;\r\n                }}\r\n              ></TextInputReusable>\r\n            </FlexDiv>\r\n\r\n            <hr></hr>\r\n            <FlexDiv>\r\n              <LeagueSpartanExtraLargeWidth200px>\r\n                ToolKit Description\r\n              </LeagueSpartanExtraLargeWidth200px>\r\n              <TextAreaRegular\r\n                maxlength=\"100\"\r\n                onChange={(e) => {\r\n                  subtoolkitobj.Description = e.target.value;\r\n                }}\r\n                defaultValue={subtoolkitobj.Description}\r\n              ></TextAreaRegular>\r\n            </FlexDiv>\r\n            <hr></hr>\r\n            <FlexDiv>\r\n              <LeagueSpartanExtraLargeWidth200px>\r\n                ToolKit Picture\r\n              </LeagueSpartanExtraLargeWidth200px>\r\n              <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n              <FlexDiv>\r\n                <Image200x200pxContain\r\n                  photoprops1={photoDisplay}\r\n                  src={window.$IMGURL + ToolKitDefaultUrl}\r\n                ></Image200x200pxContain>\r\n                <Image40x40px\r\n                  deletephotoprops={photoDisplay}\r\n                  src=\"/Garbage_Icon.svg\"\r\n                  onClick={() => {\r\n                    DeleteImg(ToolKitDefaultUrl);\r\n                    setToolKitDefaultUrl(\"\");\r\n                    subtoolkitobj.ImageUrl = \"\";\r\n                    setPhotoDisplay(\"none\");\r\n                    onImgDelete();\r\n                  }}\r\n                ></Image40x40px>\r\n              </FlexDiv>\r\n            </FlexDiv>\r\n            <TextInput100Percent\r\n              type=\"file\"\r\n              id=\"ToolKitpic\"\r\n              name=\"filename\"\r\n              onChange={handleUpload}\r\n            ></TextInput100Percent>\r\n            <StyledHRPropColour\r\n              width=\"90%\"\r\n              border=\"1px solid white\"\r\n            ></StyledHRPropColour>\r\n            <FlexDivCenter>\r\n              <br></br>\r\n\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  UpdateSubtoolKit(subtoolkitobj);\r\n                  onClose();\r\n                  setPhotoDisplay(\"block\");\r\n                }}\r\n              >\r\n                Save\r\n              </RegularResponsiveButton>\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryRed}\r\n                onClick={() => {\r\n                  onClose();\r\n                  setPhotoDisplay(\"block\");\r\n                }}\r\n              >\r\n                Cancel\r\n              </RegularResponsiveButton>\r\n            </FlexDivCenter>\r\n          </LeftItemWindowFixed>\r\n        </Cont500x850px>\r\n      </FixedOverlay200vh>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nSubToolKitEdit.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onUpdatedSubtoolkit: () => {},\r\n  onImgDelete: () => {},\r\n};\r\n\r\nexport default SubToolKitEdit;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCategory,\r\n  GetStoreCategories,\r\n} from \"../../../API_Functions/CatProduct_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont100Percent80PercentOverflowY,\r\n  FlexColumnCont70x100Percent,\r\n  FlexColumnFullWidth,\r\n  FlexColumnFullWidthMargins,\r\n  FlexDiv,\r\n  FlexFixedCont,\r\n  FlexRowCont70PercentSpaceBetween,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFullWidth,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FlexDivCenter } from \"../../../StylesheetComps/Div\";\r\nimport { FixedOverlay1000vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Icon30px30pxPointer } from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanRegular,\r\n  RegularGreenText,\r\n  RegularText,\r\n  StyledHRPropColour,\r\n} from \"../../../StylesheetComps/Titles\";\r\nimport ConfirmWindow from \"../ConfirmWIndow\";\r\n\r\nconst ToolProductRelation = ({\r\n  getInfo,\r\n  open,\r\n  onClose,\r\n  GetRelationsAgain,\r\n  onChange,\r\n  onRelationId,\r\n  onFormComplete,\r\n  RelatedProductTools,\r\n  onPreview,\r\n  ProductName,\r\n  ToolID,\r\n}) => {\r\n  const [storeNewMetro] = useState(\"\");\r\n  const [storeProducts, getStoreProducts] = useState([]);\r\n  // const [storeSubCategories, getStoreSubCategories] = useState([]);\r\n  const [storeCategories, getStoreCategories] = useState([]);\r\n  const params = useParams();\r\n  const [ProductRelationId, setProductRelationId] = useState(0);\r\n  const [successMessage, setSuccessMessage] = useState(\"\");\r\n  const [ItemName, setItemName] = useState(\"\");\r\n  const [RFactorDisplay, setRFactorDisplay] = useState(\"none\");\r\n  const [addItemDisplay, setAddItemDisplay] = useState(\"none\");\r\n  const [categoryName, setCategoryName] = useState(\"\");\r\n\r\n  const [deleteProductId, setDeleteProductId] = useState(0);\r\n\r\n  const [relatedProducts, setRelatedProducts] = useState([]);\r\n\r\n  const [deleteRelatedProduct, setDeleteRelatedProduct] = useState(false);\r\n  const [parentId, setParentId] = useState(0);\r\n\r\n  useEffect(() => {\r\n    setRelatedProducts(RelatedProductTools);\r\n  }, [RelatedProductTools]);\r\n\r\n  var relatedProductId = 0;\r\n\r\n  const GetStoreCategoriesFunct = async (storeid) => {\r\n    var data = await GetStoreCategories(storeid);\r\n    if (data != null) getStoreCategories(data.cate);\r\n  };\r\n\r\n  const Get_Subcategory_Products = async (catid) => {\r\n    var cate = await GetCategory(catid);\r\n    if (cate != null) {\r\n      setParentId(cate.Parent_Id);\r\n      getStoreCategories(cate.SubCategories);\r\n      getStoreProducts(cate.Products);\r\n    }\r\n  };\r\n\r\n  const HandleAddRelation = async () => {\r\n    const resp = await axios.post(window.$DBURL + \"tool/product\", {\r\n      Tool_Id: ToolID,\r\n      Product_Id: ProductRelationId,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetRelationsAgain();\r\n    }\r\n    // setSuccessMessage(\"Tool-Product Relationship Created\")\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetStoreCategoriesFunct(params.Id);\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <FixedOverlay1000vh>\r\n        <FlexFixedCont>\r\n          <LeftItemWindowFixed minwidth=\"40vw\">\r\n            <Cont100Percent80PercentOverflowY overflowx=\"hidden\">\r\n              <FlexDivCenter>\r\n                <LeagueSpartanRegular>{ProductName}</LeagueSpartanRegular>\r\n              </FlexDivCenter>\r\n\r\n              <FlexDiv>\r\n                <LeagueSpartanHeaderSmall>\r\n                  Current Linked Products:\r\n                </LeagueSpartanHeaderSmall>\r\n              </FlexDiv>\r\n              <RegularGreenText>{successMessage}</RegularGreenText>\r\n              <FlexColumnFullWidth>\r\n                <ConfirmWindow\r\n                  open={deleteRelatedProduct}\r\n                  rightbuttontext=\"Delete\"\r\n                  rightbuttoncolor={ColorPalette.PrimaryRed}\r\n                  RightFunction={() => {\r\n                    setDeleteRelatedProduct(false);\r\n                    relatedProductId = deleteProductId;\r\n                    onRelationId({ relatedProductId });\r\n                  }}\r\n                  LeftFunction={() => {\r\n                    setDeleteRelatedProduct(false);\r\n                  }}\r\n                  leftbuttontext=\"Cancel\"\r\n                  leftbuttoncolor={ColorPalette.PrimaryGrey}\r\n                  confirmtext=\"Are you sure you want to delete this Tool-Product Relationship?\"\r\n                ></ConfirmWindow>\r\n                {relatedProducts.map((o, i) => (\r\n                  <FlexDiv key={i}>\r\n                    <RegularText>{o.Name}</RegularText>\r\n                    <Icon30px30pxPointer\r\n                      src=\"/Garbage_Icon.svg\"\r\n                      onClick={() => {\r\n                        setDeleteRelatedProduct(true);\r\n                        setDeleteProductId(o.Id);\r\n                      }}\r\n                    ></Icon30px30pxPointer>\r\n                  </FlexDiv>\r\n                ))}\r\n              </FlexColumnFullWidth>\r\n              <FlexColumnFullWidthMargins>\r\n                <FlexRowCont70PercentSpaceBetween\r\n                  onClick={() => {\r\n                    onPreview({ storeNewMetro });\r\n                  }}\r\n                >\r\n                  <RegularResponsiveButton\r\n                    onClick={() => {\r\n                      setAddItemDisplay(\"flex\");\r\n                    }}\r\n                  >\r\n                    Link New Product\r\n                  </RegularResponsiveButton>\r\n                  <RegularResponsiveButton\r\n                    bgcolor={ColorPalette.PrimaryRed}\r\n                    onClick={() => {\r\n                      onFormComplete(storeNewMetro);\r\n                      onClose();\r\n                      setSuccessMessage(\"\");\r\n                      getStoreProducts([]);\r\n                      setRelatedProducts([]);\r\n                      setRFactorDisplay(\"none\");\r\n                      setAddItemDisplay(\"none\");\r\n                      setCategoryName(\"\");\r\n                    }}\r\n                  >\r\n                    Close\r\n                  </RegularResponsiveButton>\r\n                </FlexRowCont70PercentSpaceBetween>\r\n              </FlexColumnFullWidthMargins>\r\n              <br></br>\r\n            </Cont100Percent80PercentOverflowY>\r\n          </LeftItemWindowFixed>\r\n\r\n          <LeftItemWindowFixed\r\n            minwidth=\"45vw\"\r\n            left=\"48vw\"\r\n            display={addItemDisplay}\r\n          >\r\n            <FlexColumnFullWidth>\r\n              {/* <TextInput72Percent\r\n                onChange={(e) => {\r\n                  // FilterTools(allToolsInStore, e.target.value);\r\n                }}\r\n                placeholder=\"Search for a Product\"\r\n              ></TextInput72Percent> */}\r\n              <FlexRowContFullWidth alignitems=\"baseline\">\r\n                <FlexColumnFullWidth height=\"auto\" overflowy=\"auto\">\r\n                  <FlexRowContFlexStart height=\"auto\">\r\n                    <Icon30px30pxPointer\r\n                      onClick={() => {\r\n                        if (parentId === 0) {\r\n                          GetStoreCategoriesFunct(params.Id);\r\n                          setCategoryName(\"\");\r\n                          getStoreProducts([]);\r\n                        } else {\r\n                          Get_Subcategory_Products(parentId);\r\n                        }\r\n                      }}\r\n                      src=\"/leftarrow.svg\"\r\n                    ></Icon30px30pxPointer>\r\n                    <LeagueSpartanHeaderSmall>\r\n                      {categoryName} Subcategories\r\n                    </LeagueSpartanHeaderSmall>\r\n                  </FlexRowContFlexStart>\r\n                  {storeCategories.map((o, i) => (\r\n                    <RegularText\r\n                      key={i}\r\n                      cursor=\"pointer\"\r\n                      fontsize=\"16px\"\r\n                      onClick={() => {\r\n                        Get_Subcategory_Products(o.Id);\r\n                        setCategoryName(o.Name);\r\n                      }}\r\n                    >\r\n                      {o.Name}\r\n                    </RegularText>\r\n                  ))}\r\n                </FlexColumnFullWidth>\r\n                <FlexColumnFullWidth>\r\n                  <FlexColumnFullWidth alignitems=\"baseline\">\r\n                    <FlexRowContFlexStart height=\"auto\">\r\n                      <LeagueSpartanHeaderSmall>\r\n                        {categoryName} Products\r\n                      </LeagueSpartanHeaderSmall>\r\n                    </FlexRowContFlexStart>\r\n                    {storeProducts.map((o, i) => (\r\n                      <div key={i}>\r\n                        <RegularText\r\n                          cursor=\"pointer\"\r\n                          fontsize=\"16px\"\r\n                          onClick={() => {\r\n                            setProductRelationId(o.Id);\r\n                            setRFactorDisplay(\"block\");\r\n                            setItemName(o.Name);\r\n                          }}\r\n                        >\r\n                          {o.Name}\r\n                        </RegularText>\r\n                        <StyledHRPropColour\r\n                          border={`0.5px solid ${ColorPalette.PrimaryGrey}`}\r\n                        ></StyledHRPropColour>\r\n                      </div>\r\n                    ))}\r\n                  </FlexColumnFullWidth>\r\n                </FlexColumnFullWidth>\r\n                <FlexColumnFullWidth>\r\n                  <FlexColumnCont70x100Percent display={RFactorDisplay}>\r\n                    <RegularResponsiveButton\r\n                      width=\"150px\"\r\n                      onClick={() => {\r\n                        HandleAddRelation();\r\n                        getStoreProducts([]);\r\n                        setRFactorDisplay(\"none\");\r\n                        setAddItemDisplay(\"none\");\r\n                        setCategoryName(\"\");\r\n                      }}\r\n                    >\r\n                      Add {ItemName}\r\n                    </RegularResponsiveButton>\r\n                  </FlexColumnCont70x100Percent>\r\n                </FlexColumnFullWidth>\r\n              </FlexRowContFullWidth>\r\n            </FlexColumnFullWidth>\r\n          </LeftItemWindowFixed>\r\n        </FlexFixedCont>{\" \"}\r\n      </FixedOverlay1000vh>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nToolProductRelation.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  onRelationId: () => {},\r\n  GetRelationsAgain: () => {},\r\n  ToolID: 0,\r\n  ProductName: \"\",\r\n  RelatedProductTools: [\"name\"],\r\n  StoreID: 0,\r\n};\r\n\r\nexport default ToolProductRelation;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  DeleteTool,\r\n  DeleteToolKit,\r\n  GetToolKit,\r\n} from \"../../API_Functions/Tool_Functions\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ToolCard from \"../../comps/ToolCard\";\r\nimport ToolInfoCard from \"../../comps/ToolInfoCard\";\r\nimport ToolkitCard from \"../../comps/ToolkitCard\";\r\nimport DeleteConfirmWindow from \"../../comps/Windows/DeleteProduct\";\r\nimport EditToolWindow from \"../../comps/Windows/EditTool\";\r\nimport NewToolWindow from \"../../comps/Windows/NewTool\";\r\nimport SubToolKitAdd from \"../../comps/Windows/SubToolKitAdd\";\r\nimport SubToolKitEdit from \"../../comps/Windows/SubToolKitEdit\";\r\nimport ToolProductRelation from \"../../comps/Windows/ToolRelProducts\";\r\n\r\nimport { GetTool } from \"../../API_Functions/Tool_Functions\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  Div70PerWidth7PerHeight,\r\n  DivWithDisplay,\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexCont100vw100vh,\r\n  FlexDiv,\r\n  LeftCont,\r\n  RightCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { FlexDiv80Percent } from \"../../StylesheetComps/Div\";\r\nimport { Icon30px20pxPointer, Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { LeagueSpartanExtraLargeBold, LeagueSpartanRegular, LeagueSpartanRegularMinWidth, StyledHRGreenBreak } from \"../../StylesheetComps/Titles\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { InputField } from \"../../StylesheetComps/Inputs\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../StylesheetComps/LandscapeForm\";\r\n\r\nconst ToolListScreen = () => {\r\n  //=============================================================================\r\n  // Tool List Screen - Manager views and edits Tools & SubKits\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n  const [kitTools, setKitTools] = useState([]);\r\n  const [subkits, setSubkits] = useState([]);\r\n\r\n  const [subtoolkitObj, setSubToolkit] = useState({});\r\n\r\n  const [isNewToolOpen, setIsNewToolOpen] = useState(false);\r\n  const [isEditToolOpen, setIsEditToolOpen] = useState(false);\r\n  const [isViewToolOpen, setIsViewToolOpen] = useState(false);\r\n  const [isNewSubkitOpen, setIsNewSubkitOpen] = useState(false);\r\n  const [isEditSubkitOpen, setIsEditSubkitOpen] = useState(false);\r\n\r\n  const [isToolProductRelOpen, setIsToolProductRelOpen] = useState(false);\r\n\r\n  const [toolObj, setToolObj] = useState(null);\r\n\r\n  const [relatedProducts, setRelatedProducts] = useState([]);\r\n  const [ToolID, setToolID] = useState(0);\r\n  const [productNameRel, setProductName] = useState(\"\");\r\n\r\n  const [isDeleteToolKitOpen, setIsDeleteToolKitOpen] = useState(false);\r\n\r\n  const [ToolKitID, setToolKitID] = useState(0);\r\n  const [previousParentId, setPreviousParentId] = useState(0);\r\n  const [toolkitname, setToolkitname] = useState(\"\");\r\n\r\n  const GetRelatedProductsOfTool = async (toolid) => {\r\n    if (toolid > 0) {\r\n      var data = await GetTool(toolid);\r\n      if (data !== null) {\r\n        setRelatedProducts(data.RelatedProducts);\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetToolInfo = async (tool_id) => {\r\n    var data = await GetTool(tool_id);\r\n    if (data !== null) {\r\n      setToolObj(data);\r\n    }\r\n  };\r\n\r\n  const AsyncGetRelatedProductsOfTool = async (toolid) => {\r\n    if (toolid > 0) {\r\n      var data = await GetTool(toolid);\r\n      if (data !== null) {\r\n        setRelatedProducts(data.RelatedProducts);\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetKitTools = async (id) => {\r\n    if (id <= 0) return;\r\n    var data = await GetToolKit(id);\r\n    if (data !== null) {\r\n      setKitTools(data.Tools);\r\n      setSubkits(data.SubKits);\r\n      setPreviousParentId(data.Parent_Id);\r\n      setToolkitname(data.Name);\r\n      if (data.SubKits.length === 0) {\r\n        setSubkits([]);\r\n      }\r\n      if (data.Tools.length === 0) {\r\n        setKitTools([]);\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetToolKitInfo = async (id) => {\r\n    if (id <= 0) return;\r\n    var data = await GetToolKit(id);\r\n    if (data == null) return;\r\n    setSubToolkit(data);\r\n    setIsEditSubkitOpen(true);\r\n  };\r\n\r\n  var NewRelatedProductId = 0;\r\n\r\n  const HandleRelatedProductCallback = async ({ relatedProductId }) => {\r\n    NewRelatedProductId = relatedProductId;\r\n    DeleteRelatedProductFromTool();\r\n  };\r\n\r\n  const DeleteRelatedProductFromTool = async () => {\r\n    const resp = await axios.delete(window.$DBURL + \"tool/product\", {\r\n      headers: { Product_Id: NewRelatedProductId, Tool_Id: ToolID },\r\n      data: { Product_Id: NewRelatedProductId, Tool_Id: ToolID },\r\n    });\r\n    if (resp.status === 200) {\r\n      AsyncGetRelatedProductsOfTool(ToolID);\r\n    }\r\n  };\r\n\r\n  const DeleteKitById = async (id) => {\r\n    var data = await DeleteToolKit(id);\r\n    if (data === null) {\r\n      GetKitTools(params.kitId);\r\n    }\r\n  };\r\n\r\n  const DeleteToolById = async (toolid) => {\r\n    var data = await DeleteTool(toolid);\r\n    if (data === null) {\r\n      GetKitTools(params.kitId);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (params.kitId !== undefined) {\r\n      GetKitTools(params.kitId);\r\n    }\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (params.kitId !== undefined) {\r\n      GetKitTools(params.kitId);\r\n    }\r\n  }, [params.kitId]);\r\n\r\n  return (\r\n    <FlexDiv>\r\n    <LeftCont>\r\n      <Menu> </Menu>\r\n    </LeftCont>\r\n\r\n    <RightCont>\r\n      <br></br>\r\n      <RightViewFullWidth >\r\n        \r\n        <DivWithDisplay flexdirection=\"row\">\r\n          <Icon30px30pxPointer\r\n            src=\"/backarrow.svg\"\r\n            margin=\"10px\"\r\n            onClick={() => {\r\n                          setToolObj(null);\r\n                          if (previousParentId === 0) {\r\n                            history.push(\"/toolkit/\" + params.Id);\r\n                          } else {\r\n                            history.push(\r\n                              \"/toollist/\" +\r\n                                params.Id +\r\n                                \"/\" +\r\n                                previousParentId +\r\n                                \"/\" +\r\n                                toolkitname\r\n                            );\r\n                          }\r\n                        }}\r\n          ></Icon30px30pxPointer>\r\n          <SmallHeaderLeagueSpartan width=\"100px\">\r\n            Tools\r\n          </SmallHeaderLeagueSpartan>\r\n            <DivWithDisplay flexdirection=\"row\">\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryButtonBlue}\r\n                onClick={() => {\r\n                              setIsNewToolOpen(true);\r\n                              setIsViewToolOpen(false);\r\n                            }}\r\n              >\r\n                Add Tool\r\n              </RegularResponsiveButton>\r\n\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.SecondaryGreen}\r\n                onClick={() => {\r\n                              setIsNewSubkitOpen(true);\r\n                              setIsViewToolOpen(false);\r\n                            }}\r\n              >\r\n                Add Subkit\r\n              </RegularResponsiveButton>\r\n          </DivWithDisplay>\r\n        </DivWithDisplay>\r\n\r\n              <ToolProductRelation\r\n            open={isToolProductRelOpen}\r\n            GetRelationsAgain={() => {\r\n              AsyncGetRelatedProductsOfTool(ToolID);\r\n            }}\r\n            onRelationId={HandleRelatedProductCallback}\r\n            StoreID={params.Id}\r\n            RelatedProductTools={relatedProducts}\r\n            ProductName={productNameRel}\r\n            ToolID={ToolID}\r\n            onClose={() => {\r\n              setIsToolProductRelOpen(false);\r\n            }}\r\n          ></ToolProductRelation>\r\n\r\n          <ToolInfoCard\r\n            Tool={toolObj}\r\n            onEdit={() => {\r\n              setIsViewToolOpen(false);\r\n              setIsEditToolOpen(true);\r\n            }}\r\n            open={isViewToolOpen}\r\n            ToolID={ToolID}\r\n            onClose={() => {\r\n              setIsViewToolOpen(false);\r\n              setToolObj(null);\r\n            }}\r\n            onDelete={() => {\r\n              setIsViewToolOpen(false);\r\n              DeleteToolById(ToolID);\r\n            }}\r\n          ></ToolInfoCard>\r\n\r\n          <EditToolWindow\r\n            StoreId={params.Id}\r\n            toolId={ToolID}\r\n            open={isEditToolOpen}\r\n            onClose={() => {\r\n              setIsEditToolOpen(false);\r\n              setToolObj(null);\r\n            }}\r\n            onUpdatedTool={() => {\r\n              GetKitTools(params.kitId);\r\n            }}\r\n          >\r\n            {\" \"}\r\n          </EditToolWindow>\r\n\r\n          <NewToolWindow\r\n            open={isNewToolOpen}\r\n            onClose={() => {\r\n              setIsNewToolOpen(false);\r\n            }}\r\n            onNewTool={() => {\r\n              GetKitTools(params.kitId);\r\n            }}\r\n          ></NewToolWindow>\r\n\r\n          <SubToolKitAdd\r\n            open={isNewSubkitOpen}\r\n            onClose={() => {\r\n              setIsNewSubkitOpen(false);\r\n            }}\r\n            onNewSubToolkit={() => {\r\n              GetKitTools(params.kitId);\r\n            }}\r\n          ></SubToolKitAdd>\r\n\r\n          <SubToolKitEdit\r\n            open={isEditSubkitOpen}\r\n            onClose={() => {\r\n              setIsEditSubkitOpen(false);\r\n            }}\r\n            subtoolkitobj={subtoolkitObj}\r\n            onUpdatedSubtoolkit={() => {\r\n              GetKitTools(params.kitId);\r\n            }}\r\n          ></SubToolKitEdit>\r\n          <DeleteConfirmWindow\r\n            deleteOpen={isDeleteToolKitOpen}\r\n            closeDel={() => {\r\n              setIsDeleteToolKitOpen(false);\r\n            }}\r\n            onDeleteFunction={() => {\r\n              DeleteKitById(ToolKitID);\r\n            }}\r\n          ></DeleteConfirmWindow>\r\n        <br></br>\r\n        <InputField\r\n        width='80%'\r\n              placeholder=\"Search for a Tool\"\r\n              // onChange={(e) => {\r\n              //   FilterProducts(unfilteredProducts, e.target.value);\r\n              // }}\r\n            ></InputField>\r\n         {/* Add/Edit pop up windows */}\r\n        <DivWithDisplay>\r\n   \r\n\r\n\r\n\r\n\r\n          {/* <ProductWindow\r\n            categoryId={params.cateId}\r\n            updateProp={productCallSwitch}\r\n            open={isEditProductOpen}\r\n            productID={ProductID}\r\n            onUpdated={() => {\r\n              RefreshProductOnUpdated();\r\n            }}\r\n            onClose={() => {\r\n              setProductID(0);\r\n              setProductObj(null);\r\n              setProductCallSwitch(0);\r\n              setIsEditProductOpen(false);\r\n              setIsProductOpen(false);\r\n            }}\r\n            UpdateTaxData={() => {\r\n              GetProductTaxInfo(ProductID);\r\n            }}\r\n          ></ProductWindow> */}\r\n\r\n          {/* <CategoryAdd\r\n            open={isAddSubCatOpen}\r\n            CatPosProp={catePos}\r\n            parentId={params.cateId}\r\n            onClose={() => {\r\n              setisAddSubCatOpen(false);\r\n            }}\r\n            onCategoryAdd={HandleNewCat}\r\n          ></CategoryAdd> */}\r\n          {/* <CategoryEdit\r\n            open={isEditCatOpen}\r\n            category={categoryObj}\r\n            callCategoryAgain={() => {\r\n              GetStoreProductsFunc();\r\n              GetStoreCategoriesFunc();\r\n            }}\r\n            onClose={() => {\r\n              setisEditCatOpen(false);\r\n            }}\r\n          ></CategoryEdit> */}\r\n        </DivWithDisplay>\r\n        <FlexDiv height='75vh'  margin='10px'\r\n        //  onClick={() => {\r\n        //     setProdListDisplayState(\"none\");\r\n        //   }}\r\n          >\r\n        <DivWithDisplay width='30.5%' flexdirection='column' alignitems=\"left\" display=\"block\">\r\n          <LeagueSpartanRegular>\r\n             Subkits:\r\n          </LeagueSpartanRegular>\r\n          <StyledHRGreenBreak></StyledHRGreenBreak>\r\n          <DivWithDisplay overflowx=\"hidden\">\r\n          {subkits.map((o, i) => (\r\n              <ToolkitCard\r\n                onClick={() => {\r\n                  history.push(\r\n                    window.$DBURL + \"toolkit/\" + params.Id + \"/\" + params.kitId\r\n                  );\r\n                  setPreviousParentId(o.Parent_Id);\r\n                  setToolkitname(o.Name);\r\n                }}\r\n                kitId={o.Id}\r\n                key={i}\r\n                KitHeadText={o.Name}\r\n                KitUrl={o.ImageUrl === \"\" ? \"\" : window.$IMGURL + o.ImageUrl}\r\n                DelKit={() => {\r\n                  setIsDeleteToolKitOpen(true);\r\n                  setToolKitID(o.Id);\r\n                }}\r\n                EditKit={() => {\r\n                  GetToolKitInfo(o.Id);\r\n                  setToolKitID(o.Id);\r\n                }}\r\n              ></ToolkitCard>\r\n            ))}\r\n          </DivWithDisplay>\r\n          </DivWithDisplay>\r\n          <hr style={{margin: '1em'}}></hr>\r\n          <DivWithDisplay width='48%' flexdirection='column' alignitems=\"left\" display=\"block\">\r\n            <LeagueSpartanRegularMinWidth>\r\n              Tools\r\n            </LeagueSpartanRegularMinWidth>\r\n          <StyledHRGreenBreak></StyledHRGreenBreak>\r\n\r\n          <DivWithDisplay height='100%' overflowy='scroll' flexdirection=\"column\"  width=\"80vw\" >\r\n          {kitTools.map((o, i) => (\r\n              <ToolCard\r\n                key={i}\r\n                relToolProd={() => {\r\n                  setToolID(o.Id);\r\n                  setProductName(o.Name);\r\n                  GetRelatedProductsOfTool(o.Id);\r\n                  setIsToolProductRelOpen(true);\r\n                }}\r\n                ToolID={o.Id}\r\n                ToolHeadText={o.Name}\r\n                ToolUrl={o.VideoUrl}\r\n                onView={() => {\r\n                  setToolID(o.Id);\r\n                  GetToolInfo(o.Id);\r\n                  setIsViewToolOpen(true);\r\n                }}\r\n              ></ToolCard>\r\n            ))}\r\n          </DivWithDisplay>\r\n        </DivWithDisplay>\r\n        </FlexDiv>\r\n      </RightViewFullWidth>\r\n    </RightCont>\r\n  </FlexDiv>\r\n    // <FlexCont100vw100vh>\r\n    //   <LeftCont>\r\n    //     <Menu\r\n    //       onReset={() => {\r\n    //         setIsToolProductRelOpen(false);\r\n    //         setIsNewToolOpen(false);\r\n    //         setIsViewToolOpen(false);\r\n    //       }}\r\n    //     >\r\n    //       {\" \"}\r\n    //     </Menu>\r\n    //   </LeftCont>\r\n\r\n    //   <FlexColumnCont80vwAutoHeight>\r\n    //     <ActionMenu />\r\n    //     <RightViewFullWidth>\r\n    //       <Div70PerWidth7PerHeight>\r\n    //         <Icon30px20pxPointer\r\n    //           src=\"/backarrow.svg\"\r\n    //           onClick={() => {\r\n    //             setToolObj(null);\r\n    //             if (previousParentId === 0) {\r\n    //               history.push(\"/toolkit/\" + params.Id);\r\n    //             } else {\r\n    //               history.push(\r\n    //                 \"/toollist/\" +\r\n    //                   params.Id +\r\n    //                   \"/\" +\r\n    //                   previousParentId +\r\n    //                   \"/\" +\r\n    //                   toolkitname\r\n    //               );\r\n    //             }\r\n    //           }}\r\n    //         ></Icon30px20pxPointer>\r\n    //         <LeagueSpartanExtraLargeBold>\r\n    //           {toolkitname}\r\n    //         </LeagueSpartanExtraLargeBold>\r\n    //         <RegularResponsiveButton\r\n    //           onClick={() => {\r\n    //             setIsNewToolOpen(true);\r\n    //             setIsViewToolOpen(false);\r\n    //           }}\r\n    //         >\r\n    //           Add Tool\r\n    //         </RegularResponsiveButton>\r\n    //         <RegularResponsiveButton\r\n    //           onClick={() => {\r\n    //             setIsNewSubkitOpen(true);\r\n    //             setIsViewToolOpen(false);\r\n    //           }}\r\n    //         >\r\n    //           Add Subkit\r\n    //         </RegularResponsiveButton>\r\n    //       </Div70PerWidth7PerHeight>\r\n\r\n    //       <ToolProductRelation\r\n    //         open={isToolProductRelOpen}\r\n    //         GetRelationsAgain={() => {\r\n    //           AsyncGetRelatedProductsOfTool(ToolID);\r\n    //         }}\r\n    //         onRelationId={HandleRelatedProductCallback}\r\n    //         StoreID={params.Id}\r\n    //         RelatedProductTools={relatedProducts}\r\n    //         ProductName={productNameRel}\r\n    //         ToolID={ToolID}\r\n    //         onClose={() => {\r\n    //           setIsToolProductRelOpen(false);\r\n    //         }}\r\n    //       ></ToolProductRelation>\r\n\r\n    //       <ToolInfoCard\r\n    //         Tool={toolObj}\r\n    //         onEdit={() => {\r\n    //           setIsViewToolOpen(false);\r\n    //           setIsEditToolOpen(true);\r\n    //         }}\r\n    //         open={isViewToolOpen}\r\n    //         ToolID={ToolID}\r\n    //         onClose={() => {\r\n    //           setIsViewToolOpen(false);\r\n    //           setToolObj(null);\r\n    //         }}\r\n    //         onDelete={() => {\r\n    //           setIsViewToolOpen(false);\r\n    //           DeleteToolById(ToolID);\r\n    //         }}\r\n    //       ></ToolInfoCard>\r\n\r\n    //       <EditToolWindow\r\n    //         StoreId={params.Id}\r\n    //         toolId={ToolID}\r\n    //         open={isEditToolOpen}\r\n    //         onClose={() => {\r\n    //           setIsEditToolOpen(false);\r\n    //           setToolObj(null);\r\n    //         }}\r\n    //         onUpdatedTool={() => {\r\n    //           GetKitTools(params.kitId);\r\n    //         }}\r\n    //       >\r\n    //         {\" \"}\r\n    //       </EditToolWindow>\r\n\r\n    //       <NewToolWindow\r\n    //         open={isNewToolOpen}\r\n    //         onClose={() => {\r\n    //           setIsNewToolOpen(false);\r\n    //         }}\r\n    //         onNewTool={() => {\r\n    //           GetKitTools(params.kitId);\r\n    //         }}\r\n    //       ></NewToolWindow>\r\n\r\n    //       <SubToolKitAdd\r\n    //         open={isNewSubkitOpen}\r\n    //         onClose={() => {\r\n    //           setIsNewSubkitOpen(false);\r\n    //         }}\r\n    //         onNewSubToolkit={() => {\r\n    //           GetKitTools(params.kitId);\r\n    //         }}\r\n    //       ></SubToolKitAdd>\r\n\r\n    //       <SubToolKitEdit\r\n    //         open={isEditSubkitOpen}\r\n    //         onClose={() => {\r\n    //           setIsEditSubkitOpen(false);\r\n    //         }}\r\n    //         subtoolkitobj={subtoolkitObj}\r\n    //         onUpdatedSubtoolkit={() => {\r\n    //           GetKitTools(params.kitId);\r\n    //         }}\r\n    //       ></SubToolKitEdit>\r\n    //       <DeleteConfirmWindow\r\n    //         deleteOpen={isDeleteToolKitOpen}\r\n    //         closeDel={() => {\r\n    //           setIsDeleteToolKitOpen(false);\r\n    //         }}\r\n    //         onDeleteFunction={() => {\r\n    //           DeleteKitById(ToolKitID);\r\n    //         }}\r\n    //       ></DeleteConfirmWindow>\r\n\r\n    //       <FlexDiv80Percent>\r\n    //         {subkits.map((o, i) => (\r\n    //           <ToolkitCard\r\n    //             onClick={() => {\r\n    //               history.push(\r\n    //                 window.$DBURL + \"toolkit/\" + params.Id + \"/\" + params.kitId\r\n    //               );\r\n    //               setPreviousParentId(o.Parent_Id);\r\n    //               setToolkitname(o.Name);\r\n    //             }}\r\n    //             kitId={o.Id}\r\n    //             key={i}\r\n    //             KitHeadText={o.Name}\r\n    //             KitUrl={o.ImageUrl === \"\" ? \"\" : window.$IMGURL + o.ImageUrl}\r\n    //             DelKit={() => {\r\n    //               setIsDeleteToolKitOpen(true);\r\n    //               setToolKitID(o.Id);\r\n    //             }}\r\n    //             EditKit={() => {\r\n    //               GetToolKitInfo(o.Id);\r\n    //               setToolKitID(o.Id);\r\n    //             }}\r\n    //           ></ToolkitCard>\r\n    //         ))}\r\n    //         {kitTools.map((o, i) => (\r\n    //           <ToolCard\r\n    //             key={i}\r\n    //             relToolProd={() => {\r\n    //               setToolID(o.Id);\r\n    //               setProductName(o.Name);\r\n    //               GetRelatedProductsOfTool(o.Id);\r\n    //               setIsToolProductRelOpen(true);\r\n    //             }}\r\n    //             ToolID={o.Id}\r\n    //             ToolHeadText={o.Name}\r\n    //             ToolUrl={o.VideoUrl}\r\n    //             onView={() => {\r\n    //               setToolID(o.Id);\r\n    //               GetToolInfo(o.Id);\r\n    //               setIsViewToolOpen(true);\r\n    //             }}\r\n    //           ></ToolCard>\r\n    //         ))}\r\n    //       </FlexDiv80Percent>\r\n    //     </RightViewFullWidth>\r\n    //   </FlexColumnCont80vwAutoHeight>\r\n    // </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nToolListScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  MetroName: \"EXAMPLE Toronto\",\r\n};\r\n\r\nexport default ToolListScreen;\r\n","export const CategoryTypes = {\r\n  Material: 0,\r\n  Addon: 1,\r\n  Labor: 2,\r\n  Access: 3,\r\n  Removal: 4,\r\n  Open: 5,\r\n};\r\n","import { Checkbox } from \"@material-ui/core\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  AddQuoteItem,\r\n  AddQuote_AccessArea,\r\n  GetCaseById,\r\n  GetQuoteById,\r\n  GetQuoteObject,\r\n  UpdateQuote_AccessArea,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  GetProduct,\r\n  GetStoreCategories,\r\n} from \"../../API_Functions/CatProduct_Functions\";\r\nimport {\r\n  LargeResponsiveButton,\r\n  RadioButtonInput100x30,\r\n  TextInput300x50,\r\n} from \"../../StylesheetComps/AuthSheet\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n  FlexRowCont,\r\n  FlexRowContFullWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { GridContainer2Wide } from \"../../StylesheetComps/Div\";\r\nimport {\r\n  FlexDivFlexStartCenter,\r\n  Image300x200,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport { Cont100PercentWidth } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  RegularText,\r\n  StyledHRGreyBreak,\r\n  StyledHRPropColour,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst AccessAreaQuote = ({\r\n  open,\r\n  onNext,\r\n  onPreview,\r\n  onFormComplete,\r\n  ReturnToPage,\r\n  quoteid,\r\n  GetQuoteInfo,\r\n  desiredpage,\r\n}) => {\r\n  const params = useParams();\r\n\r\n  const [imgMap, setImgMap] = useState([]);\r\n  const [accessCat, setAccessCat] = useState([]);\r\n  const [checkboxCheck, setCheckboxCheck] = useState(false);\r\n\r\n  const [accessObj, setAccessObj] = useState({});\r\n\r\n  const GetQuote = async (quoteid) => {\r\n    const data = await GetQuoteById(quoteid);\r\n    if (data && data.quote && data.quote.AccessArea) {\r\n      setAccessObj(data.quote.AccessArea);\r\n    }\r\n  };\r\n  \r\n\r\n  const GetQuoteStructure = async () => {\r\n    var data = await GetQuoteObject();\r\n    if (data) {\r\n      if (data.AccessArea) {\r\n        setAccessObj(data.AccessArea);\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetCaseImgs = async (caseid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data) {\r\n      setImgMap(data.Case.Photos);\r\n    }\r\n  };\r\n\r\n  const GetAccessCat = async (storeid) => {\r\n    var data = await GetStoreCategories(storeid);\r\n    setAccessCat(\r\n      data.cate.filter(\r\n        (o) => o.CateType === CategoryTypes.Access && o.Products !== null\r\n      )\r\n    );\r\n  };\r\n\r\n  const PassValuesAsProps = async (\r\n    productname,\r\n    productcatetype,\r\n    productid,\r\n    productunitprice\r\n  ) => {\r\n    AddAccessItemToLocalArray(\r\n      productname,\r\n      productcatetype,\r\n      productid,\r\n      productunitprice\r\n    );\r\n    if (quoteid !== 0) {\r\n      AddAccessAreaItemToQuote(\r\n        quoteid,\r\n        productname,\r\n        productcatetype,\r\n        productid,\r\n        productunitprice\r\n      );\r\n    }\r\n  };\r\n\r\n  const AddAccessItemToLocalArray = (\r\n    productname,\r\n    productcatetype,\r\n    productid,\r\n    productunitprice\r\n  ) => {\r\n    accessObj.Items = [\r\n      ...accessObj.Items,\r\n      {\r\n        Id: accessObj.Items.length,\r\n        Name: productname,\r\n        Product_Id: productid,\r\n        CateType: productcatetype,\r\n        UnitPrice: productunitprice,\r\n        Notes: \"\",\r\n        Quant: 1,\r\n      },\r\n    ];\r\n  };\r\n\r\n  const AddAccessAreaItemToQuote = async (\r\n    quoteid,\r\n    productname,\r\n    productcatetype,\r\n    productid,\r\n    productunitprice\r\n  ) => {\r\n    var item = {\r\n      Quote_Id: quoteid,\r\n      Name: productname,\r\n      Product_Id: productid,\r\n      UnitPrice: productunitprice,\r\n      Notes: \"\",\r\n      CateType: productcatetype,\r\n      Quant: 1,\r\n      Unit: \"\",\r\n    };\r\n    var data = await AddQuoteItem(item);\r\n    if (data) {\r\n    }\r\n  };\r\n\r\n  const CreateOrUpdateQuoteAccessArea = async (accessobj, desiredpage) => {\r\n    var data;\r\n    if (accessobj.Quote_Id !== 0) {\r\n      if (accessobj.Id === 0) {\r\n        data = await AddQuote_AccessArea(accessobj);\r\n        if (data) {\r\n          ReturnToPage(desiredpage);\r\n        }\r\n      } else {\r\n        var item = {\r\n          Id: accessobj.Id,\r\n          Width: accessobj.Width,\r\n          Length: accessobj.Length,\r\n          Elevation: accessobj.Elevation,\r\n          Obstruct: accessobj.Obstruct,\r\n        };\r\n        data = await UpdateQuote_AccessArea(item);\r\n        if (data) {\r\n          GetQuoteInfo();\r\n          ReturnToPage(desiredpage);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (open === false) {\r\n      if (params.caseId !== undefined) {\r\n        GetCaseImgs(params.caseId);\r\n      }\r\n\r\n      if (params.storeId !== undefined) {\r\n        GetAccessCat(params.storeId);\r\n      }\r\n\r\n      if (params.quoteId !== undefined) {\r\n        GetQuote(params.quoteId);\r\n      } else {\r\n        GetQuoteStructure();\r\n      }\r\n    }\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (open) {\r\n      CreateOrUpdateQuoteAccessArea(accessObj, desiredpage);\r\n    }\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const GetAccessItemInfo = async (productid) => {\r\n    var data = await GetProduct(productid);\r\n    if (data) {\r\n      PassValuesAsProps(data.Name, data.CateType, data.Id, data.UnitPrice);\r\n    }\r\n  };\r\n\r\n  if (open) return null;\r\n  if (accessObj.Obstruct === undefined && quoteid !== 0) {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n  if (quoteid === 0) {\r\n    return (\r\n      <FlexColumnFullWidth>\r\n        <FlexColumnContCenterAlign>\r\n          <SmallHeaderLeagueSpartan>Access Area</SmallHeaderLeagueSpartan>\r\n\r\n          <StyledHRGreyBreak></StyledHRGreyBreak>\r\n\r\n          <FlexRowContFullWidth>\r\n            <FlexColumnFullWidth>\r\n              <Cont100PercentWidth>\r\n                <FlexRowCont justifycontent=\"flex-start\">\r\n                  <SmallHeaderLeagueSpartan>\r\n                    Length (Feet)\r\n                  </SmallHeaderLeagueSpartan>\r\n                  <TextInput300x50\r\n                    onChange={(e) => {\r\n                      accessObj.Length = e.target.value;\r\n                    }}\r\n                    inputmargintop=\"0%\"\r\n                    inputheight=\"1%\"\r\n                    placeholder={accessObj.Length}\r\n                  ></TextInput300x50>\r\n                </FlexRowCont>\r\n                <br></br>\r\n                <FlexRowCont justifycontent=\"flex-start\">\r\n                  <SmallHeaderLeagueSpartan>\r\n                    Width (Feet)\r\n                  </SmallHeaderLeagueSpartan>\r\n                  <TextInput300x50\r\n                    onChange={(e) => {\r\n                      accessObj.Width = e.target.value;\r\n                    }}\r\n                    inputmargintop=\"0%\"\r\n                    inputheight=\"1%\"\r\n                    placeholder={accessObj.Width}\r\n                  ></TextInput300x50>\r\n                </FlexRowCont>\r\n\r\n                <br></br>\r\n\r\n                <FlexRowCont justifycontent=\"flex-start\">\r\n                  <SmallHeaderLeagueSpartan>\r\n                    Elevation (Feet)\r\n                  </SmallHeaderLeagueSpartan>\r\n                  <TextInput300x50\r\n                    onChange={(e) => {\r\n                      accessObj.Elevation = e.target.value;\r\n                    }}\r\n                    inputheight=\"1%\"\r\n                    inputmargintop=\"0%\"\r\n                    placeholder={accessObj.Elevation}\r\n                  ></TextInput300x50>\r\n                </FlexRowCont>\r\n              </Cont100PercentWidth>\r\n              <StyledHRPropColour\r\n                border={`0.5px solid ${ColorPalette.PrimaryGrey}`}\r\n              ></StyledHRPropColour>\r\n\r\n              <FlexRowCont justifycontent=\"flex-start\">\r\n                <SmallHeaderLeagueSpartan>Obstruction</SmallHeaderLeagueSpartan>\r\n                <FlexDivFlexStartCenter>\r\n                  <RadioButtonInput100x30\r\n                    type=\"radio\"\r\n                    onClick={() => {\r\n                      accessObj.Obstruct = true;\r\n                    }}\r\n                    id=\"yes\"\r\n                    name=\"obstruction\"\r\n                  ></RadioButtonInput100x30>\r\n                  <RegularText>Yes</RegularText>\r\n                </FlexDivFlexStartCenter>\r\n\r\n                <FlexDivFlexStartCenter>\r\n                  <RadioButtonInput100x30\r\n                    type=\"radio\"\r\n                    onClick={() => {\r\n                      accessObj.Obstruct = false;\r\n                    }}\r\n                    id=\"no\"\r\n                    name=\"obstruction\"\r\n                  ></RadioButtonInput100x30>\r\n                  <RegularText>No</RegularText>\r\n                </FlexDivFlexStartCenter>\r\n              </FlexRowCont>\r\n\r\n              <StyledHRPropColour\r\n                border={`0.5px solid ${ColorPalette.PrimaryGrey}`}\r\n              ></StyledHRPropColour>\r\n\r\n              <FlexColumnFullWidth>\r\n                {accessCat.map((o, i) => (\r\n                  <FlexDiv key={i}>\r\n                    <SmallHeaderLeagueSpartan\r\n                      onClick={() => {\r\n                        setCheckboxCheck(false);\r\n                      }}\r\n                    >\r\n                      {o.Name}\r\n                    </SmallHeaderLeagueSpartan>\r\n                    {o.Products.map((o, i) => (\r\n                      <FlexDiv key={i}>\r\n                        <Checkbox\r\n                          color={ColorPalette.PrimaryButtonBlue}\r\n                          type={\"checkbox\"}\r\n                          checked={checkboxCheck[i]}\r\n                          onClick={() => {\r\n                            GetAccessItemInfo(o.Id);\r\n                          }}\r\n                        ></Checkbox>\r\n                        <RegularText>{o.Name}</RegularText>\r\n                      </FlexDiv>\r\n                    ))}\r\n                  </FlexDiv>\r\n                ))}\r\n              </FlexColumnFullWidth>\r\n            </FlexColumnFullWidth>\r\n          </FlexRowContFullWidth>\r\n          <br></br>\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              onPreview(accessObj);\r\n              onFormComplete(accessObj);\r\n            }}\r\n          >\r\n            Next\r\n          </RegularResponsiveButton>\r\n\r\n          <StyledHRGreyBreak></StyledHRGreyBreak>\r\n          <br></br>\r\n          <GridContainer2Wide>\r\n            {imgMap.map((o, i) => (\r\n              <GridContainer2Wide key={i}>\r\n                <Image300x200 src={window.$IMGURL + o.File}></Image300x200>\r\n                <SmallHeader></SmallHeader>\r\n                <SmallHeader>{o.Caption}</SmallHeader>\r\n              </GridContainer2Wide>\r\n            ))}\r\n          </GridContainer2Wide>\r\n        </FlexColumnContCenterAlign>\r\n      </FlexColumnFullWidth>\r\n    );\r\n  } else if (quoteid !== 0) {\r\n    return (\r\n      <FlexColumnFullWidth>\r\n        <FlexColumnContCenterAlign>\r\n          <SmallHeaderLeagueSpartan>Access Area</SmallHeaderLeagueSpartan>\r\n\r\n          <br></br>\r\n          <StyledHRGreyBreak></StyledHRGreyBreak>\r\n          <br></br>\r\n\r\n          <FlexRowContFullWidth>\r\n            <FlexColumnFullWidth>\r\n              <Cont100PercentWidth>\r\n                <FlexRowCont justifycontent=\"flex-start\">\r\n                  <SmallHeaderLeagueSpartan>\r\n                    Length (Feet)\r\n                  </SmallHeaderLeagueSpartan>\r\n                  <TextInput300x50\r\n                    onChange={(e) => {\r\n                      accessObj.Length = e.target.value;\r\n                    }}\r\n                    inputheight=\"1%\"\r\n                    inputmargintop=\"0%\"\r\n                    placeholder={accessObj.Length}\r\n                  ></TextInput300x50>\r\n                </FlexRowCont>\r\n\r\n                <br></br>\r\n\r\n                <FlexRowCont justifycontent=\"flex-start\">\r\n                  <SmallHeaderLeagueSpartan>\r\n                    Width (Feet)\r\n                  </SmallHeaderLeagueSpartan>\r\n                  <TextInput300x50\r\n                    onChange={(e) => {\r\n                      accessObj.Width = e.target.value;\r\n                    }}\r\n                    inputheight=\"1%\"\r\n                    inputmargintop=\"0%\"\r\n                    placeholder={accessObj.Width}\r\n                  ></TextInput300x50>\r\n                </FlexRowCont>\r\n\r\n                <br></br>\r\n\r\n                <FlexRowCont justifycontent=\"flex-start\">\r\n                  <SmallHeaderLeagueSpartan>\r\n                    Elevation (Feet)\r\n                  </SmallHeaderLeagueSpartan>\r\n                  <TextInput300x50\r\n                    onChange={(e) => {\r\n                      accessObj.Elevation = e.target.value;\r\n                    }}\r\n                    inputheight=\"1%\"\r\n                    inputmargintop=\"0%\"\r\n                    placeholder={accessObj.Elevation}\r\n                  ></TextInput300x50>\r\n                </FlexRowCont>\r\n              </Cont100PercentWidth>\r\n              <StyledHRPropColour\r\n                border={`0.5px solid ${ColorPalette.PrimaryGrey}`}\r\n              ></StyledHRPropColour>\r\n\r\n              <FlexRowCont justifycontent=\"flex-start\">\r\n                <SmallHeaderLeagueSpartan>Obstruction</SmallHeaderLeagueSpartan>\r\n                <FlexDivFlexStartCenter>\r\n                  <RadioButtonInput100x30\r\n                    type=\"radio\"\r\n                    onClick={() => {\r\n                      accessObj.Obstruct = true;\r\n                    }}\r\n                    id=\"yes\"\r\n                    name=\"obstruction\"\r\n                    defaultChecked={accessObj.Obstruct === true ? true : false}\r\n                  ></RadioButtonInput100x30>\r\n                  <RegularText>Yes</RegularText>\r\n                </FlexDivFlexStartCenter>\r\n\r\n                <FlexDivFlexStartCenter>\r\n                  <RadioButtonInput100x30\r\n                    type=\"radio\"\r\n                    onClick={() => {\r\n                      accessObj.Obstruct = false;\r\n                    }}\r\n                    id=\"no\"\r\n                    name=\"obstruction\"\r\n                    defaultChecked={accessObj.Obstruct === false ? true : false}\r\n                  ></RadioButtonInput100x30>\r\n                  <RegularText>No</RegularText>\r\n                </FlexDivFlexStartCenter>\r\n              </FlexRowCont>\r\n              <StyledHRPropColour\r\n                border={`0.5px solid ${ColorPalette.PrimaryGrey}`}\r\n              ></StyledHRPropColour>\r\n              <FlexColumnFullWidth>\r\n                {accessCat.map((o, i) => (\r\n                  <FlexDiv key={i}>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      {o.Name}\r\n                    </SmallHeaderLeagueSpartan>\r\n                    {o.Products.map((o, i) => (\r\n                      <FlexDiv key={i}>\r\n                        <Checkbox\r\n                          color=\"green\"\r\n                          type={\"checkbox\"}\r\n                          checked={checkboxCheck[i]}\r\n                          onClick={() => {\r\n                            GetAccessItemInfo(o.Id);\r\n                          }}\r\n                        ></Checkbox>\r\n                        <RegularText\r\n                          onClick={() => {\r\n                            GetAccessItemInfo(o.Id);\r\n                          }}\r\n                        >\r\n                          {o.Name}\r\n                        </RegularText>\r\n                      </FlexDiv>\r\n                    ))}\r\n                  </FlexDiv>\r\n                ))}\r\n              </FlexColumnFullWidth>\r\n            </FlexColumnFullWidth>\r\n          </FlexRowContFullWidth>\r\n\r\n          <LargeResponsiveButton\r\n            onClick={() => {\r\n              desiredpage = \"quote\";\r\n              open = false;\r\n              CreateOrUpdateQuoteAccessArea(accessObj, desiredpage);\r\n            }}\r\n          >\r\n            Save Changes\r\n          </LargeResponsiveButton>\r\n          <br></br>\r\n          <StyledHRGreyBreak></StyledHRGreyBreak>\r\n          <br></br>\r\n          <GridContainer2Wide>\r\n            {imgMap.map((o, i) => (\r\n              <GridContainer2Wide key={i}>\r\n                <Image300x200 src={window.$IMGURL + o.File}></Image300x200>\r\n                <SmallHeader></SmallHeader>\r\n                <SmallHeader>{o.Caption}</SmallHeader>\r\n              </GridContainer2Wide>\r\n            ))}\r\n          </GridContainer2Wide>\r\n        </FlexColumnContCenterAlign>\r\n      </FlexColumnFullWidth>\r\n    );\r\n  }\r\n};\r\n\r\nAccessAreaQuote.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  GetQuoteInfo: () => {},\r\n  quoteId: 0,\r\n};\r\n\r\nexport default AccessAreaQuote;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  AddQuote,\r\n  GetCaseById,\r\n  GetQuoteById,\r\n  GetQuoteObject,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { GetCurrentTime } from \"../../API_Functions/Utility_Functions\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport AccessAreaQuote from \"../../comps/Quote Form/AccessArea\";\r\nimport ScrollToTop from \"../../comps/ScrollToTop\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexCont100vw100vh,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\n\r\nconst QuoteScreen = () => {\r\n  //=============================================================================\r\n  // QuoteScreen - This page contains all steps to create a quote by Managers/Est.\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Composed of AccessArea, Material Selection\r\n  //=============================================================================\r\n  const history = useHistory();\r\n  const [quoteObj, setQuoteObj] = useState({});\r\n\r\n  const params = useParams();\r\n\r\n  const [accessAreaOpen, setAccessAreaOpen] = useState(false);\r\n\r\n  const [quoteId, setQuoteId] = useState(0);\r\n\r\n  const [grandTotal] = useState(0);\r\n\r\n  const HandleAccessForm = async (accessObj) => {\r\n    quoteObj.AccessArea.Obstruct = accessObj.Obstruct;\r\n    quoteObj.AccessArea.Width = accessObj.Width;\r\n    quoteObj.AccessArea.Length = accessObj.Length;\r\n    quoteObj.AccessArea.Elevation = accessObj.Elevation;\r\n    quoteObj.AccessArea.Items = accessObj.Items;\r\n    AddNewQuote(quoteObj, params.caseId);\r\n  };\r\n\r\n  const AddNewQuote = async (quoteobj, caseid) => {\r\n    var addtime = await GetCurrentTime();\r\n    var proposal = await GetNewQuoteProposalNumber(caseid);\r\n    quoteobj.Case_Id = caseid;\r\n    quoteobj.AddTime = addtime;\r\n    quoteobj.Proposal = proposal;\r\n    quoteobj.AccessArea.Case_Id = caseid;\r\n    var data = await AddQuote(quoteobj);\r\n    if (data !== null) {\r\n      setQuoteId(data.quote.Id);\r\n      setQuoteObj(data.quote);\r\n      window.scrollTo(0, 0);\r\n      history.push(\r\n        `/viewquote/${params.Id}/${params.storeId}/${params.caseId}/${data.quote.Id}/0`\r\n      );\r\n    }\r\n  };\r\n\r\n  const GetNewQuoteProposalNumber = async (caseid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data != null) {\r\n      if (data.Case?.Quotes?.length > 0) {\r\n        var proposal = 0;\r\n        data.Case.Quotes.forEach((element) => {\r\n          if (element.Proposal > proposal) proposal = element.Proposal;\r\n        });\r\n        proposal++;\r\n        return proposal;\r\n      } else return 0;\r\n    } else return 0;\r\n  };\r\n\r\n  const GetQuoteInfo = async (quoteid) => {\r\n    var data = await GetQuoteById(quoteid);\r\n    if (data !== null) {\r\n      setQuoteObj(data.quote);\r\n    }\r\n  };\r\n\r\n  const GetBlankQuoteObj = async () => {\r\n    var data = await GetQuoteObject();\r\n    if (data !== null) {\r\n      setQuoteObj(data);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    window.scrollTo(0, 0);\r\n    GetBlankQuoteObj();\r\n  }, []);\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <ScrollToTop />\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <AccessAreaQuote\r\n            quoteid={quoteId}\r\n            ReturnToQuote={() => {\r\n              GetQuoteInfo(quoteId);\r\n              setAccessAreaOpen(true);\r\n              window.scrollTo(0, 0);\r\n            }}\r\n            onPreview={HandleAccessForm}\r\n            open={accessAreaOpen}\r\n          ></AccessAreaQuote>\r\n        </RightViewFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nQuoteScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default QuoteScreen;\r\n","import { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont500x200pxFixedNoMobile,\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexDiv,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { ExtraLargeText } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst DeleteZoneWindow = ({ deleteOpen, closeDel, onDeleteFunction }) => {\r\n  if (!deleteOpen) return null;\r\n  return (\r\n    <Cont500x200pxFixedNoMobile>\r\n      <FlexColumnContRedBorderTopRounded>\r\n        <ExtraLargeText>Are you sure you want to delete this?</ExtraLargeText>\r\n        <FlexDiv>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={closeDel}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              closeDel();\r\n              onDeleteFunction();\r\n            }}\r\n          >\r\n            Delete\r\n          </RegularResponsiveButton>\r\n        </FlexDiv>\r\n      </FlexColumnContRedBorderTopRounded>\r\n    </Cont500x200pxFixedNoMobile>\r\n  );\r\n};\r\n\r\nDeleteZoneWindow.defaultProps = {\r\n  onDeleteFunction: () => {},\r\n};\r\n\r\nexport default DeleteZoneWindow;\r\n","import React, { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont400x575px,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  LeagueSpartanExtraLargeWidth200px,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst EditZoneWindow = ({\r\n  open,\r\n  onClose,\r\n  onChange,\r\n  onMetroComplete,\r\n  onPreview,\r\n}) => {\r\n  const [editZone, setEditZone] = useState(\"\");\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <Cont400x575px>\r\n      <LeagueSpartanExtraLargeBold>Edit Zone</LeagueSpartanExtraLargeBold>\r\n      <LeftItemWindowFixed>\r\n        <LeagueSpartanExtraLargeWidth200px>\r\n          Zone Name\r\n        </LeagueSpartanExtraLargeWidth200px>\r\n\r\n        <TextInput72Percent\r\n          placeholder=\"Zone Name\"\r\n          onChange={(e) => {\r\n            setEditZone(e.target.value);\r\n          }}\r\n        ></TextInput72Percent>\r\n        <RegularResponsiveButton\r\n          onClick={() => {\r\n            onPreview({ editZone });\r\n            onMetroComplete(editZone);\r\n            onClose();\r\n          }}\r\n        >\r\n          Update\r\n        </RegularResponsiveButton>\r\n        <RegularResponsiveButton\r\n          bgcolor={ColorPalette.PrimaryRed}\r\n          onClick={onClose}\r\n        >\r\n          Cancel\r\n        </RegularResponsiveButton>\r\n      </LeftItemWindowFixed>\r\n    </Cont400x575px>\r\n  );\r\n};\r\n\r\nEditZoneWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onMetroComplete: () => {},\r\n};\r\n\r\nexport default EditZoneWindow;\r\n","import { useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont400x400pxFixed,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { TextInput72Percent } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlayRegular } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Cont100PercentWidth } from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  LeagueSpartanExtraLargeWidth200px,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst NewZoneWindow = ({\r\n  open,\r\n  onClose,\r\n  onChange,\r\n  onFormComplete,\r\n  onPreview,\r\n}) => {\r\n  const [storeNewZone, setStoreNewZone] = useState(\"\");\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <FixedOverlayRegular>\r\n        <Cont400x400pxFixed>\r\n          <LeagueSpartanExtraLargeBold>New Zone</LeagueSpartanExtraLargeBold>\r\n          <LeftItemWindowFixed>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              Zone Name\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInput72Percent\r\n              onChange={(e) => {\r\n                setStoreNewZone(e.target.value);\r\n              }}\r\n            ></TextInput72Percent>\r\n            <Cont100PercentWidth\r\n              onClick={() => {\r\n                onPreview({ storeNewZone });\r\n              }}\r\n            >\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  onFormComplete(storeNewZone);\r\n                  onClose();\r\n                }}\r\n              >\r\n                Add\r\n              </RegularResponsiveButton>\r\n            </Cont100PercentWidth>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={onClose}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n          </LeftItemWindowFixed>\r\n        </Cont400x400pxFixed>{\" \"}\r\n      </FixedOverlayRegular>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nNewZoneWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n};\r\n\r\nexport default NewZoneWindow;\r\n","import React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport {\r\n  Icon30x40pxPointer,\r\n  Icon40x40Percent,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { FlexCont80PercentAutoHeightPadding } from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  Div30Percent,\r\n  FlexColumnDivSpaceBetween,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { RegularTextBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ZoneCatCard = ({ MetroName, MetroID, DelMetro, EditMetro, ZoneID }) => {\r\n  return (\r\n    <FlexCont80PercentAutoHeightPadding>\r\n      <Div30Percent>\r\n        <Icon40x40Percent src={\"/metroicon.svg\"}></Icon40x40Percent>\r\n      </Div30Percent>\r\n      <Link\r\n        to={\"/Zone/\" + MetroID + \"/\" + ZoneID}\r\n        style={{ textDecoration: \"none\", color: \"black\" }}\r\n      >\r\n        <RegularTextBold>{MetroName}</RegularTextBold>\r\n      </Link>\r\n      <FlexColumnDivSpaceBetween>\r\n        <Icon30x40pxPointer\r\n          src={\"/EditIcon.svg\"}\r\n          onClick={EditMetro}\r\n        ></Icon30x40pxPointer>\r\n        <Icon30x40pxPointer\r\n          src={\"/Garbage_Icon.svg\"}\r\n          onClick={DelMetro}\r\n        ></Icon30x40pxPointer>\r\n      </FlexColumnDivSpaceBetween>\r\n    </FlexCont80PercentAutoHeightPadding>\r\n  );\r\n};\r\n\r\nZoneCatCard.defaultProps = {\r\n  MetroName: \"Default Zone Name\",\r\n  MetroID: 0,\r\n  ZoneID: 0,\r\n};\r\n\r\nexport default ZoneCatCard;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport DeleteZoneWindow from \"../../comps/Windows/DeleteZone\";\r\nimport EditZoneWindow from \"../../comps/Windows/EditZone\";\r\nimport NewZoneWindow from \"../../comps/Windows/NewZone\";\r\nimport ZoneCatCard from \"../../comps/ZoneCatCard\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexCont100vw100vh,\r\n  LeftCont,\r\n  RightCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport {\r\n  FlexDiv70x7Percent,\r\n  GridDiv80xAutoPercent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  HundredPercentFlexDiv,\r\n  Icon30px30pxPointer,\r\n} from \"../../StylesheetComps/Quote\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ZoneListScreen = () => {\r\n  //=============================================================================\r\n  // Zone List Screen - View all Zone inside of a Metro (Edit, Delete)\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  const [zoneListMap, getZoneListMap] = useState([]);\r\n  const [isOpen, setIsOpen] = useState(false);\r\n  const [isDelOpen, setIsDelOpen] = useState(false);\r\n\r\n  const [editMetroOpen, setEditMetroOpen] = useState(false);\r\n  const [storeMetroId, setStoreMetroId] = useState(0);\r\n  const [storeStoreId, setStoreStoreId] = useState(0);\r\n\r\n  const HandleEditMetro = async (newMetroName) => {\r\n    var resp = await axios.put(window.$DBURL + \"store/zone\", {\r\n      Name: newMetroName,\r\n      Id: storeMetroId,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetZoneList();\r\n    }\r\n  };\r\n\r\n  const GetZoneList = async () => {\r\n    try {\r\n      const resp = await axios.get(\r\n        `${window.$DBURL}store/zonelist/${params.Id}`\r\n      );\r\n\r\n      if (resp.status === 200 && resp.data !== null) {\r\n        getZoneListMap(resp.data.zones);\r\n      }\r\n    } catch (error) {\r\n      // Handle any errors that may occur\r\n    }\r\n  };\r\n\r\n  const GetProfileInfo = async () => {\r\n    setStoreStoreId(JSON.parse(sessionStorage.getItem(\"userInfo\")).Store_Id);\r\n  };\r\n\r\n  const HandleNewZone = async (newMetro) => {\r\n    try {\r\n      const resp = await axios.post(`${window.$DBURL}store/zone`, {\r\n        Name: newMetro,\r\n        Store_Id: storeStoreId,\r\n      });\r\n\r\n      if (resp.status === 200) {\r\n        GetZoneList();\r\n      }\r\n    } catch (error) {\r\n      // Handle any errors that may occur\r\n    }\r\n  };\r\n\r\n  const HandleDeleteZone = async () => {\r\n    try {\r\n      const resp = await axios.delete(\r\n        `${window.$DBURL}store/zone/${storeMetroId}`\r\n      );\r\n      if (resp.status === 200) {\r\n        GetZoneList();\r\n      }\r\n    } catch (error) {\r\n      // Handle error\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetZoneList();\r\n    GetProfileInfo();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n      <NewZoneWindow\r\n        open={isOpen}\r\n        onClose={() => setIsOpen(false)}\r\n        onFormComplete={HandleNewZone}\r\n      ></NewZoneWindow>\r\n      <RightCont>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <FlexDiv70x7Percent>\r\n            <HundredPercentFlexDiv>\r\n              <Icon30px30pxPointer\r\n                src=\"/backarrow.svg\"\r\n                onClick={() => {\r\n                  history.push(\"/store/\" + params.Id);\r\n                }}\r\n              ></Icon30px30pxPointer>\r\n              <LeagueSpartanExtraLargeBold>Zones</LeagueSpartanExtraLargeBold>\r\n              <RegularResponsiveButton onClick={() => setIsOpen(true)}>\r\n                Add Zone\r\n              </RegularResponsiveButton>\r\n            </HundredPercentFlexDiv>\r\n          </FlexDiv70x7Percent>\r\n          <DeleteZoneWindow\r\n            deleteOpen={isDelOpen}\r\n            closeDel={() => {\r\n              setIsDelOpen(false);\r\n            }}\r\n            onDeleteFunction={HandleDeleteZone}\r\n          ></DeleteZoneWindow>\r\n          <GridDiv80xAutoPercent>\r\n            {zoneListMap.map((o, i) => (\r\n              <ZoneCatCard\r\n                key={i}\r\n                MetroName={o.Name}\r\n                MetroID={o.Store_Id}\r\n                ZoneID={o.Id}\r\n                DelMetro={() => {\r\n                  setIsDelOpen(true);\r\n                  setStoreMetroId(o.Id);\r\n                }}\r\n                EditMetro={() => {\r\n                  setEditMetroOpen(true);\r\n                  setStoreMetroId(o.Id);\r\n                }}\r\n              ></ZoneCatCard>\r\n            ))}\r\n          </GridDiv80xAutoPercent>\r\n          <EditZoneWindow\r\n            open={editMetroOpen}\r\n            onClose={() => setEditMetroOpen(false)}\r\n            onMetroComplete={HandleEditMetro}\r\n          ></EditZoneWindow>\r\n        </RightViewFullWidth>\r\n      </RightCont>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nZoneListScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  RoleName: \"Role Name Ex. Estimator\",\r\n};\r\n\r\nexport default ZoneListScreen;\r\n","import React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { FlexCont300x150px } from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  Div30Percent,\r\n  Div70Percent,\r\n  FlexEndDivAutox15Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon80x80Percent } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  TitleFontSize100Percent,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreManagerCard = ({ CatHeadText, CatParaText, storeId }) => {\r\n  return (\r\n    <FlexCont300x150px>\r\n      <Div30Percent>\r\n        <Icon80x80Percent src=\"/storemanagement.svg\"></Icon80x80Percent>\r\n      </Div30Percent>\r\n      <Div70Percent>\r\n        <Link\r\n          to={\"/Store/\" + storeId}\r\n          style={{ textDecoration: \"none\", color: \"black\" }}\r\n        >\r\n          <LeagueSpartanExtraLargeBold>\r\n            {CatHeadText}\r\n          </LeagueSpartanExtraLargeBold>\r\n        </Link>\r\n        <TitleFontSize100Percent>{CatParaText}</TitleFontSize100Percent>\r\n      </Div70Percent>\r\n\r\n      <FlexEndDivAutox15Percent></FlexEndDivAutox15Percent>\r\n    </FlexCont300x150px>\r\n  );\r\n};\r\n\r\nStoreManagerCard.defaultProps = {\r\n  CatHeadText: \"Fencing\",\r\n  CatParaText:\r\n    \"This is a category for the products that are contained within, sample text\",\r\n  CatButtonText: \"View Products\",\r\n  CatUrl: \"\",\r\n  storeId: 0,\r\n};\r\n\r\nexport default StoreManagerCard;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport StoreManagerCard from \"../../comps/StoreManagerCard\";\r\nimport {\r\n  Div70PerWidth7PerHeight,\r\n  FlexCont100vw100vh,\r\n  LeftCont,\r\n  RightCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { GridDiv80xAutoPercent } from \"../../StylesheetComps/Div\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ViewListOfStoresScreen = () => {\r\n  //=============================================================================\r\n  // Store List Default Screen - Template\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Store is used as the default for Store Lists in the Application\r\n  //=============================================================================\r\n\r\n  const [storeList, setStoreList] = useState([]);\r\n\r\n  const GetStoreList = async () => {\r\n    try {\r\n      var metroid = JSON.parse(sessionStorage.getItem(\"userInfo\")).Metro_Id;\r\n      // Fetch the installers for the given store\r\n      const resp = await axios.get(`${window.$DBURL}store/metro/${metroid}`);\r\n      if (resp.status === 200 && resp.data && resp.data.stores) {\r\n        setStoreList(resp.data.stores);\r\n      }\r\n    } catch (error) {\r\n      // Handle error\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetStoreList();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n      <RightCont>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <Div70PerWidth7PerHeight>\r\n            <LeagueSpartanExtraLargeBold>\r\n              View Stores\r\n            </LeagueSpartanExtraLargeBold>\r\n          </Div70PerWidth7PerHeight>\r\n          <GridDiv80xAutoPercent>\r\n            {storeList.map((o, i) => (\r\n              <StoreManagerCard\r\n                key={i}\r\n                CatHeadText={o.Name}\r\n                CatParaText={o.Address}\r\n                storeId={o.Id}\r\n              ></StoreManagerCard>\r\n            ))}\r\n          </GridDiv80xAutoPercent>\r\n        </RightViewFullWidth>\r\n      </RightCont>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nViewListOfStoresScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  RoleName: \"Role Name Ex. Estimator\",\r\n};\r\n\r\nexport default ViewListOfStoresScreen;\r\n","import React from \"react\";\r\nimport { FlexCont300x150px } from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  Div30Percent,\r\n  Div70Percent,\r\n  FlexEndDivAutox15Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon80x80Percent } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { RegularText, LeagueSpartanLarge } from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreAdminCard = ({ CatHeadText, CatParaText }) => {\r\n  return (\r\n    <FlexCont300x150px>\r\n      <Div30Percent>\r\n        <Icon80x80Percent src=\"/Inventory.svg\"></Icon80x80Percent>\r\n      </Div30Percent>\r\n      <Div70Percent>\r\n        <LeagueSpartanLarge>{CatHeadText}</LeagueSpartanLarge>\r\n        <RegularText>{CatParaText}</RegularText>\r\n      </Div70Percent>\r\n\r\n      <FlexEndDivAutox15Percent></FlexEndDivAutox15Percent>\r\n    </FlexCont300x150px>\r\n  );\r\n};\r\n\r\nStoreAdminCard.defaultProps = {\r\n  CatHeadText: \"Fencing\",\r\n  CatParaText:\r\n    \"This is a category for the products that are contained within, sample text\",\r\n};\r\n\r\nexport default StoreAdminCard;\r\n","/* eslint-disable */\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport axios from \"axios\";\r\nimport styled from \"styled-components\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport StoreAdminCard from \"../../comps/StoreAdminCard\";\r\n\r\nimport {\r\n  LeftCont,\r\n  FlexCont100vw100vh,\r\n  RightCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { FlexDiv70x7Percent } from \"../../StylesheetComps/Div\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst CatFlexDiv = styled.div`\r\n  width: 80%;\r\n  display: flex;\r\n  flex-flow: row row;\r\n  gap: 5px;\r\n  @media (max-width: 1006px) {\r\n    display: flex;\r\n    flex-direction: column;\r\n    height: 100vh;\r\n    align-items: center;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n  }\r\n`;\r\n\r\nconst StoreAdminListScreen = ({ MetroID }) => {\r\n  //=============================================================================\r\n  // Admin Store List - Admin can view the stores in a Metro and select the one\r\n  // that they would like to view.\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Redirects to the StoreAdmin (Only accessable by Admin Role)\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n\r\n  //AXIOS\r\n  const [storeList, setStoreList] = useState([]);\r\n\r\n  const GetSessionInfo = async () => {\r\n    idForMetro = JSON.parse(sessionStorage.getItem(\"userInfo\")).Metro_Id;\r\n    idForStore = JSON.parse(sessionStorage.getItem(\"userInfo\")).Store_Id;\r\n    const resp2 = await axios.get(window.$DBURL + \"store/metro/\" + params.Id);\r\n    if (resp2.status == 200) {\r\n      if (resp2.data !== null) {\r\n        if (resp2.data.stores !== null) {\r\n          setStoreList(resp2.data.stores);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []);\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n      <RightCont>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <FlexDiv70x7Percent>\r\n            <LeagueSpartanExtraLargeBold>\r\n              View Stores\r\n            </LeagueSpartanExtraLargeBold>\r\n          </FlexDiv70x7Percent>\r\n          <CatFlexDiv>\r\n            {storeList.map((o, i) => (\r\n              <StoreAdminCard\r\n                key={i}\r\n                CatHeadText={o.Name}\r\n                CatParaText={o.Address}\r\n                storeId={o.Id}\r\n              ></StoreAdminCard>\r\n            ))}\r\n          </CatFlexDiv>\r\n        </RightViewFullWidth>\r\n      </RightCont>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nStoreAdminListScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  RoleName: \"Role Name Ex. Estimator\",\r\n};\r\n\r\nexport default StoreAdminListScreen;\r\n","export default __webpack_public_path__ + \"static/media/manager.c9695b01.svg\";","export default __webpack_public_path__ + \"static/media/phone.479cb89b.svg\";","/* eslint-disable */\r\n\r\nimport axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport styled from \"styled-components\";\r\nimport { GetStoreCategories } from \"../../API_Functions/CatProduct_Functions\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport ManagerCard from \"../../comps/ManagerCard\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport AddManagerWindow from \"../../comps/Windows/AddManager\";\r\nimport EditStoreWindow from \"../../comps/Windows/EditStore\";\r\nimport ManagerIcon from \"../../manager.svg\";\r\nimport PhoneIcon from \"../../phone.svg\";\r\n\r\nimport { FlexCont100vw100vh, LeftCont } from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont80vwAutoHeight } from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { FlexDiv70x7Percent } from \"../../StylesheetComps/Div\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\nconst StoreText = styled.p`\r\n  font-size: 18px;\r\n  font-family: Avenir;\r\n`;\r\n\r\nconst StoreAddressDiv = styled.div`\r\n  width: 30%;\r\n  height: 5%;\r\n  margin-left: 2%;\r\n`;\r\n\r\nconst StoreInfoDiv = styled.div`\r\n  width: 50%;\r\n  height: 5%;\r\n  margin: 22px;\r\n\r\n  display: flex;\r\n`;\r\n\r\nconst IconInfoDiv = styled.div`\r\n  width: 30%;\r\n  height: 30%;\r\n  margin: 0px;\r\n\r\n  display: flex;\r\n  align-items: center;\r\n`;\r\n\r\nconst InfoIcon = styled.img`\r\n  margin: 5%;\r\n`;\r\n\r\nconst ErrorTextPara = styled.p`\r\n  font-family: Futura;\r\n  color: red;\r\n  font-weight: 500;\r\n`;\r\n\r\nconst StoreAdminScreen = () => {\r\n  //=============================================================================\r\n  // Store Admin Screen - Admin can view basic information about Store\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Accessable only by Admin\r\n  //=============================================================================\r\n\r\n  const [storeInfo, setStoreInfo] = useState([]);\r\n  const [storeName, setStoreName] = useState([]);\r\n  const [storeAddress, setStoreAddress] = useState([]);\r\n  const [storePhone, setStorePhone] = useState([]);\r\n  const [managerName, setManagerName] = useState([]);\r\n  const [storeCategory, setStoreCategory] = useState([]);\r\n  const [errorText, setErrorText] = useState(\"\");\r\n\r\n  const [managerArray, setManagerArray] = useState([]);\r\n\r\n  const [isNewManagerOpen, setIsNewManagerOpen] = useState(false);\r\n\r\n  var setManagerNameStore = \"\";\r\n  var setManagerUsername = \"\";\r\n  var setManagerEmail = \"\";\r\n  var setManagerPhone = \"\";\r\n  var setManagerPass = \"\";\r\n\r\n  const [metroId, setMetroId] = useState(0);\r\n  const [IdForStore, setStoreId] = useState(0);\r\n\r\n  var newStoreId = 0;\r\n  var newMetroId = 0;\r\n  var setUserId = 0;\r\n\r\n  const params = useParams();\r\n\r\n  const GetManagers = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"store/\" + params.storeId + \"/managers\"\r\n    );\r\n    if (resp.status == 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.managers !== null) {\r\n          setManagerArray(resp.data.managers);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetStoreCategory = async () => {\r\n    var data = await GetStoreCategories(params.Id);\r\n    setStoreCategory(data);\r\n  };\r\n\r\n  const GetMetro = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"store/\" + params.storeId);\r\n    if (resp.status == 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.store !== null) {\r\n          setStoreInfo(resp.data.store);\r\n          setStoreName(resp.data.store.Name);\r\n          setStoreAddress(resp.data.store.Address);\r\n          setStorePhone(resp.data.store.Phone);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetProfileInfo = async () => {\r\n    setManagerName(JSON.parse(sessionStorage.getItem(\"userInfo\")).Name);\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetMetro();\r\n    GetProfileInfo();\r\n    GetStoreCategory();\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    window.scrollTo(0, 0);\r\n  }, []);\r\n\r\n  const HandleFormComplete = async ({\r\n    storeName,\r\n    storeAddress,\r\n    storePhone,\r\n  }) => {\r\n    setStoreName(storeName);\r\n    setStoreAddress(storeAddress);\r\n    setStorePhone(storePhone);\r\n  };\r\n\r\n  const HandleFormCompleteStore = async ({\r\n    managerName,\r\n    managerUsername,\r\n    managerEmail,\r\n    managerPhone,\r\n    managerPass,\r\n    metroId,\r\n    storeId,\r\n  }) => {\r\n    setManagerNameStore = managerName;\r\n    setManagerUsername = managerUsername;\r\n    setManagerEmail = managerEmail;\r\n    setManagerPhone = managerPhone;\r\n    setManagerPass = managerPass;\r\n    newStoreId = storeId;\r\n    newMetroId = metroId;\r\n  };\r\n\r\n  const HandleEditStore = async (\r\n    newStoreName,\r\n    newStoreAddress,\r\n    newStorePhone\r\n  ) => {\r\n    var resp = await axios.put(window.$DBURL + \"store\", {\r\n      Id: params.storeId,\r\n      Name: newStoreName,\r\n      Address: newStoreAddress,\r\n      Phone: newStorePhone,\r\n    });\r\n    if (resp.status == 200) {\r\n      GetMetro();\r\n    }\r\n  };\r\n\r\n  const HandleManagerDel = async (key) => {\r\n    var resp = await axios.delete(window.$DBURL + \"admin/manager/\" + setUserId);\r\n    if (resp.status == 200) {\r\n      GetManagers();\r\n    }\r\n  };\r\n\r\n  const HandleNewManager = async () => {\r\n    const resp = await axios\r\n      .post(window.$DBURL + \"admin/manager/\" + params.storeId, {\r\n        Name: setManagerNameStore,\r\n        Username: setManagerUsername,\r\n        Password: setManagerPass,\r\n        Phone: setManagerPhone,\r\n        Email: setManagerEmail,\r\n        Metro_Id: newMetroId,\r\n        Store_Id: newStoreId,\r\n      })\r\n      .catch(handleErrors);\r\n    if (resp.status == 200) {\r\n      setIsNewManagerOpen(false);\r\n\r\n      GetManagers();\r\n      setErrorText(\"\");\r\n    }\r\n  };\r\n\r\n  function handleErrors(err) {\r\n    if ((err.Message = \"Invalid username! Username already exists.\")) {\r\n      setErrorText(\"Invalid username! Username already exists.\");\r\n    } else if (err.request) {\r\n      setErrorText(\"Manager Creation Failed, Username may already be in use.\");\r\n    } else if (err.response) {\r\n      setErrorText(\"Manager Creation Failed, Username may already be in use.\");\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    GetManagers();\r\n  }, []);\r\n\r\n  const [isEditOpen, setIsEditOpen] = useState(false);\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <FlexDiv70x7Percent>\r\n            <LeagueSpartanExtraLargeBold>\r\n              {storeName}\r\n            </LeagueSpartanExtraLargeBold>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                setIsEditOpen(true);\r\n              }}\r\n            >\r\n              Edit Store\r\n            </RegularResponsiveButton>\r\n          </FlexDiv70x7Percent>\r\n          <EditStoreWindow\r\n            Name={storeName}\r\n            Address={storeAddress}\r\n            Phone={storePhone}\r\n            open={isEditOpen}\r\n            onClose={() => {\r\n              setIsEditOpen(false);\r\n            }}\r\n            onFormComplete={HandleEditStore}\r\n            onPreview={HandleFormComplete}\r\n          ></EditStoreWindow>\r\n\r\n          <StoreAddressDiv>\r\n            <StoreText>{storeAddress}</StoreText>\r\n          </StoreAddressDiv>\r\n          <StoreInfoDiv>\r\n            <IconInfoDiv>\r\n              <InfoIcon src={PhoneIcon}></InfoIcon>\r\n              <StoreText>{storePhone}</StoreText>\r\n            </IconInfoDiv>\r\n            <IconInfoDiv>\r\n              <InfoIcon src={ManagerIcon}></InfoIcon>\r\n              <StoreText>{managerName}</StoreText>\r\n            </IconInfoDiv>\r\n          </StoreInfoDiv>\r\n          <hr></hr>\r\n          <FlexDiv70x7Percent>\r\n            <LeagueSpartanExtraLargeBold>Managers</LeagueSpartanExtraLargeBold>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                setIsNewManagerOpen(true);\r\n              }}\r\n            >\r\n              Create Manager\r\n            </RegularResponsiveButton>\r\n            <ErrorTextPara>{errorText}</ErrorTextPara>\r\n          </FlexDiv70x7Percent>\r\n          <AddManagerWindow\r\n            open={isNewManagerOpen}\r\n            onClose={() => setIsNewManagerOpen(false)}\r\n            onPreview={HandleFormCompleteStore}\r\n            onFormComplete={HandleNewManager}\r\n          ></AddManagerWindow>\r\n          {managerArray.map((o, i) => (\r\n            <ManagerCard\r\n              ManagerName={o.Name}\r\n              StoreLocationName={o.User_Id}\r\n              MetroName={o.StoreName}\r\n              onDel={() => {\r\n                setUserId = o.User_Id;\r\n                HandleManagerDel();\r\n              }}\r\n            ></ManagerCard>\r\n          ))}\r\n        </RightViewFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nStoreAdminScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  StoreImgUrl:  '/NRCLogoRegularBlack.png' ,\r\n  StoreName: \"Store Name\",\r\n  StoreAddressText:\r\n    \"SAMPLE ADDRESS TEST ADDRESS Unit 200-6200 McKay Avenue Mississauga, Ontario V5H4L7\",\r\n  PhoneNumber: \"(778)-888-8888\",\r\n  ManagerName: \"Manager Name\",\r\n};\r\n\r\nexport default StoreAdminScreen;\r\n","import React, { useEffect } from \"react\";\r\nimport axios from \"axios\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nimport { AuthCont, LeftAuthCont } from \"../../StylesheetComps/AuthSheet\";\r\nimport { LeftItemsCont } from \"../../StylesheetComps/AuthSheet\";\r\nimport { Logo } from \"../../StylesheetComps/AuthSheet\";\r\nimport { Header } from \"../../StylesheetComps/AuthSheet\";\r\nimport { BodyPara } from \"../../StylesheetComps/AuthSheet\";\r\n\r\nimport { RightAuthCont } from \"../../StylesheetComps/AuthSheet\";\r\nimport { RightItemsCont } from \"../../StylesheetComps/AuthSheet\";\r\nimport { RightBarDiv } from \"../../StylesheetComps/AuthSheet\";\r\nimport { PrivacyPolicy } from \"../../StylesheetComps/AuthSheet\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\nconst ActivateScreen = () => {\r\n  //=============================================================================\r\n  // Activate Account Screen. User is redirected here after clicking the activate\r\n  // link that was emailed to them.\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Redirects to the Login Page\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  //User is redirected from email to activate account, useEffect activates right away to Activate Account\r\n\r\n  useEffect(() => {\r\n    ActivateAccount(params.activateCode);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const ActivateAccount = async (activate) => {\r\n    const resp = await axios.post(window.$DBURL + \"users/activate/\" + activate);\r\n    if (resp.status === 200) {\r\n    }\r\n  };\r\n\r\n  return (\r\n    <AuthCont>\r\n      <LeftAuthCont backgroundimg=\"/Log In Image.png\">\r\n        <LeftItemsCont></LeftItemsCont>\r\n      </LeftAuthCont>\r\n\r\n      <RightAuthCont>\r\n        <RightBarDiv></RightBarDiv>\r\n\r\n        <RightItemsCont>\r\n          <Logo src=\"/NRCLogoRegularBlack.png\"></Logo>\r\n          <Header headercolor=\"black\">You’re All Set!</Header>\r\n          <BodyPara fontsize=\"18px\" bodycolor=\"black\">\r\n          Your account has been activated. Please log in to start your project.\r\n          </BodyPara>\r\n          <br></br>\r\n          <br></br>\r\n          <br></br>\r\n          <RegularResponsiveButton\r\n            text={\"\"}\r\n            onClick={() => {\r\n              history.push(\"/\");\r\n            }}\r\n            buttonwidth=\"66%\"\r\n          >\r\n            Continue\r\n          </RegularResponsiveButton>\r\n        </RightItemsCont>\r\n\r\n        <FlexColumnCont\r\n          width=\"95%\"\r\n          height=\"5%\"\r\n          margintop=\"3.75vw\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"flex-end\"\r\n          alignitems=\"right\"\r\n        >\r\n          <PrivacyPolicy>\r\n            All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n          </PrivacyPolicy>\r\n        </FlexColumnCont>\r\n      </RightAuthCont>\r\n    </AuthCont>\r\n  );\r\n};\r\n\r\nexport default ActivateScreen;\r\n","import { AddToHomeScreen } from \"react-pwa-add-to-homescreen\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Header } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont82vw21vh,\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  RelativeFlexContAutoWidth13vh,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexColumnDivSpaceBetween,\r\n  MenuMainCont,\r\n  MobileMainCont,\r\n} from \"../../../StylesheetComps/Div\";\r\nimport { Image60x50Percent } from \"../../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  FlexColumnCont,\r\n  SmallHeader,\r\n  StickyTopMenuCont,\r\n  TopMenuCont_AutoHeight,\r\n} from \"../../../StylesheetComps/Menu\";\r\nimport Dropdown from \"../../DropdownMenu\";\r\n\r\nconst ActionMenuQuoteView = ({\r\n  pageProp,\r\n  firstlink,\r\n  secondlink,\r\n  thirdlink,\r\n  fourthlink,\r\n  fifthlink,\r\n  ReturnToProject,\r\n  SwitchToUserView,\r\n}) => {\r\n  const history = useHistory();\r\n\r\n  return (\r\n    <StickyTopMenuCont>\r\n      <Cont82vw21vh>\r\n        <MobileMainCont>\r\n          <RelativeFlexContAutoWidth13vh>\r\n            <Image60x50Percent\r\n              src={\"/mobileprofile.svg\"}\r\n              onClick={() => {\r\n                history.push(\"/profile\");\r\n              }}\r\n            ></Image60x50Percent>\r\n\r\n            <AddToHomeScreen />\r\n          </RelativeFlexContAutoWidth13vh>\r\n        </MobileMainCont>\r\n      </Cont82vw21vh>\r\n\r\n      <MenuMainCont></MenuMainCont>\r\n      <TopMenuCont_AutoHeight mobiledisplay=\"none\">\r\n        <FlexColumnCont\r\n          marginbottom=\"0%\"\r\n          margin=\"0\"\r\n          width=\"100%\"\r\n          height=\"2vh\"\r\n        ></FlexColumnCont>\r\n\r\n        <FlexColumnCont\r\n          margin=\"0px\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"flex-start\"\r\n          width=\"98%\"\r\n          height=\"24%\"\r\n          alignitems=\"left\"\r\n        >\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <Header\r\n              fontsize=\"160%\"\r\n              marginleft=\"2vw\"\r\n              margintop=\"0%\"\r\n              marginbottom=\"0%\"\r\n            >\r\n              {pageProp}\r\n            </Header>\r\n\r\n            {/* <FlexDiv>\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.SecondaryGreen}\r\n                width=\"150px\"\r\n                onClick={() => {\r\n                  ReturnToProject();\r\n                }}\r\n              >\r\n                Return to Project\r\n              </RegularResponsiveButton>\r\n              <RegularResponsiveButton\r\n                width=\"150px\"\r\n                onClick={() => {\r\n                  SwitchToUserView();\r\n                }}\r\n              >\r\n                User View\r\n              </RegularResponsiveButton>\r\n            </FlexDiv> */}\r\n          </FlexRowCont100PercentSpaceBetween>\r\n          <Dropdown currentPage={'estimatorView'} executeCallback={()=>{SwitchToUserView()}}></Dropdown>\r\n        </FlexColumnCont>\r\n\r\n        <FlexColumnCont\r\n          margin=\"10px\"\r\n          width=\"100%\"\r\n          height=\"15%\"\r\n          margintop=\"0%\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"flex-start\"\r\n          alignitems=\"left\"\r\n        >\r\n          <FlexColumnCont\r\n            height=\"100%\"\r\n            width=\"100%\"\r\n            margin=\"0\"\r\n            marginleft=\"1vw\"\r\n            justifycontent=\"flex-start\"\r\n            alignitems=\"left\"\r\n            flexdirection=\"row\"\r\n          ></FlexColumnCont>\r\n        </FlexColumnCont>\r\n\r\n        <FlexColumnCont\r\n          margin=\"0\"\r\n          width=\"100%\"\r\n          height=\"20%\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"flex-start\"\r\n          alignitems=\"left\"\r\n          borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n        >\r\n          <FlexColumnCont\r\n            height=\"100%\"\r\n            margin=\"0\"\r\n            justifycontent=\"flex-start\"\r\n            alignitems=\"left\"\r\n            flexdirection=\"row\"\r\n            marginleft=\"2%\"\r\n          >\r\n            <SmallHeader\r\n              fontsize=\"16px\"\r\n              paddingbottom=\"8px\"\r\n              cursor=\"pointer\"\r\n              hovercolor={ColorPalette.PrimaryGrey}\r\n              margin=\"8px\"\r\n              marginright=\"4%\"\r\n              onClick={() => {\r\n                firstlink();\r\n              }}\r\n            >\r\n              Estimate Information\r\n            </SmallHeader>\r\n            <SmallHeader\r\n              cursor=\"pointer\"\r\n              paddingbottom=\"8px\"\r\n              fontsize=\"16px\"\r\n              hovercolor={ColorPalette.PrimaryGrey}\r\n              margin=\"8px\"\r\n              marginright=\"4%\"\r\n              onClick={() => {\r\n                secondlink();\r\n              }}\r\n            >\r\n              Access Area\r\n            </SmallHeader>\r\n            <SmallHeader\r\n              cursor=\"pointer\"\r\n              paddingbottom=\"8px\"\r\n              fontsize=\"16px\"\r\n              hovercolor={ColorPalette.PrimaryGrey}\r\n              margin=\"8px\"\r\n              marginright=\"4%\"\r\n              onClick={() => {\r\n                thirdlink();\r\n              }}\r\n            >\r\n              Item Selection\r\n            </SmallHeader>\r\n            {/* <SmallHeader\r\n              cursor=\"pointer\"\r\n              paddingbottom=\"8px\"\r\n              fontsize=\"16px\"\r\n              hovercolor={ColorPalette.PrimaryGrey}\r\n              margin=\"8px\"\r\n              marginright=\"4%\"\r\n              onClick={() => {\r\n                fourthlink()\r\n              }}\r\n            >\r\n              Quote Info\r\n            </SmallHeader> */}\r\n            <SmallHeader\r\n              cursor=\"pointer\"\r\n              paddingbottom=\"8px\"\r\n              fontsize=\"16px\"\r\n              hovercolor={ColorPalette.PrimaryGrey}\r\n              margin=\"8px\"\r\n              marginright=\"4%\"\r\n              onClick={() => {\r\n                fourthlink();\r\n              }}\r\n            >\r\n              Grand Total\r\n            </SmallHeader>\r\n          </FlexColumnCont>\r\n        </FlexColumnCont>\r\n\r\n        <FlexColumnCont\r\n          margin=\"0\"\r\n          width=\"100%\"\r\n          height=\"20%\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"flex-start\"\r\n          alignitems=\"left\"\r\n        >\r\n          <FlexColumnCont\r\n            height=\"100%\"\r\n            margin=\"0\"\r\n            justifycontent=\"flex-start\"\r\n            alignitems=\"left\"\r\n            flexdirection=\"row\"\r\n            marginleft=\"2%\"\r\n          ></FlexColumnCont>\r\n        </FlexColumnCont>\r\n      </TopMenuCont_AutoHeight>\r\n    </StickyTopMenuCont>\r\n  );\r\n};\r\n\r\nActionMenuQuoteView.defaultProps = {\r\n  pageProp: \"\",\r\n  firstlink: () => {},\r\n  secondlink: () => {},\r\n  thirdlink: () => {},\r\n  fourthlink: () => {},\r\n  fifthlink: () => {},\r\n  ReturnToProject: () => {},\r\n  SwitchToUserView: () => {},\r\n};\r\n\r\nexport default ActionMenuQuoteView;\r\n","import React, { useState, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { TinyTextItalics } from '../../../StylesheetComps/Titles';\r\n\r\nconst ConversionWindow = styled.div`\r\n  display: ${({ isVisible }) => isVisible ? 'flex' : 'none'};\r\n  align-items: center;\r\n  justify-content: center;\r\n  position: fixed;\r\n  width: 100%;\r\n  height: 100%;\r\n  top: 0;\r\n  left: 0;\r\n  background-color: rgba(0,0,0,0.4);\r\n  z-index: 9999;\r\n  transition: all 0.3s ease;\r\n`;\r\n\r\nconst ConversionContent = styled.div`\r\n  background-color: #fff;\r\n  max-width: 400px;\r\n  padding: 30px;\r\n  border-radius: 20px;\r\n  box-shadow: 0 4px 16px rgba(0,0,0,0.1);\r\n  font-family: 'SF Pro Display', sans-serif; // Apple's System Font\r\n`;\r\n\r\nconst Select = styled.select`\r\n  width: 100%;\r\n  padding: 12px;\r\n  margin-bottom: 16px;\r\n  border: 1px solid #ccc;\r\n  border-radius: 10px;\r\n  appearance: none;\r\n  background-color: #f4f4f4;\r\n  font-family: 'SF Pro Display', sans-serif;\r\n`;\r\n\r\nconst Input = styled.input`\r\n  width: 100%;\r\n  padding: 12px;\r\n  margin-bottom: 16px;\r\n  border: 1px solid #ccc;\r\n  border-radius: 10px;\r\n  background-color: #f4f4f4;\r\n  font-family: 'SF Pro Display', sans-serif;\r\n`;\r\n\r\nconst Button = styled.button`\r\n  background-color: #007AFF; // Apple's blue color\r\n  color: white;\r\n  border: none;\r\n  padding: 12px 24px;\r\n  border-radius: 10px;\r\n  cursor: pointer;\r\n  transition: all 0.3s ease;\r\n  font-weight: 500;\r\n  font-family: 'SF Pro Display', sans-serif;\r\n  &:hover {\r\n    background-color: #005EC3;\r\n  }\r\n`;\r\n\r\nconst ResultText = styled.p`\r\n  font-size: 18px;\r\n  font-weight: 500;\r\n  margin-bottom: 16px;\r\n  color: #333;\r\n  font-family: 'SF Pro Display', sans-serif;\r\n`;\r\n\r\nconst DescriptionText = styled.p`\r\n  color: #777;\r\n  margin-bottom: 10px;\r\n  font-family: 'SF Pro Display', sans-serif;\r\n`;\r\n\r\n\r\nconst CalculatorWindow = ({ isVisible, setIsVisible, squareFeetProp, setSquareFeetProp, onClose }) => {\r\n    const [squareFeet, setSquareFeet] = useState(0);\r\n    const [selectedConversion, setSelectedConversion] = useState('cubicFeet');\r\n    const [depth, setDepth] = useState(1);\r\n    const [conversionResult, setConversionResult] = useState(0);\r\n  \r\n    const conversions = {\r\n        cubicFeet: {\r\n            name: 'Cubic Feet',\r\n          description: 'Cubic Feet: This measures volume in feet. It requires the depth to be specified in inches.',\r\n          conversionFunction: (val, depth) => (val * (depth / 12)),\r\n        },\r\n        cubicYards: {\r\n          name: 'Cubic Yards',\r\n          description: 'Cubic Yards: This measures volume in yards. It requires the depth to be specified in inches.',\r\n          conversionFunction: (val, depth) => (val * (depth / 12)) / 27,\r\n        },\r\n        squareYards: {\r\n            name: 'Square Yards',\r\n          description: 'Square Yards: This measures area in yards. Depth is not required for this conversion.',\r\n          conversionFunction: (val) => val / 9,\r\n        },\r\n      };\r\n    \r\n  \r\n    const shouldShowDepthInput = selectedConversion !== 'squareYards';\r\n  \r\n    const handleConversion = () => {\r\n      const result = conversions[selectedConversion].conversionFunction(squareFeet, depth);\r\n      setConversionResult(result.toFixed(2));\r\n    };\r\n  \r\n    useEffect(() => {\r\n      handleConversion();\r\n    }, [squareFeet, depth, selectedConversion]);\r\n\r\n    useEffect(() => {\r\n        setSquareFeet(squareFeetProp)\r\n      }, [squareFeetProp]);\r\n\r\n  return (\r\n    <ConversionWindow isVisible={isVisible}>\r\n      <ConversionContent>\r\n        <TinyTextItalics>Square Feet</TinyTextItalics>\r\n        <Input\r\n          type=\"number\"\r\n          min={0}\r\n          value={squareFeet}\r\n          onChange={(e) => setSquareFeet(e.target.value)}\r\n          placeholder=\"Square Feet\"\r\n        />\r\n        <TinyTextItalics>Depth (Inches)</TinyTextItalics>\r\n        {shouldShowDepthInput && (\r\n          <Input\r\n            type=\"number\"\r\n            min={0}\r\n            value={depth}\r\n            onChange={(e) => setDepth(e.target.value)}\r\n            placeholder=\"Depth (for cubic conversions)\"\r\n          />\r\n        )}\r\n        <TinyTextItalics>Calculation Selection:</TinyTextItalics>\r\n        <Select value={selectedConversion} onChange={(e) => setSelectedConversion(e.target.value)}>\r\n          <option value=\"cubicFeet\">Cubic Feet</option>\r\n          <option value=\"cubicYards\">Cubic Yards</option>\r\n          <option value=\"squareYards\">Square Yards</option>\r\n        </Select>\r\n        <DescriptionText>{conversions[selectedConversion].description}</DescriptionText>\r\n        <ResultText>Result: {conversionResult} {conversions[selectedConversion].name}</ResultText>\r\n        <Button onClick={() => onClose()}>Close</Button>\r\n      </ConversionContent>\r\n    </ConversionWindow>\r\n  );\r\n};\r\n\r\nCalculatorWindow.defaultProps = {\r\n    onClose:()=>{},\r\n}\r\n\r\nexport default CalculatorWindow;\r\n","import React, { useState } from \"react\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport {\r\n  AddQuoteTag,\r\n  UpdateQuoteTag,\r\n} from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { TextInput300x50 } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnContGreenBorderTopRounded550pxHeight,\r\n  FlexRowCont,\r\n  FlexRowCont100PercentFlexEnd,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Cont100PercentWidth } from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  RegularTextBoldRed,\r\n  SmallHeaderLeagueSpartanWidth100Percent,\r\n  TinyTextItalics,\r\n} from \"../../../StylesheetComps/Titles\";\r\nimport { FlexColumnDiv } from \"../../../StylesheetComps/Div\";\r\n\r\nconst TagWindow = ({ open, onClose, tagObj, quoteid, RefreshTaglist }) => {\r\n  const [errorText, setErrorText] = useState(\"\");\r\n  const [isLoading, setIsLoading] = useState(false);\r\n\r\n  const Save = async (tag) => {\r\n    setIsLoading(true);\r\n    if (tag.Id === 0) await AddQuoteTag(tag);\r\n    else await UpdateQuoteTag(tag);\r\n    \r\n    RefreshTaglist();\r\n    onClose();\r\n    setIsLoading(false);\r\n  };\r\n  \r\n\r\n  if (!open) return null;\r\n  else {\r\n    return (\r\n      <FixedOverlay200vh>\r\n          {isLoading && (\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        )}\r\n        <FlexColumnContGreenBorderTopRounded550pxHeight height='auto'>\r\n\r\n            <FlexColumnDiv textalign='left'>\r\n              <TinyTextItalics>\r\n                Tag Name:\r\n              </TinyTextItalics>\r\n              <TextInput300x50\r\n                placeholder=\"Ex. Front Yard Garden\"\r\n                defaultValue={tagObj.TagName === null ? \"\" : tagObj.TagName}\r\n                inputheight=\"1%\"\r\n                inputmargintop=\"0%\"\r\n                inputmargintopmobile='auto'\r\n                onChange={(e) => {\r\n                  setErrorText(\"\");\r\n                  tagObj.TagName = e.target.value;\r\n                }}\r\n              ></TextInput300x50>\r\n            </FlexColumnDiv>\r\n\r\n            <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n\r\n          <FlexRowCont100PercentFlexEnd>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                onClose();\r\n              }}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                tagObj.Quote_Id = quoteid;\r\n                Save(tagObj);\r\n              }}\r\n            >\r\n              {\" \"}\r\n              Save\r\n            </RegularResponsiveButton>\r\n          </FlexRowCont100PercentFlexEnd>\r\n        </FlexColumnContGreenBorderTopRounded550pxHeight>\r\n      </FixedOverlay200vh>\r\n    );\r\n  }\r\n};\r\n\r\nTagWindow.defaultProps = {\r\n  CloseWindow: () => {},\r\n  ContinueRevising: () => {},\r\n  newCreatedRevision: () => {},\r\n  RefreshProjectUI: () => {},\r\n};\r\n\r\nexport default TagWindow;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  AddQuoteItem,\r\n  GetQuoteById,\r\n  GetQuoteItem,\r\n  GetQuoteTag,\r\n  UpdateQuoteItem,\r\n} from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { CategoryTypes } from \"../../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  AbsoluteCalculatorCont,\r\n  FlexDiv,\r\n  StickyCont400x400px,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { Div300pxMargin30px, FlexCenterDiv100PercentCenter, FlexDivSpaceBetween } from \"../../../StylesheetComps/Div\";\r\nimport {\r\n  DatalistOption,\r\n  TextArea72Percent,\r\n  TextInput72Percent,\r\n  TextSelect72Percent,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay1000vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Cont100PercentWidth, Icon30px20pxPointer } from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanHeaderSmall,\r\n  RegularTextBoldRed,\r\n  StyledHRGreyBreak,\r\n  TinyTextItalics,\r\n} from \"../../../StylesheetComps/Titles\";\r\nimport CalculatorWindow from \"../Calculators\";\r\nimport TagWindow from \"../Tag\";\r\nimport IconButton from \"../../IconButton\";\r\n\r\n// =========================\r\n// Sub-Components for Fields\r\n// =========================\r\n\r\nfunction MaterialFields({\r\n  productobj,\r\n  inputValue,\r\n  setInputValue,\r\n  itemObj,\r\n  iconCount,\r\n  siteMapper,\r\n  squareFeetSM,\r\n  setIsUserInput\r\n}) {\r\n  return (\r\n    <>\r\n      <LeagueSpartanHeaderSmall>\r\n        Quantity ({productobj?.Unit}) of Product\r\n      </LeagueSpartanHeaderSmall>\r\n      <TextInput72Percent\r\n        inputMode=\"numeric\"\r\n        value={inputValue}\r\n        key={iconCount > 0 ? iconCount : siteMapper === true ? squareFeetSM : \"\"}\r\n        onChange={(e) => {\r\n          setInputValue(e.target.value);\r\n          itemObj.Quant = e.target.value;\r\n          setIsUserInput(true);\r\n        }}\r\n      />\r\n          <br></br>\r\n          <br></br>\r\n    </>\r\n  );\r\n}\r\n\r\nfunction RemovalFields({\r\n  removalArea,\r\n  setRemovalArea,\r\n  removalDepth,\r\n  setRemovalDepth,\r\n  siteMapper,\r\n  squareFeetSM,\r\n}) {\r\n  return (\r\n    <>\r\n      <LeagueSpartanHeaderSmall>Area (Square Feet)*</LeagueSpartanHeaderSmall>\r\n      <TextInput72Percent\r\n        value={removalArea}\r\n        key={siteMapper === true ? squareFeetSM : \"\"}\r\n        onChange={(e) => setRemovalArea(e.target.value)}\r\n      />\r\n          <br></br>\r\n          <br></br>\r\n      <LeagueSpartanHeaderSmall>Depth (Inches)*</LeagueSpartanHeaderSmall>\r\n      <TextInput72Percent\r\n        value={removalDepth}\r\n        onChange={(e) => setRemovalDepth(e.target.value)}\r\n      />\r\n    <br></br>\r\n    <br></br>\r\n    </>\r\n  );\r\n}\r\n\r\nfunction LaborFields({ itemObj }) {\r\n  return (\r\n    <>\r\n      <LeagueSpartanHeaderSmall>Hours</LeagueSpartanHeaderSmall>\r\n      <TextInput72Percent\r\n        defaultValue={itemObj.Quant || \"\"}\r\n        onChange={(e) => {\r\n          itemObj.Quant = e.target.value;\r\n        }}\r\n      />\r\n    <br></br>\r\n    <br></br>\r\n    </>\r\n  );\r\n}\r\n\r\nfunction OpenFields({ productobj, itemObj }) {\r\n  return (\r\n    <>\r\n      <LeagueSpartanHeaderSmall>Unit</LeagueSpartanHeaderSmall>\r\n      <TextInput72Percent\r\n        defaultValue={productobj.Unit}\r\n        onChange={(e) => {\r\n          itemObj.Unit = e.target.value;\r\n        }}\r\n      />\r\n          <br></br>\r\n          <br></br>\r\n      <LeagueSpartanHeaderSmall>Product Price</LeagueSpartanHeaderSmall>\r\n      <TextInput72Percent\r\n        defaultValue={productobj.UnitPrice}\r\n        onChange={(e) => {\r\n          itemObj.UnitPrice = e.target.value;\r\n        }}\r\n      />\r\n          <br></br>\r\n          <br></br>\r\n    </>\r\n  );\r\n}\r\n\r\nfunction TagField({\r\n  productobj,\r\n  itemObj,\r\n  taglist,\r\n  setAddTagWindowVisible,\r\n  setTagObj,\r\n}) {\r\n  return (\r\n    <>\r\n      <LeagueSpartanHeaderSmall>Tag</LeagueSpartanHeaderSmall>\r\n      <FlexDiv>\r\n        <TextSelect72Percent\r\n          defaultValue={productobj.Tag_Id}\r\n          onChange={(e) => {\r\n            itemObj.Tag_Id = e.target.value;\r\n          }}\r\n        >\r\n          <DatalistOption value={0}>General Materials</DatalistOption>\r\n          {taglist?.map((o, i) => (\r\n            <DatalistOption value={o.Id} key={i}>\r\n              {o.TagName}\r\n            </DatalistOption>\r\n          ))}\r\n        </TextSelect72Percent>\r\n        <Icon30px20pxPointer\r\n          onClick={async () => {\r\n            const tag = await GetQuoteTag(0);\r\n            setTagObj(tag);\r\n            setAddTagWindowVisible(true);\r\n          }}\r\n          src=\"/Green Button.svg\"\r\n        ></Icon30px20pxPointer>\r\n      </FlexDiv>\r\n      <br></br>\r\n      <br></br>\r\n    </>\r\n  );\r\n}\r\n\r\n// =============\r\n// Main Component\r\n// =============\r\n\r\nconst QuoteItemWindow = ({\r\n  open,\r\n  onClose,\r\n  onCloseNoAdd,\r\n  productobj,\r\n  itemId,\r\n  quoteid,\r\n  quote,\r\n  RefreshItemList,\r\n  RefreshUpdatedItem,\r\n  siteMapper,\r\n  squareFeetSM,\r\n  perimeterSM,\r\n  iconCount\r\n}) => {\r\n  const [squareFeet, setSquareFeet] = useState(0);\r\n  const [depth, setDepth] = useState(0);\r\n  const [cubicFeetTotal, setCubicFeetTotal] = useState(0);\r\n  const [taglist, setTaglist] = useState([]);\r\n  const [calculatorsVisible, setCalculatorsVisible] = useState(false);\r\n\r\n  // Removals\r\n  const [removalArea, setRemovalArea] = useState(\r\n    siteMapper === true ? squareFeetSM.toFixed(2) : 0\r\n  );\r\n  const [removalDepth, setRemovalDepth] = useState(0);\r\n\r\n  const [managerNotes, setManagerNotes] = useState(\"\");\r\n  const [itemObj, setItemObj] = useState({}); // The item state (for new or editing)\r\n  const [addTagWindowVisible, setAddTagWindowVisible] = useState(false);\r\n  const [tagObj, setTagObj] = useState({});\r\n\r\n  const [inputValue, setInputValue] = useState(0);\r\n  // const [isUserInput, setIsUserInput] = useState(false);\r\n\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const [isUserInput, setIsUserInput] = useState(false);\r\n\r\n  const params = useParams();\r\n\r\n  useEffect(() => {\r\n    setRemovalArea(siteMapper === true ? squareFeetSM.toFixed(2) : 0);\r\n  }, [siteMapper, squareFeetSM]);\r\n\r\n  useEffect(() => {\r\n    setCubicFeetTotal(squareFeet * (depth / 12));\r\n  }, [depth, squareFeet]);\r\n\r\n  const GetItem = async (itemid) => {\r\n    try {\r\n      const data = await GetQuoteItem(itemid);\r\n      if (data && data.item) {\r\n        setItemObj(data.item);\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  // Grab tags from the quote\r\n  const GetQuoteTaglist = async (quote_id) => {\r\n    if (quote_id !== 0 && quote_id !== undefined) {\r\n      try {\r\n        const data = await GetQuoteById(quote_id);\r\n        if (data && data.quote) {\r\n          setTaglist(data.quote.Tags);\r\n        }\r\n      } catch (error) {\r\n        console.error(error);\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    // If quote has tags, set them\r\n    if (quote && quote.Tags) {\r\n      setTaglist(quote.Tags);\r\n    }\r\n    // Also fetch from the quoteId param\r\n    GetQuoteTaglist(params.quoteId);\r\n  }, [quote, productobj, params.quoteId]);\r\n\r\n  // Initialize itemObj if itemId === 0 (adding new)\r\n  useEffect(() => {\r\n    if (itemId === 0) {\r\n      setItemObj({\r\n        ...itemObj,\r\n        Name: productobj.Name,\r\n        CateType: productobj.CateType,\r\n        Product_Id: productobj.Id,\r\n        UnitPrice: productobj.UnitPrice,\r\n        Unit: productobj.Unit,\r\n        Quote_Id: params.quoteId,\r\n      });\r\n    }\r\n    // eslint-disable-next-line react-hooks/exhaustive-deps\r\n  }, [itemId, productobj]);\r\n\r\n  // If editing, fetch the existing item\r\n  useEffect(() => {\r\n    if (productobj !== undefined && itemId !== 0) {\r\n      setManagerNotes(productobj.Notes);\r\n      GetItem(itemId);\r\n    }\r\n  }, [productobj, itemId]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  // Reset the calculator fields\r\n  const ResetCalculator = () => {\r\n    setCubicFeetTotal(0);\r\n    setSquareFeet(0);\r\n    setDepth(0);\r\n  };\r\n\r\n  // =================\r\n  // Save / Update Logic\r\n  // =================\r\n\r\n  const AddNewItemToQuote = async (newItem) => {\r\n    onClose(true);\r\n    try {\r\n      const data = await AddQuoteItem(newItem);\r\n      if (data && data.item) {\r\n        RefreshItemList(data.item);\r\n        if (siteMapper === true) {\r\n          ResetCalculator();\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const UpdateItemOnQuote = async (existingItem) => {\r\n    try {\r\n      const data = await UpdateQuoteItem(existingItem);\r\n      if (data && data.item) {\r\n        RefreshUpdatedItem(data.item);\r\n        ResetCalculator();\r\n        onClose(true);\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const SaveItem = async (objToSave) => {\r\n    setIsLoading(true); // Start loading\r\n    if (objToSave) {\r\n      // For removals, compute volume\r\n      if (objToSave.CateType === CategoryTypes.Removal) {\r\n        objToSave.Quant = removalArea * (removalDepth / 12);\r\n      }\r\n\r\n      // If new item\r\n      if (!objToSave.Id) {\r\n        // For Material on siteMapper, auto-fill from squareFeetSM if user hasn't typed yet\r\n        if (\r\n          siteMapper === true &&\r\n          objToSave.CateType === CategoryTypes.Material &&\r\n          !isUserInput\r\n        ) {\r\n          setInputValue(squareFeetSM.toFixed(2));\r\n          objToSave.Quant = squareFeetSM.toFixed(2);\r\n        }        \r\n        await AddNewItemToQuote(objToSave);\r\n      } else {\r\n        // Otherwise update\r\n        await UpdateItemOnQuote(objToSave);\r\n      }\r\n    }\r\n    setInputValue(0);\r\n    setIsLoading(false);\r\n    // setIsUserInput(false);\r\n  };\r\n\r\n  // ============\r\n  // Render Logic\r\n  // ============\r\n\r\n  if (!open) return null;\r\n\r\n  // -------------------------\r\n  // 1) RENDER: ADD NEW ITEM\r\n  // -------------------------\r\n  if (itemId === 0) {\r\n    return (\r\n      <>\r\n        <Backdrop\r\n          style={{ zIndex: 2 }}\r\n          open={isLoading}\r\n          onClick={() => {\r\n            setIsLoading(false);\r\n          }}\r\n        >\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n\r\n        {/* <FixedOverlay1000vh> */}\r\n          <CalculatorWindow\r\n            isVisible={calculatorsVisible}\r\n            onClose={() => {\r\n              setCalculatorsVisible(false);\r\n            }}\r\n            squareFeetProp={squareFeetSM}\r\n          />\r\n          {/* Main Form */}\r\n          <StickyCont400x400px height={siteMapper === true ? \"95vh\" : \"\"}>\r\n            <Div300pxMargin30px>\r\n              {/* Show siteMapper info if relevant */}\r\n              {siteMapper && (\r\n                <FlexDivSpaceBetween>\r\n                  <TinyTextItalics>\r\n                    {squareFeetSM?.toFixed(2)} sqft. (area)\r\n                  </TinyTextItalics>\r\n                  <TinyTextItalics>\r\n                    {perimeterSM?.toFixed(2)} ft. (perimeter)\r\n                  </TinyTextItalics>\r\n                <TinyTextItalics>\r\n                    {iconCount} (icons)\r\n                </TinyTextItalics>\r\n                </FlexDivSpaceBetween>\r\n              )}\r\n\r\n              {/* Icon Count */}\r\n         \r\n              {/* Name + Calculator icon */}\r\n              <FlexDiv>\r\n                <LeagueSpartanHeaderSmall>Name</LeagueSpartanHeaderSmall>\r\n                <Icon30px20pxPointer\r\n                  squareFeet={squareFeetSM}\r\n                  src=\"/calculator_icon.svg\"\r\n                  onClick={() => {\r\n                    setCalculatorsVisible(true);\r\n                  }}\r\n                />\r\n              </FlexDiv>\r\n              <TextInput72Percent\r\n                defaultValue={productobj.Name}\r\n                onChange={(e) => {\r\n                  setItemObj({ ...itemObj, Name: e.target.value });\r\n                }}\r\n              />\r\n                  <br></br>\r\n                  <br></br>\r\n\r\n\r\n              {/* Manager notes in red, if any */}\r\n              {managerNotes && (\r\n                <RegularTextBoldRed>{managerNotes}</RegularTextBoldRed>\r\n              )}\r\n\r\n              {/* MATERIAL / OPEN / ADDON => Show quantity field */}\r\n              {(productobj.CateType === CategoryTypes.Material ||\r\n                productobj.CateType === CategoryTypes.Open ||\r\n                productobj.CateType === CategoryTypes.Addon) && (\r\n                <MaterialFields\r\n                  productobj={productobj}\r\n                  inputValue={inputValue}\r\n                  setInputValue={setInputValue}\r\n                  itemObj={itemObj}\r\n                  iconCount={iconCount}\r\n                  siteMapper={siteMapper}\r\n                  squareFeetSM={squareFeetSM}\r\n                  setIsUserInput={setIsUserInput}\r\n                  // setIsUserInput={setIsUserInput}\r\n                />\r\n              )}\r\n\r\n              {/* REMOVAL => Show area + depth */}\r\n              {productobj.CateType === CategoryTypes.Removal && (\r\n                <RemovalFields\r\n                  removalArea={removalArea}\r\n                  setRemovalArea={setRemovalArea}\r\n                  removalDepth={removalDepth}\r\n                  setRemovalDepth={setRemovalDepth}\r\n                  siteMapper={siteMapper}\r\n                  squareFeetSM={squareFeetSM}\r\n                />\r\n              )}\r\n\r\n              {/* LABOR => Show hours */}\r\n              {productobj.CateType === CategoryTypes.Labor && (\r\n                <LaborFields itemObj={itemObj} />\r\n              )}\r\n\r\n              {/* OPEN => Show unit + price */}\r\n              {productobj.CateType === CategoryTypes.Open && (\r\n                <OpenFields productobj={productobj} itemObj={itemObj} />\r\n              )}\r\n\r\n              {/* Tag for Material / Open / Removal */}\r\n              {(productobj.CateType === CategoryTypes.Material ||\r\n                productobj.CateType === CategoryTypes.Open ||\r\n                productobj.CateType === CategoryTypes.Removal) && (\r\n                <TagField\r\n                  productobj={productobj}\r\n                  itemObj={itemObj}\r\n                  taglist={taglist}\r\n                  setAddTagWindowVisible={setAddTagWindowVisible}\r\n                  setTagObj={setTagObj}\r\n                />\r\n              )}\r\n\r\n              {/* Notes */}\r\n              <LeagueSpartanHeaderSmall>Notes</LeagueSpartanHeaderSmall>\r\n              <TextArea72Percent\r\n                onChange={(e) => {\r\n                  setItemObj({ ...itemObj, Notes: e.target.value });\r\n                }}\r\n              />\r\n\r\n              <br />\r\n              <br />\r\n              {/* Buttons */}\r\n              <FlexDiv>\r\n              <IconButton onClick={() => {\r\n                  if (siteMapper === true) {\r\n                    onCloseNoAdd();\r\n                  } else {\r\n                    onClose(false);\r\n                  }\r\n                  ResetCalculator();\r\n                }} width='50%' bgcolor={ColorPalette.PrimaryRed}>Cancel</IconButton>\r\n              <IconButton onClick={() => SaveItem(itemObj)} width='50%' src='/pluscirclewhite_icon.svg'>Add Item</IconButton>\r\n              </FlexDiv>\r\n            </Div300pxMargin30px>\r\n          </StickyCont400x400px>\r\n\r\n          {/* Tag Window for adding new tags */}\r\n          <TagWindow\r\n            tagObj={tagObj}\r\n            quoteid={params.quoteId}\r\n            open={addTagWindowVisible}\r\n            RefreshTaglist={() => {\r\n              GetQuoteTaglist(params.quoteId);\r\n            }}\r\n            onClose={() => {\r\n              setAddTagWindowVisible(false);\r\n            }}\r\n          ></TagWindow>\r\n        {/* </FixedOverlay1000vh> */}\r\n      </>\r\n    );\r\n  }\r\n\r\n  // -------------------------\r\n  // 2) RENDER: EDIT EXISTING ITEM\r\n  // -------------------------\r\n  else if (itemObj.Id === itemId) {\r\n    return (\r\n      <>\r\n        {/* <FixedOverlay1000vh> */}\r\n          <StickyCont400x400px>\r\n            <Div300pxMargin30px>\r\n              <LeagueSpartanHeaderSmall>Name</LeagueSpartanHeaderSmall>\r\n              <TextInput72Percent\r\n                defaultValue={itemObj.Name}\r\n                key={itemObj.Name}\r\n                onChange={(e) => {\r\n                  setItemObj({ ...itemObj, Name: e.target.value });\r\n                }}\r\n              />\r\n\r\n              {(itemObj.CateType === CategoryTypes.Material ||\r\n                itemObj.CateType === CategoryTypes.Open ||\r\n                itemObj.CateType === CategoryTypes.Addon) && (\r\n                <>\r\n                  <LeagueSpartanHeaderSmall>\r\n                    Quantity ({itemObj.Unit}) of Product\r\n                  </LeagueSpartanHeaderSmall>\r\n                  <TextInput72Percent\r\n                    key={itemObj.Quant}\r\n                    defaultValue={itemObj.Quant}\r\n                    onChange={(e) => {\r\n                      setItemObj({ ...itemObj, Quant: e.target.value });\r\n                    }}\r\n                  />\r\n                </>\r\n              )}\r\n\r\n              {itemObj.CateType === CategoryTypes.Removal && (\r\n                <>\r\n                  <LeagueSpartanHeaderSmall>Area (Square Feet)*</LeagueSpartanHeaderSmall>\r\n                  <TextInput72Percent\r\n                    key={itemObj.Quant} // if you store the area in .Quant or separate state\r\n                    onChange={(e) => {\r\n                      setRemovalArea(e.target.value);\r\n                    }}\r\n                  />\r\n                  <LeagueSpartanHeaderSmall>Depth (Inches)*</LeagueSpartanHeaderSmall>\r\n                  <TextInput72Percent\r\n                    onChange={(e) => {\r\n                      setRemovalDepth(e.target.value);\r\n                    }}\r\n                  />\r\n                </>\r\n              )}\r\n\r\n              {itemObj.CateType === CategoryTypes.Labor && (\r\n                <>\r\n                  <LeagueSpartanHeaderSmall>Hours</LeagueSpartanHeaderSmall>\r\n                  <TextInput72Percent\r\n                    key={itemObj.Quant}\r\n                    defaultValue={itemObj.Quant}\r\n                    onChange={(e) => {\r\n                      setItemObj({ ...itemObj, Quant: e.target.value });\r\n                    }}\r\n                  />\r\n                </>\r\n              )}\r\n\r\n              {itemObj.CateType === CategoryTypes.Open && (\r\n                <>\r\n                  <LeagueSpartanHeaderSmall>Unit</LeagueSpartanHeaderSmall>\r\n                  <TextInput72Percent\r\n                    key={itemObj.Unit}\r\n                    defaultValue={itemObj.Unit}\r\n                    onChange={(e) => {\r\n                      setItemObj({ ...itemObj, Unit: e.target.value });\r\n                    }}\r\n                  />\r\n                  <LeagueSpartanHeaderSmall>Product Price</LeagueSpartanHeaderSmall>\r\n                  <TextInput72Percent\r\n                    key={itemObj.UnitPrice}\r\n                    defaultValue={itemObj.UnitPrice}\r\n                    onChange={(e) => {\r\n                      setItemObj({ ...itemObj, UnitPrice: e.target.value });\r\n                    }}\r\n                  />\r\n                </>\r\n              )}\r\n\r\n              {(itemObj.CateType === CategoryTypes.Material ||\r\n                itemObj.CateType === CategoryTypes.Open) && (\r\n                <>\r\n                  <LeagueSpartanHeaderSmall>Tag</LeagueSpartanHeaderSmall>\r\n                  <TextSelect72Percent\r\n                    defaultValue={itemObj.Tag_Id}\r\n                    onChange={(e) => {\r\n                      setItemObj({ ...itemObj, Tag_Id: e.target.value });\r\n                    }}\r\n                  >\r\n                    <DatalistOption value={0}>General Materials</DatalistOption>\r\n                    {taglist.map((o, i) => (\r\n                      <DatalistOption value={o.Id} key={i}>\r\n                        {o.TagName}\r\n                      </DatalistOption>\r\n                    ))}\r\n                  </TextSelect72Percent>\r\n                </>\r\n              )}\r\n\r\n              <LeagueSpartanHeaderSmall>Notes</LeagueSpartanHeaderSmall>\r\n              <TextArea72Percent\r\n                key={itemObj.Notes}\r\n                defaultValue={itemObj.Notes}\r\n                onChange={(e) => {\r\n                  setItemObj({ ...itemObj, Notes: e.target.value });\r\n                }}\r\n              />\r\n\r\n              <Cont100PercentWidth>\r\n                <br />\r\n                <RegularResponsiveButton onClick={() => SaveItem(itemObj)}>\r\n                  Update\r\n                </RegularResponsiveButton>\r\n              </Cont100PercentWidth>\r\n\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryRed}\r\n                onClick={() => {\r\n                  onClose(false);\r\n                  ResetCalculator();\r\n                }}\r\n              >\r\n                Cancel\r\n              </RegularResponsiveButton>\r\n            </Div300pxMargin30px>\r\n          </StickyCont400x400px>\r\n\r\n          {/* In-page Calculator if Material */}\r\n          {itemObj.CateType === CategoryTypes.Material && (\r\n            <div>\r\n              <AbsoluteCalculatorCont>\r\n                <Div300pxMargin30px>\r\n                  <LeagueSpartanHeaderSmall>\r\n                    Square Feet to Cubic Feet\r\n                  </LeagueSpartanHeaderSmall>\r\n                  <StyledHRGreyBreak />\r\n                  <LeagueSpartanHeaderSmall>Square Feet</LeagueSpartanHeaderSmall>\r\n                  <TextInput72Percent\r\n                    onChange={(e) => setSquareFeet(+e.target.value || 0)}\r\n                  />\r\n                  <LeagueSpartanHeaderSmall>Depth (Inches)</LeagueSpartanHeaderSmall>\r\n                  <TextInput72Percent\r\n                    onChange={(e) => setDepth(+e.target.value || 0)}\r\n                  />\r\n                  <Cont100PercentWidth>\r\n                    <LeagueSpartanHeaderSmall>\r\n                      Cubic Feet: {cubicFeetTotal.toFixed(2)}\r\n                    </LeagueSpartanHeaderSmall>\r\n                  </Cont100PercentWidth>\r\n                </Div300pxMargin30px>\r\n              </AbsoluteCalculatorCont>\r\n            </div>\r\n          )}\r\n        {/* </FixedOverlay1000vh> */}\r\n      </>\r\n    );\r\n  }\r\n\r\n  // If we get here, we’re loading or something is off\r\n  return (\r\n    <div>\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    </div>\r\n  );\r\n};\r\n\r\nQuoteItemWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  RefreshItemList: () => {},\r\n  RefreshUpdatedItem: () => {},\r\n  defaultName: \"\",\r\n  unitForProduct: \"\",\r\n  GetQuoteInfoById: () => {},\r\n  onCloseNoAdd: () => {},\r\n};\r\n\r\nexport default QuoteItemWindow;\r\n","import React, { useState, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport axios from 'axios';\r\nimport { ColorPalette } from '../../StylesheetComps/Colors';\r\n\r\nconst LoadingBar = styled.div`\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  width: ${props => props.width}%;\r\n  height: 4px;\r\n  background-color: ${ColorPalette.PrimaryRed};\r\n  transition: width 0.5s ease;\r\n//   transform: translateY(${props => props.show ? '0' : '-100%'});\r\n  z-index: 9999;\r\n`;\r\n\r\nconst LoadingIndicator = () => {\r\n  const [activeRequests, setActiveRequests] = useState(0);\r\n  const [totalRequests, setTotalRequests] = useState(0);\r\n  const [show, setShow] = useState(true);\r\n  let lastScrollY = window.pageYOffset;\r\n\r\n  useEffect(() => {\r\n    const updateVisibilityOnScroll = () => {\r\n      const currentScrollY = window.pageYOffset;\r\n      setShow(currentScrollY <= lastScrollY);\r\n      lastScrollY = currentScrollY;\r\n    };\r\n\r\n    window.addEventListener('scroll', updateVisibilityOnScroll);\r\n\r\n    return () => {\r\n      window.removeEventListener('scroll', updateVisibilityOnScroll);\r\n    };\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    const handleRequestStart = () => {\r\n      setActiveRequests(prev => prev + 1);\r\n      setTotalRequests(prev => prev + 1);\r\n    };\r\n    const handleRequestFinish = () => {\r\n      setActiveRequests(prev => prev - 1);\r\n    };\r\n\r\n    const requestInterceptor = axios.interceptors.request.use(config => {\r\n      handleRequestStart();\r\n      return config;\r\n    }, error => {\r\n      handleRequestFinish();\r\n      return Promise.reject(error);\r\n    });\r\n\r\n    const responseInterceptor = axios.interceptors.response.use(response => {\r\n      handleRequestFinish();\r\n      return response;\r\n    }, error => {\r\n      handleRequestFinish();\r\n      return Promise.reject(error);\r\n    });\r\n\r\n    return () => {\r\n      axios.interceptors.request.eject(requestInterceptor);\r\n      axios.interceptors.response.eject(responseInterceptor);\r\n    };\r\n  }, []);\r\n\r\n  const progress = totalRequests > 0 ? ((totalRequests - activeRequests) / totalRequests) * 100 : 0;\r\n  const width = activeRequests > 0 ? Math.max(progress, 5) : 0; // Ensuring a minimum width for better visibility\r\n\r\n  return <LoadingBar width={width} show={show}/>;\r\n};\r\n\r\nexport default LoadingIndicator;\r\n","import { useEffect, useState } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { AddItemRelation, DeleteQuoteItemByEstimator } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  GetCategory,\r\n  GetProduct,\r\n} from \"../../../API_Functions/CatProduct_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnLeftAlign,\r\n  FlexColumnLeftAlignMaxHeight,\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont100x8PercentSpaceAround,\r\n  FlexRowContFlexStart,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { SmallHeaderLeagueSpartan, TextInputRegular } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { LeagueSpartanLarge, TitleFontSize100PercentPointer } from \"../../../StylesheetComps/Titles\";\r\nimport QuoteItemWindow from \"../QuoteItemWindow\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { BodyPara } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { Icon30px30pxPointer } from \"../../../StylesheetComps/Quote\";\r\nimport LoadingIndicator from '../../InteractiveLoadingBar'\r\n\r\nconst StyledOptionWindow = styled.div`\r\n  background-color: #f0f0f0;\r\n  border: 1px solid #ddd;\r\n  padding: 10px;\r\n  border-radius: 5px;\r\n  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\r\n  width: 300px;\r\n  z-Index: 1000;\r\n  position: relative;\r\n  left: 12.5vw;\r\n  top: 12.5vh;\r\n  display: ${(props) => (props.display ? props.display : \"none\")};\r\n  .option {\r\n    padding: 5px 10px;\r\n    border-radius: 3px;\r\n    cursor: pointer;\r\n    &:hover {\r\n      background-color: #e7e7e7;\r\n    }\r\n  }\r\n`;\r\n\r\nconst QuoteAddOnSelection = ({\r\n  open,\r\n  onClose,\r\n  productObj,\r\n  RefreshQuoteItems,\r\n  primaryitemid,\r\n  shapeData,\r\n  siteMapper,\r\n  CloseForPlotting,\r\n  iconCount,\r\n  isAddOnPlottingSelected\r\n}) => {\r\n  const params = useParams();\r\n  const [productlist, setProductList] = useState([]);\r\n  const [productobj, setProductObj] = useState([]);\r\n  const [addonCategory, setAddonCategory] = useState({});\r\n\r\n  const [categoryIndex, setCategoryIndex] = useState(0);\r\n\r\n  const [materialWindowToggle, setMaterialWindowToggle] = useState(false);\r\n  const [promptWindowToggle, setPromptWindowToggle] = useState('none');\r\n\r\n  const [isLoading, setIsLoading] = useState(false);\r\n\r\n  const SetProductsofCategory = async (cateid) => {\r\n    if (cateid !== 0) {\r\n      try {\r\n        const data = await GetCategory(cateid);\r\n        if (data && data.Products) {\r\n          setProductList(data.Products);\r\n          setFilteredAddons(data.Products)\r\n        }\r\n      } catch (error) {\r\n        console.error(error);\r\n      }\r\n    };\r\n  }\r\n    \r\n\r\n    const GetInformationForProduct = async (productid) => {\r\n      try {\r\n        const data = await GetProduct(productid);\r\n        if (data !== null) {\r\n          setProductObj(data);\r\n          if(siteMapper === true){\r\n          setPromptWindowToggle('block');\r\n          } else {\r\n          setMaterialWindowToggle(true);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error(error);\r\n      }\r\n    };\r\n    \r\n\r\n    const CreateNewQuoteAddOnItem = async (item, quoteid, primaryitemid) => {\r\n      setIsLoading(true)\r\n      var description = \"Add-On Item\";\r\n      try {\r\n        var relationdata = await AddItemRelation(\r\n          primaryitemid,\r\n          item.Id,\r\n          description\r\n        );\r\n        if (relationdata !== null) {\r\n          RefreshQuoteItems(item, item.Id);\r\n        }\r\n      } catch (error) {\r\n        setIsLoading(false)\r\n        window.alert(error);\r\n      }\r\n      setIsLoading(false)\r\n    };\r\n    \r\n\r\n    const SetAddonCategoryAndProducts = async (addon) => {\r\n      if (addon !== null && addon !== undefined) {\r\n        setAddonCategory(addon);\r\n        SetProductsofCategory(addon.Category_Id);\r\n      }\r\n    };\r\n    \r\n\r\n    const ReturnToPreviousAddon = async (addons, index) => {\r\n      if (index > 0 && addons) {\r\n        setCategoryIndex(index - 1);\r\n        SetAddonCategoryAndProducts(addons[index - 1]);\r\n      }\r\n    };\r\n    \r\n\r\n  const ContinueToNextAddon = async (addons, index) => {\r\n    if (index < addons.length - 1) {\r\n      setCategoryIndex(index + 1);\r\n      SetAddonCategoryAndProducts(addons[index + 1]);\r\n    }\r\n  };\r\n\r\n  const [runningAdOns, setRunningAddOns] = useState([]);\r\n  const [filteredAddons, setFilteredAddons] = useState([]);\r\n\r\n  const handleSearch = (searchText) => {\r\n    const filteredData = filteredAddons.filter((o) => {\r\n      return o.Name.toLowerCase().includes(searchText.toLowerCase());\r\n    });\r\n    setFilteredAddons(filteredData);  // Update the state with the filtered data\r\n  };  \r\n\r\n  const AddToRunningAddOns = (item) => {\r\n    if (item && item.Name && typeof item.Id !== 'undefined') {\r\n      setRunningAddOns(prevAddOns => [...prevAddOns, { name: item.Name, id: item.Id }]);\r\n    }\r\n  };  \r\n\r\n  useEffect(() => {\r\n    if (productObj.Addons !== undefined) {\r\n      SetAddonCategoryAndProducts(productObj?.Addons[0]);\r\n    }\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if(iconCount > 0 && isAddOnPlottingSelected == true){\r\n      setMaterialWindowToggle(true)\r\n    }\r\n  }, [iconCount]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  // if(isLoading === true){\r\n  //   return (\r\n  //     <Backdrop style={{ zIndex: 1000 }} open>\r\n  //     <CircularProgress color=\"inherit\" />\r\n  //     </Backdrop>\r\n  //   ) \r\n  // } else {\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexRowContFlexStart>\r\n        <LeftItemWindowFixed>\r\n          <LoadingIndicator></LoadingIndicator>\r\n          <FlexColumnLeftAlignMaxHeight>\r\n            <div>\r\n            <SmallHeaderLeagueSpartan>\r\n              {addonCategory?.Category}\r\n            </SmallHeaderLeagueSpartan>\r\n            </div>\r\n          </FlexColumnLeftAlignMaxHeight>\r\n          <TextInputRegular placeholder={`Search for Add-ons in ${addonCategory?.Category}`}\r\n          onChange={(e) => {\r\n            const searchText = e.target.value;\r\n            if (!searchText.trim()) {\r\n              // If search text is empty, reset to original data\r\n              setFilteredAddons(productlist);\r\n            } else {\r\n              // Otherwise, filter data\r\n              handleSearch(searchText);\r\n            }\r\n          }}\r\n          ></TextInputRegular>\r\n          <br></br>\r\n          <FlexColumnLeftAlign height='auto' overflowy='scroll'>\r\n            <FlexRowContFlexStart flexdirection=\"column\" display='block'>\r\n                {filteredAddons.map((o, i) => (\r\n                <FlexColumnLeftAlignMaxHeight display='block' key={i}>\r\n                  <TitleFontSize100PercentPointer\r\n                    onClick={() => {\r\n                      GetInformationForProduct(o.Id);\r\n                    }}\r\n                  >\r\n                    {o.Name}\r\n                  </TitleFontSize100PercentPointer>\r\n                </FlexColumnLeftAlignMaxHeight>\r\n              ))}\r\n              <br></br>\r\n\r\n\r\n          \r\n            </FlexRowContFlexStart>\r\n          </FlexColumnLeftAlign>\r\n          <br></br>\r\n\r\n          <LeagueSpartanLarge>Added Items already:</LeagueSpartanLarge>\r\n{\r\n  runningAdOns.length > 0 ? (\r\n    runningAdOns.map((o, i) => (\r\n      <FlexColumnLeftAlignMaxHeight display='block' key={i}>\r\n        <FlexDiv>\r\n        <TitleFontSize100PercentPointer\r\n        >\r\n          {o.name}\r\n        </TitleFontSize100PercentPointer>\r\n        <Icon30px30pxPointer onClick={async () => {\r\n  setIsLoading(true);\r\n  const data = await DeleteQuoteItemByEstimator(o.id);\r\n  if (data === null) {\r\n    // GetProposalInformation(params.quoteId);\r\n    // Update runningAddOns to remove the item with the matching id\r\n    setRunningAddOns(prevAddOns => prevAddOns.filter(item => item.id !== o.id));\r\n    RefreshQuoteItems();\r\n    setIsLoading(false);\r\n  }\r\n}}\r\n src='/Garbage_Icon.svg'></Icon30px30pxPointer>\r\n        </FlexDiv>\r\n      </FlexColumnLeftAlignMaxHeight>\r\n    ))\r\n  ) : (\r\n    <p>No Items Added Yet</p> // You can style this message as needed\r\n  )\r\n}\r\n          <br></br>\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <RegularResponsiveButton\r\n              mobilewidth='25%'\r\n              minwidth='25%'\r\n              onClick={() => {\r\n                setRunningAddOns([])\r\n                setAddonCategory({});\r\n                setCategoryIndex(0);\r\n                onClose();\r\n              }}\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n            >\r\n              Close\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n            mobilewidth='25%'\r\n            minwidth='25%'\r\n              pointer={categoryIndex === 0 ? \"not-allowed\" : \"pointer\"}\r\n              pointerevent={categoryIndex === 0 ? \"none\" : \"\"}\r\n              bgcolor={\r\n                categoryIndex === 0\r\n                  ? ColorPalette.SecondaryGrey\r\n                  : ColorPalette.DarkGrey\r\n              }\r\n              onClick={() => {\r\n                ReturnToPreviousAddon(productObj?.Addons, categoryIndex);\r\n              }}\r\n            >\r\n              Back\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n            mobilewidth='25%'\r\n            minwidth='25%'\r\n              pointer={\r\n                categoryIndex === productObj?.Addons?.length - 1\r\n                  ? \"not-allowed\"\r\n                  : \"pointer\"\r\n              }\r\n              pointerevent={\r\n                categoryIndex === productObj?.Addons?.length - 1 ? \"none\" : \"\"\r\n              }\r\n              bgcolor={\r\n                categoryIndex === productObj?.Addons?.length - 1\r\n                  ? ColorPalette.TertiaryGrey\r\n                  : ColorPalette.PrimaryButtonBlue\r\n              }\r\n              onClick={() => {\r\n                ContinueToNextAddon(productObj?.Addons, categoryIndex);\r\n              }}\r\n            >\r\n              Next\r\n            </RegularResponsiveButton>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n        </LeftItemWindowFixed>\r\n      </FlexRowContFlexStart>\r\n\r\n      <QuoteItemWindow\r\n        iconCount={iconCount}\r\n        itemId={0}\r\n        quoteid={params.quoteId}\r\n        open={materialWindowToggle}\r\n        onClose={(boolean) => {\r\n          if(boolean === true){\r\n            setIsLoading(true)\r\n          }\r\n          setMaterialWindowToggle(false);\r\n        }}\r\n        siteMapper={shapeData?.data?.area !== undefined ? true : false}\r\n        squareFeetSM={iconCount > 0 ? iconCount : shapeData?.data?.area !== undefined ? shapeData.data.area : 0}\r\n        perimeterSM={shapeData?.data?.perimeter !== undefined ? shapeData.data.perimeter : 0}\r\n        productobj={productobj}\r\n        RefreshItemList={(item) => {\r\n          CreateNewQuoteAddOnItem(item, params.quoteId, primaryitemid);\r\n          AddToRunningAddOns(item)\r\n        }}\r\n      ></QuoteItemWindow>\r\n\r\n<StyledOptionWindow display={promptWindowToggle}>\r\n  <br></br>\r\n  <FlexRowCont100x8PercentSpaceAround>\r\n  <BodyPara>\r\n        Would you like to plot these on the Map or enter the quantities manually?\r\n      </BodyPara>\r\n  </FlexRowCont100x8PercentSpaceAround>\r\n     \r\n      <br></br>\r\n      <FlexRowCont100PercentSpaceBetween>\r\n        <RegularResponsiveButton bgcolor={ColorPalette.PrimaryBlue} onClick={()=>{\r\n          setPromptWindowToggle('none');\r\n          CloseForPlotting()\r\n        }}>Map Plot</RegularResponsiveButton>\r\n        <RegularResponsiveButton onClick={()=>{\r\n          setPromptWindowToggle('none')\r\n          setMaterialWindowToggle(true); \r\n        }}>Manual Entry</RegularResponsiveButton>\r\n      </FlexRowCont100PercentSpaceBetween>\r\n      {/* Add more options here */}\r\n    </StyledOptionWindow>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n// };\r\n\r\nQuoteAddOnSelection.defaultProps = {\r\n  onClose: () => {},\r\n  CloseForPlotting: () => {},\r\n  RefreshQuoteItems: () => {},\r\n  shapeData:{\r\n    perimeter:0,\r\n    area:0\r\n  },\r\n  isAddOnPlottingSelected: false\r\n};\r\n\r\nexport default QuoteAddOnSelection;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  DeleteQuoteItemByEstimator,\r\n  GetQuoteById,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  GetCategory,\r\n  GetProduct,\r\n  GetStoreCategories,\r\n  GetStoreProducts,\r\n} from \"../../API_Functions/CatProduct_Functions\";\r\nimport { TextInput300x50 } from \"../../StylesheetComps/AuthSheet\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  FlexContCenterAlign,\r\n  FlexContSpaceEvenly,\r\n  FlexRowCont100PercentSpaceBetween\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  AvenirCategoryLabelWide,\r\n  CategoryCenterInnerDiv,\r\n  CategoryCont,\r\n  Cont100PercentWidth,\r\n  GridCont100PercentDisplayProps,\r\n  HundredPercentFlexDiv,\r\n  Icon30px30pxPointer,\r\n  ItemSelectionContainer,\r\n  TwentyPercentWidthCont\r\n} from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanHeaderSmall,\r\n  MediumHeader,\r\n  RegularText,\r\n  RegularTextBoldRed,\r\n  StyledHRGreyBreak,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport QuoteAddOnSelection from \"../Windows/QuoteAddOnSelection\";\r\nimport QuoteItemWindow from \"../Windows/QuoteItemWindow\";\r\n\r\nconst MaterialSelection = ({\r\n  open,\r\n  quote,\r\n  quoteId,\r\n  onBackToQuote,\r\n  returnCateType,\r\n}) => {\r\n  const [productObject, setProductObject] = useState({});\r\n\r\n  const params = useParams();\r\n\r\n  const [storeCategories, setStoreCategories] = useState([]);\r\n  const [categoryProducts, setCategoryProducts] = useState([]);\r\n  const [categorySubCategories, setCategorySubcategories] = useState([]);\r\n  const [unfilteredProducts, setUnfilteredProducts] = useState([]);\r\n\r\n  const [emptyProductMsg, setEmptyProductMsg] = useState(\"\");\r\n\r\n  const [loadingPrompt, setLoadingPrompt] = useState(false);\r\n\r\n  const [quoteItemWindowToggle, setQuoteItemWindowToggle] = useState(false);\r\n\r\n  const [arrowSrc, setArrowSrc] = useState(\"/uparrow.svg\");\r\n  const [itemsDisplayProp, setItemsDisplayProp] = useState(\"none\");\r\n  const [displayCategories, setDisplayCategories] = useState(\"none\");\r\n\r\n  const [currentQuoteItemsArray, setCurrentQuoteItemsArray] = useState([]);\r\n  const [currentQuoteLaborArray, setCurrentQuoteLaborArray] = useState([]);\r\n  const [currentQuoteRemovalArray, setCurrentQuoteRemovalArray] = useState([]);\r\n\r\n  const [inputValue, setInputValue] = useState(\"\");\r\n\r\n  const [isAddOnsWindowVisible, setIsAddOnsWindowVisible] = useState(false);\r\n  const [productId, setProductId] = useState(0);\r\n\r\n  const [itemId, setItemId] = useState(0);\r\n  const [primaryitemid, setPrimaryItemId] = useState(0);\r\n\r\n  const GetCurrentQuoteItems = async (quote_id) => {\r\n    const data = await GetQuoteById(quote_id);\r\n    \r\n    if (data) {\r\n      const { quote } = data;\r\n  \r\n      quote.Material && setCurrentQuoteItemsArray(quote.Material.Items);\r\n      quote.Labor && setCurrentQuoteLaborArray(quote.Labor.Items);\r\n      quote.Removal && setCurrentQuoteRemovalArray(quote.Removal.Items);\r\n    }\r\n  };\r\n\r\n  const setStoreProducts = async (storeid) => {\r\n    var data = await GetStoreProducts(storeid);\r\n    if (data != null) {\r\n      setUnfilteredProducts(data.products);\r\n    }\r\n  };\r\n\r\n  const filterCategory = (o, categorytype) => {\r\n    if (categorytype === CategoryTypes.Material) {\r\n      return o.CateType === CategoryTypes.Material || o.CateType === CategoryTypes.Open;\r\n    } else {\r\n      return o.CateType === categorytype;\r\n    }\r\n  };\r\n  \r\n  const GetStoreCategoriesFunc = async (categorytype) => {\r\n    var data = await GetStoreCategories(params.storeId);\r\n  \r\n    if (data != null) {\r\n      if (quoteId !== 0) {\r\n        setStoreCategories(\r\n          data.cate.filter((o) => filterCategory(o, categorytype))\r\n        );\r\n        setLoadingPrompt(false);\r\n      }\r\n    }\r\n  };\r\n  \r\n  const bgcolorvalue = (o, i) => {\r\n    if (o.CateType === CategoryTypes.Material) {\r\n      return \"#169ADB\";\r\n    } else if (o.CateType === CategoryTypes.Addon) {\r\n      return \"yellow\";\r\n    } else if (o.CateType === CategoryTypes.Removal) {\r\n      return \"grey\";\r\n    } else if (o.CateType === CategoryTypes.Labor) {\r\n      return \"#964B00\";\r\n    } else {\r\n      return \"white\";\r\n    }\r\n  };\r\n\r\n  const GetProduct_Subcat_ofCategory = async (cat_id) => {\r\n    var cate = await GetCategory(cat_id);\r\n    if (cate !== null) {\r\n      setCategorySubcategories(cate.SubCategories);\r\n      setCategoryProducts(cate.Products);\r\n    }\r\n  };\r\n\r\n  const GetProductInfo = async (productid) => {\r\n    var data = await GetProduct(productid);\r\n    if (data !== null) {\r\n      setProductObject(data);\r\n      setQuoteItemWindowToggle(true);\r\n    }\r\n  };\r\n\r\n  const OpenUpdateQuoteItemWindow = async (o, i) => {\r\n    setProductObject(o);\r\n    setItemId(o.Id);\r\n    setQuoteItemWindowToggle(true);\r\n  };\r\n\r\n  const DeleteItem = async (item, itemlist) => {\r\n    const data = await DeleteQuoteItemByEstimator(item.Id);\r\n    if (data) {\r\n      GetCurrentQuoteItems(quoteId);\r\n    }\r\n    if (itemlist?.length > 0) {\r\n      var index = itemlist.indexOf(item);\r\n      itemlist.splice(index, 1);\r\n      setItems([...itemlist]);\r\n    }\r\n  };\r\n  \r\n  const [items, setItems] = useState([]);\r\n\r\n  const FilterProducts = (productlist, text) => {\r\n    setDisplayCategories(\"none\");\r\n\r\n    function find(productlist, text) {\r\n      text = text.toLowerCase().split(\" \");\r\n      return productlist.filter(function (word) {\r\n        return text.every(function (char) {\r\n          return word.Name.toLowerCase().includes(char);\r\n        });\r\n      });\r\n    }\r\n\r\n    const output = find(productlist, text);\r\n    setCategoryProducts(output);\r\n  };\r\n\r\n  const ResetInputFilter = async () => {\r\n    setInputValue(\"\");\r\n    FilterProducts(unfilteredProducts, \" \");\r\n    setDisplayCategories(\"grid\");\r\n  };\r\n\r\n  const UpdateArrowUI = async () => {\r\n    if (arrowSrc === \"/downarrow.svg\") {\r\n      setArrowSrc(\"/uparrow.svg\");\r\n      setItemsDisplayProp(\"none\");\r\n    } else {\r\n      setArrowSrc(\"/downarrow.svg\");\r\n      setItemsDisplayProp(\"flex\");\r\n    }\r\n  };\r\n\r\n  const ReturnToQuote = async () => {\r\n    onBackToQuote();\r\n    setItems([]);\r\n    setStoreCategories([]);\r\n    setCategoryProducts([]);\r\n    setUnfilteredProducts([]);\r\n    setCategorySubcategories([]);\r\n    setCurrentQuoteItemsArray([]);\r\n    setCurrentQuoteLaborArray([]);\r\n    setCurrentQuoteRemovalArray([]);\r\n  };\r\n\r\n  const CheckIfProductHasAddons = async (productid) => {\r\n    const data = await GetProduct(productid);\r\n    if (data !== null) {\r\n      setProductObject(data)\r\n      if (data.Addons.length > 0) {\r\n        setIsAddOnsWindowVisible(true);\r\n      }\r\n    }\r\n    setItemId(0);\r\n    setQuoteItemWindowToggle(false);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (items.length !== 0) {\r\n      GetCurrentQuoteItems(quoteId);\r\n    }\r\n  }, [items]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (quoteId !== 0) {\r\n      FilterProducts(unfilteredProducts, \"\");\r\n    }\r\n  }, [quoteId]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (open) {\r\n      setStoreProducts(params.storeId);\r\n      GetCurrentQuoteItems(quoteId);\r\n      setLoadingPrompt(true);\r\n  \r\n      switch (returnCateType) {\r\n        case CategoryTypes.Material:\r\n        case CategoryTypes.Labor:\r\n        case CategoryTypes.Removal:\r\n          GetStoreCategoriesFunc(returnCateType);\r\n          break;\r\n        default:\r\n          GetStoreCategoriesFunc();\r\n      }\r\n    }\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  if (loadingPrompt === true) {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  } else if (quoteId !== 0) {\r\n    return (\r\n      <HundredPercentFlexDiv>\r\n        <ItemSelectionContainer>\r\n          <QuoteAddOnSelection\r\n            primaryitemid={primaryitemid}\r\n            open={isAddOnsWindowVisible}\r\n            RefreshQuoteItems={(item, itemid) => {\r\n              GetCurrentQuoteItems(params.quoteId);\r\n              setItems([...items, item]);\r\n              //AddItemToLocalArray(item, itemid);\r\n            }}\r\n            productObj={productObject}\r\n            onClose={() => {\r\n              setIsAddOnsWindowVisible(false);\r\n            }}\r\n          ></QuoteAddOnSelection>\r\n\r\n          <Cont100PercentWidth>\r\n            <FlexRowCont100PercentSpaceBetween>\r\n              <TextInput300x50\r\n                value={inputValue}\r\n                onChange={(e) => {\r\n                  setInputValue(e.target.value);\r\n                  FilterProducts(unfilteredProducts, e.target.value);\r\n                }}\r\n                inputwidth=\"80%\"\r\n                inputheight=\"25%\"\r\n                inputborderadius=\"10px\"\r\n                placeholder=\"Type in product name to search \"\r\n              ></TextInput300x50>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  ResetInputFilter();\r\n                }}\r\n              >\r\n                Products\r\n              </RegularResponsiveButton>\r\n            </FlexRowCont100PercentSpaceBetween>\r\n\r\n            <StyledHRGreyBreak></StyledHRGreyBreak>\r\n            <GridCont100PercentDisplayProps display={displayCategories}>\r\n              {storeCategories?.map((o, i) => (\r\n                <CategoryCenterInnerDiv key={i}>\r\n                  <CategoryCont\r\n                    bgcolorprops={bgcolorvalue(o, i)}\r\n                    onClick={() => {\r\n                      setEmptyProductMsg(\" \");\r\n                      GetProduct_Subcat_ofCategory(o.Id);\r\n                    }}\r\n                  >\r\n                    <RegularText>{o.Name}</RegularText>\r\n                  </CategoryCont>\r\n                </CategoryCenterInnerDiv>\r\n              ))}\r\n            </GridCont100PercentDisplayProps>\r\n\r\n            <StyledHRGreyBreak display={displayCategories}></StyledHRGreyBreak>\r\n\r\n            <FlexColumnCont margin=\"0\" overflowy=\"auto\" height=\"auto\">\r\n              <GridCont100PercentDisplayProps maxheight=\"90vh\">\r\n                {categorySubCategories?.map((o, i) => (\r\n                  <CategoryCenterInnerDiv key={i}>\r\n                    <CategoryCont\r\n                      bgcolorprops={bgcolorvalue(o, i)}\r\n                      onClick={() => {\r\n                        GetProduct_Subcat_ofCategory(o.Id);\r\n                      }}\r\n                    >\r\n                      <RegularText>\r\n                        {o.Name} - {\"Subcategory\"} {o.Unit}\r\n                      </RegularText>\r\n                    </CategoryCont>\r\n                  </CategoryCenterInnerDiv>\r\n                ))}\r\n\r\n                {categoryProducts?.map((o, i) => (\r\n                  <CategoryCenterInnerDiv key={i}>\r\n                    <CategoryCont\r\n                      onClick={() => {\r\n                        GetProductInfo(o.Id);\r\n                        setProductId(o.Id);\r\n                      }}\r\n                    >\r\n                      <MediumHeader>{o.Name}</MediumHeader>\r\n                      <TinyTextItalics>\r\n                        <b>\r\n                          {\"$\" + parseFloat(o.UnitPrice).toFixed(2)} {o.Unit}\r\n                        </b>\r\n                      </TinyTextItalics>\r\n                    </CategoryCont>\r\n                  </CategoryCenterInnerDiv>\r\n                ))}\r\n              </GridCont100PercentDisplayProps>\r\n\r\n              <RegularTextBoldRed>{emptyProductMsg}</RegularTextBoldRed>\r\n            </FlexColumnCont>\r\n          </Cont100PercentWidth>\r\n        </ItemSelectionContainer>\r\n\r\n        <TwentyPercentWidthCont>\r\n          <FlexColumnCont\r\n            flexdirection=\"row\"\r\n            height=\"5%\"\r\n            justifycontent=\"space-evenly\"\r\n            margin=\"0%\"\r\n          >\r\n            <LeagueSpartanHeaderSmall>\r\n              Estimate #{params.quoteId}\r\n            </LeagueSpartanHeaderSmall>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                ReturnToQuote();\r\n              }}\r\n            >\r\n              Return to Estimate\r\n            </RegularResponsiveButton>\r\n          </FlexColumnCont>\r\n          <StyledHRGreyBreak></StyledHRGreyBreak>\r\n          <HundredPercentFlexDiv>\r\n            <br></br>\r\n            <FlexContCenterAlign>\r\n              <LeagueSpartanHeaderSmall>\r\n                Current Items on Estimate\r\n              </LeagueSpartanHeaderSmall>\r\n              <Icon30px30pxPointer\r\n                src={arrowSrc}\r\n                onClick={() => {\r\n                  UpdateArrowUI();\r\n                }}\r\n              ></Icon30px30pxPointer>\r\n            </FlexContCenterAlign>\r\n          </HundredPercentFlexDiv>\r\n\r\n          <FlexColumnFullWidth\r\n            maxheight=\"30vh\"\r\n            overflowy=\"auto\"\r\n            display={itemsDisplayProp}\r\n          >\r\n            {currentQuoteItemsArray.map((o, i) => (\r\n              <FlexContSpaceEvenly height=\"auto\" key={i}>\r\n                <AvenirCategoryLabelWide>{o.Name}</AvenirCategoryLabelWide>\r\n                <AvenirCategoryLabelWide>\r\n                  {\" \"}\r\n                  <b>\r\n                    {\" ($\"}\r\n                    {parseFloat(o.UnitPrice).toFixed(2)}\r\n                    {\")\"}\r\n                  </b>\r\n                  {\" x \"}\r\n                  <b>{parseFloat(o.Quant).toFixed(2)}</b>\r\n                </AvenirCategoryLabelWide>\r\n                <Icon30px30pxPointer\r\n                  src={\"/EditIcon.svg\"}\r\n                  onClick={() => {\r\n                    OpenUpdateQuoteItemWindow(o, i);\r\n                  }}\r\n                ></Icon30px30pxPointer>\r\n                <Icon30px30pxPointer\r\n                  src={\"/AddOn_Icon.svg\"}\r\n                  onClick={() => {\r\n                    setPrimaryItemId(o.Id)\r\n                    CheckIfProductHasAddons(o.Product_Id);\r\n                  }}\r\n                ></Icon30px30pxPointer>\r\n                  <Icon30px30pxPointer\r\n                  src={\"/Garbage_Icon.svg\"}\r\n                  onClick={() => {\r\n                    //DeleteProductFromQuoteByEstimator(o, i, o.Id);\r\n                    DeleteItem(o, items);\r\n                    GetCurrentQuoteItems(quoteId);\r\n                  }}\r\n                ></Icon30px30pxPointer>\r\n              </FlexContSpaceEvenly>\r\n            ))}\r\n            {currentQuoteLaborArray.map((o, i) => (\r\n              <FlexContSpaceEvenly height=\"auto\" key={i}>\r\n                <AvenirCategoryLabelWide>{o.Name}</AvenirCategoryLabelWide>\r\n                <AvenirCategoryLabelWide>\r\n                  {\" \"}\r\n                  <b>\r\n                    {\" ($\"}\r\n                    {parseFloat(o.UnitPrice).toFixed(2)}\r\n                    {\")\"}\r\n                  </b>\r\n                  {\" x \"}\r\n                  <b>{parseFloat(o.Quant).toFixed(2)}</b>\r\n                </AvenirCategoryLabelWide>\r\n                <Icon30px30pxPointer\r\n                  src={\"/EditIcon.svg\"}\r\n                  onClick={() => {\r\n                    OpenUpdateQuoteItemWindow(o, i);\r\n                  }}\r\n                ></Icon30px30pxPointer>\r\n                <Icon30px30pxPointer\r\n                  src={\"/Garbage_Icon.svg\"}\r\n                  onClick={() => {\r\n                    //DeleteProductFromQuoteByEstimator(o, i, o.Id);\r\n                    DeleteItem(o, items);\r\n                    GetCurrentQuoteItems(quoteId);\r\n                  }}\r\n                ></Icon30px30pxPointer>\r\n              </FlexContSpaceEvenly>\r\n            ))}\r\n            {currentQuoteRemovalArray.map((o, i) => (\r\n              <FlexContSpaceEvenly height=\"auto\" key={i}>\r\n                <AvenirCategoryLabelWide>{o.Name}</AvenirCategoryLabelWide>\r\n                <AvenirCategoryLabelWide>\r\n                  {\" \"}\r\n                  <b>\r\n                    {\" ($\"}\r\n                    {parseFloat(o.UnitPrice).toFixed(2)}\r\n                    {\")\"}\r\n                  </b>\r\n                  {\" x \"}\r\n                  <b>{parseFloat(o.Quant).toFixed(2)}</b>\r\n                </AvenirCategoryLabelWide>\r\n                <Icon30px30pxPointer\r\n                  src={\"/EditIcon.svg\"}\r\n                  onClick={() => {\r\n                    OpenUpdateQuoteItemWindow(o, i);\r\n                  }}\r\n                ></Icon30px30pxPointer>\r\n                <Icon30px30pxPointer\r\n                  src={\"/Garbage_Icon.svg\"}\r\n                  onClick={() => {\r\n                    //DeleteProductFromQuoteByEstimator(o, i, o.Id);\r\n                    DeleteItem(o, items);\r\n                    GetCurrentQuoteItems(quoteId);\r\n                  }}\r\n                ></Icon30px30pxPointer>\r\n              </FlexContSpaceEvenly>\r\n            ))}\r\n          </FlexColumnFullWidth>\r\n\r\n          <QuoteItemWindow\r\n            itemId={itemId}\r\n            quoteid={quoteId}\r\n            quote={quote}\r\n            open={quoteItemWindowToggle}\r\n            RefreshItemList={(item) => {\r\n              GetCurrentQuoteItems(quoteId);\r\n              setItems([...items, item]);\r\n              setPrimaryItemId(item.Id);\r\n            }}\r\n            RefreshUpdatedItem={(item) => {\r\n              GetCurrentQuoteItems(quoteId); \r\n              var index = items.findIndex((o) => o.Id === item.Id);\r\n              items[index] = item;\r\n            }}\r\n            onClose={(added) => {\r\n              if (added === true) {\r\n                CheckIfProductHasAddons(productId);\r\n              } else {\r\n                setQuoteItemWindowToggle(false);\r\n                setItemId(0);\r\n              }\r\n            }}\r\n            productobj={productObject}\r\n          ></QuoteItemWindow>\r\n          <br></br>\r\n          <HundredPercentFlexDiv>\r\n            <br></br>\r\n            <LeagueSpartanHeaderSmall>Items Added</LeagueSpartanHeaderSmall>\r\n          </HundredPercentFlexDiv>\r\n          <StyledHRGreyBreak></StyledHRGreyBreak>\r\n\r\n          {items.map((o, i) => (\r\n            <FlexContSpaceEvenly height=\"auto\" key={o?.Name}>\r\n              <AvenirCategoryLabelWide>{o.Name}</AvenirCategoryLabelWide>\r\n              <AvenirCategoryLabelWide>\r\n                {\" \"}\r\n                <b>\r\n                  {\" ($\"}\r\n                  {parseFloat(o.UnitPrice).toFixed(2)}\r\n                  {\")\"}\r\n                </b>\r\n                {\" x \"}\r\n                <b>{parseFloat(o.Quant).toFixed(2)}</b>\r\n              </AvenirCategoryLabelWide>\r\n              <Icon30px30pxPointer\r\n                src={\"/EditIcon.svg\"}\r\n                onClick={() => {\r\n                  OpenUpdateQuoteItemWindow(o, i);\r\n                }}\r\n              ></Icon30px30pxPointer>\r\n              <Icon30px30pxPointer\r\n                src={\"/Garbage_Icon.svg\"}\r\n                onClick={() => {\r\n                  //DeleteProductFromQuoteByEstimator(o, i, o.returnedId);\r\n                  DeleteItem(o, items);\r\n                  GetCurrentQuoteItems(quoteId);\r\n                }}\r\n              ></Icon30px30pxPointer>\r\n            </FlexContSpaceEvenly>\r\n          ))}\r\n          <br></br>\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              ReturnToQuote();\r\n            }}\r\n          >\r\n            Return to Estimate\r\n          </RegularResponsiveButton>\r\n        </TwentyPercentWidthCont>\r\n      </HundredPercentFlexDiv>\r\n    );\r\n  }\r\n};\r\n\r\nMaterialSelection.defaultProps = {\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  quoteId: 0,\r\n  returnCateType: 1000,\r\n};\r\n\r\nexport default MaterialSelection;\r\n","import {\r\n  FlexRowCont100PercentSpaceBetween,\r\n  RelativeCont100Percent,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  LeagueSpartanRegularMinWidth,\r\n  StyledHRPropColour,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst QuoteGrandTotal = ({ grandTotal }) => {\r\n  var grand = grandTotal === 0 ? 0 : grandTotal.toFixed(2);\r\n\r\n  return (\r\n    <RelativeCont100Percent>\r\n      <FlexRowCont100PercentSpaceBetween>\r\n        <LeagueSpartanRegularMinWidth font_size=\"16px\" head_text=\"Grand Total:\">\r\n          Grand Total:\r\n        </LeagueSpartanRegularMinWidth>\r\n        <LeagueSpartanRegularMinWidth>\r\n          {\"$\" + grand.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n        </LeagueSpartanRegularMinWidth>\r\n      </FlexRowCont100PercentSpaceBetween>\r\n      <StyledHRPropColour border={`0.5px solid black`}></StyledHRPropColour>\r\n    </RelativeCont100Percent>\r\n  );\r\n};\r\n\r\nQuoteGrandTotal.defaultProps = {\r\n  grandTotal: 0,\r\n};\r\n\r\nexport default QuoteGrandTotal;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { useEffect, useState } from \"react\";\r\nimport {\r\n  DeleteQuoteItemByEstimator,\r\n  ReverseQuant_QuoteItem,\r\n  UpdateQuoteItem,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { GetProduct } from \"../../API_Functions/CatProduct_Functions\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  Cont100Percent4PercentDisplayProp,\r\n  FlexColumnFullWidth,\r\n  FlexContFullWidthJustifyCenter,\r\n  FlexDiv,\r\n  GreyCont100Percent4PercentDisplayProp,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexColumnDiv,\r\n  FlexColumnDivCentered20Percent,\r\n  FlexDivCentered45Percent,\r\n  FullWidthDivFlexStart,\r\n  QuoteQuadMedium\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  BlueUnderlinePointerPara,\r\n  RegularText,\r\n  SmallHeaderOpenSans,\r\n  SmallText,\r\n  TinyHeaderDarkGrey,\r\n  TinyTextItalics\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport DeleteConfirmWindow from \"../../comps/Windows/DeleteProduct\";\r\n\r\nconst QuoteTableItems = ({ quoteItemObj, onItemChange, noChange, bgcolor }) => {\r\n  const [expand, setExpand] = useState(false);\r\n\r\n  const [roleType, setRoleType] = useState(0);\r\n  const [txtLineState, setTxtLineState] = useState(\"none\");\r\n  const [description, setDescription] = useState(\"\");\r\n  const [descriptionDisplay, setDescriptionDisplay] = useState(\"none\");\r\n  const [arrowSRC, setArrowSRC] = useState(\"/downarrow.svg\");\r\n  const [itemNotePara, setItemNote] = useState(\"\");\r\n\r\n  const [deleteItem, setDeleteItem] = useState(false);\r\n  const [deleteRelatedItemWindow, setDeleteRelatedItemWindow] = useState(false);\r\n  const [relatedDeleteItemId] = useState(0);\r\n\r\n  const [itemQuantity, setItemQuantity] = useState(0);\r\n  const [showSave, setShowSave] = useState(\"none\");\r\n  const [showUnit, setShowUnit] = useState(\"block\");\r\n  const [relatedDisplayProp, setRelatedDisplayProp] = useState(\"none\");\r\n  const [showQuantInput, setShowQuantInput] = useState(\"none\");\r\n  const [showQuantText, setShowQuantText] = useState(\"block\");\r\n\r\n  const DeleteItem = async (itemid) => {\r\n    var data = await DeleteQuoteItemByEstimator(itemid);\r\n    if (data === null) {\r\n      onItemChange(itemid);\r\n    }\r\n  };\r\n\r\n  const UpdateItem = async (quoteitem) => {\r\n    var quant = await ReverseQuant_QuoteItem(quoteItemObj.Id, itemQuantity);\r\n    quoteitem.Quant = quant;\r\n    var data = await UpdateQuoteItem(quoteitem);\r\n    if (data !== null) {\r\n      onItemChange();\r\n    }\r\n  };\r\n\r\n  const SetProductDescriptionNotes = async (id) => {\r\n    if (expand !== true) {\r\n      var product = await GetProduct(id);\r\n      if (product != null) {\r\n        if (product.Description != null) {\r\n          setDescriptionDisplay(\"block\");\r\n          setDescription(product.Description);\r\n        } else {\r\n          setDescriptionDisplay(\"none\");\r\n          setDescription(\"No Description\");\r\n        }\r\n      } else setDescriptionDisplay(\"none\");\r\n    }\r\n  };\r\n\r\n  const SetItemNotes = async (notes) => {\r\n    if (notes != null && notes !== undefined) {\r\n      setItemNote(notes);\r\n    }\r\n  };\r\n\r\n  const Toggle_Display = async (expand) => {\r\n    if (expand === false) {\r\n      setRelatedDisplayProp(\"block\");\r\n      setExpand(true);\r\n      setArrowSRC(\"/uparrow.svg\");\r\n    } else {\r\n      setDescriptionDisplay(\"none\");\r\n      setRelatedDisplayProp(\"none\");\r\n      setExpand(false);\r\n      setArrowSRC(\"/downarrow.svg\");\r\n    }\r\n  };\r\n\r\n  const GetRoleInfo = async () => {\r\n    setRoleType(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n  };\r\n\r\n  const AssessQuant = async () => {\r\n    if (quoteItemObj.Quant === 0) {\r\n      setTxtLineState(\"line-through\");\r\n    }\r\n  };\r\n\r\n  const SetQuantDisplay = async (nochange) => {\r\n    if (nochange) {\r\n      setShowQuantInput(\"none\");\r\n      setShowQuantText(\"flex\");\r\n    } else {\r\n      setShowQuantInput(\"flex\");\r\n      setShowQuantText(\"none\");\r\n    }\r\n  };\r\n  const ExecuteUpdate = async () => {\r\n    if (itemQuantity !== 0 && !noChange) {\r\n      UpdateItem(quoteItemObj);\r\n    }\r\n    setShowSave(\"none\");\r\n    if (!noChange) setShowUnit(\"block\");\r\n  };\r\n\r\n  const onFocus = () => {\r\n    if (!noChange) setShowSave(\"block\");\r\n\r\n    setShowUnit(\"none\");\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (quoteItemObj.Notes !== null && quoteItemObj.Notes !== undefined) {\r\n      setItemNote(quoteItemObj.Notes);\r\n    } else {\r\n      setItemNote(\"\");\r\n    }\r\n  }, [quoteItemObj.Notes]);\r\n\r\n   useEffect(() => {\r\n    const fetchRoleAndQuant = async () => {\r\n      await GetRoleInfo();\r\n      AssessQuant();\r\n      SetQuantDisplay(noChange);\r\n    }\r\n    fetchRoleAndQuant();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (\r\n    quoteItemObj !== null &&\r\n    quoteItemObj !== undefined &&\r\n    quoteItemObj.Id > 0\r\n  ) {\r\n    if (roleType === UserRole.Manager || roleType === UserRole.Estimator) {\r\n      return (\r\n        <div>\r\n          <Cont100Percent4PercentDisplayProp>\r\n            <FullWidthDivFlexStart>\r\n              <FlexDivCentered45Percent bgcolor={bgcolor}>\r\n                <FlexColumnFullWidth>\r\n                  <FlexDiv>\r\n                  <SmallHeaderOpenSans>{quoteItemObj.Name}</SmallHeaderOpenSans>\r\n                  {/* <Icon30px20pxPointer src='/Pencil.svg'></Icon30px20pxPointer> */}\r\n                  </FlexDiv>\r\n                  <TinyTextItalics>{itemNotePara}</TinyTextItalics>\r\n                  <TinyHeaderDarkGrey\r\n                    width=\"300px\"\r\n                    onClick={() => {\r\n                      Toggle_Display(expand);\r\n                    }}\r\n                    overflow={expand === true ? \"visible\" : \"hidden\"}\r\n                    whitespace={expand === true ? \"normal\" : \"nowrap\"}\r\n                  >\r\n                    {quoteItemObj.Description}\r\n                  </TinyHeaderDarkGrey>\r\n                </FlexColumnFullWidth>\r\n                <Icon30px30pxPointer\r\n                  display={\r\n                    quoteItemObj?.RelatedItems?.filter(function (o) {\r\n                      return o.CateType !== CategoryTypes.Labor;\r\n                    }).length > 0\r\n                      ? \"block\"\r\n                      : \"none\"\r\n                  }\r\n                  src={arrowSRC}\r\n                  onClick={() => {\r\n                    SetProductDescriptionNotes(quoteItemObj.Product_Id);\r\n                    SetItemNotes(quoteItemObj.Notes);\r\n                    Toggle_Display(expand);\r\n                  }}\r\n                ></Icon30px30pxPointer>\r\n              </FlexDivCentered45Percent>\r\n              <FlexColumnDivCentered20Percent\r\n                bgcolor={bgcolor}\r\n                displayProp={showQuantText}\r\n              >\r\n                <FlexColumnDiv>\r\n                  <RegularText txtLine={txtLineState}>\r\n                    {quoteItemObj?.Quant?.toFixed(2)}\r\n                  </RegularText>\r\n                </FlexColumnDiv>\r\n              </FlexColumnDivCentered20Percent>\r\n\r\n              <FlexColumnDivCentered20Percent displayProp={showQuantInput}>\r\n                <FlexContFullWidthJustifyCenter>\r\n                  <TextInputProp\r\n                    inputwidth=\"50%\"\r\n                    key={quoteItemObj.Quant?.toFixed(2)}\r\n                    onFocus={onFocus}\r\n                    type=\"number\"\r\n                    defaultValue={quoteItemObj.Quant?.toFixed(2)}\r\n                    onChange={(e) => {\r\n                      if (!noChange) setItemQuantity(e.target.value);\r\n                    }}\r\n                  ></TextInputProp>\r\n                  <SmallText display={showUnit} txtLine={txtLineState}>\r\n                    {quoteItemObj.DisplayUnit}\r\n                  </SmallText>\r\n                  <BlueUnderlinePointerPara\r\n                    display={showSave}\r\n                    onClick={() => {\r\n                      ExecuteUpdate();\r\n                    }}\r\n                  >\r\n                    Save\r\n                  </BlueUnderlinePointerPara>\r\n                </FlexContFullWidthJustifyCenter>\r\n              </FlexColumnDivCentered20Percent>\r\n\r\n              <QuoteQuadMedium>\r\n                <SmallText>${quoteItemObj.UnitPrice?.toFixed(2)}</SmallText>\r\n              </QuoteQuadMedium>\r\n\r\n              <QuoteQuadMedium>\r\n                <SmallText>\r\n                  {\"$\" +\r\n                    quoteItemObj.Price?.toFixed(2)\r\n                      .toString()\r\n                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                </SmallText>\r\n              </QuoteQuadMedium>\r\n\r\n              <QuoteQuadMedium>\r\n                <RegularResponsiveButton\r\n                  margintop=\"auto\"\r\n                  marginbottom=\"auto\"\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  onClick={() => {\r\n                    setDeleteItem(true);\r\n                  }}\r\n                >\r\n                  Delete\r\n                </RegularResponsiveButton>\r\n              </QuoteQuadMedium>\r\n\r\n              <DeleteConfirmWindow\r\n                deleteOpen={deleteItem}\r\n                onDeleteFunction={() => {\r\n                  DeleteItem(quoteItemObj.Id);\r\n                }}\r\n                closeDel={() => {\r\n                  setDeleteItem(false);\r\n                }}\r\n              ></DeleteConfirmWindow>\r\n            </FullWidthDivFlexStart>\r\n          </Cont100Percent4PercentDisplayProp>\r\n\r\n          <DeleteConfirmWindow\r\n            deleteOpen={deleteRelatedItemWindow}\r\n            onDeleteFunction={() => {\r\n              DeleteItem(relatedDeleteItemId);\r\n            }}\r\n            closeDel={() => {\r\n              setDeleteRelatedItemWindow(false);\r\n            }}\r\n          ></DeleteConfirmWindow>\r\n\r\n          {quoteItemObj.RelatedItems?.map((o, i) => {\r\n            if (o.CateType !== CategoryTypes.Labor) {\r\n              return (\r\n                <GreyCont100Percent4PercentDisplayProp\r\n                  key={i}\r\n                  displayProp={relatedDisplayProp}\r\n                >\r\n                  <FullWidthDivFlexStart>\r\n                    <QuoteTableItems\r\n                      key={i}\r\n                      quoteItemObj={o}\r\n                      onItemChange={onItemChange}\r\n                      noChange={o.NoChange}\r\n                      bgcolor={ColorPalette.LightGreen}\r\n                    ></QuoteTableItems>\r\n                  </FullWidthDivFlexStart>\r\n                </GreyCont100Percent4PercentDisplayProp>\r\n              );\r\n            } else {\r\n              return null;\r\n            }\r\n          })}\r\n        </div>\r\n      );\r\n    } else {\r\n      return (\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      );\r\n    }\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nQuoteTableItems.defaultProps = {\r\n  RelatedItems: [\"name\"],\r\n  onItemChange: () => {},\r\n  bgcolor: \"white\",\r\n};\r\n\r\nexport default QuoteTableItems;\r\n","import { React } from \"react\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContFullWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanTinyMargins,\r\n  RegularTextAutoMargin,\r\n  StyledHRPropColour,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\n\r\nconst QuoteTableTops = ({ cateType, subtotal, tax, total, quoteTax }) => {\r\n  var DisplayNotes = \"none\";\r\n\r\n  var Total = total;\r\n  var Labor_total_notes = \"Minimum labor may apply\"; // \"Minimum labor charge is $\" + Labor_Min;\r\n\r\n  if (cateType === CategoryTypes.Labor) {\r\n    DisplayNotes = \"block\";\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      <FlexRowContFullWidth>\r\n        <FlexColumnFullWidth>\r\n          <LeagueSpartanTinyMargins display={DisplayNotes}>\r\n            {Labor_total_notes}{\" \"}\r\n          </LeagueSpartanTinyMargins>\r\n        </FlexColumnFullWidth>\r\n        <FlexColumnFullWidth width=\"40%\">\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <FlexColumnFullWidth textalign=\"left\">\r\n              <LeagueSpartanHeaderSmall>SUBTOTAL</LeagueSpartanHeaderSmall>\r\n              {quoteTax?.map((o, i) => (\r\n                <LeagueSpartanHeaderSmall key={i}>\r\n                  {o.TaxCode + \":\"}\r\n                </LeagueSpartanHeaderSmall>\r\n              ))}\r\n              <LeagueSpartanHeaderSmall>TOTAL</LeagueSpartanHeaderSmall>\r\n            </FlexColumnFullWidth>\r\n\r\n            <FlexColumnFullWidth textalign=\"right\">\r\n              <RegularTextAutoMargin>\r\n                {\"$\" +\r\n                  subtotal.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n              </RegularTextAutoMargin>\r\n              {quoteTax?.map((o, i) => (\r\n                <RegularTextAutoMargin key={i}>\r\n                  {\"$\" + o.Amount?.toFixed(2)}\r\n                </RegularTextAutoMargin>\r\n              ))}\r\n              <RegularTextAutoMargin>\r\n                {\"$\" + Total.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n              </RegularTextAutoMargin>\r\n            </FlexColumnFullWidth>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n        </FlexColumnFullWidth>\r\n      </FlexRowContFullWidth>\r\n      <StyledHRPropColour\r\n        border={`0.5px solid ${ColorPalette.TertiaryGrey}`}\r\n      ></StyledHRPropColour>\r\n    </div>\r\n  );\r\n};\r\n\r\nQuoteTableTops.defaultProps = {\r\n  cateType: 0,\r\n  subtotal: \"$0.00\",\r\n  quoteTax: [\"name\"],\r\n  tax: \"$0.00\",\r\n  total: \"$0.00\",\r\n};\r\n\r\nexport default QuoteTableTops;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport React, { useEffect, useState, useMemo, useCallback } from \"react\";\r\nimport {\r\n  Cont100PercentMobileOpt,\r\n  FlexColumnLeftAlign,\r\n  FlexDiv,\r\n  FlexRowCont,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContFlexStart,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexCenterDiv100PercentCenter,\r\n  QuoteQuadHead,\r\n  QuoteQuadHeaderBorderTopLeft,\r\n  QuoteQuadHeaderBorderTopRight,\r\n  QuoteQuadHeadMedium,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanLarge,\r\n  LeagueSpartanRegular,\r\n  SmallHeaderOpenSansBold,\r\n  StyledHRGreenBreak,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport QuoteTableItems from \"../QuoteTableItems\";\r\nimport QuoteTableTops from \"../QuoteTableTops\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { GetQuoteById } from \"../../API_Functions/CaseQuote_Functions\";\r\n\r\nconst QuoteTable = ({\r\n  cateType,\r\n  Tags,\r\n  quoteItems,\r\n  quoteTotalsArray,\r\n  subtotal,\r\n  total,\r\n  onDel,\r\n  onItemChange,\r\n  EditTagWindow,\r\n  DeleteTag\r\n}) => {\r\n  const [primaryItems, setPrimaryItems] = useState([]);\r\n  var CateType = {\r\n    Material: 0,\r\n    Labor: 2,\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (quoteItems != null) {\r\n      if (quoteItems.length > 0) {\r\n        setPrimaryItems(\r\n          quoteItems.filter(\r\n            (o) =>\r\n              (o.Parent_Id === 0 && o.CateType !== CateType.Labor) ||\r\n              o.CateType === CateType.Labor\r\n          )\r\n        );\r\n      } else {\r\n        setPrimaryItems([]);\r\n      }\r\n    }\r\n  }, [quoteItems]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const handleItemChange = useCallback(() => {\r\n    onItemChange();\r\n  }, [onItemChange]);\r\n\r\n  const filterRelatedItems = useCallback(\r\n    (o) =>\r\n      quoteItems.filter(\r\n        (item) =>\r\n          (item.Parent_Id === o.Id && item.CateType === CateType.Material) ||\r\n          (item.Parent_Id === o.Material_Id &&\r\n            item.Parent_Id !== item.Material_Id &&\r\n            item.CateType === CateType.Labor)\r\n      ),\r\n    [quoteItems, CateType]\r\n  );\r\n\r\n  const itemRemoval = (itemId) => {\r\n    setPrimaryItems((prevItems) => prevItems.filter((item) => item.id !== itemId));\r\n  };\r\n  \r\n  const primaryItemsNoTag = useMemo(\r\n    () => primaryItems.filter((item) => item.Tag_Id === 0),\r\n    [primaryItems]\r\n  );\r\n\r\n  const primaryItemsWithTags = useMemo(\r\n    () => Tags.map((t) => ({ tag: t, items: primaryItems.filter((item) => item.Tag_Id === t.Id) })),\r\n    [Tags, primaryItems]\r\n  );\r\n\r\n  if (quoteItems !== [\"name\"]) {\r\n    return (\r\n      <Cont100PercentMobileOpt>\r\n        {primaryItemsWithTags.map(({tag, items}, j) => (\r\n          <div key={j}>\r\n                    <br></br>\r\n              <FlexRowContFlexStart>\r\n              <LeagueSpartanHeaderSmall minwidth='100px'>{tag.TagName}</LeagueSpartanHeaderSmall>\r\n              <FlexRowCont100PercentSpaceBetween>\r\n              <Icon30px30pxPointer\r\n                      onClick={async () => {\r\n                        EditTagWindow(tag);\r\n                      }}\r\n                      src=\"/pencil.svg\"\r\n                    ></Icon30px30pxPointer>\r\n                              <Icon30px30pxPointer\r\n                    onClick={() => {\r\n                      DeleteTag(tag)\r\n                    }}\r\n                    src=\"/Garbage_Icon.svg\"\r\n                  ></Icon30px30pxPointer>\r\n                    </FlexRowCont100PercentSpaceBetween>\r\n              </FlexRowContFlexStart>\r\n              <StyledHRGreenBreak></StyledHRGreenBreak>\r\n            <br></br>\r\n\r\n            <FlexDiv>\r\n          <QuoteQuadHeaderBorderTopLeft>\r\n            <SmallHeaderOpenSansBold>Name</SmallHeaderOpenSansBold>\r\n          </QuoteQuadHeaderBorderTopLeft>\r\n\r\n          <QuoteQuadHead>\r\n            <SmallHeaderOpenSansBold>Quantity</SmallHeaderOpenSansBold>\r\n          </QuoteQuadHead>\r\n\r\n          <QuoteQuadHeadMedium>\r\n            <SmallHeaderOpenSansBold>Unit Rate</SmallHeaderOpenSansBold>\r\n          </QuoteQuadHeadMedium>\r\n\r\n          <QuoteQuadHeadMedium>\r\n            <SmallHeaderOpenSansBold>Price</SmallHeaderOpenSansBold>\r\n          </QuoteQuadHeadMedium>\r\n\r\n          <QuoteQuadHeaderBorderTopRight>\r\n            <SmallHeaderOpenSansBold>Remove Item</SmallHeaderOpenSansBold>\r\n          </QuoteQuadHeaderBorderTopRight>\r\n        </FlexDiv>\r\n\r\n        {\r\n  items.length === 0\r\n    ? <FlexCenterDiv100PercentCenter>\r\n      <TinyTextItalics>No Items</TinyTextItalics>\r\n    </FlexCenterDiv100PercentCenter> \r\n    : items.map((o, i) => (\r\n        <QuoteTableItems\r\n          key={i}\r\n          quoteItemObj={o}\r\n          onItemChange={() => { handleItemChange(); itemRemoval(o.itemid); }}\r\n          noChange={o.NoChange}\r\n          RelatedItems={filterRelatedItems(o)}\r\n          onDel={onDel}\r\n        />\r\n      ))\r\n}\r\n          </div>\r\n        ))}\r\n\r\n<br></br>\r\n<FlexDiv>\r\n          <QuoteQuadHeaderBorderTopLeft>\r\n            <SmallHeaderOpenSansBold>Name</SmallHeaderOpenSansBold>\r\n          </QuoteQuadHeaderBorderTopLeft>\r\n\r\n          <QuoteQuadHead>\r\n            <SmallHeaderOpenSansBold>Quantity</SmallHeaderOpenSansBold>\r\n          </QuoteQuadHead>\r\n\r\n          <QuoteQuadHeadMedium>\r\n            <SmallHeaderOpenSansBold>Unit Rate</SmallHeaderOpenSansBold>\r\n          </QuoteQuadHeadMedium>\r\n\r\n          <QuoteQuadHeadMedium>\r\n            <SmallHeaderOpenSansBold>Price</SmallHeaderOpenSansBold>\r\n          </QuoteQuadHeadMedium>\r\n\r\n          <QuoteQuadHeaderBorderTopRight>\r\n            <SmallHeaderOpenSansBold>Remove Item</SmallHeaderOpenSansBold>\r\n          </QuoteQuadHeaderBorderTopRight>\r\n        </FlexDiv>        \r\n\r\n{primaryItemsNoTag.map((o, i) => (\r\n          <QuoteTableItems\r\n            key={i}\r\n            quoteItemObj={o}\r\n            onItemChange={(itemid)=>{handleItemChange(); itemRemoval(itemid) }}\r\n            noChange={o.NoChange}\r\n            RelatedItems={filterRelatedItems(o)}\r\n            onDel={onDel}\r\n          ></QuoteTableItems>\r\n        ))}\r\n\r\n        <QuoteTableTops\r\n          cateType={cateType}\r\n          subtotal={subtotal}\r\n          quoteTax={quoteTotalsArray}\r\n          total={total}\r\n        ></QuoteTableTops>\r\n      </Cont100PercentMobileOpt>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop\r\n        style={{ zIndex: 2 }}\r\n        open\r\n      >\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nQuoteTable.defaultProps = {\r\n  Tags: [],\r\n  quoteItems: [\"name\"],\r\n  quoteTotalsArray: [\"name\"],\r\n  subtotal: \"\",\r\n  total: \"\",\r\n  cateType: 0,\r\n  onItemChange: () => {},\r\n  EditTagWindow: () => {},\r\n  DeleteTag: () => {},\r\n};\r\n\r\nexport default QuoteTable;\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n  DeleteQuoteTool,\r\n  UpdateQuoteTool,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport {\r\n  Cont100Percent4PercentDisplayProp,\r\n  FlexContFullWidthJustifyCenter,\r\n  FlexRowContFullWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexColumnDivCentered20Percent,\r\n  FlexDivCentered45Percent,\r\n  FullWidthDivFlexStart,\r\n  QuadDeleteTitle,\r\n  QuoteQuadMedium,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  BlueUnderlinePointerPara,\r\n  Futura25PercentWidth,\r\n  SmallText,\r\n  SmallTitleBold,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst QuoteTableDeliveryItems = ({\r\n  onItemChange,\r\n  itemId,\r\n  toolobj,\r\n  noChange,\r\n}) => {\r\n  const [youtubeLinkProp, setYoutubeLinkProp] = useState(\"\");\r\n  const [txtLineState] = useState(\"none\");\r\n  const [showSave, setShowSave] = useState(\"none\");\r\n  const [showUnit, setShowUnit] = useState(\"block\");\r\n  const [displayView, setDisplayView] = useState(\"block\");\r\n  const [itemQuantity, setItemQuantity] = useState(0);\r\n  const [rate] = useState(toolobj.Price / toolobj.Quant);\r\n\r\n  const DeleteItem = async (itemid) => {\r\n    var data = await DeleteQuoteTool(itemid);\r\n    if (data === null) {\r\n      onItemChange();\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (toolobj?.VideoUrl !== null) {\r\n      var p =\r\n        /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\r\n      if (toolobj?.VideoUrl?.match(p)) {\r\n        setYoutubeLinkProp(toolobj?.VideoUrl);\r\n        setDisplayView(\"block\");\r\n      } else {\r\n        setDisplayView(\"none\");\r\n      }\r\n    }\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const ExecuteUpdate = async () => {\r\n    if (itemQuantity !== 0 && !noChange) {\r\n      toolobj.Quant = itemQuantity;\r\n      UpdateItem(toolobj);\r\n    }\r\n    setShowSave(\"none\");\r\n    if (!noChange) setShowUnit(\"block\");\r\n  };\r\n\r\n  const onFocus = () => {\r\n    if (!noChange) setShowSave(\"block\");\r\n\r\n    setShowUnit(\"none\");\r\n  };\r\n\r\n  const UpdateItem = async (quoteitem) => {\r\n    var data = await UpdateQuoteTool(quoteitem);\r\n    if (data !== null) {\r\n      onItemChange();\r\n    }\r\n  };\r\n\r\n  return (\r\n    <div>\r\n      <Cont100Percent4PercentDisplayProp>\r\n        <FullWidthDivFlexStart>\r\n          <FlexDivCentered45Percent>\r\n            <FlexRowContFullWidth>\r\n              <SmallTitleBold>\r\n                {toolobj.ToolName + \" - \" + toolobj.Notes}\r\n                {toolobj.Item_Id}\r\n              </SmallTitleBold>\r\n              <BlueUnderlinePointerPara\r\n                display={displayView}\r\n                onClick={() => {\r\n                  if (toolobj.VideoUrl !== null) {\r\n                    window.open(youtubeLinkProp, \"_blank\");\r\n                  }\r\n                }}\r\n              >\r\n                View\r\n              </BlueUnderlinePointerPara>\r\n            </FlexRowContFullWidth>\r\n          </FlexDivCentered45Percent>\r\n\r\n          <FlexColumnDivCentered20Percent>\r\n            <FlexContFullWidthJustifyCenter>\r\n              <TextInputProp\r\n              key={toolobj.Quant}\r\n                inputwidth=\"50%\"\r\n                onFocus={onFocus}\r\n                type=\"number\"\r\n                defaultValue={toolobj.Quant}\r\n                onChange={(e) => {\r\n                  if (!noChange) setItemQuantity(e.target.value);\r\n                }}\r\n              ></TextInputProp>\r\n              <Futura25PercentWidth\r\n                displayProp={showUnit}\r\n                txtLine={txtLineState}\r\n                key={toolobj.Unit}\r\n              >\r\n                {toolobj.Unit}\r\n              </Futura25PercentWidth>\r\n              <BlueUnderlinePointerPara\r\n                displayProp={showSave}\r\n                onClick={ExecuteUpdate}\r\n              >\r\n                Save\r\n              </BlueUnderlinePointerPara>\r\n            </FlexContFullWidthJustifyCenter>\r\n          </FlexColumnDivCentered20Percent>\r\n\r\n          <QuoteQuadMedium>\r\n            <SmallText key={rate} txtLine={txtLineState}>{rate.toFixed(2)}</SmallText>\r\n          </QuoteQuadMedium>\r\n\r\n          <QuoteQuadMedium>\r\n            <SmallText key={toolobj.Price}>${toolobj.Price.toFixed(2)}</SmallText>\r\n          </QuoteQuadMedium>\r\n\r\n          <QuoteQuadMedium>\r\n            <QuadDeleteTitle\r\n              onClick={() => {\r\n                DeleteItem(itemId);\r\n              }}\r\n            >\r\n              Delete\r\n            </QuadDeleteTitle>\r\n          </QuoteQuadMedium>\r\n        </FullWidthDivFlexStart>\r\n      </Cont100Percent4PercentDisplayProp>\r\n    </div>\r\n  );\r\n};\r\n\r\nQuoteTableDeliveryItems.defaultProps = {\r\n  itemId: 0,\r\n  onItemChange: () => {},\r\n};\r\n\r\nexport default QuoteTableDeliveryItems;\r\n","import React from \"react\";\r\nimport QuoteTableTops from \"../QuoteTableTops\";\r\nimport { Cont100PercentMobile100Percent } from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  QuadContainer,\r\n  QuoteQuadHead,\r\n  QuoteQuadHeaderBorderTopLeft,\r\n  QuoteQuadHeadMedium,\r\n  QuoteQuadHeaderBorderTopRight,\r\n} from \"../../StylesheetComps/Div\";\r\nimport QuoteTableDeliveryItems from \"../QuoteTableDeliveryItems\";\r\nimport { RegularText, SmallText } from \"../../StylesheetComps/Titles\";\r\n\r\nconst QuoteTableDelivery = ({\r\n  quoteItems,\r\n  quoteTotalsArray,\r\n  subtotal,\r\n  total,\r\n  onItemChange,\r\n}) => {\r\n  return (\r\n    <Cont100PercentMobile100Percent>\r\n      <QuadContainer>\r\n        <QuoteQuadHeaderBorderTopLeft>\r\n          <SmallText>Name</SmallText>\r\n        </QuoteQuadHeaderBorderTopLeft>\r\n\r\n        <QuoteQuadHead>\r\n          <SmallText>Load(s)</SmallText>\r\n        </QuoteQuadHead>\r\n\r\n        <QuoteQuadHeadMedium>\r\n          <SmallText>Rate</SmallText>\r\n        </QuoteQuadHeadMedium>\r\n\r\n        <QuoteQuadHeadMedium>\r\n          <SmallText>Price</SmallText>\r\n        </QuoteQuadHeadMedium>\r\n\r\n        <QuoteQuadHeaderBorderTopRight>\r\n          <SmallText>Remove Item</SmallText>\r\n        </QuoteQuadHeaderBorderTopRight>\r\n      </QuadContainer>\r\n      {quoteItems.map((o, i) => (\r\n        <QuoteTableDeliveryItems\r\n          key={i}\r\n          toolobj={o}\r\n          noChange={false}\r\n          onItemChange={onItemChange}\r\n          itemId={o.Id}\r\n        ></QuoteTableDeliveryItems>\r\n      ))}\r\n\r\n      <QuoteTableTops\r\n        subtotal={subtotal}\r\n        quoteTax={quoteTotalsArray}\r\n        total={total}\r\n      ></QuoteTableTops>\r\n    </Cont100PercentMobile100Percent>\r\n  );\r\n};\r\n\r\nQuoteTableDelivery.defaultProps = {\r\n  quoteItems: [\"name\"],\r\n  quoteTotalsArray: [\"name\"],\r\n  subtotal: \"\",\r\n  total: \"\",\r\n  onItemChange: () => {},\r\n};\r\n\r\nexport default QuoteTableDelivery;\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n  DeleteQuoteTool,\r\n  UpdateQuoteTool,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport {\r\n  Cont100Percent4Percent,\r\n  FlexColumnFullWidth,\r\n  FlexContFullWidthJustifyCenter,\r\n  FlexDiv,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexColumnDivCentered20Percent,\r\n  FlexDivCentered45Percent,\r\n  FullWidthDivFlexStart,\r\n  QuadDeleteTitle,\r\n  QuoteQuadMedium,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  BlueUnderlinePointerPara,\r\n  Futura25PercentWidth,\r\n  RegularText,\r\n  SmallText,\r\n  SmallTitleBold,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst QuoteTableToolItems = ({ onItemChange, itemId, toolobj, noChange }) => {\r\n  const [youtubeLinkProp, setYoutubeLinkProp] = useState(\"\");\r\n  const [txtLineState] = useState(\"none\");\r\n  const [toolQuantity, setToolQuantity] = useState(0);\r\n  const [toolRentHours, setToolRentHours] = useState(0);\r\n  const [showSaveQuantity, setShowSaveQuantity] = useState(\"none\");\r\n  const [showSaveRentHours, setShowSaveRentHours] = useState(\"none\");\r\n  const [showUnitQuantity, setShowUnitQuantity] = useState(\"block\");\r\n  const [displayView, setDisplayView] = useState(\"block\");\r\n  const [showQuantInput, setShowQuantInput] = useState(\"none\");\r\n  const [showQuantText, setShowQuantText] = useState(\"block\");\r\n\r\n  const DeleteItem = async (itemid) => {\r\n    var data = await DeleteQuoteTool(itemid);\r\n    if (data == null) {\r\n      onItemChange();\r\n    }\r\n  };\r\n\r\n  const UpdateToolQuantity = async (quoteitem) => {\r\n    quoteitem.Quant = toolQuantity;\r\n    var data = await UpdateQuoteTool(quoteitem);\r\n    if (data !== null) {\r\n      onItemChange();\r\n    }\r\n  };\r\n\r\n  const UpdateToolRentHours = async (quoteitem) => {\r\n    quoteitem.RentalLength = toolRentHours;\r\n    var data = await UpdateQuoteTool(quoteitem);\r\n    if (data !== null) {\r\n      onItemChange();\r\n    }\r\n  };\r\n\r\n  const ExecuteUpdateQuantity = async () => {\r\n    if (toolQuantity !== 0 && !noChange) {\r\n      UpdateToolQuantity(toolobj);\r\n    }\r\n    setShowSaveQuantity(\"none\");\r\n    if (!noChange) setShowUnitQuantity(\"block\");\r\n  };\r\n\r\n  const onFocusQuantity = () => {\r\n    if (!noChange) setShowSaveQuantity(\"block\");\r\n\r\n    setShowUnitQuantity(\"none\");\r\n  };\r\n\r\n  const ExecuteUpdateRentHour = async () => {\r\n    if (toolRentHours !== 0 && !noChange) {\r\n      UpdateToolRentHours(toolobj);\r\n    }\r\n    setShowSaveRentHours(\"none\");\r\n  };\r\n\r\n  const onFocusRentHour = () => {\r\n    if (!noChange) setShowSaveRentHours(\"block\");\r\n  };\r\n\r\n  const SetQuantDisplay = async (nochange) => {\r\n    if (nochange) {\r\n      setShowQuantInput(\"none\");\r\n      setShowQuantText(\"flex\");\r\n    } else {\r\n      setShowQuantInput(\"flex\");\r\n      setShowQuantText(\"none\");\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetQuantDisplay(noChange);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (toolobj?.VideoUrl !== null) {\r\n      var p =\r\n        /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\r\n      if (toolobj?.VideoUrl?.match(p)) {\r\n        setYoutubeLinkProp(toolobj?.VideoUrl);\r\n        setDisplayView(\"block\");\r\n      } else {\r\n        setDisplayView(\"none\");\r\n      }\r\n    }\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <Cont100Percent4Percent>\r\n      <FullWidthDivFlexStart>\r\n        <FlexDivCentered45Percent>\r\n          <FlexColumnFullWidth>\r\n            <SmallTitleBold>{toolobj.ToolName}</SmallTitleBold>\r\n            <TinyTextItalics>{toolobj.Notes}</TinyTextItalics>\r\n          </FlexColumnFullWidth>\r\n          <RegularText\r\n            display={displayView}\r\n            color=\"blue\"\r\n            onClick={() => {\r\n              if (toolobj.VideoUrl !== null) {\r\n                window.open(youtubeLinkProp, \"_blank\");\r\n              }\r\n            }}\r\n          >\r\n            View\r\n          </RegularText>\r\n        </FlexDivCentered45Percent>\r\n\r\n        <FlexColumnDivCentered20Percent displayProp={showQuantText}>\r\n          <FlexDiv>\r\n            <FlexColumnFullWidth>\r\n              <RegularText>{toolobj.Quant}</RegularText>\r\n            </FlexColumnFullWidth>\r\n            <Futura25PercentWidth\r\n              displayProp={showUnitQuantity}\r\n              txtLine={txtLineState}\r\n            >\r\n              {toolobj.Unit}\r\n            </Futura25PercentWidth>\r\n          </FlexDiv>\r\n        </FlexColumnDivCentered20Percent>\r\n\r\n        <FlexColumnDivCentered20Percent displayProp={showQuantInput}>\r\n          <FlexContFullWidthJustifyCenter>\r\n            <TextInputProp\r\n              inputwidth=\"50%\"\r\n              onFocus={onFocusQuantity}\r\n              type=\"number\"\r\n              defaultValue={toolobj.Quant}\r\n              onChange={(e) => {\r\n                if (!noChange) setToolQuantity(e.target.value);\r\n              }}\r\n            ></TextInputProp>\r\n            <Futura25PercentWidth\r\n              displayProp={showUnitQuantity}\r\n              txtLine={txtLineState}\r\n            >\r\n              {toolobj.Unit}\r\n            </Futura25PercentWidth>\r\n            <BlueUnderlinePointerPara\r\n              display={showSaveQuantity}\r\n              onClick={ExecuteUpdateQuantity}\r\n            >\r\n              Save\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContFullWidthJustifyCenter>\r\n        </FlexColumnDivCentered20Percent>\r\n\r\n        <QuoteQuadMedium alignitems=\"center\">\r\n          <FlexContFullWidthJustifyCenter>\r\n            <TextInputProp\r\n              inputwidth=\"50%\"\r\n              onFocus={onFocusRentHour}\r\n              type=\"number\"\r\n              defaultValue={toolobj.RentalLength}\r\n              onChange={(e) => {\r\n                if (!noChange) setToolRentHours(e.target.value);\r\n              }}\r\n            ></TextInputProp>\r\n            <BlueUnderlinePointerPara\r\n              display={showSaveRentHours}\r\n              onClick={ExecuteUpdateRentHour}\r\n            >\r\n              Save\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContFullWidthJustifyCenter>\r\n        </QuoteQuadMedium>\r\n\r\n        <QuoteQuadMedium>\r\n          <SmallText>${toolobj.Price.toFixed(2)}</SmallText>\r\n        </QuoteQuadMedium>\r\n\r\n        <QuoteQuadMedium>\r\n          <QuadDeleteTitle\r\n            onClick={() => {\r\n              DeleteItem(itemId);\r\n            }}\r\n          >\r\n            Delete\r\n          </QuadDeleteTitle>\r\n        </QuoteQuadMedium>\r\n      </FullWidthDivFlexStart>\r\n    </Cont100Percent4Percent>\r\n  );\r\n};\r\n\r\nQuoteTableToolItems.defaultProps = {\r\n  itemId: 0,\r\n  onItemChange: () => {},\r\n};\r\n\r\nexport default QuoteTableToolItems;\r\n","import React from \"react\";\r\nimport QuoteTableToolItems from \"../QuoteTableToolItems\";\r\nimport QuoteTableTops from \"../QuoteTableTops\";\r\nimport { Cont100PercentMobile100Percent } from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  QuadContainer,\r\n  QuoteQuadHead,\r\n  QuoteQuadHeadMedium,\r\n  QuoteQuadHeaderBorderTopLeft,\r\n  QuoteQuadHeaderBorderTopRight,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { SmallText } from \"../../StylesheetComps/Titles\";\r\n\r\nconst QuoteTableTools = ({\r\n  quoteItems,\r\n  quoteTotalsArray,\r\n  subtotal,\r\n  total,\r\n  onItemChange,\r\n}) => {\r\n  return (\r\n    <Cont100PercentMobile100Percent>\r\n      <QuadContainer>\r\n        <QuoteQuadHeaderBorderTopLeft>\r\n          <SmallText>Name</SmallText>\r\n        </QuoteQuadHeaderBorderTopLeft>\r\n\r\n        <QuoteQuadHead>\r\n          <SmallText>Quantity</SmallText>\r\n        </QuoteQuadHead>\r\n\r\n        <QuoteQuadHeadMedium>\r\n          <SmallText>Rent Hours</SmallText>\r\n        </QuoteQuadHeadMedium>\r\n\r\n        <QuoteQuadHeadMedium>\r\n          <SmallText>Price</SmallText>\r\n        </QuoteQuadHeadMedium>\r\n\r\n        <QuoteQuadHeaderBorderTopRight>\r\n          <SmallText>Remove Item</SmallText>\r\n        </QuoteQuadHeaderBorderTopRight>\r\n      </QuadContainer>\r\n      {quoteItems.map((o, i) => (\r\n        <QuoteTableToolItems\r\n          noChange={o.NoChange}\r\n          key={i}\r\n          toolobj={o}\r\n          onItemChange={onItemChange}\r\n          itemId={o.Id}\r\n        ></QuoteTableToolItems>\r\n      ))}\r\n\r\n      <QuoteTableTops\r\n        subtotal={subtotal}\r\n        quoteTax={quoteTotalsArray}\r\n        total={total}\r\n      ></QuoteTableTops>\r\n    </Cont100PercentMobile100Percent>\r\n  );\r\n};\r\n\r\nQuoteTableTools.defaultProps = {\r\n  quoteItems: [\"name\"],\r\n  quoteTotalsArray: [\"name\"],\r\n  subtotal: \"\",\r\n  total: \"\",\r\n  onItemChange: () => {},\r\n};\r\n\r\nexport default QuoteTableTools;\r\n","import React, { useState } from \"react\";\r\nimport { Cont100PercentWidth } from \"../../../StylesheetComps/Quote\";\r\nimport { StickyCont400x400px } from \"../../../StylesheetComps/Cont\";\r\nimport { FixedOverlay1000vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  TextArea72Percent,\r\n  TextInput72Percent,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport { Div300pxMargin30px } from \"../../../StylesheetComps/Div\";\r\nimport { LeagueSpartanRegular } from \"../../../StylesheetComps/Titles\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\nconst NewQuoteTool = ({\r\n  open,\r\n  onClose,\r\n  onChange,\r\n  onFormComplete,\r\n  onPreview,\r\n  defaultName,\r\n}) => {\r\n  const [toolQuantity, setToolQuantity] = useState(1);\r\n  const [rentalLength, setRentalLength] = useState(0);\r\n  const [storeName] = useState(defaultName);\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <FixedOverlay1000vh>\r\n        <StickyCont400x400px>\r\n          <Div300pxMargin30px>\r\n            <LeagueSpartanRegular>{defaultName}</LeagueSpartanRegular>\r\n            <LeagueSpartanRegular>Quantity</LeagueSpartanRegular>\r\n            <TextInput72Percent\r\n              defaultValue={toolQuantity}\r\n              onChange={(e) => {\r\n                setToolQuantity(e.target.value);\r\n              }}\r\n            ></TextInput72Percent>\r\n            <LeagueSpartanRegular>Rent Hours</LeagueSpartanRegular>\r\n            <TextArea72Percent\r\n              onChange={(e) => {\r\n                setRentalLength(e.target.value);\r\n              }}\r\n            ></TextArea72Percent>\r\n            <Cont100PercentWidth\r\n              onClick={() => {\r\n                onPreview({ storeName, toolQuantity, rentalLength });\r\n              }}\r\n            >\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  onFormComplete(storeName, toolQuantity, rentalLength);\r\n                  onClose();\r\n                }}\r\n              >\r\n                Add\r\n              </RegularResponsiveButton>\r\n            </Cont100PercentWidth>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={onClose}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n          </Div300pxMargin30px>\r\n        </StickyCont400x400px>{\" \"}\r\n      </FixedOverlay1000vh>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nNewQuoteTool.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  defaultName: \"\",\r\n};\r\n\r\nexport default NewQuoteTool;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont90x95Percent,\r\n  FlexColumnCont95x30Percent,\r\n  FlexColumnContGreenBorderTopRounded550pxHeight,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  LandscapePara,\r\n  MediumStyledImage,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { AddQuotePhoto } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { Icon20x20 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { LinkText } from \"../../../StylesheetComps/AuthSheet\";\r\nconst QuotePhotoUploadPreviewWindow = ({\r\n  open,\r\n  CloseWindow,\r\n  CancelUpload,\r\n  previewsrc,\r\n  quoteObj,\r\n  UploadSuccessful,\r\n}) => {\r\n  const SpinnerIcon = \"/Spinner.svg\";\r\n\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n  const [imageCaption, setImageCaption] = useState(\"\");\r\n\r\n  //Upload Boolean prevents Images from getting uploaded twice.\r\n\r\n  const [uploadBoolean, setUploadBoolean] = useState(false);\r\n\r\n  const AddPhotoToQuote = async (quoteid, imgurl, caption) => {\r\n    var photo = {\r\n      Caption: caption,\r\n      File: imgurl,\r\n      Quote_Id: quoteid,\r\n    };\r\n    var newquotepic = await AddQuotePhoto(photo);\r\n    if (newquotepic !== null) {\r\n      setImageCaption(\"\");\r\n      setUploadBoolean(false);\r\n      UploadSuccessful();\r\n      CloseWindow();\r\n    }\r\n  };\r\n\r\n  const ChangeUIToPreventDoubles = async (uploadboolean) => {\r\n    if (uploadboolean === false) {\r\n      setUploadBoolean(true);\r\n      AddPhotoToQuote(quoteObj.Id, previewsrc, imageCaption);\r\n    } else {\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (previewsrc !== undefined && previewsrc !== null) {\r\n      if (previewsrc.includes(\"pdf\") || previewsrc.includes(\"PDF\")) {\r\n        setPreviewImage(\"/pdficon.png\");\r\n      } else {\r\n        setPreviewImage(window.$IMGURL + previewsrc);\r\n      }\r\n    }\r\n  }, [previewsrc]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContGreenBorderTopRounded550pxHeight>\r\n        <FlexRowCont\r\n          height=\"100%\"\r\n          justifycontent=\"flex-start\"\r\n          alignitems=\"baseline\"\r\n        >\r\n          <FlexColumnCont90x95Percent>\r\n            <SmallHeaderLeagueSpartan>Preview Photo</SmallHeaderLeagueSpartan>\r\n            <FlexRowCont width=\"40%\" height=\"40%\" marginbottom=\"5%\">\r\n              <MediumStyledImage\r\n                objfit=\"contain\"\r\n                mobileheight=\"20vh\"\r\n                mobilewidth=\"40vw\"\r\n                height=\"100%\"\r\n                src={previewImage}\r\n              ></MediumStyledImage>\r\n            </FlexRowCont>\r\n            <FlexColumnCont95x30Percent>\r\n              <SmallHeaderLeagueSpartan>\r\n                Photo Description\r\n              </SmallHeaderLeagueSpartan>\r\n              <LandscapePara\r\n                mobilewidth=\"68vw\"\r\n                mobileheight=\"25vh\"\r\n                maxLength=\"250\"\r\n                onChange={(e) => {\r\n                  setImageCaption(e.target.value);\r\n                }}\r\n              ></LandscapePara>\r\n            </FlexColumnCont95x30Percent>\r\n            <FlexRowCont justifycontent=\"flex-end\">\r\n              <LinkText\r\n                onClick={() => {\r\n                  CancelUpload();\r\n                }}\r\n              >\r\n                Cancel\r\n              </LinkText>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  setPreviewImage(SpinnerIcon);\r\n                  ChangeUIToPreventDoubles(uploadBoolean);\r\n                }}\r\n              >\r\n                Upload\r\n              </RegularResponsiveButton>\r\n            </FlexRowCont>\r\n          </FlexColumnCont90x95Percent>\r\n          <Icon20x20\r\n            onClick={() => {\r\n              CancelUpload();\r\n            }}\r\n            src=\"/Close.svg\"\r\n          ></Icon20x20>\r\n        </FlexRowCont>\r\n      </FlexColumnContGreenBorderTopRounded550pxHeight>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nQuotePhotoUploadPreviewWindow.defaultProps = {\r\n  CloseWindow: () => {},\r\n  CancelUpload: () => {},\r\n  UploadSuccessful: () => {},\r\n};\r\n\r\nexport default QuotePhotoUploadPreviewWindow;\r\n","import { ContPadding10pxMargin20px } from \"../../StylesheetComps/Cont\";\r\nimport { RegularText } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ToolCardQuote = ({\r\n  ToolHeadText,\r\n  ToolParaText,\r\n  ToolId,\r\n  ToolUrl,\r\n  EditTool,\r\n  DelTool,\r\n  onView,\r\n  relToolProd,\r\n}) => {\r\n  return (\r\n    <ContPadding10pxMargin20px onClick={onView}>\r\n      <RegularText>{ToolHeadText}</RegularText>\r\n    </ContPadding10pxMargin20px>\r\n  );\r\n};\r\n\r\nToolCardQuote.defaultProps = {\r\n  ToolHeadText: \"Excavator\",\r\n  ToolParaText: \"\",\r\n  ToolId: 0,\r\n  ToolUrl:\r\n    \"https://cdn.app.compendium.com/uploads/user/a862d463-3ea6-443a-9187-e1040e91eb0e/cb33b26c-b911-43cf-9a4a-0406a7cd3abe/File/7d892f09940824516f16df249bd8bc25/excavator_blog_640x428.jpg\",\r\n};\r\n\r\nexport default ToolCardQuote;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { GetToolKit } from \"../../../API_Functions/Tool_Functions\";\r\nimport { FlexDiv, GridCont1000px } from \"../../../StylesheetComps/Cont\";\r\nimport { Icon30x40pxPointer } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { StickyOverlayDiv160vwAutoHeight } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { RegularTextBoldRed } from \"../../../StylesheetComps/Titles\";\r\nimport ToolCardQuote from \"../../ToolCardQuote\";\r\n\r\nconst ToolSelectionCard = ({ open, onClose, onPreview }) => {\r\n  const params = useParams();\r\n\r\n  const [storeToolKits, getStoreToolKits] = useState([]);\r\n  const [storeSubToolKits, setStoreSubToolKits] = useState([]);\r\n  const [storeTools, setStoreTools] = useState([]);\r\n  const [parentId, setParentId] = useState(0);\r\n\r\n  const [textDisplay, setTextDisplay] = useState(\"none\");\r\n  const [backDisplay, setBackDisplay] = useState(\"none\");\r\n\r\n  var ToolId = 0;\r\n\r\n  const GetStoreToolKits = async (storeid) => {\r\n    const resp = await axios.get(window.$DBURL + \"tool/kit/store/\" + storeid);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.toolkit !== null) {\r\n          getStoreToolKits(resp.data.toolkit);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetStoreToolsFunction = async (toolkitid) => {\r\n    var data = await GetToolKit(toolkitid);\r\n    if (data !== null) {\r\n      setStoreSubToolKits(data.SubKits);\r\n      setStoreTools(data.Tools);\r\n      if (data.Parent_Id !== null) {\r\n        setParentId(data.Parent_Id);\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (open === true) {\r\n      GetStoreToolKits(params.storeId);\r\n    }\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (open === true) {\r\n      if (storeToolKits.length === 0 && storeTools.length === 0) {\r\n        setTextDisplay(\"block\");\r\n      } else {\r\n        setTextDisplay(\"none\");\r\n      }\r\n    }\r\n  }, [storeTools, storeToolKits, open]);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <StickyOverlayDiv160vwAutoHeight>\r\n      <FlexDiv>\r\n        <Icon30x40pxPointer\r\n          displayProps={backDisplay}\r\n          src={\"/whiteleftarrow.svg\"}\r\n          onClick={() => {\r\n            if (parentId === 0) {\r\n              GetStoreToolKits();\r\n              setBackDisplay(\"none\");\r\n              setStoreSubToolKits([]);\r\n              setStoreTools([]);\r\n            } else {\r\n              GetStoreToolsFunction(parentId);\r\n            }\r\n          }}\r\n        ></Icon30x40pxPointer>\r\n      </FlexDiv>\r\n      <GridCont1000px>\r\n        {storeToolKits.map((o, i) => (\r\n          <ToolCardQuote\r\n            key={i}\r\n            ToolId={o.Id}\r\n            ToolHeadText={o.Name + \" Kit\"}\r\n            ToolUrl={o.VideoUrl}\r\n            onView={() => {\r\n              getStoreToolKits([]);\r\n              GetStoreToolsFunction(o.Id);\r\n              setBackDisplay(\"block\");\r\n              setParentId(o.Parent_Id);\r\n            }}\r\n          ></ToolCardQuote>\r\n        ))}\r\n        {storeSubToolKits.map((o, i) => (\r\n          <ToolCardQuote\r\n            key={i}\r\n            ToolId={o.Id}\r\n            ToolHeadText={o.Name + \" SubKit\"}\r\n            ToolUrl={o.VideoUrl}\r\n            onView={() => {\r\n              GetStoreToolsFunction(o.Id);\r\n              setBackDisplay(\"block\");\r\n            }}\r\n          ></ToolCardQuote>\r\n        ))}\r\n        <RegularTextBoldRed display={textDisplay}>\r\n          No Tools in this Category\r\n        </RegularTextBoldRed>\r\n        {storeTools.map((o, i) => (\r\n          <ToolCardQuote\r\n            key={i}\r\n            ToolId={o.Id}\r\n            ToolHeadText={o.Name}\r\n            ToolUrl={o.VideoUrl}\r\n            onView={() => {\r\n              ToolId = o.Id;\r\n              onPreview({ ToolId });\r\n              onClose();\r\n              getStoreToolKits([]);\r\n              setStoreTools([]);\r\n            }}\r\n          ></ToolCardQuote>\r\n        ))}\r\n      </GridCont1000px>\r\n      <FlexDiv\r\n        onClick={() => {\r\n          onClose();\r\n          getStoreToolKits([]);\r\n          setStoreSubToolKits([]);\r\n          setStoreTools([]);\r\n          setTextDisplay(\"none\");\r\n          setBackDisplay(\"none\");\r\n        }}\r\n      >\r\n        <Icon30x40pxPointer\r\n          src={\"/Close2.svg\"}\r\n          onClick={() => {\r\n            GetStoreToolKits(params.storeId);\r\n            setTextDisplay(\"none\");\r\n          }}\r\n        ></Icon30x40pxPointer>\r\n      </FlexDiv>\r\n    </StickyOverlayDiv160vwAutoHeight>\r\n  );\r\n};\r\n\r\nToolSelectionCard.defaultProps = {\r\n  onPreview: () => {},\r\n};\r\n\r\nexport default ToolSelectionCard;\r\n","export const Stored_Values = {\r\n    MIN_LABOR:525,\r\n    MIN_DEPOSIT:250\r\n  }","import { useEffect, useState } from \"react\";\r\nimport moment from \"moment\";\r\nimport {\r\n  Cont50Percent100Percent,\r\n  Cont50Percent100PercentFlexEnd,\r\n  FlexColumnContGreenBorders,\r\n  FlexColumnContGreyBorders,\r\n  FlexColumnFullWidth,\r\n  FlexRowCont,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFullWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  Image200x200pxContain,\r\n  InboxProfileImage,\r\n} from \"../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  LeagueSpartanRegular,\r\n  MediumHeaderDarkGrey,\r\n  RegularTextAutoMargin,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nconst ProposalCommentCard = ({\r\n  commentObj,\r\n  estimatorId,\r\n  UpdateProjectUI,\r\n  estimatorName,\r\n  estimatorPhoto,\r\n  userinfo,\r\n  homeownerName,\r\n  OpenPicture,\r\n}) => {\r\n  const [commentPosterName, setCommentPosterName] = useState(\"\");\r\n  const [convertedDateString, setConvertedDateString] = useState(\"\");\r\n\r\n  // const [markAsReadDisplay, setMarkAsReadDisplay] = useState(\"\");\r\n\r\n  // const [readIcon, setReadIcon] = useState(\"/Grey_Checkmark_Icon.svg\");\r\n\r\n  const UpdateNameBasedOnComment = async (commentobj, estimatorid) => {\r\n    switch (commentobj.User_Id) {\r\n      case estimatorid:\r\n        setCommentPosterName(estimatorName);\r\n        break;\r\n      default:\r\n        setCommentPosterName(\"Homeowner\");\r\n        break;\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    setConvertedDateString(moment(commentObj?.AddTime).format(\"LLL\"));\r\n  }, [commentObj.AddTime]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    UpdateNameBasedOnComment(commentObj, estimatorId);\r\n  }, [commentObj]); // eslint-disable-line react-hooks/exhaustive-deps\r\n  if (window.$ISMOBILE === true) {\r\n    if (commentObj !== null) {\r\n      if (commentObj.Comment !== null) {\r\n        if (commentObj.User_Id === estimatorId) {\r\n          return (\r\n            <FlexRowContFullWidth>\r\n              <FlexRowCont>\r\n                <InboxProfileImage\r\n                  src={window.$IMGURL + estimatorPhoto}\r\n                ></InboxProfileImage>\r\n                <FlexColumnFullWidth>\r\n                  <TinyTextItalics marginleft=\"10px\" marginbottom=\"0px\">\r\n                    {\" \"}\r\n                    {commentPosterName}\r\n                  </TinyTextItalics>\r\n                  <FlexColumnContGreyBorders>\r\n                    <FlexRowCont height=\"auto\">\r\n                      <Cont50Percent100Percent>\r\n                        <FlexRowContFlexStart></FlexRowContFlexStart>\r\n                      </Cont50Percent100Percent>\r\n\r\n                      <Cont50Percent100PercentFlexEnd>\r\n                        <FlexRowCont\r\n                          justifycontent=\"flex-end\"\r\n                          height=\"auto\"\r\n                        ></FlexRowCont>\r\n                      </Cont50Percent100PercentFlexEnd>\r\n                    </FlexRowCont>\r\n\r\n                    <FlexColumnFullWidth>\r\n                      <RegularTextAutoMargin>\r\n                        {commentObj.Comment}\r\n                      </RegularTextAutoMargin>\r\n                      <Image200x200pxContain\r\n                        cursor={\"pointer\"}\r\n                        onClick={() => {\r\n                          OpenPicture();\r\n                        }}\r\n                        display={\r\n                          commentObj.File === null || commentObj.File === \"\"\r\n                            ? \"none\"\r\n                            : \"block\"\r\n                        }\r\n                        src={window.$IMGURL + commentObj?.File}\r\n                      ></Image200x200pxContain>\r\n                    </FlexColumnFullWidth>\r\n                  </FlexColumnContGreyBorders>\r\n                </FlexColumnFullWidth>\r\n              </FlexRowCont>\r\n              <TinyTextItalics marginleft=\"0px\" margintop=\"0px\">\r\n                {\" \"}\r\n                {convertedDateString}\r\n              </TinyTextItalics>\r\n            </FlexRowContFullWidth>\r\n          );\r\n        } else {\r\n          return (\r\n            <FlexRowContFullWidth\r\n              marginleft={userinfo.Image === estimatorPhoto ? \"5%\" : \"4%\"}\r\n            >\r\n              <FlexRowCont>\r\n                <FlexColumnFullWidth>\r\n                  <TinyTextItalics marginleft=\"10px\" marginbottom=\"0px\">\r\n                    {\" \"}\r\n                    {userinfo.Name}\r\n                  </TinyTextItalics>\r\n                  <FlexColumnContGreenBorders>\r\n                    <FlexColumnFullWidth>\r\n                      <RegularTextAutoMargin>\r\n                        {commentObj.Comment}\r\n                      </RegularTextAutoMargin>\r\n                      <Image200x200pxContain\r\n                        cursor={\"pointer\"}\r\n                        onClick={() => {\r\n                          OpenPicture();\r\n                        }}\r\n                        display={\r\n                          commentObj.File === null || commentObj.File === \"\"\r\n                            ? \"none\"\r\n                            : \"block\"\r\n                        }\r\n                        src={window.$IMGURL + commentObj?.File}\r\n                      ></Image200x200pxContain>\r\n                    </FlexColumnFullWidth>\r\n                  </FlexColumnContGreenBorders>\r\n                  <TinyTextItalics marginleft=\"25vw\" margintop=\"0px\">\r\n                    {\" \"}\r\n                    {convertedDateString}\r\n                  </TinyTextItalics>\r\n                </FlexColumnFullWidth>\r\n                <InboxProfileImage\r\n                  display={userinfo.Image === estimatorPhoto ? \"none\" : \"block\"}\r\n                  src={\r\n                    userinfo.Image === estimatorPhoto\r\n                      ? \"/NRCLogoRegularBlack.png\"\r\n                      : window.$IMGURL + userinfo.Image\r\n                  }\r\n                ></InboxProfileImage>\r\n              </FlexRowCont>\r\n            </FlexRowContFullWidth>\r\n          );\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    if (commentObj !== null) {\r\n      if (commentObj.Comment !== null) {\r\n        if (commentObj.User_Id === estimatorId) {\r\n          return (\r\n            <FlexRowContFullWidth width=\"85%\">\r\n              {/* <InboxProfileImage\r\n                src={window.$IMGURL + estimatorPhoto}\r\n              ></InboxProfileImage> */}\r\n              <FlexColumnContGreyBorders>\r\n                <FlexRowCont height=\"auto\">\r\n                  <Cont50Percent100Percent>\r\n                    <FlexRowContFlexStart>\r\n                      <LeagueSpartanRegular>\r\n                        {commentPosterName}\r\n                      </LeagueSpartanRegular>\r\n                      <TinyTextItalics>New Rhodes Construction Guide</TinyTextItalics>\r\n                    </FlexRowContFlexStart>\r\n                  </Cont50Percent100Percent>\r\n\r\n                  <Cont50Percent100PercentFlexEnd>\r\n                    <FlexRowCont justifycontent=\"flex-end\" height=\"auto\">\r\n                      <MediumHeaderDarkGrey>\r\n                        {convertedDateString}\r\n                      </MediumHeaderDarkGrey>\r\n                    </FlexRowCont>\r\n                  </Cont50Percent100PercentFlexEnd>\r\n                </FlexRowCont>\r\n\r\n                <FlexColumnFullWidth>\r\n                  <RegularTextAutoMargin>\r\n                    {commentObj.Comment}\r\n                  </RegularTextAutoMargin>\r\n                  <Image200x200pxContain\r\n                    cursor={\"pointer\"}\r\n                    onClick={() => {\r\n                      OpenPicture();\r\n                    }}\r\n                    display={\r\n                      commentObj.File === null || commentObj.File === \"\"\r\n                        ? \"none\"\r\n                        : \"block\"\r\n                    }\r\n                    src={window.$IMGURL + commentObj?.File}\r\n                  ></Image200x200pxContain>\r\n                </FlexColumnFullWidth>\r\n              </FlexColumnContGreyBorders>\r\n            </FlexRowContFullWidth>\r\n          );\r\n        } else {\r\n          return (\r\n            <FlexRowContFullWidth\r\n              width=\"85%\"\r\n              marginleft={userinfo.Image === estimatorPhoto ? \"25%\" : \"15%\"}\r\n            >\r\n              <FlexColumnContGreenBorders>\r\n                <FlexRowCont height=\"auto\" width=\"90%\">\r\n                  <Cont50Percent100Percent>\r\n                    <FlexRowCont justifycontent=\"flex-start\" height=\"auto\">\r\n                      <MediumHeaderDarkGrey>\r\n                        {convertedDateString}\r\n                      </MediumHeaderDarkGrey>\r\n                    </FlexRowCont>\r\n                  </Cont50Percent100Percent>\r\n\r\n                  <Cont50Percent100PercentFlexEnd>\r\n                    <FlexRowCont justifycontent=\"flex-end\" height=\"auto\">\r\n                      <LeagueSpartanRegular>\r\n                        {homeownerName}\r\n                      </LeagueSpartanRegular>\r\n                      <TinyTextItalics>{commentPosterName}</TinyTextItalics>\r\n                    </FlexRowCont>\r\n                  </Cont50Percent100PercentFlexEnd>\r\n                </FlexRowCont>\r\n\r\n                <FlexColumnFullWidth width=\"90%\">\r\n                  <RegularTextAutoMargin>\r\n                    {commentObj.Comment}\r\n                  </RegularTextAutoMargin>\r\n                  <Image200x200pxContain\r\n                    cursor={\"pointer\"}\r\n                    onClick={() => {\r\n                      OpenPicture();\r\n                    }}\r\n                    display={\r\n                      commentObj.File === null || commentObj.File === \"\"\r\n                        ? \"none\"\r\n                        : \"block\"\r\n                    }\r\n                    src={window.$IMGURL + commentObj?.File}\r\n                  ></Image200x200pxContain>\r\n                </FlexColumnFullWidth>\r\n              </FlexColumnContGreenBorders>\r\n              {/* <InboxProfileImage\r\n                display={userinfo.Image === estimatorPhoto ? \"none\" : \"block\"}\r\n                src={\r\n                  userinfo.Image === estimatorPhoto\r\n                    ? \"/NRCLogoRegularBlack.png\"\r\n                    : window.$IMGURL + userinfo.Image\r\n                }\r\n              ></InboxProfileImage> */}\r\n            </FlexRowContFullWidth>\r\n          );\r\n        }\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\nProposalCommentCard.defaultProps = {\r\n  UpdateProjectUI: () => {},\r\n  OpenPicture: () => {},\r\n};\r\n\r\nexport default ProposalCommentCard;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport axios from \"axios\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  AddQuoteComment,\r\n  CaseStatus,\r\n  DeleteQuotePhoto,\r\n  DeleteQuoteTag,\r\n  GetCaseById,\r\n  GetQuoteById,\r\n  GetQuoteTag,\r\n  SetCaseTo_Processed,\r\n  UpdateQuote,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  AddImageToCloud,\r\n  GetCurrentTime,\r\n  UploadFileToCloud,\r\n} from \"../../API_Functions/Utility_Functions\";\r\nimport QuoteGrandTotal from \"../../comps/QuoteGrandTotal\";\r\nimport QuoteTable from \"../../comps/QuoteTable\";\r\nimport QuoteTableDelivery from \"../../comps/QuoteTableDelivery\";\r\nimport QuoteTableTools from \"../../comps/QuoteTableTools\";\r\nimport DeleteConfirmWindow from \"../../comps/Windows/DeleteProduct\";\r\nimport NewQuoteTool from \"../../comps/Windows/NewQuoteTool\";\r\nimport QuotePhotoUploadPreviewWindow from \"../../comps/Windows/QuotePhotoUpload\";\r\nimport TagWindow from \"../../comps/Windows/Tag\";\r\nimport ToolSelectionCard from \"../../comps/Windows/ToolSelectionCard\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FixedIconToTop,\r\n  RegularResponsiveButton,\r\n} from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont80x100Percent,\r\n  FlexColumnFullWidth,\r\n  FlexColumnFullWidthMargins,\r\n  FlexColumnOverflowCont800px,\r\n  FlexContFullWidthJustifyCenter,\r\n  FlexDiv,\r\n  FlexRowCont100PercentFlexEnd,\r\n  FlexRowCont70PercentSpaceBetween,\r\n  FlexRowContAutox100Percent,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFlexStartAutoHeight,\r\n  FlexRowContFullWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexCenterDiv100PercentCenter,\r\n  FlexCenterDiv100PercentSpaceBetween,\r\n  FlexContainerItem,\r\n  FlexDiv90PercentMargins,\r\n  FlexDivCenter,\r\n  FlexDivLeftAlign,\r\n  FullWidthDivPropDisplay,\r\n  SummaryContainer,\r\n  SummaryContainerItems,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Icon30x30,\r\n  RelativeIconBottom70Percent,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  Image80x100px,\r\n  OverrideEmbedDiv,\r\n  OverrideEmbedImage,\r\n} from \"../../StylesheetComps/Imgs/Images\";\r\nimport { TextInputSmall } from \"../../StylesheetComps/Inputs\";\r\nimport {\r\n  FlexDivFlexStartCenter,\r\n  Image300x200,\r\n  LandscapePara,\r\n  SmallHeaderLeagueSpartan,\r\n  TextAreaAutoResize,\r\n  TextInputRegular,\r\n  TextInputReusable,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport { FlexOverlayDivFullWidth } from \"../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  Cont100PercentWidth,\r\n  HundredPercentFlexDiv,\r\n  Icon30px30pxPointer,\r\n} from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  BlankTextArea,\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanLarge,\r\n  LeagueSpartanRegular,\r\n  LeagueSpartanTinyMargins,\r\n  MediumHeader,\r\n  MediumHeaderDarkGrey,\r\n  RegularText,\r\n  RegularTextWithMargins,\r\n  StyledHRGreenBreak,\r\n  StyledHRGreyBreak,\r\n  StyledHRPropColour,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport {\r\n  ContentCont44Percent,\r\n  ContentCont77vw,\r\n} from \"../../StylesheetComps/Projects\";\r\nimport { Stored_Values } from \"../../Stored_Values\";\r\nimport { GetTaxesForMetro } from \"../../API_Functions/Store_Functions\";\r\nimport {\r\n  MediumGreenButton,\r\n  TextInput300x50,\r\n} from \"../../StylesheetComps/AuthSheet\";\r\nimport ProposalCommentCard from \"../../comps/ProposalComment\";\r\nconst ViewQuote = ({\r\n  open,\r\n  onToolAdded,\r\n  ReturnToMaterial,\r\n  ReturnToLabor,\r\n  ReturnToRemoval,\r\n  ReturnToAccess,\r\n  saveQuoteState,\r\n}) => {\r\n  //=============================================================================\r\n  // View Quote - Quote Tables are organized here\r\n  //=============================================================================\r\n\r\n  let formdata = new FormData();\r\n\r\n  var ToolQuant = 0;\r\n  var RentalL = 0;\r\n\r\n  const [quoteObj, setQuoteObj] = useState({});\r\n\r\n  const downarrow = \"/downarrow.svg\";\r\n  const uparrow = \"/uparrow.svg\";\r\n\r\n  const [displaySettings, setDisplaySettings] = useState({\r\n    removal: { display: \"flex\", arrow: uparrow },\r\n    material: { display: \"flex\", arrow: uparrow },\r\n    delivery: { display: \"flex\", arrow: uparrow },\r\n    labor: { display: \"flex\", arrow: uparrow },\r\n    tool: { display: \"flex\", arrow: uparrow },\r\n    access: { display: \"flex\", arrow: uparrow },\r\n  });\r\n\r\n  const [supplyTotal, setSupplyTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n  const [installTotal, setInstallTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n  const [projectSubtotal, setProjectSubtotal] = useState(0);\r\n  const [deposit, setDeposit] = useState(0);\r\n  const [projectGrandTotal, setProjectGrandTotal] = useState(0);\r\n  const [deliveryTotal, setDeliveryTotal] = useState(0);\r\n  const [accessTotal, setAccessTotal] = useState(0);\r\n  const [estimateGST, setEstimateGST] = useState(0);\r\n  const [estimatePST, setEstimatePST] = useState(0);\r\n  const [photo, setPhoto] = useState(\"\");\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n  const [previewImageWindowDisplay, setPreviewImageWindowDisplay] =\r\n    useState(false);\r\n  const inputFile = useRef(null);\r\n  let [removalsHeader8Subtotal, setRemovalsHeader8Subtotal] = useState(0);\r\n\r\n  const [toolOpen, setToolOpen] = useState(false);\r\n  const [toolCardMap, setToolCardMap] = useState(false);\r\n  const [storeTaxes, setStoreTaxes] = useState(false);\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  const [toolID, settoolID] = useState(0);\r\n\r\n  const [tagObj, setTagObj] = useState(null);\r\n  const [curTime, setCurTime] = useState(\"\");\r\n\r\n  const [deleteTagId, setDeleteTagId] = useState(0);\r\n  const [deleteTagConfirmDisplay, setDeleteTagConfirmDisplay] = useState(false);\r\n  const [tagWindowDisplay, setTagWindowDisplay] = useState(false);\r\n  const [projectInstallSubtotal, setProjectInstallSubtotal] = useState(0);\r\n\r\n  const [loadingStates, setLoadingStates] = useState({});\r\n\r\n  //Internal Comments\r\n  const [submittingLoadingIcon, setSubmittingLoadingIcon] = useState(false);\r\n  const [sendButtonDisplay, setSendButtonDisplay] = useState(\"block\");\r\n  const [commentText, setCommentText] = useState(\"\");\r\n\r\n  const ToggleSection = (section) => {\r\n    setDisplaySettings((prevState) => ({\r\n      ...prevState,\r\n      [section]: {\r\n        display: prevState[section].display === \"flex\" ? \"none\" : \"flex\",\r\n        arrow: prevState[section].display === \"flex\" ? downarrow : uparrow,\r\n      },\r\n    }));\r\n  };\r\n\r\n  const GetQuoteInfoById = async (quoteid) => {\r\n    try {\r\n      const quoteData = await GetQuoteById(quoteid);\r\n\r\n      if (quoteData) {\r\n        setQuoteObj(quoteData.quote);\r\n        setLaborTotal(await GetQuoteLaborTotals(quoteData.quote));\r\n\r\n        //New Info\r\n\r\n        const { quote } = quoteData;\r\n\r\n        let removalsHeader7Subtotal = 0;\r\n        let removalsHeader8Subtotal = 0;\r\n\r\n        quote?.Removal?.Items.forEach((o) => {\r\n          removalsHeader7Subtotal += Number(\r\n            (o.Price + o.LaborSubtotal).toFixed(2)\r\n          );\r\n          removalsHeader8Subtotal += Number(\r\n            (o.Price + o.LaborSubtotal).toFixed(2)\r\n          );\r\n        });\r\n\r\n        let projectInstallSubtotal = 0;\r\n\r\n        quote?.Tags?.forEach((t) => {\r\n          const primaryItems = quote?.Material?.Items.filter(\r\n            (item) => item.Tag_Id === t.Id && item.Parent_Id === 0\r\n          );\r\n\r\n          primaryItems.forEach((o) => {\r\n            const installSub = o.LaborSubtotalWithRelatedItems;\r\n            projectInstallSubtotal += installSub;\r\n          });\r\n        });\r\n\r\n        quote?.Material?.Items.forEach((o) => {\r\n          if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n            const installSub = o.LaborSubtotalWithRelatedItems;\r\n            projectInstallSubtotal += installSub;\r\n          }\r\n        });\r\n\r\n        setProjectInstallSubtotal(projectInstallSubtotal);\r\n\r\n        setDeliveryTotal(\r\n          quote?.Delivery?.Tools?.reduce(\r\n            (accumulator, tool) => accumulator + tool.Price,\r\n            0\r\n          ) || 0\r\n        );\r\n        setAccessTotal(\r\n          quote?.AccessArea?.Items?.reduce(\r\n            (accumulator, items) => accumulator + items.Price,\r\n            0\r\n          ) || 0\r\n        );\r\n\r\n        const materialSubtotal = quote?.Material?.Total?.Subtotal || 0;\r\n        const deliverySubtotal = quote?.Delivery?.Total?.Subtotal || 0;\r\n        const toolSubtotal = quote?.Tool?.Total?.Subtotal || 0;\r\n        const accessAreaSubtotal = quote?.AccessArea?.Total?.Subtotal || 0;\r\n        const installSubtotal =\r\n          Number(projectInstallSubtotal) > Stored_Values.MIN_LABOR\r\n            ? Number(projectInstallSubtotal)\r\n            : Stored_Values?.MIN_LABOR;\r\n\r\n        supplyTotal.Subtotal = (materialSubtotal + deliverySubtotal).toFixed(2);\r\n        installTotal.Subtotal = (\r\n          installSubtotal +\r\n          toolSubtotal +\r\n          removalsHeader7Subtotal +\r\n          accessAreaSubtotal\r\n        ).toFixed(2);\r\n\r\n        const subtotal =\r\n          Number(supplyTotal.Subtotal) + Number(installTotal.Subtotal);\r\n        setProjectSubtotal(\r\n          subtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n        );\r\n\r\n        const storeTaxArray = await GetTaxesForMetro(params.Id);\r\n        setStoreTaxes(storeTaxArray);\r\n\r\n        let gstTax = 0;\r\n        // let pstTax = 0;\r\n\r\n        const taxitems = [\r\n          { type: \"Material\", subtotal: materialSubtotal },\r\n          { type: \"Delivery\", subtotal: deliverySubtotal },\r\n          { type: \"Labor\", subtotal: installSubtotal },\r\n          { type: \"Removal\", subtotal: removalsHeader7Subtotal },\r\n          { type: \"AccessArea\", subtotal: accessAreaSubtotal },\r\n          { type: \"Tool\", subtotal: toolSubtotal },\r\n        ];\r\n\r\n        const gst = storeTaxArray.find((tax) => tax.TaxCode === \"Gst\");\r\n        // const pst = storeTaxArray.find(tax => tax.TaxCode === 'PST');\r\n\r\n        if (gst) {\r\n          taxitems.forEach((item) => {\r\n            const { type, subtotal } = item;\r\n\r\n            if (type === \"Material\") {\r\n              gstTax += (gst.Rate / 100) * subtotal;\r\n              // pstTax += (pst.Rate / 100) * subtotal;\r\n            } else {\r\n              gstTax += (gst.Rate / 100) * subtotal;\r\n            }\r\n          });\r\n        }\r\n\r\n        gstTax = gstTax.toFixed(2);\r\n        // pstTax = pstTax.toFixed(2);\r\n\r\n        // setEstimatePST(pstTax);\r\n        setEstimateGST(gstTax);\r\n\r\n        const grandTotal = Number(gstTax) + Number(subtotal.toFixed(2));\r\n        setProjectGrandTotal(grandTotal);\r\n        setDeposit(grandTotal * 0.1);\r\n\r\n        //End of New Info\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const GetQuoteLaborTotals = async (quote) => {\r\n    var total = quote.Labor.Total;\r\n    if (total.Subtotal > 0 && total.Subtotal < quote.Minimum_Labor) {\r\n      total.Subtotal = quote.Minimum_Labor;\r\n      total.Total = total.Subtotal;\r\n      total.Tax?.forEach((tx) => {\r\n        tx.Amount = (total.Subtotal * tx.Rate) / 100.0;\r\n        total.Total += tx.Amount;\r\n      });\r\n    }\r\n    return total;\r\n  };\r\n\r\n  const [LaborTotal, setLaborTotal] = useState({});\r\n\r\n  function handleUpload(event) {\r\n    setPhoto(event.target.files[0]);\r\n  }\r\n\r\n  var observe;\r\n  if (window.attachEvent) {\r\n    observe = function (element, event, handler) {\r\n      element?.attachEvent(\"on\" + event, handler);\r\n    };\r\n  } else {\r\n    observe = function (element, event, handler) {\r\n      element?.addEventListener(event, handler, false);\r\n    };\r\n  }\r\n  function init() {\r\n    var text = document.getElementById(\"text\");\r\n    if (text !== null) {\r\n      function resize() {\r\n        text.style.height = \"auto\";\r\n        text.style.height = text.scrollHeight + \"px\";\r\n      }\r\n      /* 0-timeout to get the already changed text */\r\n      function delayedResize() {\r\n        window.setTimeout(resize, 0);\r\n      }\r\n      observe(text, \"change\", resize);\r\n      observe(text, \"cut\", delayedResize);\r\n      observe(text, \"paste\", delayedResize);\r\n      observe(text, \"drop\", delayedResize);\r\n      observe(text, \"keydown\", delayedResize);\r\n\r\n      resize();\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    init();\r\n  }, [quoteObj.Notes]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const OpenUploadImageWindow = async (photo) => {\r\n    // We want to use the try-catch pattern here to handle any errors that\r\n    // may occur when making the API call to AddImageToCloud\r\n    try {\r\n      // Check if we have a photo\r\n      if (photo !== null) {\r\n        // Add the photo to the form data\r\n        formdata.append(\"Quote Photo\", photo);\r\n\r\n        // Make the API call and store the result in a variable\r\n        const uploadedImage = await AddImageToCloud(formdata);\r\n\r\n        // If we have a result, set the preview image and open the window\r\n        if (uploadedImage !== null) {\r\n          setPreviewImage(uploadedImage);\r\n          setPreviewImageWindowDisplay(true);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      // Handle any errors that occurred during the API call\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const ResetImage = async (imgurl) => {\r\n    DeleteImageFromCloud(imgurl);\r\n    setPreviewImageWindowDisplay(false);\r\n  };\r\n\r\n  const onButtonClick6 = () => {\r\n    inputFile.current.click();\r\n  };\r\n\r\n  const DeleteImageFromCloud = async (imgUrl) => {\r\n    try {\r\n      await axios.delete(`${window.$DBURL}utilities/image`, {\r\n        data: { Url: imgUrl },\r\n      });\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const DeleteImageFromQuoteAndCloud = async (imgurl, photoid, quoteobj) => {\r\n    DeleteImageFromCloud(imgurl);\r\n    if (photoid === 0) {\r\n      var index1 = quoteobj.Images.indexOf(imgurl);\r\n      quoteobj.Images.splice(index1, 1);\r\n    } else {\r\n      var deleteQuotePhoto = await DeleteQuotePhoto(photoid);\r\n      if (deleteQuotePhoto !== null) {\r\n      }\r\n    }\r\n    var index2 = quoteobj.Photos.indexOf(imgurl);\r\n    quoteobj.Photos.splice(index2, 1);\r\n    var data = await UpdateQuote(quoteobj);\r\n    if (data !== null) {\r\n      setQuoteObj(data.quote);\r\n    }\r\n  };\r\n\r\n  const HandleToolAddition = async ({\r\n    storeName,\r\n    toolQuantity,\r\n    rentalLength,\r\n  }) => {\r\n    ToolQuant = toolQuantity;\r\n    RentalL = rentalLength;\r\n    HandleNewTool();\r\n  };\r\n\r\n  const HandleToolId = async ({ ToolId }) => {\r\n    settoolID(ToolId);\r\n    setToolOpen(true);\r\n  };\r\n\r\n  // Define a function to handle the addition of a new tool\r\n  const HandleNewTool = async () => {\r\n    // Send a POST request to the case/quote/tool endpoint with the required data\r\n    const resp = await axios.post(window.$DBURL + \"case/quote/tool\", {\r\n      Quote_Id: params.quoteId,\r\n      Tool_Id: toolID,\r\n      RentalLength: RentalL,\r\n      Quant: ToolQuant,\r\n    });\r\n\r\n    // If the request is successful, do something\r\n    if (resp !== null) {\r\n    }\r\n\r\n    // Call the onToolAdded function\r\n    onToolAdded();\r\n\r\n    // Set the tool card map to false\r\n    setToolCardMap(false);\r\n  };\r\n\r\n  // Define a function to update the case status to processed\r\n  const UpdateCaseStatusToProcessed = async () => {\r\n    // Get the case by its ID\r\n    const casestatus = await GetCaseById(params.caseId);\r\n\r\n    // Check if the case status is either Accepted or Submitted\r\n    if (\r\n      casestatus.Case.CaseStatus === CaseStatus.Accepted ||\r\n      casestatus.Case.CaseStatus === CaseStatus.Submitted\r\n    ) {\r\n      // Set the case to processed\r\n      const process = await SetCaseTo_Processed(params.caseId);\r\n\r\n      //   // If the case is successfully set to processed, redirect to the view case page\r\n      //   if (process !== null) {\r\n      //     history.push(\r\n      //       \"/viewcase/\" + params.Id + \"/\" + params.storeId + \"/\" + params.caseId\r\n      //     );\r\n      //   }\r\n      // } else {\r\n      //   // If the case status is not Accepted or Submitted, redirect to the view case page\r\n      //   history.push(\r\n      //     \"/viewcase/\" + params.Id + \"/\" + params.storeId + \"/\" + params.caseId\r\n      //   );\r\n      // }\r\n    }\r\n  };\r\n\r\n  const SaveQuoteInfo = async (quoteobj, redirectpage) => {\r\n    const { Id, storeId, caseId } = params;\r\n    try {\r\n      const data = await UpdateQuote(quoteobj);\r\n      if (data) {\r\n        switch (redirectpage) {\r\n          case \"project\":\r\n            history.push(`/viewcase/${Id}/${storeId}/${caseId}`);\r\n            break;\r\n          case \"userview\":\r\n            history.push(\r\n              `/viewquoteuser/${Id}/${storeId}/${caseId}/${params.quoteId}/0/0`\r\n            );\r\n            break;\r\n          default:\r\n            break;\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const UpdateQuoteInfo = async (quoteobj) => {\r\n    try {\r\n      await UpdateQuote(quoteobj);\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const onAddFileIconClicked = () => {\r\n    inputFile.current.click();\r\n  };\r\n\r\n  const UploadPhoto = async (event) => {\r\n    var file = event.target.files[0];\r\n    if (file !== undefined) {\r\n      if (\r\n        file.name.includes(\".jpg\") ||\r\n        file.name.includes(\".JPG\") ||\r\n        file.name.includes(\".jpeg\") ||\r\n        file.name.includes(\".JPEG\") ||\r\n        file.name.includes(\".png\") ||\r\n        file.name.includes(\".PNG\") ||\r\n        file.name.includes(\".heic\") ||\r\n        file.name.includes(\".HEIC\") ||\r\n        file.name.includes(\".heif\") ||\r\n        file.name.includes(\".HEIF\") ||\r\n        file.name.includes(\".webp\") ||\r\n        file.name.includes(\".WEBP\") ||\r\n        file.name.includes(\".jfif\") ||\r\n        file.name.includes(\".JFIF\") ||\r\n        file.name.includes(\".pjpeg\") ||\r\n        file.name.includes(\".PJPEG\") ||\r\n        file.name.includes(\".pjp\") ||\r\n        file.name.includes(\".PJP\") ||\r\n        file.name.includes(\".pdf\") ||\r\n        file.name.includes(\".PDF\")\r\n      ) {\r\n        var pic = await UploadFileToCloud(file);\r\n        if (pic !== null) {\r\n          setPreviewImage(pic);\r\n          // setErrorText(\"\");\r\n        }\r\n      } else {\r\n        // setErrorText(\r\n        //   \"File not supported, we are also not currently accepting videos.\"\r\n        // );\r\n      }\r\n    } else {\r\n      return null;\r\n    }\r\n  };\r\n\r\n  const AddCommentToQuote = async (quoteid, comment, file) => {\r\n    var addtime = await GetCurrentTime();\r\n    setCurTime(addtime);\r\n    if (quoteid !== 0 && (comment !== \"\" || file != \"\")) {\r\n      var commentObj = {\r\n        Quote_Id: quoteid,\r\n        Comment: comment,\r\n        AddTime: addtime,\r\n        File: file,\r\n      };\r\n      var data = await AddQuoteComment(commentObj);\r\n      if (data !== null) {\r\n        var proposalData = await GetQuoteInfoById(quoteid);\r\n        setSubmittingLoadingIcon(false);\r\n        setPreviewImage(\"\");\r\n        // setErrorText(\"\");\r\n        eraseText();\r\n      }\r\n    }\r\n  };\r\n\r\n  function eraseText() {\r\n    document.getElementById(\"output\").value = \"\";\r\n  }\r\n\r\n  const SetCurrentTime = async () => {\r\n    var curtime = await GetCurrentTime();\r\n    setCurTime(curtime);\r\n  };\r\n\r\n  const DeleteTagOnQuote = async (tag_id, quote_id) => {\r\n    // Invoke the DeleteQuoteTag function and wait for the promise to resolve\r\n    const data = await DeleteQuoteTag(tag_id);\r\n\r\n    // Check if the data variable is null\r\n    if (data === null) {\r\n      // If the data variable is null, invoke the GetQuoteInfoById function\r\n      GetQuoteInfoById(quote_id);\r\n    }\r\n  };\r\n\r\n  // Define a function to handle the Save Button clicked event\r\n  const SaveButtonClicked = async (quoteobj, redirectpage) => {\r\n    // Update the case status to processed\r\n    UpdateCaseStatusToProcessed();\r\n\r\n    // Get the current time and set it as the edit time for the quote object\r\n    quoteobj.EditTime = await GetCurrentTime();\r\n\r\n    // Save the quote information\r\n    SaveQuoteInfo(quoteobj, redirectpage);\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (photo !== \"\") {\r\n      OpenUploadImageWindow(photo);\r\n    }\r\n  }, [photo]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (open === true) {\r\n      GetQuoteInfoById(params.quoteId);\r\n    }\r\n  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (saveQuoteState === true) {\r\n      SaveButtonClicked(quoteObj, \"userview\");\r\n    }\r\n  }, [saveQuoteState]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    let header7Subtotal = 0;\r\n    let header8Subtotal = 0;\r\n\r\n    quoteObj?.Removal?.Items.forEach((o) => {\r\n      header7Subtotal += o.Price + o.LaborSubtotal;\r\n      header8Subtotal += o.Price + o.LaborSubtotal;\r\n    });\r\n\r\n    setRemovalsHeader8Subtotal(header8Subtotal);\r\n  }, [quoteObj?.Removal?.Items]);\r\n\r\n  if (!open) return null;\r\n  if (quoteObj !== null && quoteObj !== undefined) {\r\n    if (quoteObj.Material !== null && quoteObj.Material !== undefined) {\r\n      return (\r\n        <FullWidthDivPropDisplay marginleft=\"2%\" inputdisplay=\"flex\">\r\n          <FlexColumnCont80x100Percent>\r\n            <QuotePhotoUploadPreviewWindow\r\n              quoteObj={quoteObj}\r\n              open={previewImageWindowDisplay}\r\n              previewsrc={previewImage}\r\n              CancelUpload={() => {\r\n                ResetImage(previewImage);\r\n              }}\r\n              CloseWindow={() => {\r\n                setPreviewImageWindowDisplay(false);\r\n              }}\r\n              UploadSuccessful={() => {\r\n                GetQuoteInfoById(params.quoteId);\r\n              }}\r\n            ></QuotePhotoUploadPreviewWindow>\r\n            <FlexDiv>\r\n              <FlexRowContFlexStartAutoHeight width=\"64%\">\r\n                <div>\r\n                  <br></br>\r\n                  <FlexDivFlexStartCenter margin=\"0%\">\r\n                    <LeagueSpartanLarge>{quoteObj?.Tittle}</LeagueSpartanLarge>\r\n                    {/* <RegularResponsiveButton\r\n                  onClick={async () => {\r\n                    var tag = await GetQuoteTag(0);\r\n                    setTagObj(tag);\r\n                    setTagWindowDisplay(true);\r\n                  }}\r\n                >\r\n                  New Tag\r\n                </RegularResponsiveButton> */}\r\n                  </FlexDivFlexStartCenter>\r\n                  <br></br>\r\n\r\n                  <TextInputReusable\r\n                    defaultValue={quoteObj.Tittle}\r\n                    onChange={(e) => {\r\n                      var quote = quoteObj;\r\n                      quote.Tittle = e.target.value;\r\n                      setQuoteObj(quote);\r\n                    }}\r\n                  ></TextInputReusable>\r\n                  <br></br>\r\n\r\n                  {/* {quoteObj.Tags.map((o, i) => (\r\n                <FlexRowContFlexStartAutoHeight key={i}>\r\n                  <FlexRowContFlexStartAutoHeight>\r\n                    <RegularText>{i + 1}.</RegularText>\r\n                    <RegularTextWithMargins>{o.TagName}</RegularTextWithMargins>\r\n                  </FlexRowContFlexStartAutoHeight>\r\n\r\n                  <FlexRowCont100PercentFlexEnd>\r\n                    <Icon30px30pxPointer\r\n                      onClick={async () => {\r\n                        var tag = await GetQuoteTag(o.Id);\r\n                        setTagObj(tag);\r\n                        setTagWindowDisplay(true);\r\n                      }}\r\n                      src=\"/pencil.svg\"\r\n                    ></Icon30px30pxPointer>\r\n                  </FlexRowCont100PercentFlexEnd>\r\n                  <Icon30px30pxPointer\r\n                    onClick={() => {\r\n                      setDeleteTagId(o.Id);\r\n                      setDeleteTagConfirmDisplay(true);\r\n                    }}\r\n                    src=\"/Garbage_Icon.svg\"\r\n                  ></Icon30px30pxPointer>\r\n                </FlexRowContFlexStartAutoHeight>\r\n              ))} */}\r\n                </div>\r\n              </FlexRowContFlexStartAutoHeight>\r\n\r\n              <div>\r\n                <br></br>\r\n              </div>\r\n            </FlexDiv>\r\n\r\n            {/* <StyledHRPropColour\r\n                border={`0.5px solid ${ColorPalette.TertiaryGrey}`}\r\n              ></StyledHRPropColour> */}\r\n\r\n            <TagWindow\r\n              tagObj={tagObj}\r\n              quoteid={quoteObj.Id}\r\n              open={tagWindowDisplay}\r\n              RefreshTaglist={() => {\r\n                GetQuoteInfoById(params.quoteId);\r\n              }}\r\n              onClose={() => {\r\n                setTagWindowDisplay(false);\r\n              }}\r\n            ></TagWindow>\r\n\r\n            <DeleteConfirmWindow\r\n              closeDel={() => {\r\n                setDeleteTagConfirmDisplay(false);\r\n              }}\r\n              onDeleteFunction={() => {\r\n                DeleteTagOnQuote(deleteTagId, params.quoteId);\r\n              }}\r\n              deleteOpen={deleteTagConfirmDisplay}\r\n            ></DeleteConfirmWindow>\r\n\r\n            <br></br>\r\n\r\n            <FlexDiv height=\"auto\">\r\n              <FlexDivLeftAlign>\r\n                <FlexDiv width=\"98%\">\r\n                  <div style={{ width: \"90%\" }}>\r\n                    <LeagueSpartanLarge>\r\n                      Project Plan for Homeowner (Guide Text)\r\n                    </LeagueSpartanLarge>\r\n\r\n                    <br></br>\r\n                    <TextAreaAutoResize\r\n                      id=\"text\"\r\n                      defaultValue={quoteObj.Notes}\r\n                      onChange={(e) => {\r\n                        var quote = quoteObj;\r\n                        quote.Notes = e.target.value;\r\n                        setQuoteObj(quote);\r\n                      }}\r\n                    ></TextAreaAutoResize>\r\n\r\n                    <br></br>\r\n\r\n                    <StyledHRPropColour\r\n                      border={`0.5px solid ${ColorPalette.TertiaryGrey}`}\r\n                    ></StyledHRPropColour>\r\n\r\n                    <br></br>\r\n                  </div>\r\n\r\n                  <ContentCont44Percent\r\n                    position=\"static\"\r\n                    boxshadow=\"0px\"\r\n                    height=\"auto\"\r\n                    justifycontent=\"flex-start\"\r\n                  >\r\n                    <FlexColumnFullWidthMargins height=\"100%\">\r\n                      <FlexRowContFlexStart height=\"auto\">\r\n                        {/* <Icon30px30pxPointer\r\n                  src=\"/leftarrow.svg\"\r\n                  onClick={() => {\r\n                    RouteToPrevious(userinfo.Role);\r\n                  }}\r\n                ></Icon30px30pxPointer> */}\r\n                        <LeagueSpartanLarge>\r\n                          Estimate Summary\r\n                        </LeagueSpartanLarge>\r\n                      </FlexRowContFlexStart>\r\n                      <br></br>\r\n                      <SummaryContainer\r\n                        height=\"100%\"\r\n                        justifycontent=\"space-evenly\"\r\n                      >\r\n                        {/* <SummaryContainerItems\r\n                      display={\r\n                        quoteObj?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                   <LeagueSpartanHeaderSmall>Material Supply</LeagueSpartanHeaderSmall>\r\n                    </SummaryContainerItems> */}\r\n                        <SummaryContainerItems\r\n                          display={\r\n                            quoteObj?.Material?.Total?.Subtotal > 0\r\n                              ? \"flex\"\r\n                              : \"none\"\r\n                          }\r\n                        >\r\n                          <MediumHeader>Materials:</MediumHeader>\r\n                          <MediumHeader>\r\n                            {\" \"}\r\n                            $\r\n                            {quoteObj?.Material?.Total?.Subtotal?.toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          </MediumHeader>\r\n                        </SummaryContainerItems>\r\n                        <SummaryContainerItems\r\n                          display={\r\n                            quoteObj?.Delivery?.Total?.Subtotal > 0\r\n                              ? \"flex\"\r\n                              : \"none\"\r\n                          }\r\n                        >\r\n                          <MediumHeader>Delivery:</MediumHeader>\r\n                          <MediumHeader>\r\n                            {\" \"}\r\n                            $\r\n                            {quoteObj?.Delivery?.Total?.Subtotal?.toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          </MediumHeader>\r\n                        </SummaryContainerItems>\r\n\r\n                        <br></br>\r\n\r\n                        {/* <SummaryContainerItems\r\n                      display={\r\n                        quoteObj?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                   <LeagueSpartanHeaderSmall>Installation</LeagueSpartanHeaderSmall>\r\n                    </SummaryContainerItems> */}\r\n\r\n                        <SummaryContainerItems\r\n                          display={\r\n                            Number(projectInstallSubtotal).toFixed(2) >\r\n                            Stored_Values.MIN_LABOR\r\n                              ? \"flex\"\r\n                              : \"none\"\r\n                          }\r\n                        >\r\n                          <MediumHeader>Labour:</MediumHeader>\r\n                          <MediumHeader>\r\n                            $\r\n                            {Number(projectInstallSubtotal)\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          </MediumHeader>\r\n                        </SummaryContainerItems>\r\n                        <SummaryContainerItems\r\n                          display={\r\n                            Number(projectInstallSubtotal).toFixed(2) >\r\n                            Stored_Values.MIN_LABOR\r\n                              ? \"none\"\r\n                              : \"flex\"\r\n                          }\r\n                        >\r\n                          <MediumHeader>Minimum Labour Fee:</MediumHeader>\r\n                          <MediumHeader>\r\n                            ${Stored_Values?.MIN_LABOR?.toFixed(2)}\r\n                          </MediumHeader>\r\n                        </SummaryContainerItems>\r\n                        <SummaryContainerItems\r\n                          display={\r\n                            quoteObj?.Tool?.Total?.Subtotal > 0\r\n                              ? \"flex\"\r\n                              : \"none\"\r\n                          }\r\n                        >\r\n                          <MediumHeader>Machine {\"&\"} Disposals:</MediumHeader>\r\n                          <MediumHeader>\r\n                            ${\" \"}\r\n                            {quoteObj?.Tool?.Total?.Subtotal?.toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          </MediumHeader>\r\n                        </SummaryContainerItems>\r\n                        <SummaryContainerItems display={\"flex\"}>\r\n                          <MediumHeader>Removals:</MediumHeader>\r\n                          <MediumHeader>\r\n                            ${\" \"}\r\n                            {removalsHeader8Subtotal\r\n                              .toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          </MediumHeader>\r\n                        </SummaryContainerItems>\r\n                        <SummaryContainerItems\r\n                          display={\r\n                            quoteObj?.AccessArea?.Total?.Subtotal > 0\r\n                              ? \"flex\"\r\n                              : \"none\"\r\n                          }\r\n                        >\r\n                          <MediumHeader>Site Access:</MediumHeader>\r\n                          <MediumHeader>\r\n                            $\r\n                            {quoteObj?.AccessArea?.Total?.Subtotal?.toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          </MediumHeader>\r\n                        </SummaryContainerItems>\r\n\r\n                        <StyledHRPropColour\r\n                          border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                        ></StyledHRPropColour>\r\n                        <SummaryContainerItems>\r\n                          <LeagueSpartanHeaderSmall>\r\n                            Project Subtotal:\r\n                          </LeagueSpartanHeaderSmall>\r\n                          <MediumHeader>\r\n                            $\r\n                            {\r\n                              projectSubtotal\r\n                              // .toFixed(2)\r\n                              // .toString()\r\n                              // .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                          </MediumHeader>\r\n                        </SummaryContainerItems>\r\n\r\n                        <SummaryContainerItems>\r\n                          <MediumHeader>\r\n                            {storeTaxes[0]?.TaxCode} ({storeTaxes[0]?.Rate}%)\r\n                          </MediumHeader>\r\n                          <MediumHeader>\r\n                            $\r\n                            {estimateGST\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          </MediumHeader>\r\n                        </SummaryContainerItems>\r\n\r\n                        {/* <SummaryContainerItems>\r\n                  <MediumHeader>\r\n                      {storeTaxes[1]?.TaxCode} ({storeTaxes[1]?.Rate}%)\r\n                    </MediumHeader>\r\n                    <MediumHeader>\r\n                      ${estimatePST.toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                    </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n\r\n                        <StyledHRGreenBreak></StyledHRGreenBreak>\r\n                        <SummaryContainerItems>\r\n                          <LeagueSpartanRegular>\r\n                            Project Total:\r\n                          </LeagueSpartanRegular>\r\n                          <LeagueSpartanRegular>\r\n                            {\" \"}\r\n                            $\r\n                            {projectGrandTotal\r\n                              .toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          </LeagueSpartanRegular>\r\n                        </SummaryContainerItems>\r\n                      </SummaryContainer>\r\n                    </FlexColumnFullWidthMargins>\r\n                  </ContentCont44Percent>\r\n                </FlexDiv>\r\n\r\n                {/* <ContentCont77vw id=\"comments\" width=\"73vw\">\r\n              <FlexRowContFlexStart height=\"auto\">\r\n                <LeagueSpartanLarge>Internal Notes</LeagueSpartanLarge>\r\n              </FlexRowContFlexStart>\r\n\r\n              <FlexColumnFullWidth height=\"auto\" width=\"100%\">\r\n                <FlexColumnOverflowCont800px>\r\n                  {quoteObj?.QuoteComments?.map((o, i) => (\r\n                    <ProposalCommentCard\r\n                      key={i}\r\n                      // OpenPicture={() => {\r\n                      //   DisplayImageInGallery(o.File);\r\n                      // }}\r\n                      // homeownerName={homeownerName}\r\n                      estimatorName={quoteObj.Estimator}\r\n                      estimatorPhoto={quoteObj.EstimatorPhoto}\r\n                      // userinfo={userinfo}\r\n                      UpdateProjectUI={() => {\r\n                        GetQuoteInfoById(params.quoteId);\r\n                      }}\r\n                      commentObj={o}\r\n                      estimatorId={quoteObj.User_Id}\r\n                      quoteId={quoteObj.Id}\r\n                    ></ProposalCommentCard>\r\n                  ))}\r\n                </FlexColumnOverflowCont800px>\r\n\r\n                <StyledHRGreyBreak></StyledHRGreyBreak>\r\n                <br></br>\r\n\r\n                {submittingLoadingIcon === false ? (\r\n                  <FlexRowContFullWidth>\r\n                    <Icon30px30pxPointer\r\n                      src=\"/AttachFile_Icon.svg\"\r\n                      onClick={() => {\r\n                        onAddFileIconClicked();\r\n                      }}\r\n                    ></Icon30px30pxPointer>\r\n\r\n                    <Image80x100px\r\n                      display={previewImage !== \"\" ? \"block\" : \"none\"}\r\n                      src={\r\n                        previewImage === \"\" ? \"\" : window.$IMGURL + previewImage\r\n                      }\r\n                    ></Image80x100px>\r\n                    <TextInput300x50\r\n                      inputdisplay=\"none\"\r\n                      inputwidth=\"200px\"\r\n                      inputheight=\"85px\"\r\n                      mobiledisplay=\"none\"\r\n                      ref={inputFile}\r\n                      type=\"file\"\r\n                      onClick={onAddFileIconClicked}\r\n                      onChange={UploadPhoto}\r\n                    ></TextInput300x50>\r\n                    <BlankTextArea\r\n                      id=\"output\"\r\n                      onChange={(e) => {\r\n                        setCommentText(e.target.value);\r\n                      }}\r\n                      maxLength=\"2000\"\r\n                      placeholder=\"Type your message...\"\r\n                    ></BlankTextArea>\r\n\r\n                    <br></br>\r\n                    <MediumHeaderDarkGrey>\r\n                      {commentText.length}/2000\r\n                    </MediumHeaderDarkGrey>\r\n                    <RegularResponsiveButton\r\n                      display={sendButtonDisplay}\r\n                      onClick={() => {\r\n                        setSubmittingLoadingIcon(true);\r\n                        setSendButtonDisplay(\"none\");\r\n                        AddCommentToQuote(quoteObj.Id, commentText, previewImage);\r\n                      }}\r\n                    >\r\n                      Submit\r\n                    </RegularResponsiveButton>\r\n                  </FlexRowContFullWidth>\r\n                ) : (\r\n                  <FlexContFullWidthJustifyCenter>\r\n                    <CircularProgress color={ColorPalette.PrimaryButtonBlue} />\r\n                  </FlexContFullWidthJustifyCenter>\r\n                )}\r\n              </FlexColumnFullWidth>\r\n            </ContentCont77vw> */}\r\n\r\n                <br></br>\r\n                <br></br>\r\n\r\n                <FlexRowContFlexStartAutoHeight>\r\n                  <LeagueSpartanLarge>Add Photos to Package</LeagueSpartanLarge>\r\n                  <Icon30px30pxPointer\r\n                    src={\"/Green Button.svg\"}\r\n                    onClick={onButtonClick6}\r\n                  ></Icon30px30pxPointer>\r\n                </FlexRowContFlexStartAutoHeight>\r\n                <input\r\n                  style={{ display: \"none\" }}\r\n                  ref={inputFile}\r\n                  type=\"file\"\r\n                  onChange={handleUpload}\r\n                />\r\n                <br></br>\r\n                <FlexRowContAutox100Percent\r\n                  width=\"100%\"\r\n                  flexwrap=\"wrap\"\r\n                  alignitems=\"baseline\"\r\n                >\r\n                  {quoteObj.Photos.map((o, i) => {\r\n                    return loadingStates[o.Id] ? (\r\n                      <Backdrop style={{ zIndex: 2 }} open>\r\n                        <CircularProgress color=\"inherit\" />\r\n                      </Backdrop>\r\n                    ) : o.File?.includes(\".pdf\") || o.File?.includes(\".PDF\") ? (\r\n                      <FlexContainerItem key={i} width=\"35%\">\r\n                        <FlexRowContFlexStart\r\n                          position=\"relative\"\r\n                          width=\"auto\"\r\n                          justifycontent=\"space-between\"\r\n                          alignitems=\"baseline\"\r\n                          onClick={() => {\r\n                            window.open(window.$IMGURL + o.File, \"_blank\");\r\n                          }}\r\n                        >\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href={window.$IMGURL + o.File}\r\n                            target={\"_blank\"}\r\n                            style={{\r\n                              textDecoration: \"none\",\r\n                              color: \"black\",\r\n                            }}\r\n                          >\r\n                            <embed\r\n                              target={\"_blank\"}\r\n                              href={window.$IMGURL + o.File}\r\n                              src={\r\n                                window.$IMGURL +\r\n                                o.File +\r\n                                \"#toolbar=0&navpanes=0&scrollbar=0\"\r\n                              }\r\n                              width={\"350px\"}\r\n                              style={{ backgroundColor: \"white\" }}\r\n                              height={\"200px\"}\r\n                            ></embed>\r\n                            <br></br>\r\n                          </a>\r\n                          <OverrideEmbedDiv>\r\n                            <OverrideEmbedImage right=\"0px\"></OverrideEmbedImage>\r\n                          </OverrideEmbedDiv>\r\n                          <RelativeIconBottom70Percent\r\n                            src=\"/Garbage_Icon.svg\"\r\n                            onClick={async () => {\r\n                              setLoadingStates((prevState) => ({\r\n                                ...prevState,\r\n                                [o.Id]: true,\r\n                              }));\r\n                              await DeleteImageFromQuoteAndCloud(\r\n                                o.File,\r\n                                o.Id,\r\n                                quoteObj\r\n                              );\r\n                              setLoadingStates((prevState) => ({\r\n                                ...prevState,\r\n                                [o.Id]: false,\r\n                              }));\r\n                            }}\r\n                          ></RelativeIconBottom70Percent>\r\n                        </FlexRowContFlexStart>\r\n                        <br></br>\r\n                        <SmallHeader width=\"70%\">{o.Caption}</SmallHeader>\r\n                      </FlexContainerItem>\r\n                    ) : (\r\n                      <FlexContainerItem key={i} width=\"35%\">\r\n                        <FlexRowContFlexStart\r\n                          position=\"relative\"\r\n                          width=\"auto\"\r\n                          alignitems=\"baseline\"\r\n                          justifycontent=\"space-between\"\r\n                        >\r\n                          <Image300x200\r\n                            zIndex=\"1\"\r\n                            src={window.$IMGURL + o.File}\r\n                          ></Image300x200>\r\n                          <RelativeIconBottom70Percent\r\n                            src=\"/Garbage_Icon.svg\"\r\n                            onClick={async () => {\r\n                              setLoadingStates((prevState) => ({\r\n                                ...prevState,\r\n                                [o.Id]: true,\r\n                              }));\r\n                              await DeleteImageFromQuoteAndCloud(\r\n                                o.File,\r\n                                o.Id,\r\n                                quoteObj\r\n                              );\r\n                              setLoadingStates((prevState) => ({\r\n                                ...prevState,\r\n                                [o.Id]: false,\r\n                              }));\r\n                            }}\r\n                          ></RelativeIconBottom70Percent>\r\n                        </FlexRowContFlexStart>\r\n                        <SmallHeader width=\"70%\">{o.Caption}</SmallHeader>\r\n                      </FlexContainerItem>\r\n                    );\r\n                  })}\r\n                </FlexRowContAutox100Percent>\r\n\r\n                <StyledHRPropColour\r\n                  border={`0.5px solid ${ColorPalette.TertiaryGrey}`}\r\n                ></StyledHRPropColour>\r\n                <br></br>\r\n              </FlexDivLeftAlign>\r\n            </FlexDiv>\r\n\r\n            <FlexOverlayDivFullWidth>\r\n              <FlexDiv90PercentMargins>\r\n                <Cont100PercentWidth>\r\n                  <FlexCenterDiv100PercentSpaceBetween>\r\n                    <FlexRowContFlexStartAutoHeight>\r\n                      <SmallHeaderLeagueSpartan>\r\n                        Materials\r\n                      </SmallHeaderLeagueSpartan>\r\n                      <Icon30px30pxPointer\r\n                        src={\"/Green Button.svg\"}\r\n                        onClick={() => {\r\n                          UpdateQuoteInfo(quoteObj);\r\n                          ReturnToMaterial();\r\n                        }}\r\n                      ></Icon30px30pxPointer>\r\n                      <hr></hr>\r\n                      <RegularResponsiveButton\r\n                        onClick={async () => {\r\n                          var tag = await GetQuoteTag(0);\r\n                          setTagObj(tag);\r\n                          setTagWindowDisplay(true);\r\n                        }}\r\n                      >\r\n                        New Tag\r\n                      </RegularResponsiveButton>\r\n                    </FlexRowContFlexStartAutoHeight>\r\n                    <Icon30x30\r\n                      onClick={() => {\r\n                        ToggleSection(\"material\");\r\n                      }}\r\n                      src={displaySettings.material.arrow}\r\n                    ></Icon30x30>\r\n                  </FlexCenterDiv100PercentSpaceBetween>\r\n                  <FlexColumnFullWidth\r\n                    margin=\"0\"\r\n                    display={displaySettings.material.display}\r\n                  >\r\n                    <QuoteTable\r\n                      Tags={quoteObj.Tags}\r\n                      key={quoteObj.Material}\r\n                      onItemChange={() => {\r\n                        GetQuoteInfoById(params.quoteId);\r\n                      }}\r\n                      EditTagWindow={(tag) => {\r\n                        setTagObj(tag);\r\n                        setTagWindowDisplay(true);\r\n                      }}\r\n                      DeleteTag={(tag) => {\r\n                        setDeleteTagId(tag.Id);\r\n                        setDeleteTagConfirmDisplay(true);\r\n                      }}\r\n                      quoteItems={quoteObj.Material.Items}\r\n                      quoteTotalsArray={quoteObj.Material.Total.Tax}\r\n                      subtotal={quoteObj.Material.Total.Subtotal.toFixed(2)}\r\n                      total={quoteObj.Material.Total.Total.toFixed(2)}\r\n                    ></QuoteTable>\r\n                  </FlexColumnFullWidth>\r\n                </Cont100PercentWidth>\r\n\r\n                <Cont100PercentWidth>\r\n                  <FlexCenterDiv100PercentSpaceBetween>\r\n                    <FlexRowContFlexStartAutoHeight>\r\n                      <SmallHeaderLeagueSpartan>\r\n                        Removals\r\n                      </SmallHeaderLeagueSpartan>\r\n                      <Icon30px30pxPointer\r\n                        onClick={() => {\r\n                          UpdateQuoteInfo(quoteObj);\r\n                          ReturnToRemoval();\r\n                        }}\r\n                        src={\"/Green Button.svg\"}\r\n                      ></Icon30px30pxPointer>\r\n                    </FlexRowContFlexStartAutoHeight>\r\n                    <Icon30x30\r\n                      onClick={() => {\r\n                        ToggleSection(\"removal\");\r\n                      }}\r\n                      src={displaySettings.removal.arrow}\r\n                    ></Icon30x30>\r\n                  </FlexCenterDiv100PercentSpaceBetween>\r\n                  <FlexColumnFullWidth\r\n                    margin=\"0\"\r\n                    display={displaySettings.removal.display}\r\n                  >\r\n                    <QuoteTable\r\n                      onItemChange={() => {\r\n                        GetQuoteInfoById(params.quoteId);\r\n                      }}\r\n                      quoteItems={quoteObj.Removal.Items}\r\n                      quoteTotalsArray={quoteObj.Removal.Total.Tax}\r\n                      subtotal={quoteObj.Removal.Total.Subtotal.toFixed(2)}\r\n                      total={quoteObj.Removal.Total.Total.toFixed(2)}\r\n                    ></QuoteTable>\r\n                  </FlexColumnFullWidth>\r\n                </Cont100PercentWidth>\r\n\r\n                <Cont100PercentWidth>\r\n                  <FlexCenterDiv100PercentSpaceBetween>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Delivery\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <Icon30x30\r\n                      onClick={() => {\r\n                        ToggleSection(\"delivery\");\r\n                      }}\r\n                      src={displaySettings.delivery.arrow}\r\n                    ></Icon30x30>\r\n                  </FlexCenterDiv100PercentSpaceBetween>\r\n                  <FlexColumnFullWidth\r\n                    margin=\"0\"\r\n                    display={displaySettings.delivery.display}\r\n                  >\r\n                    <QuoteTableDelivery\r\n                      onItemChange={() => {\r\n                        GetQuoteInfoById(params.quoteId);\r\n                      }}\r\n                      quoteItems={quoteObj.Delivery.Tools}\r\n                      quoteTotalsArray={quoteObj.Delivery.Total.Tax}\r\n                      subtotal={quoteObj.Delivery.Total.Subtotal.toFixed(2)}\r\n                      total={quoteObj.Delivery.Total.Total.toFixed(2)}\r\n                    ></QuoteTableDelivery>\r\n                  </FlexColumnFullWidth>\r\n                </Cont100PercentWidth>\r\n\r\n                <Cont100PercentWidth>\r\n                  <FlexCenterDiv100PercentSpaceBetween>\r\n                    <FlexRowContFlexStartAutoHeight>\r\n                      <SmallHeaderLeagueSpartan>\r\n                        Labour\r\n                      </SmallHeaderLeagueSpartan>\r\n                      <Icon30px30pxPointer\r\n                        src={\"/Green Button.svg\"}\r\n                        onClick={() => {\r\n                          UpdateQuoteInfo(quoteObj);\r\n                          ReturnToLabor();\r\n                        }}\r\n                      ></Icon30px30pxPointer>\r\n                    </FlexRowContFlexStartAutoHeight>\r\n                    <Icon30x30\r\n                      onClick={() => {\r\n                        ToggleSection(\"labor\");\r\n                      }}\r\n                      src={displaySettings.labor.arrow}\r\n                    ></Icon30x30>\r\n                  </FlexCenterDiv100PercentSpaceBetween>\r\n                  <FlexColumnFullWidth\r\n                    margin=\"0\"\r\n                    display={displaySettings.labor.display}\r\n                  >\r\n                    <QuoteTable\r\n                      key={quoteObj.Labor.Items}\r\n                      cateType={2}\r\n                      onItemChange={() => {\r\n                        GetQuoteInfoById(params.quoteId);\r\n                      }}\r\n                      quoteItems={quoteObj.Labor.Items}\r\n                      quoteTotalsArray={LaborTotal.Tax}\r\n                      subtotal={LaborTotal.Subtotal?.toFixed(2)}\r\n                      total={LaborTotal.Total?.toFixed(2)}\r\n                    ></QuoteTable>\r\n                  </FlexColumnFullWidth>\r\n                </Cont100PercentWidth>\r\n                <Cont100PercentWidth>\r\n                  <FlexCenterDiv100PercentSpaceBetween>\r\n                    <FlexRowContFlexStartAutoHeight>\r\n                      <SmallHeaderLeagueSpartan>Tools</SmallHeaderLeagueSpartan>\r\n                      <Icon30px30pxPointer\r\n                        src={\"/Green Button.svg\"}\r\n                        onClick={() => {\r\n                          UpdateQuoteInfo(quoteObj);\r\n                          setToolCardMap(true);\r\n                        }}\r\n                      ></Icon30px30pxPointer>\r\n                    </FlexRowContFlexStartAutoHeight>\r\n                    <Icon30x30\r\n                      onClick={() => {\r\n                        ToggleSection(\"tool\");\r\n                      }}\r\n                      src={displaySettings.tool.arrow}\r\n                    ></Icon30x30>\r\n                  </FlexCenterDiv100PercentSpaceBetween>\r\n                  <NewQuoteTool\r\n                    open={toolOpen}\r\n                    onClose={() => {\r\n                      GetQuoteInfoById(params.quoteId);\r\n                      setToolOpen(false);\r\n                    }}\r\n                    onPreview={HandleToolAddition}\r\n                  ></NewQuoteTool>\r\n                  <ToolSelectionCard\r\n                    open={toolCardMap}\r\n                    onClose={() => {\r\n                      setToolCardMap(false);\r\n                    }}\r\n                    onPreview={HandleToolId}\r\n                  >\r\n                    {\" \"}\r\n                  </ToolSelectionCard>\r\n                  <FlexColumnFullWidth\r\n                    margin=\"0\"\r\n                    display={displaySettings.tool.display}\r\n                  >\r\n                    <QuoteTableTools\r\n                      onItemChange={() => {\r\n                        GetQuoteInfoById(params.quoteId);\r\n                      }}\r\n                      quoteItems={quoteObj.Tool.Tools}\r\n                      quoteTotalsArray={quoteObj.Tool.Total.Tax}\r\n                      subtotal={quoteObj.Tool.Total.Subtotal.toFixed(2)}\r\n                      total={quoteObj.Tool.Total.Total.toFixed(2)}\r\n                    ></QuoteTableTools>\r\n                  </FlexColumnFullWidth>\r\n                </Cont100PercentWidth>\r\n                <Cont100PercentWidth>\r\n                  <FlexCenterDiv100PercentSpaceBetween>\r\n                    <FlexRowContFlexStartAutoHeight>\r\n                      <SmallHeaderLeagueSpartan>\r\n                        Access Area\r\n                      </SmallHeaderLeagueSpartan>\r\n                      <Icon30px30pxPointer\r\n                        src={\"/Green Button.svg\"}\r\n                        onClick={() => {\r\n                          UpdateQuoteInfo(quoteObj);\r\n                          ReturnToAccess();\r\n                        }}\r\n                      ></Icon30px30pxPointer>\r\n                    </FlexRowContFlexStartAutoHeight>\r\n                    <Icon30x30\r\n                      onClick={() => {\r\n                        ToggleSection(\"access\");\r\n                      }}\r\n                      src={displaySettings.access.arrow}\r\n                    ></Icon30x30>\r\n                  </FlexCenterDiv100PercentSpaceBetween>\r\n\r\n                  <FlexRowCont70PercentSpaceBetween>\r\n                    <HundredPercentFlexDiv>\r\n                      <LeagueSpartanTinyMargins>\r\n                        Length:{\" \"}\r\n                      </LeagueSpartanTinyMargins>\r\n                      <SmallHeader>{quoteObj.AccessArea.Length} Ft</SmallHeader>\r\n                    </HundredPercentFlexDiv>\r\n\r\n                    <HundredPercentFlexDiv>\r\n                      <LeagueSpartanTinyMargins>\r\n                        Width:{\" \"}\r\n                      </LeagueSpartanTinyMargins>\r\n                      <SmallHeader>{quoteObj.AccessArea.Width} Ft</SmallHeader>\r\n                    </HundredPercentFlexDiv>\r\n\r\n                    <HundredPercentFlexDiv>\r\n                      <LeagueSpartanTinyMargins>\r\n                        Obstruction:{\" \"}\r\n                      </LeagueSpartanTinyMargins>\r\n                      <SmallHeader>\r\n                        {quoteObj.AccessArea.Obstruct !== false ? \"Yes\" : \"No\"}\r\n                      </SmallHeader>\r\n                    </HundredPercentFlexDiv>\r\n\r\n                    <HundredPercentFlexDiv>\r\n                      <LeagueSpartanTinyMargins>\r\n                        Elevation:{\" \"}\r\n                      </LeagueSpartanTinyMargins>\r\n                      <SmallHeader>\r\n                        {quoteObj.AccessArea.Elevation} Ft\r\n                      </SmallHeader>\r\n                    </HundredPercentFlexDiv>\r\n                  </FlexRowCont70PercentSpaceBetween>\r\n\r\n                  <FlexColumnFullWidth\r\n                    margin=\"0\"\r\n                    display={displaySettings.access.display}\r\n                  >\r\n                    <QuoteTable\r\n                      onItemChange={() => {\r\n                        GetQuoteInfoById(params.quoteId);\r\n                      }}\r\n                      quoteItems={quoteObj.AccessArea.Items}\r\n                      quoteTotalsArray={quoteObj.AccessArea.Total.Tax}\r\n                      subtotal={quoteObj.AccessArea.Total.Subtotal.toFixed(2)}\r\n                      total={quoteObj.AccessArea.Total.Total.toFixed(2)}\r\n                    ></QuoteTable>\r\n                  </FlexColumnFullWidth>\r\n                </Cont100PercentWidth>\r\n\r\n                <FlexDivCenter>\r\n                  <RegularResponsiveButton\r\n                    width=\"200px\"\r\n                    bgcolor={ColorPalette.SecondaryGreen}\r\n                    onClick={() => {\r\n                      history.push(\r\n                        \"/viewcase/\" +\r\n                          params.Id +\r\n                          \"/\" +\r\n                          params.storeId +\r\n                          \"/\" +\r\n                          params.caseId\r\n                      );\r\n                    }}\r\n                  >\r\n                    Return to Project\r\n                  </RegularResponsiveButton>\r\n                  <RegularResponsiveButton\r\n                    width=\"200px\"\r\n                    onClick={() => {\r\n                      SaveButtonClicked(quoteObj, \"project\");\r\n                    }}\r\n                  >\r\n                    Save\r\n                  </RegularResponsiveButton>\r\n                </FlexDivCenter>\r\n              </FlexDiv90PercentMargins>\r\n            </FlexOverlayDivFullWidth>\r\n          </FlexColumnCont80x100Percent>\r\n          <FixedIconToTop\r\n            src=\"/BackToTopArrowAlt.svg\"\r\n            onClick={() => {\r\n              window.scrollTo(0, 0);\r\n            }}\r\n          ></FixedIconToTop>\r\n        </FullWidthDivPropDisplay>\r\n      );\r\n    } else {\r\n      return (\r\n        <Backdrop style={{ zIndex: 1000 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      );\r\n    }\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 1000 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nViewQuote.defaultProps = {\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  onItemChange: () => {},\r\n  onToolAdded: () => {},\r\n};\r\n\r\nexport default ViewQuote;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useParams, useHistory } from \"react-router-dom\";\r\nimport { GetQuoteById } from \"../../API_Functions/CaseQuote_Functions\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenuQuoteView from \"../../comps/MenuComps/TopMenuQuoteView\";\r\nimport AccessAreaQuote from \"../../comps/Quote Form/AccessArea\";\r\nimport MaterialSelection from \"../../comps/Quote Form/MaterialSelection\";\r\nimport ScrollToTop from \"../../comps/ScrollToTop\";\r\nimport ViewQuote from \"../../pages/ViewQuote\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexRowContFullWidth,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\n\r\nconst ViewQuotePage = ({ numberOfQuotes }) => {\r\n  const [returned, setReturned] = useState(false);\r\n  const [returnedAccess, setReturnedAccess] = useState(false);\r\n  const [returnCateType, setReturnCateType] = useState(0);\r\n\r\n  const [accessAreaOpen, setAccessAreaOpen] = useState(true);\r\n  const [materialSelectionOpen, setMaterialSelectionOpen] = useState(false);\r\n  const [quoteOpen, setQuoteOpen] = useState(true);\r\n\r\n  const [quote, setQuote] = useState();\r\n\r\n  const [quoteTitle, setQuoteTitle] = useState(\"\");\r\n  const [returnPage, setReturnPage] = useState(\"\");\r\n  const [highestRevisionNumber, setHighestRevisionNumber] = useState(0);\r\n  const [saveQuoteState, setSaveQuoteState] = useState(false);\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n  // Define a function to get the quote information for the header\r\n  const GetQuoteInformationForHeader = async (quoteid) => {\r\n    try {\r\n      // Get the quote by its ID\r\n      const data = await GetQuoteById(quoteid);\r\n      setQuote(data);\r\n      // If the quote is found, set the quote title\r\n      if (data) {\r\n        setQuoteTitle(data.quote.Tittle);\r\n      }\r\n    } catch (error) {\r\n      // Handle the error\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const DisplayAccessPageChange = async (returnpage) => {\r\n    setAccessAreaOpen(true);\r\n    switch (returnpage) {\r\n      case \"quote\":\r\n        setQuoteOpen(true);\r\n        break;\r\n      case \"itemselection\":\r\n        setMaterialSelectionOpen(true);\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetQuoteInformationForHeader(params.quoteId);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexRowContFullWidth alignitems=\"baseline\">\r\n      <ScrollToTop />\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight minheight=\"auto\" height=\"fit-content\">\r\n        <ActionMenuQuoteView\r\n          pageProp={`Edit Estimate #${params.quoteId} (${\r\n            quoteTitle === undefined || quoteTitle === null\r\n              ? \"Untitled Estimate\"\r\n              : quoteTitle\r\n          })`}\r\n          accessopen={accessAreaOpen}\r\n          materialopen={materialSelectionOpen}\r\n          quoteopen={quoteOpen}\r\n          firstlink={() => {\r\n            setReturnPage(\"quote\");\r\n            setAccessAreaOpen(true);\r\n            setMaterialSelectionOpen(false);\r\n            setQuoteOpen(true);\r\n            window.scrollTo(0, 0);\r\n          }}\r\n          secondlink={() => {\r\n            setReturnPage(\"access\");\r\n            setReturnedAccess(true);\r\n            setMaterialSelectionOpen(false);\r\n            setAccessAreaOpen(false);\r\n            setQuoteOpen(false);\r\n            window.scroll(0, 0);\r\n          }}\r\n          thirdlink={() => {\r\n            setReturnPage(\"itemselection\");\r\n            setReturnCateType(0);\r\n            setReturned(true);\r\n            setAccessAreaOpen(true);\r\n            setQuoteOpen(false);\r\n            setMaterialSelectionOpen(true);\r\n            window.scrollTo(0, 0);\r\n          }}\r\n          fourthlink={() => {\r\n            setReturnPage(\"quote\");\r\n            setAccessAreaOpen(true);\r\n            setMaterialSelectionOpen(false);\r\n            setQuoteOpen(true);\r\n            window.scrollTo(0, document.body.scrollHeight);\r\n          }}\r\n          // ReturnToProject={() => {\r\n          //   history.push(\r\n          //     \"/viewcase/\" +\r\n          //       params.Id +\r\n          //       \"/\" +\r\n          //       params.storeId +\r\n          //       \"/\" +\r\n          //       params.caseId\r\n          //   );\r\n          // }}\r\n          SwitchToUserView={() => {\r\n            setSaveQuoteState(true);\r\n          }}\r\n        ></ActionMenuQuoteView>\r\n\r\n        <RightViewFullWidth height=\"auto\">\r\n          <AccessAreaQuote\r\n            desiredpage={returnPage}\r\n            quoteid={params.quoteId}\r\n            ReturnToPage={(returnpage) => {\r\n              DisplayAccessPageChange(returnpage);\r\n            }}\r\n            returned={returnedAccess}\r\n            open={accessAreaOpen}\r\n            onNext={() => {\r\n              setAccessAreaOpen(true);\r\n              setMaterialSelectionOpen(true);\r\n              window.scrollTo(0, 0);\r\n            }}\r\n          ></AccessAreaQuote>\r\n\r\n          <MaterialSelection\r\n            quote={quote}\r\n            quoteId={params.quoteId}\r\n            returned={returned}\r\n            onBackToQuote={() => {\r\n              setMaterialSelectionOpen(false);\r\n              setQuoteOpen(true);\r\n              window.scrollTo(0, 0);\r\n            }}\r\n            open={materialSelectionOpen}\r\n            returnCateType={returnCateType}\r\n            onBack={() => {\r\n              setAccessAreaOpen(false);\r\n              setMaterialSelectionOpen(false);\r\n              window.scrollTo(0, 0);\r\n            }}\r\n          ></MaterialSelection>\r\n\r\n          <ViewQuote\r\n            saveQuoteState={saveQuoteState}\r\n            onToolAdded={() => {}}\r\n            open={quoteOpen}\r\n            onItemChange={() => {}}\r\n            ReturnToMaterial={() => {\r\n              setReturnCateType(0);\r\n              setReturned(true);\r\n              setMaterialSelectionOpen(true);\r\n              setQuoteOpen(false);\r\n              window.scrollTo(0, 0);\r\n            }}\r\n            ReturnToLabor={() => {\r\n              setReturnCateType(2);\r\n              setReturned(true);\r\n              setMaterialSelectionOpen(true);\r\n              setQuoteOpen(false);\r\n              window.scrollTo(0, 0);\r\n            }}\r\n            ReturnToRemoval={() => {\r\n              setReturnCateType(4);\r\n              setReturned(true);\r\n              setMaterialSelectionOpen(true);\r\n              setQuoteOpen(false);\r\n              window.scrollTo(0, 0);\r\n            }}\r\n            ReturnToAccess={() => {\r\n              setReturnedAccess(true);\r\n              setAccessAreaOpen(false);\r\n              setQuoteOpen(false);\r\n              window.scroll(0, 0);\r\n            }}\r\n          ></ViewQuote>\r\n        </RightViewFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexRowContFullWidth>\r\n  );\r\n};\r\nViewQuotePage.defaultProps = {\r\n  numberOfQuotes: 0,\r\n};\r\n\r\nexport default ViewQuotePage;\r\n","import axios from \"axios\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  DeleteCasePhoto,\r\n  GetCaseById,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  AddImageToCloud,\r\n  UploadFileToCloud,\r\n} from \"../../API_Functions/Utility_Functions\";\r\nimport CasePhotoUploadPreviewWindow from \"../../comps/Windows/PhotoUpload\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont75x80Percent,\r\n  FlexColumnFullWidth,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont70PercentFlexStart,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexDivFlexEnd,\r\n  GridDivMobileFlexDiv,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon30x40pxPointer } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  Image40x40px,\r\n  RoundedImageFullWidth,\r\n} from \"../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  Image300x200,\r\n  LandscapePara,\r\n  SmallHeaderLeagueSpartan,\r\n  TextInputRegular,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  LeagueSpartanRegularMinWidth,\r\n  RegularTextBoldRed,\r\n  SmallTextPadding,\r\n  StyledHRPropColour,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst UpdateCase = () => {\r\n  //=============================================================================\r\n  // UpdateCase MicroPage - User can update their own case as long as it has not\r\n  // yet been accepted by a guide\r\n  //=============================================================================\r\n\r\n  const history = useHistory();\r\n\r\n  const [desc, setDesc] = useState(\"\");\r\n  const [defaultName, setDefaultName] = useState(\"\");\r\n  const [defaultEmail, setDefaultEmail] = useState(\"\");\r\n  const [defaultAddress, setDefaultAddress] = useState(\"\");\r\n  const [defaultPhone, setDefaultPhone] = useState(\"\");\r\n  const [defaultTitle, setDefaultTitle] = useState(\"\");\r\n\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n  const [previewImageWindowDisplay, setPreviewImageWindowDisplay] =\r\n    useState(\"\");\r\n  const [errorText, setErrorText] = useState(\"\");\r\n\r\n  const [imgArray, setImgArray] = useState([]);\r\n  const [caseObj, setCaseObj] = useState({});\r\n\r\n  useEffect(() => {\r\n    GetCase(params.caseId);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  // Define a function that takes an ID as an argument\r\n  const GetCase = async (id) => {\r\n    try {\r\n      // Get the case data by calling the GetCaseById function\r\n      const data = await GetCaseById(id);\r\n\r\n      // Check if the data and Case properties exist\r\n      if (data && data.Case) {\r\n        // Set the case object using the data from the Case property\r\n        setCaseObj(data.Case);\r\n        setDesc(data.Case.Description);\r\n        setDefaultName(data.Case.Name);\r\n        setDefaultEmail(data.Case.Email);\r\n        setDefaultAddress(data.Case.Street);\r\n        setDefaultPhone(data.Case.Phone);\r\n        setDefaultTitle(data.Case.Tittle);\r\n        setImgArray(data.Case.Photos);\r\n      }\r\n    } catch (error) {\r\n      // Handle the error and log it to the console\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const HandleDelete = async (picobj, index) => {\r\n    try {\r\n      // Delete the case photo using the provided Id\r\n      await DeleteCasePhoto(picobj.Id);\r\n\r\n      // Delete the image from the server using Axios\r\n      const response = await axios.delete(`${window.$DBURL}utilities/image`, {\r\n        data: { Url: picobj.File },\r\n      });\r\n\r\n      // If the image was successfully deleted, remove it from the array\r\n      if (response.status === 200) {\r\n        imgArray.splice(index, 1);\r\n        setImgArray([...imgArray]);\r\n      }\r\n    } catch (error) {\r\n      // Handle any errors that may have occurred\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const UpdateProject = async () => {\r\n    const resp = await axios.put(window.$DBURL + \"case\", {\r\n      Id: params.caseId,\r\n      UpdateTime:\r\n        fullyear +\r\n        \"-\" +\r\n        month +\r\n        \"-\" +\r\n        day +\r\n        \"T\" +\r\n        hour +\r\n        \":\" +\r\n        time +\r\n        \":\" +\r\n        seconds,\r\n      Description: desc,\r\n      Name: defaultName,\r\n      Phone: defaultPhone,\r\n      Street: defaultAddress,\r\n      Email: defaultEmail,\r\n      Tittle: defaultTitle,\r\n    });\r\n    if (resp !== null) {\r\n    }\r\n    history.push(\r\n      \"/viewcaseuser/\" + params.Id + \"/\" + params.storeId + \"/\" + params.caseId\r\n    );\r\n  };\r\n\r\n  const params = useParams();\r\n\r\n  var d = new Date();\r\n  var fullyear = d.getFullYear();\r\n  var month = (\"0\" + (d.getMonth() + 1)).slice(-2);\r\n  var day = (\"0\" + d.getDate()).slice(-2);\r\n  var hour = (\"0\" + d.getHours()).slice(-2);\r\n  var time = (\"0\" + d.getMinutes()).slice(-2);\r\n  var seconds = (\"0\" + d.getSeconds()).slice(-2);\r\n\r\n  const inputFile = useRef(null);\r\n\r\n  const onButtonClick6 = () => {\r\n    inputFile.current.click();\r\n  };\r\n\r\n  let formdata = new FormData();\r\n  const [photo] = useState(\"\");\r\n\r\n  const GetImgUrl_PushToLocal = async () => {\r\n    if (photo !== \"\") {\r\n      // Add the new case photo to the form data\r\n      formdata.append(\"New Case Photo\", photo);\r\n\r\n      // Get the image URL from the cloud\r\n      const imgUrl = await AddImageToCloud(formdata);\r\n\r\n      // If the URL was returned successfully, add it to the array and update the array\r\n      if (imgUrl !== null) {\r\n        imgArray.push(imgUrl);\r\n        pullArrayAgain();\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetImgUrl_PushToLocal();\r\n  }, [photo]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const handleUpload = async (event) => {\r\n    var file = event.target.files[0];\r\n    if (\r\n      file.name.includes(\".jpg\") ||\r\n      file.name.includes(\".JPG\") ||\r\n      file.name.includes(\".jpeg\") ||\r\n      file.name.includes(\".JPEG\") ||\r\n      file.name.includes(\".png\") ||\r\n      file.name.includes(\".PNG\") ||\r\n      file.name.includes(\".heic\") ||\r\n      file.name.includes(\".HEIC\") ||\r\n      file.name.includes(\".heif\") ||\r\n      file.name.includes(\".HEIF\") ||\r\n      file.name.includes(\".webp\") ||\r\n      file.name.includes(\".WEBP\") ||\r\n      file.name.includes(\".jfif\") ||\r\n      file.name.includes(\".JFIF\") ||\r\n      file.name.includes(\".pjpeg\") ||\r\n      file.name.includes(\".PJPEG\") ||\r\n      file.name.includes(\".pjp\") ||\r\n      file.name.includes(\".PJP\") ||\r\n      file.name.includes(\".pdf\") ||\r\n      file.name.includes(\".PDF\")\r\n    ) {\r\n      var pic = await UploadFileToCloud(file);\r\n      if (pic !== null) {\r\n        setPreviewImage(pic);\r\n        setPreviewImageWindowDisplay(true);\r\n      }\r\n    } else {\r\n      setErrorText(\r\n        \"File not supported, we are also not currently accepting videos.\"\r\n      );\r\n      window.scrollTo(0, 0);\r\n    }\r\n  };\r\n\r\n  const ResetImage = async (img) => {\r\n    var resp = await axios.delete(window.$DBURL + \"utilities/image\", {\r\n      data: { Url: img },\r\n    });\r\n    if (resp.status === 200) {\r\n    }\r\n  };\r\n\r\n  const pullArrayAgain = () => {\r\n    setImgArray([...imgArray]);\r\n  };\r\n\r\n  return (\r\n    <div>\r\n      <FlexColumnCont75x80Percent width=\"80vw\" height=\"auto\" bgcolor=\"white\">\r\n        <FlexRowCont100PercentSpaceBetween>\r\n          <FlexColumnFullWidth width=\"40vw\" mobiledisplay=\"none\">\r\n            <RoundedImageFullWidth src=\"/Log In Image.png\"></RoundedImageFullWidth>\r\n          </FlexColumnFullWidth>\r\n          <FlexColumnFullWidth width=\"60%\" mobilewidth=\"97vw\">\r\n            <CasePhotoUploadPreviewWindow\r\n              AssignIdToImage={() => {\r\n                GetCase(params.caseId);\r\n              }}\r\n              caseObj={caseObj}\r\n              open={previewImageWindowDisplay}\r\n              previewsrc={previewImage}\r\n              CancelUpload={() => {\r\n                ResetImage(previewImage);\r\n                setPreviewImageWindowDisplay(false);\r\n              }}\r\n              CloseWindow={() => {\r\n                setPreviewImageWindowDisplay(false);\r\n              }}\r\n            ></CasePhotoUploadPreviewWindow>\r\n            <br></br>\r\n            <FlexDivFlexEnd mobilepaddingbottom=\"15vh\">\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryRed}\r\n                onClick={() => {\r\n                  history.push(\r\n                    \"/viewcaseuser/\" +\r\n                      params.Id +\r\n                      \"/\" +\r\n                      params.storeId +\r\n                      \"/\" +\r\n                      params.caseId\r\n                  );\r\n                }}\r\n              >\r\n                Back\r\n              </RegularResponsiveButton>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  UpdateProject();\r\n                }}\r\n              >\r\n                Save Changes\r\n              </RegularResponsiveButton>\r\n            </FlexDivFlexEnd>\r\n            <br></br>\r\n            <FlexRowCont100PercentSpaceBetween>\r\n              <LeagueSpartanRegularMinWidth width=\"150px\">\r\n                Project Title\r\n              </LeagueSpartanRegularMinWidth>\r\n              <TextInputRegular\r\n                font_size=\"16px\"\r\n                mobilefontsize=\"75%\"\r\n                placeholder={\"Project Title\"}\r\n                inputheight=\"1%\"\r\n                inputborderradius=\"5px\"\r\n                defaultValue={defaultTitle}\r\n                onChange={(e) => {\r\n                  setDefaultTitle(e.target.value);\r\n                }}\r\n              ></TextInputRegular>\r\n            </FlexRowCont100PercentSpaceBetween>\r\n\r\n            <FlexRowCont100PercentSpaceBetween>\r\n              <LeagueSpartanRegularMinWidth width=\"150px\">\r\n                Contact Name\r\n              </LeagueSpartanRegularMinWidth>\r\n              <TextInputRegular\r\n                font_size=\"16px\"\r\n                mobilefontsize=\"75%\"\r\n                placeholder={\"Contact Name\"}\r\n                inputheight=\"1%\"\r\n                inputborderradius=\"5px\"\r\n                defaultValue={defaultName}\r\n                onChange={(e) => {\r\n                  setDefaultName(e.target.value);\r\n                }}\r\n              ></TextInputRegular>\r\n            </FlexRowCont100PercentSpaceBetween>\r\n\r\n            <FlexRowCont100PercentSpaceBetween>\r\n              <LeagueSpartanRegularMinWidth width=\"150px\">\r\n                Email\r\n              </LeagueSpartanRegularMinWidth>\r\n              <TextInputRegular\r\n                placeholder={\"Email\"}\r\n                mobilefontsize=\"75%\"\r\n                inputheight=\"1%\"\r\n                inputborderradius=\"5px\"\r\n                defaultValue={defaultEmail}\r\n                onChange={(e) => {\r\n                  setDefaultEmail(e.target.value);\r\n                }}\r\n              ></TextInputRegular>\r\n            </FlexRowCont100PercentSpaceBetween>\r\n\r\n            <FlexRowCont100PercentSpaceBetween>\r\n              <LeagueSpartanRegularMinWidth width=\"150px\">\r\n                Address\r\n              </LeagueSpartanRegularMinWidth>\r\n              <TextInputRegular\r\n                placeholder={\"Address\"}\r\n                mobilefontsize=\"75%\"\r\n                inputheight=\"1%\"\r\n                inputborderradius=\"5px\"\r\n                defaultValue={defaultAddress}\r\n                onChange={(e) => {\r\n                  setDefaultAddress(e.target.value);\r\n                }}\r\n              ></TextInputRegular>\r\n            </FlexRowCont100PercentSpaceBetween>\r\n\r\n            <FlexRowCont100PercentSpaceBetween>\r\n              <LeagueSpartanRegularMinWidth width=\"150px\">\r\n                Phone\r\n              </LeagueSpartanRegularMinWidth>\r\n              <TextInputRegular\r\n                placeholder={\"Phone\"}\r\n                mobilefontsize=\"75%\"\r\n                inputheight=\"1%\"\r\n                inputborderradius=\"5px\"\r\n                defaultValue={defaultPhone}\r\n                onChange={(e) => {\r\n                  setDefaultPhone(e.target.value);\r\n                }}\r\n              ></TextInputRegular>\r\n            </FlexRowCont100PercentSpaceBetween>\r\n\r\n            <br></br>\r\n\r\n            <FlexRowCont100PercentSpaceBetween>\r\n              <LandscapePara\r\n                mobileheight=\"40vh\"\r\n                maxLength=\"1500\"\r\n                defaultValue={desc}\r\n                onChange={(e) => {\r\n                  setDesc(e.target.value);\r\n                }}\r\n              />\r\n            </FlexRowCont100PercentSpaceBetween>\r\n          </FlexColumnFullWidth>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n\r\n        <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n        <FlexColumnFullWidth>\r\n          <FlexRowCont70PercentFlexStart>\r\n            <SmallHeaderLeagueSpartan>Upload Photos</SmallHeaderLeagueSpartan>\r\n            <Icon30x40pxPointer\r\n              src={\"/Green Button.svg\"}\r\n              onClick={onButtonClick6}\r\n            ></Icon30x40pxPointer>\r\n          </FlexRowCont70PercentFlexStart>\r\n\r\n          <br></br>\r\n\r\n          <input\r\n            style={{ display: \"none\" }}\r\n            ref={inputFile}\r\n            type=\"file\"\r\n            onChange={handleUpload}\r\n          />\r\n          <GridDivMobileFlexDiv>\r\n            {imgArray.map((o, i) => (\r\n              <div>\r\n                <SmallTextPadding>{o.Caption}</SmallTextPadding>\r\n                <GridDivMobileFlexDiv key={i}>\r\n                  <Image300x200\r\n                    src={window.$IMGURL + o.File}\r\n                    alt={\"PDF\"}\r\n                  ></Image300x200>\r\n                  <Image40x40px\r\n                    src=\"/Garbage_Icon.svg\"\r\n                    onClick={() => {\r\n                      HandleDelete(o, i);\r\n                    }}\r\n                  ></Image40x40px>\r\n                </GridDivMobileFlexDiv>\r\n              </div>\r\n            ))}\r\n          </GridDivMobileFlexDiv>\r\n        </FlexColumnFullWidth>\r\n        <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n      </FlexColumnCont75x80Percent>\r\n    </div>\r\n  );\r\n};\r\n\r\nUpdateCase.defaultProps = {};\r\n\r\nexport default UpdateCase;\r\n","import React from \"react\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\nimport ScrollToTop from \"../../comps/ScrollToTop\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexContMobileColumn,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport UpdateCase from \"../UpdateCase\";\r\n\r\nconst UpdateCasePage = () => {\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <ScrollToTop />\r\n\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu\r\n          mobilePageProp=\"Edit your Project\"\r\n          pageProp={\"Edit Your Project\"}\r\n        ></ActionMenu>\r\n\r\n        <RightViewFullWidth>\r\n          <UpdateCase />\r\n        </RightViewFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nUpdateCasePage.defaultProps = {};\r\n\r\nexport default UpdateCasePage;\r\n","import React from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport { Cont500x200pxFixed } from \"../../../StylesheetComps/Cont\";\r\nimport { Div400x75px, Div450x175px } from \"../../../StylesheetComps/Div\";\r\nimport { ExtraLargeTextMobileRegular } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst CancelAppointmentWindow = ({\r\n  deleteOpen,\r\n  onClick,\r\n  onClose,\r\n  closeDel,\r\n  onDeleteFunction,\r\n}) => {\r\n  if (!deleteOpen) return null;\r\n  return (\r\n    <Cont500x200pxFixed>\r\n      <Div450x175px>\r\n        <ExtraLargeTextMobileRegular>\r\n          Are you sure you want to cancel this appointment?\r\n        </ExtraLargeTextMobileRegular>\r\n        <Div400x75px>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={closeDel}\r\n          >\r\n            No\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              closeDel();\r\n              onDeleteFunction();\r\n            }}\r\n          >\r\n            Yes\r\n          </RegularResponsiveButton>\r\n        </Div400x75px>\r\n      </Div450x175px>\r\n    </Cont500x200pxFixed>\r\n  );\r\n};\r\n\r\nCancelAppointmentWindow.defaultProps = {\r\n  onDeleteFunction: () => {},\r\n};\r\n\r\nexport default CancelAppointmentWindow;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport styled from \"styled-components\";\r\n\r\nimport * as dates from \"date-arithmetic\";\r\nimport { subDays } from \"date-fns\";\r\nimport getDay from \"date-fns/getDay\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Navigate } from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport TimeGrid from \"react-big-calendar/lib/TimeGrid\";\r\nimport DatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { FlexContCenterAlign } from \"../../StylesheetComps/Cont\";\r\nimport { FixedOverlay200vh } from \"../../StylesheetComps/OverlayCont\";\r\nimport { BlueUnderlinePointerPara } from \"../../StylesheetComps/Titles\";\r\nimport CancelAppointmentWindow from \"../Windows/DeleteCancelAppointment\";\r\n\r\nconst ItemCont = styled.div`\r\n  background-color: white;\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  left: 30%;\r\n  width: 500px;\r\n  border-radius: 10px;\r\n  border: 1px solid black;\r\n  margin: 30px;\r\n  padding-left: 0.5%;\r\n  padding-right: 0.5%;\r\n  align-items: center;\r\n  justify-content: center;\r\n  @media (max-width: 1006px) {\r\n    left: 0%;\r\n    width: 98.5vw;\r\n    height: 90vh;\r\n    overflow-y: auto;\r\n    margin: 0px;\r\n  }\r\n`;\r\n\r\nconst AppointmentCreationDiv = styled.div`\r\n  width: 95%;\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n  height: 80%;\r\n`;\r\n\r\nconst SubHeaderPara = styled.p`\r\n  font-family: Futura;\r\n  font-size: 16px;\r\n  width: 50%;\r\n  display: ${(props) => (props.textDisplay ? props.textDisplay : \"block\")};\r\n`;\r\n\r\nconst ButtonDiv = styled.div`\r\n  width: 100%;\r\n  display: flex;\r\n  margin-top: 1%;\r\n`;\r\n\r\nconst RadioDiv = styled.div`\r\n  display: flex;\r\n`;\r\n\r\nconst RadioButtonInnerDiv = styled.div`\r\n  margin-right: 5%;\r\n  display: flex;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nconst LandscapePara = styled.textarea`\r\n  width: 60%;\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"none\")};\r\n  transition: display 2s;\r\n  height: 20vh;\r\n  background-color: #ededed;\r\n  border: 0;\r\n  outline: none;\r\n  resize: none;\r\n  overflow: auto;\r\n  border-radius: 4px;\r\n  font-family: Futura;\r\n  font-size: 16px;\r\n  padding: 10px;\r\n  padding-right: 40px;\r\n  margin-right: 30px;\r\n`;\r\n\r\nconst HeaderDiv = styled.div`\r\n  display: flex;\r\n  align-items: center;\r\n  width: 100%;\r\n  justify-content: space-around;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nconst DatePickDiv = styled.div`\r\n  display: ${(props) => (props.datedisplay ? props.datedisplay : \"none\")};\r\n`;\r\n\r\nconst ExplainerPara = styled.p`\r\n  font-size: 14px;\r\n  color: black;\r\n  font-family: Avenir;\r\n  margin-left: 10px;\r\n  display: ${(props) => (props.displayProp ? props.displayProp : \"none\")};\r\n`;\r\n\r\nconst TimeSlotDiv = styled.div`\r\n  display: ${(props) =>\r\n    props.timeslotDisplay ? props.timeslotDisplay : \"none\"};\r\n  width: 100%;\r\n  align-items: center;\r\n`;\r\n\r\nconst CancelAppointmentText = styled.p`\r\n  font-size: 14px;\r\n  color: red;\r\n  position: relative;\r\n  cursor: pointer;\r\n`;\r\n\r\nconst QuestionMarkImg = styled.img`\r\n  width: 15px;\r\n  height: 25px;\r\n  margin-bottom: auto;\r\n  cursor: pointer;\r\n  padding: 5px;\r\n`;\r\n\r\nconst EditAppointment = ({\r\n  open,\r\n  onClick,\r\n  onClose,\r\n  onPreview,\r\n  onAppointmentEdit,\r\n  currentTimeslotId,\r\n  onUpdateDate,\r\n  CancelAppointment,\r\n  month,\r\n  day,\r\n  year,\r\n  dfName,\r\n  dfNotes,\r\n  dfAddress,\r\n  dfCellPhone,\r\n  dfCity,\r\n  dfFlex,\r\n  installerId,\r\n  appointmentTime,\r\n}) => {\r\n  const [contactName, setContactName] = useState(\"\");\r\n  const [address, setAddress] = useState(\"\");\r\n  const [phone, setPhone] = useState(\"\");\r\n  const [city, setCity] = useState(\"\");\r\n  var flexible = dfFlex;\r\n\r\n  const [closeDays, setCloseDays] = useState([]);\r\n  const [timeSlots, setTimeSlots] = useState([]);\r\n  const [slotId, setSlotId] = useState(0);\r\n  const [appDesc, setAppDesc] = useState(\"\");\r\n\r\n  const [notesDisplay, setNotesDisplay] = useState(\"none\");\r\n  const [nameDisplay, setNameDisplay] = useState(\"none\");\r\n  const [addressDisplay, setAddressDisplay] = useState(\"none\");\r\n  const [cityDisplay, setCityDisplay] = useState(\"none\");\r\n  const [phoneDisplay, setPhoneDisplay] = useState(\"none\");\r\n\r\n  const [timeslotDisplay, setTimeslotDisplay] = useState(\"none\");\r\n\r\n  const [notesDisplayText, setNotesDisplayText] = useState(\"block\");\r\n  const [nameDisplayText, setNameDisplayText] = useState(\"block\");\r\n  const [addressDisplayText, setAddressDisplayText] = useState(\"block\");\r\n  const [cityDisplayText, setCityDisplayText] = useState(\"block\");\r\n  const [phoneDisplayText, setPhoneDisplayText] = useState(\"block\");\r\n\r\n  const [timeTextDisplay, setTimeTextDisplay] = useState(\"block\");\r\n\r\n  const [timeSlotInfoDisplay, setTimeSlotInfoDisplay] = useState(\"none\");\r\n\r\n  const [edit1, setEdit1] = useState(\"Edit\");\r\n  const [edit2, setEdit2] = useState(\"Edit\");\r\n  const [edit3, setEdit3] = useState(\"Edit\");\r\n  const [edit4, setEdit4] = useState(\"Edit\");\r\n  const [edit5, setEdit5] = useState(\"Edit\");\r\n  const [editTime, setEditTime] = useState(\"Edit\");\r\n\r\n  const [defaultNotes, setDefaultNotes] = useState(dfNotes);\r\n  const [defaultContact, setDefaultContact] = useState(dfName);\r\n  const [defaultAddress, setDefaultAddress] = useState(dfAddress);\r\n  const [defaultCity, setDefaultCity] = useState(dfCity);\r\n  const [defaultPhone, setDefaultPhone] = useState(dfCellPhone);\r\n\r\n  const [flexibleDisplayProp, setFlexibleDisplayProp] = useState(\"none\");\r\n\r\n  const [cancelAppointment, setCancelAppointment] = useState(false);\r\n\r\n  var [type1] = useState();\r\n  var [type2] = useState();\r\n\r\n  const GetInstallerCloseDays = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"appointment/close/installer/\" + installerId\r\n    );\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.closedays !== null) {\r\n          setCloseDays(resp.data.closedays);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetTimeSlots = async () => {\r\n    const resp = await axios.post(\r\n      window.$DBURL + \"appointment/installer/available\",\r\n      { Year: year, Month: month, Day: day, Installer_Id: installerId }\r\n    );\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.openslots !== null) {\r\n          setTimeSlots(resp.data.openslots);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetInstallerCloseDays();\r\n  }, [installerId]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  //DOCUMENTATION OF FLEXIBILITY TYPE\r\n  switch (dfFlex) {\r\n    case true:\r\n      type1 = true;\r\n\r\n      break;\r\n    case false:\r\n      type2 = true;\r\n      break;\r\n\r\n    default:\r\n      type1 = true;\r\n  }\r\n\r\n  class MyWeek extends React.Component {\r\n    render() {\r\n      let {\r\n        date,\r\n        localizer,\r\n        min = localizer.startOf(new Date(), \"day\"),\r\n        max = localizer.endOf(new Date(), \"day\"),\r\n        scrollToTime = localizer.startOf(new Date(), \"day\"),\r\n      } = this.props;\r\n      let range = MyWeek.range(date, { localizer });\r\n\r\n      return (\r\n        <TimeGrid\r\n          {...this.props}\r\n          range={range}\r\n          eventOffset={15}\r\n          localizer={localizer}\r\n          min={min}\r\n          max={max}\r\n          scrollToTime={scrollToTime}\r\n        />\r\n      );\r\n    }\r\n  }\r\n\r\n  MyWeek.propTypes = {\r\n    date: PropTypes.instanceOf(Date).isRequired,\r\n    localizer: PropTypes.any,\r\n    min: PropTypes.instanceOf(Date),\r\n    max: PropTypes.instanceOf(Date),\r\n    scrollToTime: PropTypes.instanceOf(Date),\r\n  };\r\n\r\n  MyWeek.range = (date, { localizer }) => {\r\n    let start = date;\r\n    let end = dates.add(start, 0, \"day\");\r\n\r\n    let current = start;\r\n    let range = [];\r\n\r\n    while (localizer.lte(current, end, \"day\")) {\r\n      range.push(current);\r\n      current = localizer.add(current, 1, \"day\");\r\n    }\r\n\r\n    return range;\r\n  };\r\n\r\n  MyWeek.navigate = (date, action, { localizer }) => {\r\n    switch (action) {\r\n      case Navigate.PREVIOUS:\r\n        return localizer.add(date, -1, \"day\");\r\n\r\n      case Navigate.NEXT:\r\n        return localizer.add(date, 1, \"day\");\r\n\r\n      default:\r\n        return date;\r\n    }\r\n  };\r\n\r\n  MyWeek.title = (date) => {\r\n    return `Installer Appointment Slots: ${date.toLocaleDateString()}`;\r\n  };\r\n\r\n  const [EditYear, setEditYear] = useState(0);\r\n  const [EditMonth, setEditMonth] = useState(0);\r\n  const [EditDay, setEditDay] = useState(0);\r\n  const [startDate, setStartDate] = useState(null);\r\n  var startDateSync = null;\r\n\r\n  const HandleStartDate = () => {\r\n    setEditDay(startDateSync.getDate());\r\n    setEditMonth(startDateSync.getMonth() + 1);\r\n    setEditYear(startDateSync.getFullYear());\r\n  };\r\n\r\n  let handleColor = (time) => {\r\n    return time.getHours() > 12 ? \"text-success\" : \"text-error\";\r\n  };\r\n\r\n  const isWeekday = (date) => {\r\n    const day = getDay(date);\r\n    if (closeDays.length === 1) {\r\n      return day !== closeDays[0].WeekDay;\r\n    } else if (closeDays.length === 2) {\r\n      return day !== closeDays[0].WeekDay && day !== closeDays[1].WeekDay;\r\n    } else if (closeDays.length === 3) {\r\n      return (\r\n        day !== closeDays[0].WeekDay &&\r\n        day !== closeDays[1].WeekDay &&\r\n        day !== closeDays[2].WeekDay\r\n      );\r\n    } else if (closeDays.length === 4) {\r\n      return (\r\n        day !== closeDays[0].WeekDay &&\r\n        day !== closeDays[1].WeekDay &&\r\n        day !== closeDays[2].WeekDay &&\r\n        day !== closeDays[3].WeekDay\r\n      );\r\n    } else if (closeDays.length === 5) {\r\n      return (\r\n        day !== closeDays[0].WeekDay &&\r\n        day !== closeDays[1].WeekDay &&\r\n        day !== closeDays[2].WeekDay &&\r\n        day !== closeDays[3].WeekDay &&\r\n        day !== closeDays[4].WeekDay\r\n      );\r\n    } else if (closeDays.length === 6) {\r\n      return (\r\n        day !== closeDays[0].WeekDay &&\r\n        day !== closeDays[1].WeekDay &&\r\n        day !== closeDays[2].WeekDay &&\r\n        day !== closeDays[3].WeekDay &&\r\n        day !== closeDays[4].WeekDay &&\r\n        day !== closeDays[5].WeekDay\r\n      );\r\n    } else if (closeDays.length === 7) {\r\n      return (\r\n        day !== closeDays[0].WeekDay &&\r\n        day !== closeDays[1].WeekDay &&\r\n        day !== closeDays[2].WeekDay &&\r\n        day !== closeDays[3].WeekDay &&\r\n        day !== closeDays[4].WeekDay &&\r\n        day !== closeDays[5].WeekDay &&\r\n        day !== closeDays[6].WeekDay\r\n      );\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetTimeSlots();\r\n  }, [day, month, year]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    setDefaultNotes(dfNotes);\r\n    setDefaultContact(dfName);\r\n    setDefaultAddress(dfAddress);\r\n    setDefaultCity(dfCity);\r\n    setDefaultPhone(dfCellPhone);\r\n  }, [dfNotes]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    setDefaultContact(dfName);\r\n  }, [dfName]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    setDefaultAddress(dfAddress);\r\n  }, [dfAddress]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    setDefaultCity(dfCity);\r\n  }, [dfCity]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    setDefaultPhone(dfCellPhone);\r\n  }, [dfCellPhone]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <ItemCont>\r\n        <AppointmentCreationDiv>\r\n          <CancelAppointmentText\r\n            onClick={() => {\r\n              setCancelAppointment(true);\r\n            }}\r\n          >\r\n            Cancel Appointment\r\n          </CancelAppointmentText>\r\n\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>Schedule Date/Time</SubHeaderPara>\r\n            <HeaderDiv>\r\n              <SubHeaderPara textDisplay={timeTextDisplay}>\r\n                {month}/{day}/{year}\r\n              </SubHeaderPara>\r\n              <SubHeaderPara textDisplay={timeTextDisplay}>\r\n                {appointmentTime}\r\n              </SubHeaderPara>\r\n              <BlueUnderlinePointerPara\r\n                onClick={() => {\r\n                  if (editTime === \"Edit\") {\r\n                    GetTimeSlots();\r\n                    setTimeslotDisplay(\"flex\");\r\n                    setTimeTextDisplay(\"block\");\r\n                    setEditTime(\"Save\");\r\n                  } else if (\r\n                    EditMonth !== month ||\r\n                    EditDay !== day ||\r\n                    EditYear !== year\r\n                  ) {\r\n                    GetTimeSlots();\r\n                    setTimeslotDisplay(\"none\");\r\n                    setTimeTextDisplay(\"block\");\r\n                    setEditTime(\"Edit\");\r\n                    onPreview({\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      flexible,\r\n                      slotId,\r\n                      appDesc,\r\n                      EditYear,\r\n                      EditMonth,\r\n                      EditDay,\r\n                    });\r\n                    onUpdateDate(\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      flexible,\r\n                      slotId,\r\n                      appDesc,\r\n                      EditYear,\r\n                      EditMonth,\r\n                      EditDay\r\n                    );\r\n                    setTimeSlotInfoDisplay(\"none\");\r\n                  } else {\r\n                    GetTimeSlots();\r\n                    setTimeslotDisplay(\"none\");\r\n                    setTimeTextDisplay(\"block\");\r\n                    setEditTime(\"Edit\");\r\n                    onPreview({\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      flexible,\r\n                      slotId,\r\n                      appDesc,\r\n                      EditYear,\r\n                      EditMonth,\r\n                      EditDay,\r\n                    });\r\n                    onAppointmentEdit(\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      flexible,\r\n                      slotId,\r\n                      appDesc,\r\n                      EditYear,\r\n                      EditMonth,\r\n                      EditDay\r\n                    );\r\n                  }\r\n                }}\r\n              >\r\n                {editTime}\r\n              </BlueUnderlinePointerPara>\r\n            </HeaderDiv>\r\n          </FlexContCenterAlign>\r\n\r\n          <FlexContCenterAlign>\r\n            <TimeSlotDiv timeslotDisplay={timeslotDisplay}>\r\n              <SubHeaderPara>Change Time to:</SubHeaderPara>\r\n              <QuestionMarkImg\r\n                src=\"/questionmark.svg\"\r\n                onClick={() => {\r\n                  if (timeSlotInfoDisplay === \"none\") {\r\n                    setTimeSlotInfoDisplay(\"block\");\r\n                  } else if (timeSlotInfoDisplay === \"block\") {\r\n                    setTimeSlotInfoDisplay(\"none\");\r\n                  }\r\n                }}\r\n              ></QuestionMarkImg>\r\n              <select\r\n                id=\"timeslots\"\r\n                onChange={(e) => {\r\n                  if (e.target.value === 0 || e.target.value === \"0\") {\r\n                    setSlotId(currentTimeslotId);\r\n                  } else {\r\n                    setSlotId(e.target.value);\r\n                  }\r\n                }}\r\n              >\r\n                <option value={0}>Select Timeslot</option>\r\n                {timeSlots.map((o, i) => {\r\n                  if (o.Start_Minute === 0 && o.End_Minute === 0) {\r\n                    return (\r\n                      <option value={o.Id}>\r\n                        {o.Start_Hour +\r\n                          \":\" +\r\n                          o.Start_Minute +\r\n                          0 +\r\n                          \" - \" +\r\n                          o.End_Hour +\r\n                          \":\" +\r\n                          o.End_Minute +\r\n                          0}\r\n                      </option>\r\n                    ); // eslint-disable-line prefer-template\r\n                  } else if (o.End_Minute === 0) {\r\n                    return (\r\n                      <option value={o.Id}>\r\n                        {o.Start_Hour +\r\n                          \":\" +\r\n                          o.Start_Minute +\r\n                          \" - \" +\r\n                          o.End_Hour +\r\n                          \":\" +\r\n                          o.End_Minute +\r\n                          0}\r\n                      </option>\r\n                    );\r\n                  } else if (o.Start_Minute === 0) {\r\n                    return (\r\n                      <option value={o.Id}>\r\n                        {o.Start_Hour +\r\n                          \":\" +\r\n                          o.Start_Minute +\r\n                          0 +\r\n                          \" - \" +\r\n                          o.End_Hour +\r\n                          \":\" +\r\n                          o.End_Minute}\r\n                      </option>\r\n                    ); // eslint-disable-line prefer-template\r\n                  } else {\r\n                    return (\r\n                      <option value={o.Id}>\r\n                        {o.Start_Hour +\r\n                          \":\" +\r\n                          o.Start_Minute +\r\n                          \" - \" +\r\n                          o.End_Hour +\r\n                          \":\" +\r\n                          o.End_Minute}\r\n                      </option>\r\n                    );\r\n                  }\r\n                })}\r\n              </select>\r\n            </TimeSlotDiv>\r\n          </FlexContCenterAlign>\r\n          <ExplainerPara displayProp={timeSlotInfoDisplay}>\r\n            If \"Select Slot\" is the only option available, there are no more\r\n            open timeslots on your date of choice.\r\n          </ExplainerPara>\r\n          <FlexContCenterAlign>\r\n            <TimeSlotDiv timeslotDisplay={timeslotDisplay}>\r\n              <SubHeaderPara>Change Date to:</SubHeaderPara>\r\n              <DatePickDiv datedisplay={timeslotDisplay}>\r\n                <DatePicker\r\n                  style={{ marginRight: \"10px\" }}\r\n                  selected={startDate}\r\n                  filterDate={isWeekday}\r\n                  onChange={(date) => {\r\n                    setStartDate(date);\r\n                    startDateSync = date;\r\n                    HandleStartDate();\r\n                  }}\r\n                  dateFormat=\"MM/dd/yyyy\"\r\n                  minDate={subDays(new Date(), 0)}\r\n                  timeClassName={handleColor}\r\n                  placeholderText=\"Click to select a date\"\r\n                  showMonthDropdown\r\n                ></DatePicker>\r\n              </DatePickDiv>\r\n            </TimeSlotDiv>\r\n          </FlexContCenterAlign>\r\n\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>\r\n              Flexible?\r\n              <QuestionMarkImg\r\n                src=\"/questionmark.svg\"\r\n                onClick={() => {\r\n                  if (flexibleDisplayProp === \"none\") {\r\n                    setFlexibleDisplayProp(\"block\");\r\n                  } else if (flexibleDisplayProp === \"block\") {\r\n                    setFlexibleDisplayProp(\"none\");\r\n                  }\r\n                }}\r\n              ></QuestionMarkImg>\r\n            </SubHeaderPara>\r\n            <CancelAppointmentWindow\r\n              deleteOpen={cancelAppointment}\r\n              closeDel={() => {\r\n                setCancelAppointment(false);\r\n              }}\r\n              onDeleteFunction={() => {\r\n                setCancelAppointment(false);\r\n                onClose();\r\n                CancelAppointment();\r\n              }}\r\n            ></CancelAppointmentWindow>\r\n            <RadioDiv>\r\n              <RadioButtonInnerDiv>\r\n                <input\r\n                  type=\"radio\"\r\n                  id=\"yes\"\r\n                  name=\"flexible\"\r\n                  defaultChecked={type1}\r\n                  onChange={() => {\r\n                    flexible = true;\r\n                    onPreview({\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      flexible,\r\n                      slotId,\r\n                      appDesc,\r\n                      EditYear,\r\n                      EditMonth,\r\n                      EditDay,\r\n                    });\r\n                    onAppointmentEdit(\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      flexible,\r\n                      slotId,\r\n                      appDesc,\r\n                      EditYear,\r\n                      EditMonth,\r\n                      EditDay\r\n                    );\r\n                  }}\r\n                />\r\n                <label htmlFor=\"yes\">Yes</label>\r\n                <br />\r\n                <input\r\n                  type=\"radio\"\r\n                  id=\"no\"\r\n                  name=\"flexible\"\r\n                  defaultChecked={type2}\r\n                  onChange={() => {\r\n                    flexible = false;\r\n                    onPreview({\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      flexible,\r\n                      slotId,\r\n                      appDesc,\r\n                      EditYear,\r\n                      EditMonth,\r\n                      EditDay,\r\n                    });\r\n                    onAppointmentEdit(\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      flexible,\r\n                      slotId,\r\n                      appDesc,\r\n                      EditYear,\r\n                      EditMonth,\r\n                      EditDay\r\n                    );\r\n                  }}\r\n                />\r\n                <label htmlFor=\"no\">No</label>\r\n                <br />\r\n              </RadioButtonInnerDiv>\r\n            </RadioDiv>\r\n          </FlexContCenterAlign>\r\n          <ExplainerPara displayProp={flexibleDisplayProp}>\r\n            If Flexible is set to Yes, then your appointment will be moved to an\r\n            earlier time automatically when other people cancel their\r\n            appointments.\r\n          </ExplainerPara>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>Notes for Meeting</SubHeaderPara>\r\n            <SubHeaderPara textDisplay={notesDisplayText}>\r\n              {dfNotes}\r\n            </SubHeaderPara>\r\n            <div key={defaultNotes}>\r\n              <LandscapePara\r\n                maxLength=\"250\"\r\n                defaultValue={defaultNotes}\r\n                inputdisplay={notesDisplay}\r\n                onChange={(e) => {\r\n                  setAppDesc(e.target.value);\r\n                }}\r\n              ></LandscapePara>\r\n            </div>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                if (edit1 === \"Edit\") {\r\n                  setNotesDisplay(\"block\");\r\n                  setNotesDisplayText(\"none\");\r\n                  setEdit1(\"Save\");\r\n                } else {\r\n                  setNotesDisplay(\"none\");\r\n                  setNotesDisplayText(\"block\");\r\n                  setEdit1(\"Edit\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                  });\r\n                  onAppointmentEdit(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay\r\n                  );\r\n                }\r\n              }}\r\n            >\r\n              {edit1}\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>Contact Name</SubHeaderPara>\r\n            <SubHeaderPara textDisplay={nameDisplayText}>\r\n              {dfName}\r\n            </SubHeaderPara>\r\n            <div key={defaultContact}>\r\n              <TextInputProp\r\n                defaultValue={defaultContact}\r\n                inputdisplay={nameDisplay}\r\n                onChange={(e) => {\r\n                  setContactName(e.target.value);\r\n                }}\r\n              ></TextInputProp>\r\n            </div>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                if (edit2 === \"Edit\") {\r\n                  setNameDisplay(\"block\");\r\n                  setNameDisplayText(\"none\");\r\n                  setEdit2(\"Save\");\r\n                } else {\r\n                  setNameDisplay(\"none\");\r\n                  setNameDisplayText(\"block\");\r\n                  setEdit2(\"Edit\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                  });\r\n                  onAppointmentEdit(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay\r\n                  );\r\n                }\r\n              }}\r\n            >\r\n              {edit2}\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>Address</SubHeaderPara>\r\n            <SubHeaderPara textDisplay={addressDisplayText}>\r\n              {dfAddress}\r\n            </SubHeaderPara>\r\n            <div key={defaultAddress}>\r\n              <TextInputProp\r\n                defaultValue={defaultAddress}\r\n                inputdisplay={addressDisplay}\r\n                onChange={(e) => {\r\n                  setAddress(e.target.value);\r\n                }}\r\n              ></TextInputProp>\r\n            </div>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                if (edit3 === \"Edit\") {\r\n                  setAddressDisplay(\"block\");\r\n                  setAddressDisplayText(\"none\");\r\n                  setEdit3(\"Save\");\r\n                } else {\r\n                  setAddressDisplay(\"none\");\r\n                  setAddressDisplayText(\"block\");\r\n                  setEdit3(\"Edit\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                  });\r\n                  onAppointmentEdit(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay\r\n                  );\r\n                }\r\n              }}\r\n            >\r\n              {edit3}\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>City</SubHeaderPara>\r\n            <SubHeaderPara textDisplay={cityDisplayText}>\r\n              {dfCity}\r\n            </SubHeaderPara>\r\n            <div key={defaultCity}>\r\n              <TextInputProp\r\n                defaultValue={defaultCity}\r\n                inputdisplay={cityDisplay}\r\n                onChange={(e) => {\r\n                  setCity(e.target.value);\r\n                }}\r\n              ></TextInputProp>\r\n            </div>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                if (edit4 === \"Edit\") {\r\n                  setCityDisplay(\"block\");\r\n                  setCityDisplayText(\"none\");\r\n                  setEdit4(\"Save\");\r\n                } else {\r\n                  setCityDisplay(\"none\");\r\n                  setCityDisplayText(\"block\");\r\n                  setEdit4(\"Edit\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                  });\r\n                  onAppointmentEdit(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay\r\n                  );\r\n                }\r\n              }}\r\n            >\r\n              {edit4}\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>Cell Phone</SubHeaderPara>\r\n            <SubHeaderPara textDisplay={phoneDisplayText}>\r\n              {dfCellPhone}\r\n            </SubHeaderPara>\r\n            <div key={defaultPhone}>\r\n              <TextInputProp\r\n                defaultValue={defaultPhone}\r\n                inputdisplay={phoneDisplay}\r\n                onChange={(e) => {\r\n                  setPhone(e.target.value);\r\n                }}\r\n              ></TextInputProp>\r\n            </div>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                if (edit5 === \"Edit\") {\r\n                  setPhoneDisplay(\"block\");\r\n                  setPhoneDisplayText(\"none\");\r\n                  setEdit5(\"Save\");\r\n                } else {\r\n                  setPhoneDisplay(\"none\");\r\n                  setPhoneDisplayText(\"block\");\r\n                  setEdit5(\"Edit\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                  });\r\n                  onAppointmentEdit(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay\r\n                  );\r\n                }\r\n              }}\r\n            >\r\n              {edit5}\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContCenterAlign>\r\n          <ButtonDiv>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                onClose();\r\n                setNotesDisplay(\"none\");\r\n                setNameDisplay(\"none\");\r\n                setAddressDisplay(\"none\");\r\n                setCityDisplay(\"none\");\r\n                setPhoneDisplay(\"none\");\r\n                setNotesDisplayText(\"block\");\r\n                setNameDisplayText(\"block\");\r\n                setAddressDisplayText(\"block\");\r\n                setCityDisplayText(\"block\");\r\n                setPhoneDisplayText(\"block\");\r\n                setEdit1(\"Edit\");\r\n                setEdit2(\"Edit\");\r\n                setEdit3(\"Edit\");\r\n                setEdit4(\"Edit\");\r\n                setEdit5(\"Edit\");\r\n              }}\r\n            >\r\n              Close\r\n            </RegularResponsiveButton>\r\n          </ButtonDiv>\r\n        </AppointmentCreationDiv>\r\n      </ItemCont>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nEditAppointment.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onAppointmentEdit: () => {},\r\n  CancelAppointment: () => {},\r\n  onUpdateDate: () => {},\r\n  month: 0,\r\n  year: 0,\r\n  day: 0,\r\n  dfName: \"\",\r\n  dfAddress: \"\",\r\n  dfCity: \"\",\r\n  dfCellPhone: \"\",\r\n  dfFlex: false,\r\n  dfNotes: \"\",\r\n  installerId: 0,\r\n  appointmentTime: \"\",\r\n  currentTimeslotId: 0,\r\n};\r\n\r\nexport default EditAppointment;\r\n","/* eslint-disable */\r\n\r\nimport axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport EditAppointment from \"../../comps/EditAppointment\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\n\r\nimport format from \"date-fns/format\";\r\nimport getDay from \"date-fns/getDay\";\r\nimport parse from \"date-fns/parse\";\r\nimport startOfWeek from \"date-fns/startOfWeek\";\r\nimport { Calendar, dateFnsLocalizer } from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexContMobileColumn,\r\n  FlexRowContFullWidth,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\n\r\nconst MyCalendarScreen = ({ onPreview, onProfileUpdated }) => {\r\n  //==============================================================================\r\n  // MyCalendar / Personal Calendar Screen - Users view their Appointments here\r\n  //==============================================================================\r\n\r\n  //==============================================================================\r\n  // Users can reschedule, cancel, etc. on this page for all of their Appointments\r\n  //==============================================================================\r\n\r\n  const [isEditAppointment, setIsEditAppointment] = useState(false);\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  var appointmentId = 0;\r\n\r\n  const locales = {\r\n    \"en-US\": require(\"date-fns/locale/en-US\"),\r\n  };\r\n\r\n  const localizer = dateFnsLocalizer({\r\n    format,\r\n    parse,\r\n    startOfWeek,\r\n    getDay,\r\n    locales,\r\n  });\r\n\r\n  const D = new Date();\r\n  const currentYear = D.getFullYear();\r\n  const currentMonth = D.getMonth() + 1;\r\n  const [appointmentList, setAppointmentList] = useState([]);\r\n\r\n  const [calendarMonth, setCalendarMonth] = useState(currentMonth);\r\n\r\n  const GetUserAppointments = async () => {\r\n    const resp = await axios.post(window.$DBURL + \"appointment/user\", {\r\n      Year: currentYear,\r\n      Month: currentMonth,\r\n      Day: 0,\r\n    });\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.appointment !== null) {\r\n          if (resp.data.appointment.length > 0) {\r\n            setAppointmentList(resp.data.appointment);\r\n            setStartTimeSlot(resp.data.appointment[0].Start.Hour);\r\n            setStartTimeSlotMinute(resp.data.appointment[0].Start.Minute);\r\n            setEndTimeSlot(\r\n              resp.data.appointment[resp.data.appointment.length - 1].End.Hour\r\n            );\r\n            setEndTimeSlotMinute(\r\n              resp.data.appointment[resp.data.appointment.length - 1].End.Minute\r\n            );\r\n          } else {\r\n            setAppointmentList([]);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n  };\r\n  const GetUserAppointmentsAsync = async () => {\r\n    const resp = await axios.post(window.$DBURL + \"appointment/user\", {\r\n      Year: currentYear,\r\n      Month: calendarMonth,\r\n      Day: 0,\r\n    });\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.appointment !== null) {\r\n          if (resp.data.appointment.length > 0) {\r\n            setStartTimeSlot(resp.data.appointment[0].Start.Hour);\r\n            setStartTimeSlotMinute(resp.data.appointment[0].Start.Minute);\r\n            setEndTimeSlot(\r\n              resp.data.appointment[resp.data.appointment.length - 1].End.Hour\r\n            );\r\n            setEndTimeSlotMinute(\r\n              resp.data.appointment[resp.data.appointment.length - 1].End.Minute\r\n            );\r\n\r\n            setAppointmentList(resp.data.appointment);\r\n          } else {\r\n            setAppointmentList([]);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n  };\r\n\r\n  const [nameofUser, setNameOfUser] = useState(\"\");\r\n\r\n  const GetSessionInfo = async () => {\r\n    if (JSON.parse(sessionStorage.getItem(\"userInfo\")).Name !== null) {\r\n      setNameOfUser(JSON.parse(sessionStorage.getItem(\"userInfo\")).Name);\r\n    } else {\r\n      setNameOfUser(\"Homeowner\");\r\n    }\r\n  };\r\n\r\n  const history = useHistory();\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n  });\r\n\r\n  useEffect(() => {\r\n    GetUserAppointmentsAsync();\r\n    GetSessionInfo();\r\n  }, [calendarMonth]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const [appDay, setAppDay] = useState(0);\r\n  const [appMonth, setAppMonth] = useState(0);\r\n  const [appYear, setAppYear] = useState(0);\r\n\r\n  const [startHour, setStartHour] = useState(0);\r\n  const [startMinute, setStartMinute] = useState(0);\r\n  const [endHour, setEndHour] = useState(0);\r\n  const [endMinute, setEndMinute] = useState(0);\r\n\r\n  const [flexible, setFlexible] = useState(false);\r\n\r\n  const [slotId, setSlotId] = useState(0);\r\n  const [appId, setAppId] = useState(0);\r\n\r\n  const [contactName, setContactName] = useState(\"\");\r\n  const [appDesc, setAppDesc] = useState(\"\");\r\n  const [address, setAddress] = useState(\"\");\r\n  const [phone, setPhone] = useState(\"\");\r\n  const [city, setCity] = useState(\"\");\r\n\r\n  const [installerId, setInstallerId] = useState(0);\r\n\r\n  const [appointmentIdAsync, setAppointmentIdAsync] = useState(0);\r\n\r\n  var contactNameNew = \"\";\r\n  var addressNew = \"\";\r\n  var phoneNew = \"\";\r\n  var cityNew = \"\";\r\n  var flexibleNew = \"\";\r\n  var slotIdNew = 0;\r\n  var appDescNew = \"\";\r\n  var newDay = \"\";\r\n  var newMonth = \"\";\r\n  var newYear = \"\";\r\n\r\n  const HandleAppointmentForm = async ({\r\n    contactName,\r\n    address,\r\n    phone,\r\n    city,\r\n    flexible,\r\n    slotId,\r\n    appDesc,\r\n    EditYear,\r\n    EditMonth,\r\n    EditDay,\r\n  }) => {\r\n    contactNameNew = contactName;\r\n    addressNew = address;\r\n    phoneNew = phone;\r\n    cityNew = city;\r\n    // setStartDateNew(startDate);\r\n    flexibleNew = flexible;\r\n    slotIdNew = slotId;\r\n    appDescNew = appDesc;\r\n    newDay = EditDay;\r\n    newMonth = EditMonth;\r\n    newYear = EditYear;\r\n  };\r\n\r\n  const HandleAppointmentUpdated = async ({\r\n    editName,\r\n    editAddress,\r\n    editPhone,\r\n    editCity,\r\n    editFlexible,\r\n    editSlotId,\r\n    editAppDesc,\r\n  }) => {\r\n    if (\r\n      (newDay === appDay &&\r\n        newMonth === appMonth &&\r\n        newYear === appYear &&\r\n        slotIdNew === slotId) ||\r\n      slotIdNew === 0\r\n    ) {\r\n      const resp = await axios.put(window.$DBURL + \"appointment\", {\r\n        Id: appId,\r\n        DailyOpenSlot_Id: slotIdNew || slotId,\r\n        Day: newDay || appDay,\r\n        Month: newMonth || appMonth,\r\n        Year: newYear || appYear,\r\n        Flexible: flexibleNew,\r\n        Contactname: contactNameNew || contactName,\r\n        Phone: phoneNew || phone,\r\n        City: cityNew || city,\r\n        Street: addressNew || address,\r\n        Description: appDescNew || appDesc,\r\n      });\r\n      if (resp.status === 200) {\r\n        GetAppointmentInfoAsync();\r\n        GetUserAppointmentsAsync();\r\n      }\r\n    } else {\r\n      const resp = await axios.put(window.$DBURL + \"appointment/all\", {\r\n        Id: appId,\r\n        DailyOpenSlot_Id: slotIdNew || slotId,\r\n        Day: newDay || appDay,\r\n        Month: newMonth || appMonth,\r\n        Year: newYear || appYear,\r\n        Flexible: flexibleNew,\r\n        Contactname: contactNameNew || contactName,\r\n        Phone: phoneNew || phone,\r\n        City: cityNew || city,\r\n        Street: addressNew || address,\r\n        Description: appDescNew || appDesc,\r\n      });\r\n      if (resp.status === 200) {\r\n        GetAppointmentInfoAsync();\r\n        GetUserAppointmentsAsync();\r\n      }\r\n    }\r\n  };\r\n\r\n  const HandleCancel = async () => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL + \"appointment/cancel/\" + appointmentIdAsync\r\n    );\r\n    if (resp.status === 200) {\r\n      GetAppointmentInfoAsync();\r\n      GetUserAppointmentsAsync();\r\n    }\r\n  };\r\n\r\n  const GetAppointmentInfoAsync = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"appointment/\" + appointmentIdAsync\r\n    );\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.appointment !== null) {\r\n          setAppDay(resp.data.appointment.Day);\r\n          setAppMonth(resp.data.appointment.Month);\r\n          setAppYear(resp.data.appointment.Year);\r\n\r\n          setFlexible(resp.data.appointment.Flexible);\r\n          setSlotId(resp.data.appointment.DailyOpenSlot_Id);\r\n          setAppId(resp.data.appointment.Id);\r\n\r\n          setContactName(resp.data.appointment.Contactname);\r\n          setAppDesc(resp.data.appointment.Description);\r\n          setAddress(resp.data.appointment.Street);\r\n          setPhone(resp.data.appointment.Phone);\r\n          setCity(resp.data.appointment.City);\r\n\r\n          setInstallerId(resp.data.appointment.Installer_Id);\r\n\r\n          if (resp.data.appointment.Start !== null) {\r\n            setStartHour(resp.data.appointment.Start.Hour);\r\n            setStartMinute(resp.data.appointment.Start.Minute);\r\n          }\r\n\r\n          if (resp.data.appointment.End !== null) {\r\n            setEndHour(resp.data.appointment.End.Hour);\r\n            setEndMinute(resp.data.appointment.End.Minute);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetAppointmentInfo = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"appointment/\" + appointmentId\r\n    );\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.appointment !== null) {\r\n          setAppDay(resp.data.appointment.Day);\r\n          setAppMonth(resp.data.appointment.Month);\r\n          setAppYear(resp.data.appointment.Year);\r\n\r\n          // setStartMinute(resp.data.appointment.Start.Minute)\r\n          // setEndMinute(resp.data.appointment.End.Minute)\r\n\r\n          setFlexible(resp.data.appointment.Flexible);\r\n          setSlotId(resp.data.appointment.DailyOpenSlot_Id);\r\n          setAppId(resp.data.appointment.Id);\r\n\r\n          setContactName(resp.data.appointment.Contactname);\r\n          setAppDesc(resp.data.appointment.Description);\r\n          setAddress(resp.data.appointment.Street);\r\n          setPhone(resp.data.appointment.Phone);\r\n          setCity(resp.data.appointment.City);\r\n\r\n          setInstallerId(resp.data.appointment.Installer_Id);\r\n          if (resp.data.appointment.Start !== null) {\r\n            setStartHour(resp.data.appointment.Start.Hour);\r\n          }\r\n\r\n          if (resp.data.appointment.End !== null) {\r\n            setEndHour(resp.data.appointment.End.Hour);\r\n          }\r\n\r\n          if (\r\n            resp.data.appointment.Start.Minute === 0 &&\r\n            resp.data.appointment.End.Minute === 0\r\n          ) {\r\n            setStartMinute(\"00\");\r\n            setEndMinute(\"00\");\r\n          } else if (resp.data.appointment.End.Minute === 0) {\r\n            setEndMinute(\"00\");\r\n          } else if (resp.data.appointment.Start.Minute === 0) {\r\n            setStartMinute(\"00\");\r\n          } else {\r\n            setStartMinute(resp.data.appointment.Start.Minute);\r\n            setEndMinute(resp.data.appointment.End.Minute);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const closeDayPropGetter = (date) => {\r\n    var obj = appointmentList.find((o, i) => {\r\n      if (\r\n        o.Day === date.getDate() &&\r\n        o.Month === date.getMonth() + 1 &&\r\n        o.Year === date.getFullYear()\r\n      )\r\n        return appointmentList[i];\r\n    });\r\n    if (\r\n      obj !== undefined &&\r\n      obj.Day === date.getDate() &&\r\n      obj.Month === date.getMonth() + 1 &&\r\n      obj.Year === date.getFullYear()\r\n    )\r\n      return { style: { backgroundColor: \"#169ADB\" } };\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetUserAppointments();\r\n  }, []);\r\n\r\n  const [startTimeSlot, setStartTimeSlot] = useState(0);\r\n  const [endTimeSlot, setEndTimeSlot] = useState(0);\r\n\r\n  const [startTimeSlotMinute, setStartTimeSlotMinute] = useState(0);\r\n  const [endTimeSlotMinute, setEndTimeSlotMinute] = useState(0);\r\n\r\n  const calendarStyle = {\r\n    height: \"65vh\",\r\n    width: \"100%\",\r\n    \"@media (maxWidth: 1006px)\": {\r\n      height: \"65vh\",\r\n    },\r\n  };\r\n  if (roleNum !== 1000) {\r\n    return (\r\n      <FlexContMobileColumn>\r\n        <FullWidthMobileCont100vw100vh>\r\n          <Menu> </Menu>\r\n        </FullWidthMobileCont100vw100vh>\r\n\r\n        <FlexColumnCont80vwAutoHeight>\r\n          <ActionMenu\r\n            mobilePageProp=\"Calendar\"\r\n            pageProp={\"My Calendar\"}\r\n            calendarbottom={\"4px solid #169ADB\"}\r\n          ></ActionMenu>\r\n          <FlexRowContFullWidth>\r\n            <EditAppointment\r\n              currentTimeslotId={slotId}\r\n              appointmentTime={\r\n                startHour +\r\n                \":\" +\r\n                startMinute +\r\n                \" - \" +\r\n                endHour +\r\n                \":\" +\r\n                endMinute\r\n              }\r\n              CancelAppointment={HandleCancel}\r\n              onPreview={HandleAppointmentForm}\r\n              onAppointmentEdit={HandleAppointmentUpdated}\r\n              onUpdateDate={HandleAppointmentUpdated}\r\n              installerId={installerId}\r\n              dfName={contactName}\r\n              dfNotes={appDesc}\r\n              dfAddress={address}\r\n              dfCity={city}\r\n              dfCellPhone={phone}\r\n              month={appMonth}\r\n              day={appDay}\r\n              year={appYear}\r\n              dfFlex={flexible}\r\n              open={isEditAppointment}\r\n              onClose={() => {\r\n                setIsEditAppointment(false);\r\n                GetUserAppointmentsAsync();\r\n              }}\r\n            ></EditAppointment>\r\n\r\n            <Calendar\r\n              key={appointmentList}\r\n              localizer={localizer}\r\n              events={appointmentList.map((o, i) => {\r\n                // if (appointmentList[0].length > 0) {\r\n                return {\r\n                  key: i,\r\n                  id: o.Id,\r\n                  title: o.Description + \" with \" + o.Contactname,\r\n                  start: new Date(\r\n                    o.Year,\r\n                    o.Month - 1,\r\n                    o.Day,\r\n                    o.Start.Hour,\r\n                    o.Start.Minute\r\n                  ),\r\n                  end: new Date(\r\n                    o.Year,\r\n                    o.Month - 1,\r\n                    o.Day,\r\n                    o.End.Hour,\r\n                    o.End.Minute\r\n                  ),\r\n                  allDay: false,\r\n                  // }\r\n                };\r\n              })}\r\n              startAccessor=\"start\"\r\n              endAccessor=\"end\"\r\n              // style={{height:\"75%\", width:\"100%\"}}\r\n              style={calendarStyle}\r\n              min={new Date(2021, 11, 0, startTimeSlot, startTimeSlotMinute, 0)}\r\n              max={new Date(2021, 11, 0, endTimeSlot, endTimeSlotMinute, 0)}\r\n              longPressThreshold={10}\r\n              views={{ month: true }}\r\n              dayPropGetter={closeDayPropGetter}\r\n              dayLayoutAlgorithm=\"no-overlap\"\r\n              onSelectEvent={(event) => {\r\n                setIsEditAppointment(true);\r\n                appointmentId = event.id;\r\n                setAppointmentIdAsync(event.id);\r\n                GetAppointmentInfo();\r\n              }}\r\n              popup\r\n              onNavigate={(date) => {\r\n                setCalendarMonth(date.getMonth() + 1);\r\n              }}\r\n            />\r\n          </FlexRowContFullWidth>\r\n        </FlexColumnCont80vwAutoHeight>\r\n      </FlexContMobileColumn>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nMyCalendarScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default MyCalendarScreen;\r\n","/* eslint-disable */\r\n\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport axios from \"axios\";\r\nimport format from \"date-fns/format\";\r\nimport getDay from \"date-fns/getDay\";\r\nimport parse from \"date-fns/parse\";\r\nimport startOfWeek from \"date-fns/startOfWeek\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { Calendar, dateFnsLocalizer } from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn,\r\n  FlexRowContFlexStart,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Icon30x40pxPointer } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { RegularText } from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreCalendarScreen = () => {\r\n  //=============================================================================\r\n  // Store Calendar Screen - View Availability for Appointments of Store\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Users can click on date to view installers available on that date\r\n  //=============================================================================\r\n\r\n  const history = useHistory();\r\n\r\n  const [storeId, setStoreId] = useState(0);\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [storeAppointments, setStoreAppointments] = useState([]);\r\n\r\n  const D = new Date();\r\n  const currentYear = D.getFullYear();\r\n  const currentMonth = D.getMonth() + 1;\r\n  const params = useParams();\r\n\r\n  const locales = {\r\n    \"en-US\": require(\"date-fns/locale/en-US\"),\r\n  };\r\n\r\n  const localizer = dateFnsLocalizer({\r\n    format,\r\n    parse,\r\n    startOfWeek,\r\n    getDay,\r\n    locales,\r\n  });\r\n\r\n  const GetSessionInfo = async () => {\r\n    try {\r\n      const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n      if (!userInfo) throw new Error(\"No userInfo found in sessionStorage\");\r\n\r\n      setStoreId(userInfo.Store_Id);\r\n      if (storeId === 0) {\r\n        GetAppointmentsSync();\r\n      } else {\r\n        GetAppointmentsAsync();\r\n      }\r\n    } catch (error) {\r\n      // handle error\r\n    }\r\n  };\r\n\r\n  const [storeName, setStoreName] = useState(\"\");\r\n\r\n  const GetStoreInfo = async () => {\r\n    try {\r\n      const resp = await axios.get(`${window.$DBURL}store/${params.storeId}`);\r\n\r\n      if (resp.status === 200 && resp.data && resp.data.store) {\r\n        setStoreName(resp.data.store.Name);\r\n      }\r\n    } catch (error) {\r\n      // handle error\r\n    }\r\n  };\r\n\r\n  var fulldate = \"\";\r\n  var storeMonth = 0;\r\n  var storeYear = 0;\r\n  var storeDay = 0;\r\n\r\n  const GetAppointmentsSync = async () => {\r\n    try {\r\n      const resp = await axios.post(\r\n        `${window.$DBURL}appointment/store/calendar`,\r\n        {\r\n          Year: currentYear,\r\n          Month: currentMonth,\r\n          Store_Id: params.storeId,\r\n        }\r\n      );\r\n\r\n      if (resp.status === 200 && resp.data && resp.data.status) {\r\n        setStoreAppointments(resp.data.status);\r\n      }\r\n\r\n      const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n      if (!userInfo) throw new Error(\"No userInfo found in sessionStorage\");\r\n      setRoleNum(userInfo.Role);\r\n    } catch (error) {\r\n      // handle error\r\n    }\r\n  };\r\n\r\n  const GetAppointmentsAsync = async () => {\r\n    try {\r\n      const resp = await axios.post(\r\n        `${window.$DBURL}appointment/store/calendar`,\r\n        {\r\n          Year: currentYear,\r\n          Month: currentMonth,\r\n          Store_Id: params.storeId,\r\n        }\r\n      );\r\n\r\n      if (resp.status === 200 && resp.data && resp.data.status) {\r\n        setStoreAppointments(resp.data.status);\r\n      }\r\n\r\n      const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n      if (!userInfo) throw new Error(\"No userInfo found in sessionStorage\");\r\n      setRoleNum(userInfo.Role);\r\n    } catch (error) {\r\n      // handle error\r\n    }\r\n  };\r\n\r\n  const closeDayPropGetter = (date) => {\r\n    var obj = storeAppointments.find((o, i) => {\r\n      if (\r\n        (o.Date === date.getDate() &&\r\n          o.Month === date.getMonth() + 1 &&\r\n          o.Year === date.getFullYear() &&\r\n          o.Status === 1) ||\r\n        (o.Date === date.getDate() &&\r\n          o.Month === date.getMonth() + 1 &&\r\n          o.Year === date.getFullYear() &&\r\n          o.Status === 2)\r\n      )\r\n        return storeAppointments[i];\r\n    });\r\n    if (\r\n      obj !== undefined &&\r\n      obj.Date === date.getDate() &&\r\n      obj.Month === date.getMonth() + 1 &&\r\n      obj.Year === date.getFullYear() &&\r\n      obj.Status === 1\r\n    )\r\n      return { style: { backgroundColor: \"#169ADB\" } };\r\n    else if (\r\n      obj !== undefined &&\r\n      obj.Date === date.getDate() &&\r\n      obj.Month === date.getMonth() + 1 &&\r\n      obj.Year === date.getFullYear() &&\r\n      obj.Status === 2\r\n    )\r\n      return { style: { backgroundColor: \"red\" } };\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetSessionInfo();\r\n    GetStoreInfo();\r\n  }, []);\r\n\r\n  const calendarStyle = {\r\n    height: \"65vh\",\r\n    width: \"100%\",\r\n    \"@media (maxWidth: 1006px)\": {\r\n      height: \"65vw\",\r\n    },\r\n  };\r\n  if (roleNum !== 1000) {\r\n    return (\r\n      <FlexContMobileColumn>\r\n        <FullWidthMobileCont100vw100vh>\r\n          <Menu> </Menu>\r\n        </FullWidthMobileCont100vw100vh>\r\n        <FlexColumnCont80vwAutoHeight>\r\n          <ActionMenu\r\n            mobilePageProp=\"Store Calendar\"\r\n            pageProp={\"\"}\r\n            calendarbottom={\"4px solid #169ADB\"}\r\n          ></ActionMenu>\r\n          <FlexColumnFullWidth>\r\n            <FlexRowContFlexStart height=\"auto\">\r\n              <Icon30x40pxPointer\r\n                src=\"/backarrow.svg\"\r\n                onClick={() => {\r\n                  history.push(\"/storelistcalendars/\" + params.Id);\r\n                }}\r\n              ></Icon30x40pxPointer>\r\n              <RegularText>{storeName + \"'s Store Calendar\"}</RegularText>\r\n            </FlexRowContFlexStart>\r\n            <Calendar\r\n              events={[]}\r\n              localizer={localizer}\r\n              startAccessor=\"start\"\r\n              endAccessor=\"end\"\r\n              style={calendarStyle}\r\n              dayPropGetter={closeDayPropGetter}\r\n              views={{ month: true }}\r\n              longPressThreshold={10}\r\n              selectable={true}\r\n              dayLayoutAlgorithm=\"no-overlap\"\r\n              onSelectSlot={(slotInfo) => {\r\n                fulldate = slotInfo.slots[0];\r\n                storeMonth = fulldate.getMonth() + 1;\r\n                storeYear = fulldate.getFullYear();\r\n                storeDay = fulldate.getDate();\r\n                if (\r\n                  storeAppointments.find(function (o, i) {\r\n                    return (\r\n                      o.Date === fulldate.getDate() &&\r\n                      o.Month === fulldate.getMonth() + 1 &&\r\n                      o.Year === fulldate.getFullYear() &&\r\n                      o.Status === 2\r\n                    );\r\n                  })\r\n                ) {\r\n                } else if (D > fulldate) {\r\n                } else {\r\n                  history.push(\r\n                    \"/installersavailable/\" +\r\n                      params.Id +\r\n                      \"/\" +\r\n                      params.storeId +\r\n                      \"/\" +\r\n                      storeMonth +\r\n                      \"/\" +\r\n                      storeDay +\r\n                      \"/\" +\r\n                      storeYear +\r\n                      \"/\" +\r\n                      0 +\r\n                      \"/0\"\r\n                  );\r\n                }\r\n              }}\r\n            />\r\n          </FlexColumnFullWidth>\r\n        </FlexColumnCont80vwAutoHeight>\r\n      </FlexContMobileColumn>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nStoreCalendarScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default StoreCalendarScreen;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport styled from \"styled-components\";\r\n\r\nimport { Navigate } from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport DatePicker from \"react-datepicker\";\r\nimport PropTypes from \"prop-types\";\r\nimport * as dates from \"date-arithmetic\";\r\nimport TimeGrid from \"react-big-calendar/lib/TimeGrid\";\r\nimport { subDays } from \"date-fns\";\r\nimport DeleteProduct from \"../Windows/DeleteProduct\";\r\nimport { FixedOverlay200vh } from \"../../StylesheetComps/OverlayCont\";\r\nimport { BlueUnderlinePointerPara } from \"../../StylesheetComps/Titles\";\r\nimport { FlexContCenterAlign } from \"../../StylesheetComps/Cont\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\nconst ItemCont = styled.div`\r\n  background-color: white;\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  left: 30%;\r\n  width: 500px;\r\n  border-radius: 10px;\r\n  border: 1px solid black;\r\n  margin: 30px;\r\n  padding-left: 0.5%;\r\n  padding-right: 0.5%;\r\n  align-items: center;\r\n  justify-content: center;\r\n`;\r\n\r\nconst AppointmentCreationDiv = styled.div`\r\n  width: 95%;\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n  height: 80%;\r\n`;\r\n\r\nconst SubHeaderPara = styled.p`\r\n  font-family: Futura;\r\n  font-size: 16px;\r\n  width: 170px;\r\n  display: ${(props) => (props.textDisplay ? props.textDisplay : \"block\")};\r\n`;\r\n\r\nconst ButtonDiv = styled.div`\r\n  width: 60%;\r\n  display: flex;\r\n  justify-content: space-between;\r\n  margin-top: 1%;\r\n`;\r\n\r\nconst InputEdit = styled.input`\r\n  width: 80%;\r\n  height: 40%;\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"none\")};\r\n  margin-right: 2%;\r\n`;\r\n\r\nconst TextAreaEdit = styled.textarea`\r\n  width: 60%;\r\n  height: 20vh;\r\n  background-color: #ededed;\r\n  border: 0;\r\n  outline: none;\r\n  resize: none;\r\n  overflow: auto;\r\n  font-family: Futura;\r\n  font-size: 16px;\r\n  border-radius: 4px;\r\n  padding: 10px;\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"none\")};\r\n`;\r\n\r\nconst HeaderDiv = styled.div`\r\n  display: flex;\r\n  align-items: center;\r\n  width: 100%;\r\n  justify-content: space-around;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nconst DatePickDiv = styled.div`\r\n  display: ${(props) => (props.datedisplay ? props.datedisplay : \"none\")};\r\n`;\r\n\r\nconst TimeSlotDiv = styled.div`\r\n  display: ${(props) =>\r\n    props.timeslotDisplay ? props.timeslotDisplay : \"none\"};\r\n`;\r\n\r\nconst InputDivsTime = styled.div`\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"none\")};\r\n  justify-content: flex-start;\r\n  width: 100%;\r\n`;\r\n\r\nconst InputClosedDays = styled.input`\r\n  margin: 10px;\r\n  // width:10%;\r\n  height: 30px;\r\n`;\r\n\r\nconst InputDataList = styled.datalist``;\r\n\r\nconst InputOption = styled.option``;\r\n\r\nconst CloseDayInputText = styled.p`\r\n  font-family: Futura;\r\n  font-size: 18px;\r\n  width: 50px;\r\n  font-weight: bold;\r\n`;\r\n\r\nconst CancelAppointmentText = styled.p`\r\n  font-size: 14px;\r\n  color: red;\r\n  position: relative;\r\n  cursor: pointer;\r\n`;\r\n\r\nconst EditSchedule = ({\r\n  open,\r\n  onClose,\r\n  onPreview,\r\n  onScheduleEdit,\r\n  DeleteSchedule,\r\n  month,\r\n  day,\r\n  year,\r\n  dfName,\r\n  dfNotes,\r\n  dfAddress,\r\n  dfCellPhone,\r\n  dfCity,\r\n  dfFlex,\r\n  startHour,\r\n  endHour,\r\n  startMinute,\r\n  endMinute,\r\n}) => {\r\n  const [contactName, setContactName] = useState(\"\");\r\n  const [address, setAddress] = useState(\"\");\r\n  const [phone, setPhone] = useState(\"\");\r\n  const [city, setCity] = useState(\"\");\r\n\r\n  const [timeSlotDisplayProp] = useState(\"flex\");\r\n  const [openHourSelected, setOpenHourSelected] = useState(0);\r\n  const [openMinuteSelected, setOpenMinuteSelected] = useState(0);\r\n  const [closeHourSelected, setCloseHourSelected] = useState(0);\r\n  const [closeMinuteSelected, setCloseMinuteSelected] = useState(0);\r\n\r\n  const [appDesc, setAppDesc] = useState(\"\");\r\n\r\n  const [notesDisplay, setNotesDisplay] = useState(\"none\");\r\n  const [nameDisplay, setNameDisplay] = useState(\"none\");\r\n  const [addressDisplay, setAddressDisplay] = useState(\"none\");\r\n  const [cityDisplay, setCityDisplay] = useState(\"none\");\r\n  const [phoneDisplay, setPhoneDisplay] = useState(\"none\");\r\n\r\n  const [timeslotDisplay, setTimeslotDisplay] = useState(\"none\");\r\n\r\n  const [notesDisplayText, setNotesDisplayText] = useState(\"block\");\r\n  const [nameDisplayText, setNameDisplayText] = useState(\"block\");\r\n  const [addressDisplayText, setAddressDisplayText] = useState(\"block\");\r\n  const [cityDisplayText, setCityDisplayText] = useState(\"block\");\r\n  const [phoneDisplayText, setPhoneDisplayText] = useState(\"block\");\r\n\r\n  const [timeTextDisplay, setTimeTextDisplay] = useState(\"block\");\r\n\r\n  const [edit1, setEdit1] = useState(\"Edit\");\r\n  const [edit2, setEdit2] = useState(\"Edit\");\r\n  const [edit3, setEdit3] = useState(\"Edit\");\r\n  const [edit4, setEdit4] = useState(\"Edit\");\r\n  const [edit5, setEdit5] = useState(\"Edit\");\r\n  const [editTime, setEditTime] = useState(\"Edit\");\r\n\r\n  const [defaultNotes, setDefaultNotes] = useState(dfNotes);\r\n  const [defaultContact, setDefaultContact] = useState(dfName);\r\n  const [defaultAddress, setDefaultAddress] = useState(dfAddress);\r\n  const [defaultCity, setDefaultCity] = useState(dfCity);\r\n  const [defaultPhone, setDefaultPhone] = useState(dfCellPhone);\r\n\r\n  const [defaultStartHour, setDefaultStartHour] = useState(startHour);\r\n  const [defaultEndHour, setDefaultEndHour] = useState(endHour);\r\n  const [defaultStartMinute, setDefaultStartMinute] = useState(startMinute);\r\n  const [defaultEndMinute, setDefaultEndMinute] = useState(endMinute);\r\n\r\n  const [defaultMonth, setDefaultMonth] = useState(month);\r\n  const [defaultDay, setDefaultDay] = useState(day);\r\n  const [defaultYear, setDefaultYear] = useState(year);\r\n\r\n  class MyWeek extends React.Component {\r\n    render() {\r\n      let {\r\n        date,\r\n        localizer,\r\n        min = localizer.startOf(new Date(), \"day\"),\r\n        max = localizer.endOf(new Date(), \"day\"),\r\n        scrollToTime = localizer.startOf(new Date(), \"day\"),\r\n      } = this.props;\r\n      let range = MyWeek.range(date, { localizer });\r\n\r\n      return (\r\n        <TimeGrid\r\n          {...this.props}\r\n          range={range}\r\n          eventOffset={15}\r\n          localizer={localizer}\r\n          min={min}\r\n          max={max}\r\n          scrollToTime={scrollToTime}\r\n        />\r\n      );\r\n    }\r\n  }\r\n\r\n  MyWeek.propTypes = {\r\n    date: PropTypes.instanceOf(Date).isRequired,\r\n    localizer: PropTypes.any,\r\n    min: PropTypes.instanceOf(Date),\r\n    max: PropTypes.instanceOf(Date),\r\n    scrollToTime: PropTypes.instanceOf(Date),\r\n  };\r\n\r\n  MyWeek.range = (date, { localizer }) => {\r\n    let start = date;\r\n    let end = dates.add(start, 0, \"day\");\r\n\r\n    let current = start;\r\n    let range = [];\r\n\r\n    while (localizer.lte(current, end, \"day\")) {\r\n      range.push(current);\r\n      current = localizer.add(current, 1, \"day\");\r\n    }\r\n\r\n    return range;\r\n  };\r\n\r\n  MyWeek.navigate = (date, action, { localizer }) => {\r\n    switch (action) {\r\n      case Navigate.PREVIOUS:\r\n        return localizer.add(date, -1, \"day\");\r\n\r\n      case Navigate.NEXT:\r\n        return localizer.add(date, 1, \"day\");\r\n\r\n      default:\r\n        return date;\r\n    }\r\n  };\r\n\r\n  MyWeek.title = (date) => {\r\n    return `Installer Appointment Slots: ${date.toLocaleDateString()}`;\r\n  };\r\n\r\n  const [EditYear, setEditYear] = useState(0);\r\n  const [EditMonth, setEditMonth] = useState(0);\r\n  const [EditDay, setEditDay] = useState(0);\r\n  const [startDate, setStartDate] = useState(null);\r\n  var startDateSync = null;\r\n\r\n  const HandleStartDate = () => {\r\n    setEditDay(startDateSync.getDate());\r\n    setEditMonth(startDateSync.getMonth() + 1);\r\n    setEditYear(startDateSync.getFullYear());\r\n  };\r\n\r\n  let handleColor = (time) => {\r\n    return time.getHours() > 12 ? \"text-success\" : \"text-error\";\r\n  };\r\n\r\n  const [startMinuteParam, setStartMinuteParam] = useState(\"\");\r\n  const [endMinuteParam, setEndMinuteParam] = useState(\"\");\r\n\r\n  const CheckTimes = async () => {\r\n    if (startMinute === 0 && endMinute !== 0) {\r\n      setStartMinuteParam(startMinute + \"0\");\r\n    } else if (startMinute !== 0 && endMinute === 0) {\r\n      setEndMinuteParam(endMinute + \"0\");\r\n    } else if (startMinute === 0 && endMinute === 0) {\r\n      setStartMinuteParam(startMinute + \"0\");\r\n      setEndMinuteParam(endMinute + \"0\");\r\n    } else {\r\n      setStartMinuteParam(startMinute);\r\n      setEndMinuteParam(endMinute);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    CheckTimes();\r\n  }, [startMinute, endMinute]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    setDefaultNotes(dfNotes);\r\n    setDefaultContact(dfName);\r\n    setDefaultAddress(dfAddress);\r\n    setDefaultCity(dfCity);\r\n    setDefaultPhone(dfCellPhone);\r\n  }, [dfNotes]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    setDefaultContact(dfName);\r\n  }, [dfName]);\r\n\r\n  useEffect(() => {\r\n    setDefaultAddress(dfAddress);\r\n  }, [dfAddress]);\r\n\r\n  useEffect(() => {\r\n    setDefaultCity(dfCity);\r\n  }, [dfCity]);\r\n\r\n  useEffect(() => {\r\n    setDefaultPhone(dfCellPhone);\r\n  }, [dfCellPhone]);\r\n\r\n  useEffect(() => {\r\n    setDefaultStartHour(startHour);\r\n  }, [startHour]);\r\n\r\n  useEffect(() => {\r\n    setDefaultStartMinute(startMinute);\r\n  }, [startMinute]);\r\n\r\n  useEffect(() => {\r\n    setDefaultEndHour(endHour);\r\n  }, [endHour]);\r\n\r\n  useEffect(() => {\r\n    setDefaultEndMinute(endMinute);\r\n  }, [endMinute]);\r\n\r\n  useEffect(() => {\r\n    setDefaultMonth(month);\r\n  }, [month]);\r\n\r\n  useEffect(() => {\r\n    setDefaultDay(day);\r\n  }, [day]);\r\n\r\n  useEffect(() => {\r\n    setDefaultYear(year);\r\n  }, [year]);\r\n\r\n  const [cancelSchedule, setCancelSchedule] = useState(false);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <ItemCont>\r\n        <AppointmentCreationDiv>\r\n          <DeleteProduct\r\n            deleteOpen={cancelSchedule}\r\n            closeDel={() => {\r\n              setCancelSchedule(false);\r\n            }}\r\n            onDeleteFunction={() => {\r\n              setCancelSchedule(false);\r\n              onClose();\r\n              DeleteSchedule();\r\n            }}\r\n          ></DeleteProduct>\r\n          <CancelAppointmentText\r\n            onClick={() => {\r\n              setCancelSchedule(true);\r\n            }}\r\n          >\r\n            Delete Schedule\r\n          </CancelAppointmentText>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>Schedule Date/Time</SubHeaderPara>\r\n            <HeaderDiv>\r\n              <SubHeaderPara textDisplay={timeTextDisplay}>\r\n                {month}/{day}/{year}\r\n              </SubHeaderPara>\r\n              <SubHeaderPara textDisplay={timeTextDisplay}>\r\n                {startHour +\r\n                  \":\" +\r\n                  startMinuteParam +\r\n                  \" - \" +\r\n                  endHour +\r\n                  \":\" +\r\n                  endMinuteParam}\r\n              </SubHeaderPara>\r\n              <BlueUnderlinePointerPara\r\n                onClick={() => {\r\n                  if (editTime === \"Edit\") {\r\n                    setTimeslotDisplay(\"block\");\r\n                    setTimeTextDisplay(\"block\");\r\n                    setEditTime(\"Save\");\r\n                  } else {\r\n                    setTimeslotDisplay(\"none\");\r\n                    setTimeTextDisplay(\"block\");\r\n                    setEditTime(\"Edit\");\r\n                    onPreview({\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      appDesc,\r\n                      EditYear,\r\n                      EditMonth,\r\n                      EditDay,\r\n                      openHourSelected,\r\n                      openMinuteSelected,\r\n                      closeHourSelected,\r\n                      closeMinuteSelected,\r\n                    });\r\n                    onScheduleEdit(\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      appDesc,\r\n                      EditYear,\r\n                      EditMonth,\r\n                      EditDay,\r\n                      openHourSelected,\r\n                      openMinuteSelected,\r\n                      closeHourSelected,\r\n                      closeMinuteSelected\r\n                    );\r\n                  }\r\n                }}\r\n              >\r\n                {editTime}\r\n              </BlueUnderlinePointerPara>\r\n            </HeaderDiv>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <TimeSlotDiv timeslotDisplay={timeslotDisplay}>\r\n              <SubHeaderPara>Change Time to:</SubHeaderPara>\r\n\r\n              <InputDivsTime\r\n                inputdisplay={timeSlotDisplayProp}\r\n                key={defaultStartHour}\r\n              >\r\n                <CloseDayInputText>From:</CloseDayInputText>\r\n                <InputClosedDays\r\n                  defaultValue={defaultStartHour}\r\n                  type=\"text\"\r\n                  maxLength=\"2\"\r\n                  list=\"openhours\"\r\n                  onChange={(e) => {\r\n                    setOpenHourSelected(e.target.value);\r\n                  }}\r\n                />\r\n                <InputDataList id=\"openhours\">\r\n                  <InputOption value=\"1\"></InputOption>\r\n                  <InputOption value=\"2\"></InputOption>\r\n                  <InputOption value=\"3\"></InputOption>\r\n                  <InputOption value=\"4\"></InputOption>\r\n                  <InputOption value=\"5\"></InputOption>\r\n                  <InputOption value=\"6\"></InputOption>\r\n                  <InputOption value=\"7\"></InputOption>\r\n                  <InputOption value=\"8\"></InputOption>\r\n                  <InputOption value=\"9\"></InputOption>\r\n                  <InputOption value=\"10\"></InputOption>\r\n                  <InputOption value=\"11\"></InputOption>\r\n                  <InputOption value=\"12\"></InputOption>\r\n                  <InputOption value=\"13\"></InputOption>\r\n                  <InputOption value=\"14\"></InputOption>\r\n                  <InputOption value=\"15\"></InputOption>\r\n                  <InputOption value=\"16\"></InputOption>\r\n                  <InputOption value=\"17\"></InputOption>\r\n                  <InputOption value=\"18\"></InputOption>\r\n                  <InputOption value=\"19\"></InputOption>\r\n                  <InputOption value=\"20\"></InputOption>\r\n                  <InputOption value=\"21\"></InputOption>\r\n                  <InputOption value=\"22\"></InputOption>\r\n                  <InputOption value=\"23\"></InputOption>\r\n                  <InputOption value=\"24\"></InputOption>\r\n                </InputDataList>\r\n                <div key={defaultStartMinute}>\r\n                  <InputClosedDays\r\n                    defaultValue={defaultStartMinute}\r\n                    type=\"text\"\r\n                    maxLength=\"2\"\r\n                    list=\"openminutes\"\r\n                    onChange={(e) => {\r\n                      setOpenMinuteSelected(e.target.value);\r\n                    }}\r\n                  />\r\n                </div>\r\n                <InputDataList id=\"openminutes\"></InputDataList>\r\n              </InputDivsTime>\r\n\r\n              <InputDivsTime\r\n                inputdisplay={timeSlotDisplayProp}\r\n                key={defaultEndHour}\r\n              >\r\n                <CloseDayInputText>To:</CloseDayInputText>\r\n                <InputClosedDays\r\n                  defaultValue={defaultEndHour}\r\n                  type=\"text\"\r\n                  maxLength=\"2\"\r\n                  list=\"closehours\"\r\n                  onChange={(e) => {\r\n                    setCloseHourSelected(e.target.value);\r\n                  }}\r\n                />\r\n                <InputDataList id=\"closehours\">\r\n                  <InputOption value=\"1\"></InputOption>\r\n                  <InputOption value=\"2\"></InputOption>\r\n                  <InputOption value=\"3\"></InputOption>\r\n                  <InputOption value=\"4\"></InputOption>\r\n                  <InputOption value=\"5\"></InputOption>\r\n                  <InputOption value=\"6\"></InputOption>\r\n                  <InputOption value=\"7\"></InputOption>\r\n                  <InputOption value=\"8\"></InputOption>\r\n                  <InputOption value=\"9\"></InputOption>\r\n                  <InputOption value=\"10\"></InputOption>\r\n                  <InputOption value=\"11\"></InputOption>\r\n                  <InputOption value=\"12\"></InputOption>\r\n                  <InputOption value=\"13\"></InputOption>\r\n                  <InputOption value=\"14\"></InputOption>\r\n                  <InputOption value=\"15\"></InputOption>\r\n                  <InputOption value=\"16\"></InputOption>\r\n                  <InputOption value=\"17\"></InputOption>\r\n                  <InputOption value=\"18\"></InputOption>\r\n                  <InputOption value=\"19\"></InputOption>\r\n                  <InputOption value=\"20\"></InputOption>\r\n                  <InputOption value=\"21\"></InputOption>\r\n                  <InputOption value=\"22\"></InputOption>\r\n                  <InputOption value=\"23\"></InputOption>\r\n                  <InputOption value=\"24\"></InputOption>\r\n                </InputDataList>\r\n\r\n                <div key={defaultEndMinute}>\r\n                  <InputClosedDays\r\n                    defaultValue={defaultEndMinute}\r\n                    type=\"text\"\r\n                    maxLength=\"2\"\r\n                    list=\"closeminutes\"\r\n                    onChange={(e) => {\r\n                      setCloseMinuteSelected(e.target.value);\r\n                    }}\r\n                  />\r\n                </div>\r\n                <InputDataList id=\"closeminutes\"></InputDataList>\r\n              </InputDivsTime>\r\n            </TimeSlotDiv>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <TimeSlotDiv timeslotDisplay={timeslotDisplay}>\r\n              <SubHeaderPara>Change Date to:</SubHeaderPara>\r\n              <DatePickDiv datedisplay={timeslotDisplay} key={defaultDay}>\r\n                <DatePicker\r\n                  style={{ marginRight: \"10px\" }}\r\n                  selected={startDate}\r\n                  onChange={(date) => {\r\n                    setStartDate(date);\r\n                    startDateSync = date;\r\n                    HandleStartDate();\r\n                  }}\r\n                  dateFormat=\"MM/dd/yyyy\"\r\n                  minDate={subDays(new Date(), 0)}\r\n                  timeClassName={handleColor}\r\n                  placeholderText={\r\n                    defaultMonth + \"/\" + defaultDay + \"/\" + defaultYear\r\n                  }\r\n                  showMonthDropdown\r\n                ></DatePicker>\r\n              </DatePickDiv>\r\n            </TimeSlotDiv>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>Schedule Description</SubHeaderPara>\r\n            <SubHeaderPara textDisplay={notesDisplayText}>\r\n              {dfNotes}\r\n            </SubHeaderPara>\r\n            <div key={defaultNotes}>\r\n              <TextAreaEdit\r\n                defaultValue={defaultNotes}\r\n                inputdisplay={notesDisplay}\r\n                onChange={(e) => {\r\n                  setAppDesc(e.target.value);\r\n                }}\r\n              ></TextAreaEdit>\r\n            </div>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                if (edit1 === \"Edit\") {\r\n                  setNotesDisplay(\"block\");\r\n                  setNotesDisplayText(\"none\");\r\n                  setEdit1(\"Save\");\r\n                } else {\r\n                  setNotesDisplay(\"none\");\r\n                  setNotesDisplayText(\"block\");\r\n                  setEdit1(\"Edit\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                    openHourSelected,\r\n                    openMinuteSelected,\r\n                    closeHourSelected,\r\n                    closeMinuteSelected,\r\n                  });\r\n                  onScheduleEdit(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                    openHourSelected,\r\n                    openMinuteSelected,\r\n                    closeHourSelected,\r\n                    closeMinuteSelected\r\n                  );\r\n                }\r\n              }}\r\n            >\r\n              {edit1}\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>Contact Name</SubHeaderPara>\r\n            <SubHeaderPara textDisplay={nameDisplayText}>\r\n              {dfName}\r\n            </SubHeaderPara>\r\n            <div key={defaultContact}>\r\n              <InputEdit\r\n                defaultValue={defaultContact}\r\n                inputdisplay={nameDisplay}\r\n                onChange={(e) => {\r\n                  setContactName(e.target.value);\r\n                }}\r\n              ></InputEdit>\r\n            </div>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                if (edit2 === \"Edit\") {\r\n                  setNameDisplay(\"block\");\r\n                  setNameDisplayText(\"none\");\r\n                  setEdit2(\"Save\");\r\n                } else {\r\n                  setNameDisplay(\"none\");\r\n                  setNameDisplayText(\"block\");\r\n                  setEdit2(\"Edit\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                    openHourSelected,\r\n                    openMinuteSelected,\r\n                    closeHourSelected,\r\n                    closeMinuteSelected,\r\n                  });\r\n                  onScheduleEdit(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                    openHourSelected,\r\n                    openMinuteSelected,\r\n                    closeHourSelected,\r\n                    closeMinuteSelected\r\n                  );\r\n                }\r\n              }}\r\n            >\r\n              {edit2}\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>Address</SubHeaderPara>\r\n            <SubHeaderPara textDisplay={addressDisplayText}>\r\n              {dfAddress}\r\n            </SubHeaderPara>\r\n            <div key={defaultAddress}>\r\n              <InputEdit\r\n                defaultValue={defaultAddress}\r\n                inputdisplay={addressDisplay}\r\n                onChange={(e) => {\r\n                  setAddress(e.target.value);\r\n                }}\r\n              ></InputEdit>\r\n            </div>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                if (edit3 === \"Edit\") {\r\n                  setAddressDisplay(\"block\");\r\n                  setAddressDisplayText(\"none\");\r\n                  setEdit3(\"Save\");\r\n                } else {\r\n                  setAddressDisplay(\"none\");\r\n                  setAddressDisplayText(\"block\");\r\n                  setEdit3(\"Edit\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                    openHourSelected,\r\n                    openMinuteSelected,\r\n                    closeHourSelected,\r\n                    closeMinuteSelected,\r\n                  });\r\n                  onScheduleEdit(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                    openHourSelected,\r\n                    openMinuteSelected,\r\n                    closeHourSelected,\r\n                    closeMinuteSelected\r\n                  );\r\n                }\r\n              }}\r\n            >\r\n              {edit3}\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>City</SubHeaderPara>\r\n            <SubHeaderPara textDisplay={cityDisplayText}>\r\n              {dfCity}\r\n            </SubHeaderPara>\r\n            <div key={defaultCity}>\r\n              <InputEdit\r\n                defaultValue={defaultCity}\r\n                inputdisplay={cityDisplay}\r\n                onChange={(e) => {\r\n                  setCity(e.target.value);\r\n                }}\r\n              ></InputEdit>\r\n            </div>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                if (edit4 === \"Edit\") {\r\n                  setCityDisplay(\"block\");\r\n                  setCityDisplayText(\"none\");\r\n                  setEdit4(\"Save\");\r\n                } else {\r\n                  setCityDisplay(\"none\");\r\n                  setCityDisplayText(\"block\");\r\n                  setEdit4(\"Edit\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                    openHourSelected,\r\n                    openMinuteSelected,\r\n                    closeHourSelected,\r\n                    closeMinuteSelected,\r\n                  });\r\n                  onScheduleEdit(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                    openHourSelected,\r\n                    openMinuteSelected,\r\n                    closeHourSelected,\r\n                    closeMinuteSelected\r\n                  );\r\n                }\r\n              }}\r\n            >\r\n              {edit4}\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContCenterAlign>\r\n          <FlexContCenterAlign>\r\n            <SubHeaderPara>Cell Phone</SubHeaderPara>\r\n            <SubHeaderPara textDisplay={phoneDisplayText}>\r\n              {dfCellPhone}\r\n            </SubHeaderPara>\r\n            <div key={defaultPhone}>\r\n              <InputEdit\r\n                defaultValue={defaultPhone}\r\n                inputdisplay={phoneDisplay}\r\n                onChange={(e) => {\r\n                  setPhone(e.target.value);\r\n                }}\r\n              ></InputEdit>\r\n            </div>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                if (edit5 === \"Edit\") {\r\n                  setPhoneDisplay(\"block\");\r\n                  setPhoneDisplayText(\"none\");\r\n                  setEdit5(\"Save\");\r\n                } else {\r\n                  setPhoneDisplay(\"none\");\r\n                  setPhoneDisplayText(\"block\");\r\n                  setEdit5(\"Edit\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                    openHourSelected,\r\n                    openMinuteSelected,\r\n                    closeHourSelected,\r\n                    closeMinuteSelected,\r\n                  });\r\n                  onScheduleEdit(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    appDesc,\r\n                    EditYear,\r\n                    EditMonth,\r\n                    EditDay,\r\n                    openHourSelected,\r\n                    openMinuteSelected,\r\n                    closeHourSelected,\r\n                    closeMinuteSelected\r\n                  );\r\n                }\r\n              }}\r\n            >\r\n              {edit5}\r\n            </BlueUnderlinePointerPara>\r\n          </FlexContCenterAlign>\r\n          <ButtonDiv>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                onClose();\r\n                setNotesDisplay(\"none\");\r\n                setNameDisplay(\"none\");\r\n                setAddressDisplay(\"none\");\r\n                setCityDisplay(\"none\");\r\n                setPhoneDisplay(\"none\");\r\n                setNotesDisplayText(\"block\");\r\n                setNameDisplayText(\"block\");\r\n                setAddressDisplayText(\"block\");\r\n                setCityDisplayText(\"block\");\r\n                setPhoneDisplayText(\"block\");\r\n                setEdit1(\"Edit\");\r\n                setEdit2(\"Edit\");\r\n                setEdit3(\"Edit\");\r\n                setEdit4(\"Edit\");\r\n                setEdit5(\"Edit\");\r\n                setTimeslotDisplay(\"none\");\r\n                setTimeTextDisplay(\"block\");\r\n                setEditTime(\"Edit\");\r\n                setPhone(\"\");\r\n                setCity(\"\");\r\n                setAddress(\"\");\r\n                setContactName(\"\");\r\n                setAppDesc(\"\");\r\n                setOpenHourSelected(0);\r\n                setOpenMinuteSelected(0);\r\n                setCloseHourSelected(0);\r\n                setCloseMinuteSelected(0);\r\n                setEditMonth(0);\r\n                setEditYear(0);\r\n                setEditDay(0);\r\n              }}\r\n            >\r\n              Close\r\n            </RegularResponsiveButton>\r\n          </ButtonDiv>\r\n        </AppointmentCreationDiv>\r\n      </ItemCont>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nEditSchedule.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onScheduleEdit: () => {},\r\n  CancelAppointment: () => {},\r\n  month: 0,\r\n  year: 0,\r\n  day: 0,\r\n  dfName: \"\",\r\n  dfAddress: \"\",\r\n  dfCity: \"\",\r\n  dfCellPhone: \"\",\r\n  dfFlex: false,\r\n  dfNotes: \"\",\r\n  installerId: 0,\r\n  appointmentTime: \"\",\r\n  startHour: 0,\r\n  endHour: 0,\r\n  startMinute: 0,\r\n  endMinute: 0,\r\n};\r\n\r\nexport default EditSchedule;\r\n","/* eslint-disable */\r\n\r\nimport axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport EditSchedule from \"../../comps/EditSchedule\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\n\r\nimport format from \"date-fns/format\";\r\nimport getDay from \"date-fns/getDay\";\r\nimport parse from \"date-fns/parse\";\r\nimport startOfWeek from \"date-fns/startOfWeek\";\r\nimport { Calendar, dateFnsLocalizer, Views } from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst MyScheduleScreen = ({ onPreview, onProfileUpdated }) => {\r\n  //=============================================================================\r\n  // Store Schedule Screen -  View the schedules of all workers in a store\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Viewable by Manager of that store\r\n  //=============================================================================\r\n\r\n  const [isEditSchedule, setIsEditSchedule] = useState(false);\r\n  const D = new Date();\r\n  const currentYear = D.getFullYear();\r\n  const currentMonth = D.getMonth() + 1;\r\n  const [scheduleList, setScheduleList] = useState([]);\r\n  const [newEvent] = useState({ title: \"\", start: \"\", end: \"\" });\r\n  const [allEvents, setAllEvents] = useState();\r\n  var scheduleId = 0;\r\n  var storeIdSync = 0;\r\n\r\n  const history = useHistory();\r\n\r\n  const locales = {\r\n    \"en-US\": require(\"date-fns/locale/en-US\"),\r\n  };\r\n\r\n  const localizer = dateFnsLocalizer({\r\n    format,\r\n    parse,\r\n    startOfWeek,\r\n    getDay,\r\n    locales,\r\n  });\r\n\r\n  // USER INFO\r\n  const [userId, setUserId] = useState(0);\r\n  const [name, setName] = useState(\"\");\r\n  const [storeIdOfUser, setStoreIdOfUser] = useState(0);\r\n  const [metroIdOfUser, setMetroIdOfUser] = useState(0);\r\n\r\n  const GetSessionInfo = async () => {\r\n    setUserId(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n    setName(JSON.parse(sessionStorage.getItem(\"userInfo\")).Name);\r\n    setStoreIdOfUser(JSON.parse(sessionStorage.getItem(\"userInfo\")).Store_Id);\r\n    setMetroIdOfUser(JSON.parse(sessionStorage.getItem(\"userInfo\")).Metro_Id);\r\n    storeIdSync = JSON.parse(sessionStorage.getItem(\"userInfo\")).Store_Id;\r\n    GetUserSchedules();\r\n    GetStoreInfo();\r\n  };\r\n\r\n  const GetUserSchedules = async () => {\r\n    if (storeIdSync == 0) {\r\n      const resp = await axios.post(window.$DBURL + \"schedule/store\", {\r\n        Year: currentYear,\r\n        Month: currentMonth,\r\n        Id: storeIdOfUser,\r\n      });\r\n      if (resp.status == 200) {\r\n        if (resp.data !== null) {\r\n          if (resp.data.schedules !== null) {\r\n            setScheduleList(resp.data.schedules);\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      const resp = await axios.post(window.$DBURL + \"schedule/store\", {\r\n        Year: currentYear,\r\n        Month: currentMonth,\r\n        Id: storeIdSync,\r\n      });\r\n      if (resp.status == 200) {\r\n        if (resp.data !== null) {\r\n          if (resp.data.schedules !== null) {\r\n            setScheduleList(resp.data.schedules);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  //CURRENT SCHEDULE\r\n\r\n  const [appDay, setAppDay] = useState(0);\r\n  const [appMonth, setAppMonth] = useState(0);\r\n  const [appYear, setAppYear] = useState(0);\r\n\r\n  const [startHour, setStartHour] = useState(0);\r\n  const [startMinute, setStartMinute] = useState(0);\r\n  const [endHour, setEndHour] = useState(0);\r\n  const [endMinute, setEndMinute] = useState(0);\r\n\r\n  const [contactName, setContactName] = useState(\"\");\r\n  const [appDesc, setAppDesc] = useState(\"\");\r\n  const [address, setAddress] = useState(\"\");\r\n  const [phone, setPhone] = useState(\"\");\r\n  const [city, setCity] = useState(\"\");\r\n  const [scheduleIdAsync, setScheduleIdAsync] = useState(0);\r\n\r\n  var fulldate = \"\";\r\n  var storeMonth = 0;\r\n  var storeYear = 0;\r\n  var storeDay = 0;\r\n\r\n  //NEW SCHEDULE\r\n\r\n  const [scheduleAddress, setScheduleAddress] = useState(\"\");\r\n  const [schedulePhone, setSchedulePhone] = useState(\"\");\r\n  const [scheduleCity, setScheduleCity] = useState(\"\");\r\n  const [scheduleDescription, setScheduleDescription] = useState(\"\");\r\n  const [scheduleStartHour, setScheduleStartHour] = useState(0);\r\n  const [scheduleStartMinute, setScheduleStartMinute] = useState(0);\r\n  const [scheduleEndHour, setScheduleEndHour] = useState(0);\r\n  const [scheduleEndMinute, setScheduleEndMinute] = useState(0);\r\n\r\n  var nameNew = \"\";\r\n  var addressNew = \"\";\r\n  var phoneNew = \"\";\r\n  var cityNew = \"\";\r\n  var descriptionNew = \"\";\r\n\r\n  var startHourNew = 0;\r\n  var startMinuteNew = 0;\r\n  var endHourNew = 0;\r\n  var endMinuteNew = 0;\r\n\r\n  var yearNew = 0;\r\n  var monthNew = 0;\r\n  var dayNew = 0;\r\n\r\n  const GetScheduleInfo = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"schedule/\" + scheduleId);\r\n    if (resp.status == 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.schedule !== null) {\r\n          setAppDay(resp.data.schedule.Day);\r\n          setAppMonth(resp.data.schedule.Month);\r\n          setAppYear(resp.data.schedule.Year);\r\n\r\n          if (resp.data.schedule.Start !== null) {\r\n            setStartHour(resp.data.schedule.Start.Hour);\r\n            setStartMinute(resp.data.schedule.Start.Minute);\r\n          }\r\n\r\n          if (resp.data.schedule.End !== null) {\r\n            setEndHour(resp.data.schedule.End.Hour);\r\n            setEndMinute(resp.data.schedule.End.Minute);\r\n          }\r\n\r\n          setAppDesc(resp.data.schedule.Description);\r\n          setContactName(resp.data.schedule.Contactname);\r\n          setAddress(resp.data.schedule.Street);\r\n          setPhone(resp.data.schedule.Phone);\r\n          setCity(resp.data.schedule.City);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetScheduleInfoAsync = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"schedule/\" + scheduleIdAsync);\r\n    if (resp.status == 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.schedule !== null) {\r\n          setAppDay(resp.data.schedule.Day);\r\n          setAppMonth(resp.data.schedule.Month);\r\n          setAppYear(resp.data.schedule.Year);\r\n\r\n          if (resp.data.schedule.Start !== null) {\r\n            setStartHour(resp.data.schedule.Start.Hour);\r\n            setStartMinute(resp.data.schedule.Start.Minute);\r\n          }\r\n\r\n          if (resp.data.schedule.End !== null) {\r\n            setEndHour(resp.data.schedule.End.Hour);\r\n            setEndMinute(resp.data.schedule.End.Minute);\r\n          }\r\n\r\n          setAppDesc(resp.data.schedule.Description);\r\n          setContactName(resp.data.schedule.Contactname);\r\n          setAddress(resp.data.schedule.Street);\r\n          setPhone(resp.data.schedule.Phone);\r\n          setCity(resp.data.schedule.City);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const HandleScheduleForm = async ({\r\n    contactName,\r\n    address,\r\n    phone,\r\n    city,\r\n    appDesc,\r\n    openHourSelected,\r\n    openMinuteSelected,\r\n    closeHourSelected,\r\n    closeMinuteSelected,\r\n  }) => {\r\n    setScheduleAddress(address);\r\n    setSchedulePhone(phone);\r\n    setScheduleCity(city);\r\n    setScheduleDescription(appDesc);\r\n    setScheduleStartHour(openHourSelected);\r\n    setScheduleStartMinute(openMinuteSelected);\r\n    setScheduleEndHour(closeHourSelected);\r\n    setScheduleEndMinute(closeMinuteSelected);\r\n  };\r\n\r\n  const HandleEditScheduleForm = async ({\r\n    contactName,\r\n    address,\r\n    phone,\r\n    city,\r\n    appDesc,\r\n    EditYear,\r\n    EditMonth,\r\n    EditDay,\r\n    openHourSelected,\r\n    openMinuteSelected,\r\n    closeHourSelected,\r\n    closeMinuteSelected,\r\n  }) => {\r\n    nameNew = contactName;\r\n    addressNew = address;\r\n    phoneNew = phone;\r\n    cityNew = city;\r\n    descriptionNew = appDesc;\r\n    startHourNew = openHourSelected;\r\n    startMinuteNew = openMinuteSelected;\r\n    endHourNew = closeHourSelected;\r\n    endMinuteNew = closeMinuteSelected;\r\n    yearNew = EditYear;\r\n    monthNew = EditMonth;\r\n    dayNew = EditDay;\r\n  };\r\n\r\n  const HandleNewSchedule = async ({\r\n    contactName,\r\n    address,\r\n    phone,\r\n    city,\r\n    appDesc,\r\n    openHourSelected,\r\n    openMinuteSelected,\r\n    closeHourSelected,\r\n    closeMinuteSelected,\r\n  }) => {\r\n    const resp = await axios.post(window.$DBURL + \"schedule\", {\r\n      Crewname: name,\r\n      Crew_Id: userId,\r\n      Year: year,\r\n      Month: month,\r\n      Day: day,\r\n      Start: { Hour: scheduleStartHour, Minute: scheduleStartMinute },\r\n      End: { Hour: scheduleEndHour, Minute: scheduleEndMinute },\r\n      Description: scheduleDescription,\r\n      Street: scheduleAddress,\r\n      City: scheduleCity,\r\n      Phone: schedulePhone,\r\n      Contactname: name,\r\n      Store_Id: storeIdOfUser,\r\n    });\r\n    GetUserSchedules();\r\n  };\r\n\r\n  const HandleUpdateSchedule = async ({}) => {\r\n    const resp = await axios.put(window.$DBURL + \"schedule\", {\r\n      Crewname: name,\r\n      Id: scheduleIdAsync,\r\n      Year: yearNew || year,\r\n      Month: monthNew || month,\r\n      Day: dayNew || day,\r\n      Start: {\r\n        Hour: startHourNew || startHour,\r\n        Minute: startMinuteNew || startMinute,\r\n      },\r\n      End: { Hour: endHourNew || endHour, Minute: endMinuteNew || endMinute },\r\n      Description: descriptionNew || appDesc,\r\n      Street: addressNew || address,\r\n      City: cityNew || city,\r\n      Phone: phoneNew || phone,\r\n      Contactname: nameNew || contactName,\r\n      Store_Id: storeIdOfUser,\r\n    });\r\n\r\n    GetUserSchedules();\r\n    GetScheduleInfoAsync();\r\n  };\r\n\r\n  const HandleDeleteSchedule = async () => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL + \"schedule/\" + scheduleIdAsync\r\n    );\r\n    GetUserSchedules();\r\n  };\r\n\r\n  const [storeName, setStoreName] = useState(\"\");\r\n\r\n  const GetStoreInfo = async () => {\r\n    if (storeIdSync == 0) {\r\n      const resp = await axios.get(window.$DBURL + \"store/\" + storeIdOfUser);\r\n      setStoreName(resp.data.store.Name);\r\n    } else {\r\n      const resp = await axios.get(window.$DBURL + \"store/\" + storeIdSync);\r\n      setStoreName(resp.data.store.Name);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []);\r\n\r\n  var fullDate = \"\";\r\n  const [year, setYear] = useState(0);\r\n  const [month, setMonth] = useState(0);\r\n  const [day, setDay] = useState(0);\r\n\r\n  const HandleStartInfo = async () => {\r\n    setYear(fullDate.getFullYear());\r\n    setMonth(fullDate.getMonth() + 1);\r\n    setDay(fullDate.getDate());\r\n  };\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <FullWidthMobileCont100vw100vh>\r\n        <Menu> </Menu>\r\n      </FullWidthMobileCont100vw100vh>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <FlexColumnFullWidth>\r\n          <EditSchedule\r\n            DeleteSchedule={() => {\r\n              HandleDeleteSchedule();\r\n              setIsEditSchedule(false);\r\n            }}\r\n            onPreview={HandleEditScheduleForm}\r\n            onScheduleEdit={HandleUpdateSchedule}\r\n            open={isEditSchedule}\r\n            onClose={() => {\r\n              setIsEditSchedule(false);\r\n            }}\r\n            month={appMonth}\r\n            day={appDay}\r\n            year={appYear}\r\n            dfName={contactName}\r\n            dfAddress={address}\r\n            dfCity={city}\r\n            dfCellPhone={phone}\r\n            dfNotes={appDesc}\r\n            startHour={startHour}\r\n            startMinute={startMinute}\r\n            endHour={endHour}\r\n            endMinute={endMinute}\r\n          ></EditSchedule>\r\n          <LeagueSpartanExtraLargeBold>\r\n            {storeName + \"'s Store Schedule\"}\r\n          </LeagueSpartanExtraLargeBold>\r\n          <Calendar\r\n            localizer={localizer}\r\n            events={scheduleList.map((o, i) => {\r\n              return {\r\n                id: o.Id,\r\n                title: o.Crewname,\r\n                start: new Date(\r\n                  o.Year,\r\n                  o.Month - 1,\r\n                  o.Day,\r\n                  o.Start.Hour,\r\n                  o.Start.Minute\r\n                ),\r\n                end: new Date(\r\n                  o.Year,\r\n                  o.Month - 1,\r\n                  o.Day,\r\n                  o.End.Hour,\r\n                  o.End.Minute\r\n                ),\r\n                allDay: false,\r\n              };\r\n            })}\r\n            startAccessor=\"start\"\r\n            endAccessor=\"end\"\r\n            style={{ height: \"75%\", width: \"100%\" }}\r\n            popup\r\n            dayLayoutAlgorithm=\"no-overlap\"\r\n            longPressThreshold={10}\r\n            selectable={true}\r\n            views={{ month: true }}\r\n            defaultView={Views.Month}\r\n            onSelectSlot={(slotInfo) => {\r\n              fulldate = slotInfo.slots[0];\r\n              storeMonth = fulldate.getMonth() + 1;\r\n              storeYear = fulldate.getFullYear();\r\n              storeDay = fulldate.getDate();\r\n              history.push(\r\n                \"/storescheduleday/\" +\r\n                  metroIdOfUser +\r\n                  \"/\" +\r\n                  storeIdOfUser +\r\n                  \"/\" +\r\n                  storeMonth +\r\n                  \"/\" +\r\n                  storeDay +\r\n                  \"/\" +\r\n                  storeYear\r\n              );\r\n            }}\r\n            onSelectEvent={(event) => {\r\n              scheduleId = event.id;\r\n              setScheduleIdAsync(event.id);\r\n              GetScheduleInfo();\r\n              fullDate = event.start;\r\n              HandleStartInfo();\r\n              setIsEditSchedule(true);\r\n            }}\r\n            onNavigate={(date) => {\r\n              GetUserSchedules();\r\n            }}\r\n          />\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nMyScheduleScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default MyScheduleScreen;\r\n","import { useHistory, useParams } from \"react-router-dom\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  FlexContCenterAlign,\r\n  FlexRowCont70PercentSpaceBetween,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  LeagueSpartanRegularMinWidth,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst InstallerCard = ({\r\n  InstallerName,\r\n  installerId,\r\n  installerUserId,\r\n  index,\r\n}) => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  return (\r\n    <FlexColumnFullWidth\r\n      onClick={() => {\r\n        history.push(\r\n          \"/installercalendar/\" +\r\n            params.Id +\r\n            \"/\" +\r\n            params.storeId +\r\n            \"/\" +\r\n            installerId +\r\n            \"/\" +\r\n            installerUserId +\r\n            \"/\" +\r\n            InstallerName +\r\n            \"/\" +\r\n            0 +\r\n            \"/\" +\r\n            0 +\r\n            \"/\" +\r\n            0 +\r\n            \"/\" +\r\n            0 +\r\n            \"/\" +\r\n            0\r\n        );\r\n      }}\r\n    >\r\n      <FlexColumnFullWidth>\r\n        <FlexRowCont70PercentSpaceBetween>\r\n          <FlexContCenterAlign>\r\n            <LeagueSpartanRegularMinWidth width=\"25px\">\r\n              {index + 1}.\r\n            </LeagueSpartanRegularMinWidth>\r\n            <LeagueSpartanExtraLargeBold>\r\n              {InstallerName}\r\n            </LeagueSpartanExtraLargeBold>\r\n          </FlexContCenterAlign>\r\n          <RegularResponsiveButton>Calendar</RegularResponsiveButton>\r\n        </FlexRowCont70PercentSpaceBetween>\r\n      </FlexColumnFullWidth>\r\n    </FlexColumnFullWidth>\r\n  );\r\n};\r\n\r\nInstallerCard.defaultProps = {\r\n  InstallerName: \"Default Name\",\r\n  StoreAddress: \"123 Yonge Street\",\r\n  roleID: 0,\r\n  MetroName: \"Toronto\",\r\n  Username: \"\",\r\n  Email: \"\",\r\n  Phone: \"\",\r\n  installerId: 0,\r\n  installerUserId: 0,\r\n};\r\n\r\nexport default InstallerCard;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport InstallerCard from \"../../comps/InstallerCard\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContCenterAlign,\r\n  FlexContMobileColumn,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Icon30x40pxPointer } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularTextBoldRed,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreInstallersScreen = ({ onPreview, onProfileUpdated }) => {\r\n  //=============================================================================\r\n  // Store Installers Page - View Installers of a store and click to view\r\n  // that Installer's Calendar\r\n  //=============================================================================\r\n\r\n  // Use the useParams hook to extract the storeId from the URL\r\n  const params = useParams();\r\n\r\n  // Use the useHistory hook to access the history object\r\n  const history = useHistory();\r\n\r\n  // Initialize the state variables for the installer list and the noInstallerText\r\n  const [installerList, setInstallerList] = useState([]);\r\n  const [noInstallerText, setNoInstallerText] = useState(\"\");\r\n\r\n  // Define the GetInstallers function to fetch the installers for the given store\r\n  const GetInstallers = async (storeid) => {\r\n    try {\r\n      // Fetch the installers for the given store\r\n      const { data } = await axios.get(\r\n        `${window.$DBURL}store/${storeid}/installers`\r\n      );\r\n\r\n      // Update the installerList state variable with the list of installers\r\n      setInstallerList(data.installers);\r\n\r\n      // If there are no installers, update the noInstallerText state variable\r\n      if (data.installers.length === 0) {\r\n        setNoInstallerText(\r\n          \"There are 0 Installers in your area. If this is an error, contact us directly.\"\r\n        );\r\n      }\r\n    } catch (err) {\r\n      // Handle the error here\r\n    }\r\n  };\r\n\r\n  // Use the useEffect hook to fetch the installers when the component mounts\r\n  useEffect(() => {\r\n    GetInstallers(params.storeId);\r\n  }, []);\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <FullWidthMobileCont100vw100vh>\r\n        <Menu> </Menu>\r\n      </FullWidthMobileCont100vw100vh>\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu mobilePageProp=\"View Store Installers\"></ActionMenu>\r\n        <FlexColumnFullWidth>\r\n          <FlexContCenterAlign>\r\n            <Icon30x40pxPointer\r\n              src=\"/backarrow.svg\"\r\n              onClick={() => {\r\n                history.push(\"/storelistinstallers/\" + params.Id);\r\n              }}\r\n            ></Icon30x40pxPointer>\r\n            <LeagueSpartanExtraLargeBold>\r\n              Store Installers\r\n            </LeagueSpartanExtraLargeBold>\r\n          </FlexContCenterAlign>\r\n          <FlexColumnFullWidth>\r\n            {installerList.map((o, i) => (\r\n              <InstallerCard\r\n                key={i}\r\n                index={i}\r\n                InstallerName={o.Name}\r\n                Phone={o.Phone}\r\n                Email={o.Email}\r\n                installerId={o.Id}\r\n                installerUserId={o.User_Id}\r\n              ></InstallerCard>\r\n            ))}\r\n            <RegularTextBoldRed>{noInstallerText}</RegularTextBoldRed>\r\n          </FlexColumnFullWidth>\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nStoreInstallersScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n  storeId: 0,\r\n};\r\n\r\nexport default StoreInstallersScreen;\r\n","import React from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { FlexDiv, FlexRowContFullWidth } from \"../../StylesheetComps/Cont\";\r\nimport { Icon30x30 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  BlueUnderlinePointerPara,\r\n  RegularText,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst WorkerCard = ({ ManagerName, roleID, workerId, storeId }) => {\r\n  const history = useHistory();\r\n\r\n  return (\r\n    <FlexRowContFullWidth>\r\n      <FlexDiv>\r\n        <RegularText>{ManagerName}</RegularText>\r\n      </FlexDiv>\r\n\r\n      <FlexDiv>\r\n        <FlexDiv\r\n          onClick={() => {\r\n            history.push(\r\n              \"workerschedule/\" + storeId + \"/\" + workerId + \"/\" + ManagerName\r\n            );\r\n          }}\r\n        >\r\n          <Icon30x30 src=\"/workercalendar.svg\"></Icon30x30>\r\n          <BlueUnderlinePointerPara>View Calendar</BlueUnderlinePointerPara>\r\n        </FlexDiv>\r\n\r\n        <FlexDiv\r\n          onClick={() => {\r\n            history.push(\r\n              \"clockschedule/\" +\r\n                storeId +\r\n                \"/\" +\r\n                workerId +\r\n                \"/\" +\r\n                roleID +\r\n                \"/\" +\r\n                ManagerName\r\n            );\r\n          }}\r\n        >\r\n          <Icon30x30 src=\"/workerclockrecords.svg\"></Icon30x30>\r\n          <BlueUnderlinePointerPara>\r\n            View Clock Records\r\n          </BlueUnderlinePointerPara>\r\n        </FlexDiv>\r\n      </FlexDiv>\r\n    </FlexRowContFullWidth>\r\n  );\r\n};\r\n\r\nWorkerCard.defaultProps = {\r\n  ManagerName: \"Default Name\",\r\n  roleID: 0,\r\n  workerId: 0,\r\n  storeId: 0,\r\n};\r\n\r\nexport default WorkerCard;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport WorkerCard from \"../../comps/WorkerCard\";\r\nimport {\r\n  Div70PerWidth7PerHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileTopVH,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont80vwAutoHeight } from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\n\r\nconst StoreWorkersScreen = ({ RoleName }) => {\r\n  //=============================================================================\r\n  // Store Worker Screen - Manager views all of their workers\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Ability to view the worker's schedule calendar and ClockIn/ClockOuts\r\n  //=============================================================================\r\n\r\n  const [workerList, setWorkerList] = useState([]);\r\n  const [storeId, setStoreId] = useState(0);\r\n  var storeIdSync = 0;\r\n\r\n  const GetSessionInfo = async () => {\r\n    setStoreId(JSON.parse(sessionStorage.getItem(\"userInfo\")).Store_Id);\r\n    storeIdSync = JSON.parse(sessionStorage.getItem(\"userInfo\")).Store_Id;\r\n    GetWorkerList();\r\n  };\r\n\r\n  const GetWorkerList = async () => {\r\n    if (storeIdSync === 0) {\r\n      const resp = await axios.get(\r\n        window.$DBURL + \"store/\" + storeId + \"/crews\"\r\n      );\r\n      if (resp.status === 200) {\r\n        if (resp.data !== null) {\r\n          if (resp.data.crews !== null) {\r\n            setWorkerList(resp.data.crews);\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      const resp = await axios.get(\r\n        window.$DBURL + \"store/\" + storeIdSync + \"/crews\"\r\n      );\r\n      if (resp.status === 200) {\r\n        if (resp.data !== null) {\r\n          if (resp.data.crews !== null) {\r\n            setWorkerList(resp.data.crews);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexContMobileTopVH width=\"100vw\" height=\"100vh\">\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <Div70PerWidth7PerHeight></Div70PerWidth7PerHeight>\r\n          <FlexColumnFullWidth>\r\n            {workerList.map((o, i) => (\r\n              <WorkerCard\r\n                key={o.User_Id}\r\n                Email={o.Email}\r\n                Phone={o.Phone}\r\n                workerId={o.User_Id}\r\n                storeId={o.Store_Id}\r\n                ManagerName={o.Name}\r\n                StoreLocationName={o.StoreName}\r\n                roleID={o.Role}\r\n                MetroName={\"\"}\r\n              ></WorkerCard>\r\n            ))}\r\n          </FlexColumnFullWidth>\r\n        </RightViewFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileTopVH>\r\n  );\r\n};\r\n\r\nStoreWorkersScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default StoreWorkersScreen;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport axios from \"axios\";\r\nimport { subDays } from \"date-fns\";\r\nimport moment from \"moment\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport DatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport DeleteConfirmWindow from \"../../comps/Windows/DeleteProduct\";\r\nimport { MobileInput } from \"../../MobileComponents/Inputs\";\r\nimport {\r\n  SelectableMediumLongButton,\r\n  TextInputProp,\r\n} from \"../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  RegularResponsiveButton,\r\n  SelectionInputRegular,\r\n} from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContCenterAlign,\r\n  FlexContMobileColumn,\r\n  FlexDiv,\r\n  FlexRowCont60PercentSpaceEvenly,\r\n  FlexRowCont70PercentSpaceBetween,\r\n  FlexRowContFlexStart,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  BlankDiv,\r\n  FlexColumnDiv,\r\n  FlexColumnStartDiv45Percent,\r\n  FlexDivFlexEnd,\r\n  FlexDivSpaceAround,\r\n  HiddenDivSpaceAroundColumn,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { BlankOption } from \"../../StylesheetComps/Inputs\";\r\nimport { FlexColumnGreenSelectables } from \"../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  HundredPercentFlexDiv,\r\n  Icon30px20pxPointer,\r\n} from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  BlueUnderlinePointerPara,\r\n  LeagueSpartanExtraLargeBold,\r\n  LeagueSpartanRegular,\r\n  MediumHeader,\r\n  PropDiv,\r\n  RegularTextBold,\r\n  StyledHRPropColour,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\nconst InstallerSetupScreen = () => {\r\n  //=============================================================================\r\n  // Installer Availability Screen - Business Hour Setup for Installers\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Installer creates Open/Close Days, Vacation Days, TimeSlots for Appointment\r\n  //=============================================================================\r\n\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [inputDisplayProp, setInputDisplayProp] = useState(\"none\");\r\n  const [timeSlotDisplayProp, setTimeSlotDisplayProp] = useState(\"none\");\r\n  const [EditTimeSlotDisplayProp, setEditTimeSlotDisplayProp] =\r\n    useState(\"none\");\r\n  const [vacationDisplay, setVacationDisplay] = useState(\"none\");\r\n  const [editVacationDisplay, setEditVacationDisplay] = useState(\"none\");\r\n  const [daySelected, setDaySelected] = useState(0);\r\n  const [editName, setEditName] = useState(\"\");\r\n  const [vacationId, setVacationId] = useState(0);\r\n\r\n  const [openHourSelected, setOpenHourSelected] = useState(0);\r\n  const [openMinuteSelected, setOpenMinuteSelected] = useState(0);\r\n  const [closeHourSelected, setCloseHourSelected] = useState(0);\r\n  const [closeMinuteSelected, setCloseMinuteSelected] = useState(0);\r\n\r\n  const [editOpenHourSelected, setEditOpenHourSelected] = useState(0);\r\n  const [editOpenMinuteSelected, setEditOpenMinuteSelected] = useState(0);\r\n  const [editCloseHourSelected, setEditCloseHourSelected] = useState(0);\r\n  const [editCloseMinuteSelected, setEditCloseMinuteSelected] = useState(0);\r\n\r\n  const [holidayName, setHolidayName] = useState(\"\");\r\n  const [vacationYear, setVacationYear] = useState(0);\r\n  const [vacationMonth, setVacationMonth] = useState(0);\r\n  const [vacationDay, setVacationDay] = useState(0);\r\n\r\n  const [selectedYear, setSelectedYear] = useState(0);\r\n  const [selectedMonth, setSelectedMonth] = useState(0);\r\n  const [selectedDay, setSelectedDay] = useState(0);\r\n\r\n  const [timeSlotId, setTimeSlotId] = useState(0);\r\n\r\n  const [deleteVacation, setDeleteVacation] = useState(false);\r\n  const [deleteSlot, setDeleteSlot] = useState(false);\r\n  const [deleteCloseDay, setDeleteCloseDay] = useState(false);\r\n\r\n  const [deleteDayId, setDeleteDayId] = useState(0);\r\n  const [openDays, setOpenDay] = useState([]);\r\n  const [closeDays, setCloseDays] = useState([]);\r\n  const [vacationDays, setVacationDays] = useState([]);\r\n\r\n  var openDaysSync = [\r\n    \"Sunday\",\r\n    \"Monday\",\r\n    \"Tuesday\",\r\n    \"Wednesday\",\r\n    \"Thursday\",\r\n    \"Friday\",\r\n    \"Saturday\",\r\n  ];\r\n\r\n  //Set Info about the User to be used in functions\r\n\r\n  const GetSessionInfo = async () => {\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n    GetTimeSlots(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n    GetVacationDays(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n    GetCloseDays(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n  };\r\n\r\n  //Using the user's Id, get days of the week that the installer is CLOSED\r\n\r\n  const GetCloseDays = async (userId) => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"appointment/close/installer/\" + userId\r\n    );\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.closedays !== null) {\r\n          setCloseDays(resp.data.closedays);\r\n          setOpenDay(\r\n            openDaysSync.filter(function (o) {\r\n              return !resp.data.closedays\r\n                .map(({ WeekDay }) => WeekDay)\r\n                .includes(o);\r\n            })\r\n          );\r\n          switch (\r\n            openDaysSync.filter(function (o) {\r\n              return !resp.data.closedays\r\n                .map(({ WeekDay }) => WeekDay)\r\n                .includes(o);\r\n            })[0]\r\n          ) {\r\n            case \"Sunday\":\r\n              setDaySelected(0);\r\n              break;\r\n            case \"Monday\":\r\n              setDaySelected(1);\r\n              break;\r\n            case \"Tuesday\":\r\n              setDaySelected(2);\r\n              break;\r\n            case \"Wednesday\":\r\n              setDaySelected(3);\r\n              break;\r\n            case \"Thursday\":\r\n              setDaySelected(4);\r\n              break;\r\n            case \"Friday\":\r\n              setDaySelected(5);\r\n              break;\r\n            case \"Saturday\":\r\n              setDaySelected(6);\r\n              break;\r\n            default:\r\n          }\r\n          // document.getElementById(\"daysofweek\").selectedIndex = 0;\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  //Installer adds a day of the week that they are not open for appointments\r\n\r\n  const AddCloseDay = async () => {\r\n    try {\r\n      // Make an HTTP request to the specified URL with the selected day\r\n      const resp = await axios.post(`${window.$DBURL}appointment/close/`, {\r\n        WeekDay: daySelected,\r\n      });\r\n\r\n      // If the request was successful, get the close days\r\n      if (resp.status === 200) {\r\n        GetCloseDays(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n      }\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Installer deletes a day of the week that they are not open for appointments\r\n\r\n  const DeleteCloseDay = async (deleteDayId) => {\r\n    try {\r\n      // Make an HTTP request to the specified URL with the delete day ID\r\n      const resp = await axios.delete(\r\n        `${window.$DBURL}appointment/close/${deleteDayId}`\r\n      );\r\n\r\n      // If the request was successful, get the close days\r\n      if (resp.status === 200) {\r\n        GetCloseDays(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n      }\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Get Dates that the Installer is closed for business (Vacation/Holiday/etc.)\r\n\r\n  const GetVacationDays = async (userId) => {\r\n    try {\r\n      // Make an HTTP request to the specified URL with the user ID\r\n      const resp = await axios.get(\r\n        `${window.$DBURL}appointment/vacation/user/${userId}`\r\n      );\r\n\r\n      // If the request was successful and the data and vacation days are not null, set the vacation days\r\n      if (resp.status === 200 && resp.data && resp.data.vacationdays) {\r\n        setVacationDays(resp.data.vacationdays);\r\n      }\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Add a Holiday to the Installer's calendar\r\n\r\n  const AddVacation = async () => {\r\n    try {\r\n      // Check if the holiday name is valid\r\n      if (holidayName && holidayName.trim() !== \"\") {\r\n        // Check if the vacation date is valid\r\n        if (vacationDay && vacationMonth && vacationYear) {\r\n          // Make an HTTP request to the specified URL with the vacation details\r\n          const resp = await axios.post(\r\n            `${window.$DBURL}appointment/vacation`,\r\n            {\r\n              Day: vacationDay,\r\n              Month: vacationMonth,\r\n              Year: vacationYear,\r\n              Note: holidayName,\r\n            }\r\n          );\r\n\r\n          // If the request was successful, get the vacation days\r\n          if (resp.status === 200) {\r\n            GetVacationDays(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n          }\r\n        }\r\n      }\r\n\r\n      // Reset the vacation date and holiday name\r\n      setVacationYear(0);\r\n      setVacationMonth(0);\r\n      setVacationDay(0);\r\n      setHolidayName(\"\");\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Edit Holiday Info on Installer's Calendar\r\n\r\n  const EditVacation = async () => {\r\n    try {\r\n      // Check if the vacation ID is valid\r\n      if (vacationId) {\r\n        // Make an HTTP request to the specified URL with the updated vacation details\r\n        const resp = await axios.put(`${window.$DBURL}appointment/vacation`, {\r\n          Id: vacationId,\r\n          Day: vacationDay || selectedDay,\r\n          Month: vacationMonth || selectedMonth,\r\n          Year: vacationYear || selectedYear,\r\n          Note: holidayName || editName,\r\n        });\r\n\r\n        // If the request was successful, get the vacation days\r\n        if (resp.status === 200) {\r\n          GetVacationDays(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n        }\r\n      }\r\n\r\n      // Reset the vacation date and holiday name\r\n      setVacationYear(0);\r\n      setVacationMonth(0);\r\n      setVacationDay(0);\r\n      setHolidayName(\"\");\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Delete a holiday\r\n\r\n  const DeleteVacationDay = async (vacationId) => {\r\n    try {\r\n      // Make an HTTP request to the specified URL with the vacation ID\r\n      const resp = await axios.delete(\r\n        `${window.$DBURL}appointment/vacation/${vacationId}`\r\n      );\r\n\r\n      // If the request was successful, get the vacation days\r\n      if (resp.status === 200) {\r\n        GetVacationDays(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n      }\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Get timeslots that Homeowners can select to book an appointment with the Installer\r\n\r\n  const [timeSlots, setTimeSlots] = useState([]);\r\n\r\n  const GetTimeSlots = async (userId) => {\r\n    try {\r\n      // Make an HTTP request to the specified URL with the user ID\r\n      const resp = await axios.get(\r\n        `${window.$DBURL}appointment/slot/installer/${userId}`\r\n      );\r\n\r\n      // If the request was successful and the data and time slots are not null, set the time slots\r\n      if (resp.status === 200 && resp.data && resp.data.timeslots) {\r\n        setTimeSlots(resp.data.timeslots);\r\n      }\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Add a new timeslot that Homeowners can use to book an appointment with the Installer\r\n\r\n  const AddTimeSlot = async () => {\r\n    try {\r\n      // Make an HTTP request to the specified URL with the selected time slots\r\n      const resp = await axios.post(`${window.$DBURL}appointment/slot`, {\r\n        Start: { Hour: openHourSelected, Minute: openMinuteSelected },\r\n        End: { Hour: closeHourSelected, Minute: closeMinuteSelected },\r\n      });\r\n\r\n      // If the request was successful, get the time slots\r\n      if (resp.status === 200) {\r\n        GetTimeSlots(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n      }\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Edit Timeslot information\r\n\r\n  const UpdateTimeSlot = async () => {\r\n    try {\r\n      // Make an HTTP request to the specified URL with the updated time slots\r\n      const resp = await axios.put(`${window.$DBURL}appointment/slot`, {\r\n        Id: timeSlotId,\r\n        Start: { Hour: editOpenHourSelected, Minute: editOpenMinuteSelected },\r\n        End: { Hour: editCloseHourSelected, Minute: editCloseMinuteSelected },\r\n      });\r\n\r\n      // If the request was successful, get the time slots\r\n      if (resp.status === 200) {\r\n        GetTimeSlots(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n      }\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Delete a timeslot that Homeowners can select to book an appointment with the Installer\r\n\r\n  const DeleteTimeSlot = async (timeSlotId) => {\r\n    try {\r\n      // Make an HTTP request to the specified URL with the time slot ID\r\n      const resp = await axios.delete(\r\n        `${window.$DBURL}appointment/slot/${timeSlotId}`\r\n      );\r\n\r\n      // If the request was successful, get the time slots\r\n      if (resp.status === 200)\r\n        GetTimeSlots(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const [startDate, setStartDate] = useState(null);\r\n  var startDateSync = new Date();\r\n\r\n  const HandleStartDate = async () => {\r\n    setVacationYear(startDateSync.getFullYear());\r\n    setVacationMonth(startDateSync.getMonth() + 1);\r\n    setVacationDay(startDateSync.getDate());\r\n  };\r\n\r\n  const locale = \"en\"; // or whatever you want...\r\n  const hours = [];\r\n\r\n  moment.locale(locale); // optional - can remove if you are only dealing with one locale\r\n\r\n  for (let hour = 0; hour < 24; hour++) {\r\n    hours.push(moment({ hour }).format(\"HH:mm\"));\r\n    hours.push(\r\n      moment({\r\n        hour,\r\n        minute: 30,\r\n      }).format(\"HH:mm\")\r\n    );\r\n  }\r\n\r\n  if (roleNum !== UserRole.Loading) {\r\n    return (\r\n      <FlexContMobileColumn>\r\n        <FullWidthMobileCont100vw100vh>\r\n          <Menu> </Menu>\r\n        </FullWidthMobileCont100vw100vh>\r\n\r\n        <FlexColumnCont80vwAutoHeight>\r\n          <FlexColumnFullWidth width=\"96%\" mobilepaddingbottom=\"10vh\">\r\n            <FlexColumnFullWidth>\r\n              <FlexColumnFullWidth>\r\n                <FlexColumnFullWidth>\r\n                  <FlexColumnDiv>\r\n                    <LeagueSpartanExtraLargeBold>\r\n                      Operational Hours:\r\n                    </LeagueSpartanExtraLargeBold>\r\n                    <MediumHeader>\r\n                      Choose the hours and days you would like to be available\r\n                      on. You can customize when homeowners can book\r\n                      appointments with you as well as add specific dates you\r\n                      are unavailable on.\r\n                    </MediumHeader>\r\n                  </FlexColumnDiv>\r\n                  <br></br>\r\n                  <FlexColumnDiv>\r\n                    <LeagueSpartanRegular>Eligible Days:</LeagueSpartanRegular>\r\n                    <MediumHeader>\r\n                      Current days of the week you are active:\r\n                    </MediumHeader>\r\n                  </FlexColumnDiv>\r\n                  <br></br>\r\n                  <FlexRowContFlexStart>\r\n                    <FlexColumnGreenSelectables width=\"auto\">\r\n                      {openDays.map((o, i) => (\r\n                        <SelectableMediumLongButton\r\n                          width=\"110px\"\r\n                          mobilewidth=\"220px\"\r\n                          border={`3px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                          color={ColorPalette.PrimaryButtonBlue}\r\n                        >\r\n                          {o?.substring(0, 3)}\r\n                        </SelectableMediumLongButton>\r\n                      ))}\r\n                    </FlexColumnGreenSelectables>\r\n                  </FlexRowContFlexStart>\r\n                </FlexColumnFullWidth>\r\n\r\n                <StyledHRPropColour\r\n                  border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n                ></StyledHRPropColour>\r\n\r\n                <FlexColumnFullWidth>\r\n                  <FlexColumnDiv>\r\n                    <FlexContCenterAlign mobileflexdirection=\"column\">\r\n                      <LeagueSpartanRegular>\r\n                        Unavailable Days:\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <FlexContCenterAlign>\r\n                        <SelectionInputRegular\r\n                          onChange={(e) => {\r\n                            switch (e.target.value) {\r\n                              case \"Sunday\":\r\n                                setDaySelected(0);\r\n                                break;\r\n                              case \"Monday\":\r\n                                setDaySelected(1);\r\n                                break;\r\n                              case \"Tuesday\":\r\n                                setDaySelected(2);\r\n                                break;\r\n                              case \"Wednesday\":\r\n                                setDaySelected(3);\r\n                                break;\r\n                              case \"Thursday\":\r\n                                setDaySelected(4);\r\n                                break;\r\n                              case \"Friday\":\r\n                                setDaySelected(5);\r\n                                break;\r\n                              case \"Saturday\":\r\n                                setDaySelected(6);\r\n                                break;\r\n                              default:\r\n                            }\r\n                          }}\r\n                          id=\"daysofweek\"\r\n                        >\r\n                          {openDays.map((o, i) => (\r\n                            <BlankOption key={i}>{o}</BlankOption>\r\n                          ))}\r\n                        </SelectionInputRegular>\r\n                        <RegularResponsiveButton\r\n                          onClick={() => {\r\n                            setInputDisplayProp(\"none\");\r\n                            AddCloseDay();\r\n                          }}\r\n                        >\r\n                          Add Unavailable Day\r\n                        </RegularResponsiveButton>\r\n                      </FlexContCenterAlign>\r\n                    </FlexContCenterAlign>\r\n                    <br></br>\r\n\r\n                    <MediumHeader>\r\n                      Current days of the week you are unavailable:\r\n                    </MediumHeader>\r\n                  </FlexColumnDiv>\r\n                  <br></br>\r\n\r\n                  <DeleteConfirmWindow\r\n                    deleteOpen={deleteCloseDay}\r\n                    onDeleteFunction={() => {\r\n                      setDeleteCloseDay(false);\r\n                      DeleteCloseDay(deleteDayId);\r\n                    }}\r\n                    closeDel={() => {\r\n                      setDeleteCloseDay(false);\r\n                    }}\r\n                  ></DeleteConfirmWindow>\r\n                  <br></br>\r\n\r\n                  <FlexRowContFlexStart>\r\n                    <FlexColumnGreenSelectables width=\"auto\">\r\n                      {closeDays.map((o, i) => {\r\n                        switch (o.WeekDay) {\r\n                          case 0:\r\n                            o.WeekDay = \"Sunday\";\r\n                            break;\r\n                          case 1:\r\n                            o.WeekDay = \"Monday\";\r\n                            break;\r\n                          case 2:\r\n                            o.WeekDay = \"Tuesday\";\r\n                            break;\r\n                          case 3:\r\n                            o.WeekDay = \"Wednesday\";\r\n                            break;\r\n                          case 4:\r\n                            o.WeekDay = \"Thursday\";\r\n                            break;\r\n                          case 5:\r\n                            o.WeekDay = \"Friday\";\r\n                            break;\r\n                          case 6:\r\n                            o.WeekDay = \"Saturday\";\r\n                            break;\r\n                          default:\r\n                        }\r\n\r\n                        return (\r\n                          <FlexDiv>\r\n                            <SelectableMediumLongButton\r\n                              width=\"110px\"\r\n                              mobilewidth=\"220px\"\r\n                              border={`3px solid ${ColorPalette.DarkGrey}`}\r\n                              color={ColorPalette.DarkGrey}\r\n                            >\r\n                              {o.WeekDay?.substring(0, 3)}\r\n                            </SelectableMediumLongButton>\r\n                            <Icon30px20pxPointer\r\n                              onClick={() => {\r\n                                setDeleteDayId(o.Id);\r\n                                setDeleteCloseDay(true);\r\n                              }}\r\n                              src=\"/Garbage_Icon.svg\"\r\n                            ></Icon30px20pxPointer>\r\n                          </FlexDiv>\r\n                        );\r\n                      })}\r\n                    </FlexColumnGreenSelectables>\r\n                  </FlexRowContFlexStart>\r\n                </FlexColumnFullWidth>\r\n\r\n                <StyledHRPropColour\r\n                  border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n                ></StyledHRPropColour>\r\n\r\n                <FlexColumnFullWidth>\r\n                  <FlexContCenterAlign>\r\n                    <LeagueSpartanRegular>\r\n                      My Vacation Days/Holidays:\r\n                    </LeagueSpartanRegular>\r\n\r\n                    <RegularResponsiveButton\r\n                      onClick={() => {\r\n                        setStartDate(null);\r\n                        setHolidayName(\"\");\r\n                        setEditVacationDisplay(\"none\");\r\n                        setVacationDisplay(\"flex\");\r\n                      }}\r\n                    >\r\n                      Add Vacation Day\r\n                    </RegularResponsiveButton>\r\n                  </FlexContCenterAlign>\r\n                  <br></br>\r\n\r\n                  <FlexColumnFullWidth\r\n                    display={vacationDisplay}\r\n                    mobiledisplay={vacationDisplay}\r\n                  >\r\n                    <RegularTextBold>Select a Date</RegularTextBold>\r\n                    <DatePicker\r\n                      selected={startDate}\r\n                      onChange={(date) => {\r\n                        startDateSync = date;\r\n                        setStartDate(date);\r\n                        HandleStartDate();\r\n                      }}\r\n                      dateFormat=\"MM/dd/yyyy\"\r\n                      minDate={subDays(new Date(), 0)}\r\n                      placeholderText=\"Click to select a date\"\r\n                      showMonthDropdown\r\n                    ></DatePicker>\r\n\r\n                    <RegularTextBold>Enter Holiday Name</RegularTextBold>\r\n                    <TextInputProp\r\n                      mobiledisplay=\"none\"\r\n                      placeholder=\"Holiday Name\"\r\n                      onfocus=\"this.value=''\"\r\n                      onChange={(e) => {\r\n                        setHolidayName(e.target.value);\r\n                      }}\r\n                    ></TextInputProp>\r\n                    <MobileInput\r\n                      display={window.$ISMOBILE === true ? \"block\" : \"none\"}\r\n                      placeholder=\"Holiday Name\"\r\n                      onfocus=\"this.value=''\"\r\n                      onChange={(e) => {\r\n                        setHolidayName(e.target.value);\r\n                      }}\r\n                    ></MobileInput>\r\n                    <br></br>\r\n                    <RegularResponsiveButton\r\n                      width=\"50px\"\r\n                      onClick={() => {\r\n                        setVacationDisplay(\"none\");\r\n                        setSelectedDay(0);\r\n                        setSelectedMonth(0);\r\n                        setSelectedYear(0);\r\n                        AddVacation();\r\n                        setHolidayName(\"\");\r\n                        setVacationDay(0);\r\n                        setVacationMonth(0);\r\n                        setVacationYear(0);\r\n                      }}\r\n                    >\r\n                      Save\r\n                    </RegularResponsiveButton>\r\n                  </FlexColumnFullWidth>\r\n                  <DeleteConfirmWindow\r\n                    deleteOpen={deleteVacation}\r\n                    onDeleteFunction={() => {\r\n                      setDeleteVacation(false);\r\n                      DeleteVacationDay(vacationId);\r\n                    }}\r\n                    closeDel={() => {\r\n                      setDeleteVacation(false);\r\n                    }}\r\n                  ></DeleteConfirmWindow>\r\n                  <FlexColumnFullWidth\r\n                    key={selectedDay}\r\n                    display={editVacationDisplay}\r\n                    mobiledisplay={editVacationDisplay}\r\n                  >\r\n                    <RegularTextBold>Edit Date</RegularTextBold>\r\n                    <DatePicker\r\n                      selected={startDate}\r\n                      //  filterDate={isWeekday}\r\n                      onChange={(date) => {\r\n                        startDateSync = date;\r\n                        setStartDate(date);\r\n                        HandleStartDate();\r\n                      }}\r\n                      dateFormat=\"MM/dd/yyyy\"\r\n                      minDate={subDays(new Date(), 0)}\r\n                      placeholderText={\r\n                        selectedMonth + \"/\" + selectedDay + \"/\" + selectedYear\r\n                      }\r\n                      showMonthDropdown\r\n                    ></DatePicker>\r\n\r\n                    <RegularTextBold>Edit Holiday Name</RegularTextBold>\r\n                    <TextInputProp\r\n                      mobiledisplay=\"none\"\r\n                      onChange={(e) => {\r\n                        setHolidayName(e.target.value);\r\n                      }}\r\n                    ></TextInputProp>\r\n                    <MobileInput\r\n                      display={window.$ISMOBILE === true ? \"block\" : \"none\"}\r\n                      defaultValue={editName}\r\n                      onChange={(e) => {\r\n                        setHolidayName(e.target.value);\r\n                      }}\r\n                    ></MobileInput>\r\n                    <br></br>\r\n                    <RegularResponsiveButton\r\n                      width=\"100px\"\r\n                      mobilewidth=\"200px\"\r\n                      onClick={() => {\r\n                        setEditVacationDisplay(\"none\");\r\n                        EditVacation();\r\n                        setHolidayName(\"\");\r\n                        setEditName(\"\");\r\n                      }}\r\n                    >\r\n                      Update Vacation/Holiday\r\n                    </RegularResponsiveButton>\r\n                  </FlexColumnFullWidth>\r\n                  {vacationDays.map((o, i) => (\r\n                    <div>\r\n                      <br></br>\r\n                      <FlexRowCont70PercentSpaceBetween width=\"60%\">\r\n                        <RegularTextBold>\r\n                          {o.Month}/{o.Day}/{o.Year} - {o.Note}\r\n                        </RegularTextBold>\r\n\r\n                        <FlexContCenterAlign>\r\n                          <BlueUnderlinePointerPara\r\n                            onClick={() => {\r\n                              setEditName(o.Note);\r\n                              setSelectedDay(o.Day);\r\n                              setSelectedMonth(o.Month);\r\n                              setSelectedYear(o.Year);\r\n                              setVacationId(o.Id);\r\n                              setStartDate(null);\r\n                              setVacationDisplay(\"none\");\r\n                              setEditVacationDisplay(\"block\");\r\n                            }}\r\n                          >\r\n                            Edit\r\n                          </BlueUnderlinePointerPara>\r\n                          <Icon30px20pxPointer\r\n                            onClick={() => {\r\n                              setVacationId(o.Id);\r\n                              setDeleteVacation(true);\r\n                            }}\r\n                            src=\"/Garbage_Icon.svg\"\r\n                          ></Icon30px20pxPointer>\r\n                        </FlexContCenterAlign>\r\n                      </FlexRowCont70PercentSpaceBetween>\r\n                    </div>\r\n                  ))}\r\n                </FlexColumnFullWidth>\r\n              </FlexColumnFullWidth>\r\n              <StyledHRPropColour\r\n                border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n              ></StyledHRPropColour>\r\n              <FlexColumnFullWidth>\r\n                <FlexColumnFullWidth>\r\n                  <FlexContCenterAlign>\r\n                    <LeagueSpartanRegular>\r\n                      Time Slots for Appointments:\r\n                    </LeagueSpartanRegular>\r\n                    <RegularResponsiveButton\r\n                      onClick={() => {\r\n                        setTimeSlotDisplayProp(\"flex\");\r\n                      }}\r\n                    >\r\n                      Create New Timeslot\r\n                    </RegularResponsiveButton>\r\n                  </FlexContCenterAlign>\r\n                  <MediumHeader>\r\n                    Homeowners can make appointments with me during these\r\n                    timeslots.\r\n                  </MediumHeader>\r\n                  <br></br>\r\n\r\n                  <FlexColumnDiv display={timeSlotDisplayProp}>\r\n                    <FlexRowCont60PercentSpaceEvenly mobileflexdirection=\"column\">\r\n                      <FlexRowCont70PercentSpaceBetween>\r\n                        <FlexContCenterAlign display={timeSlotDisplayProp}>\r\n                          <RegularTextBold>From:</RegularTextBold>\r\n                          <SelectionInputRegular\r\n                            onChange={(e) => {\r\n                              setOpenHourSelected(\r\n                                e.target.value.substring(0, 2)\r\n                              );\r\n                              setOpenMinuteSelected(\r\n                                e.target.value.substring(3, 5)\r\n                              );\r\n                            }}\r\n                            id=\"openhours\"\r\n                          >\r\n                            {hours.map((o, i) => (\r\n                              <BlankOption key={i}>{o}</BlankOption>\r\n                            ))}\r\n                          </SelectionInputRegular>\r\n                        </FlexContCenterAlign>\r\n                      </FlexRowCont70PercentSpaceBetween>\r\n                      <br></br>\r\n                      <br></br>\r\n                      <FlexRowCont70PercentSpaceBetween>\r\n                        <FlexContCenterAlign display={timeSlotDisplayProp}>\r\n                          <RegularTextBold>To:</RegularTextBold>\r\n                          <SelectionInputRegular\r\n                            onChange={(e) => {\r\n                              setCloseHourSelected(\r\n                                e.target.value.substring(0, 2)\r\n                              );\r\n                              setCloseMinuteSelected(\r\n                                e.target.value.substring(3, 5)\r\n                              );\r\n                            }}\r\n                            id=\"closehours\"\r\n                          >\r\n                            {hours.map((o, i) => (\r\n                              <BlankOption key={i}>{o}</BlankOption>\r\n                            ))}\r\n                          </SelectionInputRegular>\r\n                        </FlexContCenterAlign>\r\n                      </FlexRowCont70PercentSpaceBetween>\r\n                    </FlexRowCont60PercentSpaceEvenly>\r\n                    <br></br>\r\n\r\n                    <PropDiv divdisplay={timeSlotDisplayProp}>\r\n                      <RegularResponsiveButton\r\n                        onClick={() => {\r\n                          setTimeSlotDisplayProp(\"none\");\r\n                          AddTimeSlot();\r\n                        }}\r\n                      >\r\n                        Save\r\n                      </RegularResponsiveButton>\r\n                      <RegularResponsiveButton\r\n                        bgcolor={ColorPalette.PrimaryRed}\r\n                        onClick={() => {\r\n                          setTimeSlotDisplayProp(\"none\");\r\n                        }}\r\n                      >\r\n                        Cancel\r\n                      </RegularResponsiveButton>\r\n                    </PropDiv>\r\n                    <LeagueSpartanRegular display={EditTimeSlotDisplayProp}>\r\n                      Edit Timeslot\r\n                    </LeagueSpartanRegular>\r\n\r\n                    <FlexContCenterAlign display={EditTimeSlotDisplayProp}>\r\n                      <RegularTextBold>From:</RegularTextBold>\r\n                      <SelectionInputRegular\r\n                        onChange={(e) => {\r\n                          setEditOpenHourSelected(\r\n                            e.target.value.substring(0, 2)\r\n                          );\r\n                          setEditOpenMinuteSelected(\r\n                            e.target.value.substring(3, 5)\r\n                          );\r\n                        }}\r\n                        id=\"openhours\"\r\n                      >\r\n                        {hours.map((o, i) => (\r\n                          <BlankOption key={i}>{o}</BlankOption>\r\n                        ))}\r\n                      </SelectionInputRegular>\r\n                    </FlexContCenterAlign>\r\n\r\n                    <FlexContCenterAlign display={EditTimeSlotDisplayProp}>\r\n                      <RegularTextBold>To:</RegularTextBold>\r\n                      <SelectionInputRegular\r\n                        onChange={(e) => {\r\n                          setEditCloseHourSelected(\r\n                            e.target.value.substring(0, 2)\r\n                          );\r\n                          setEditCloseMinuteSelected(\r\n                            e.target.value.substring(3, 5)\r\n                          );\r\n                        }}\r\n                        id=\"closehours\"\r\n                      >\r\n                        {hours.map((o, i) => (\r\n                          <BlankOption key={i}>{o}</BlankOption>\r\n                        ))}\r\n                      </SelectionInputRegular>\r\n                    </FlexContCenterAlign>\r\n\r\n                    <PropDiv divdisplay={EditTimeSlotDisplayProp}>\r\n                      <RegularResponsiveButton\r\n                        onClick={() => {\r\n                          setEditTimeSlotDisplayProp(\"none\");\r\n                          UpdateTimeSlot();\r\n                        }}\r\n                      >\r\n                        Save\r\n                      </RegularResponsiveButton>\r\n                      <RegularResponsiveButton\r\n                        bgcolor={ColorPalette.PrimaryRed}\r\n                        onClick={() => {\r\n                          setEditTimeSlotDisplayProp(\"none\");\r\n                        }}\r\n                      >\r\n                        Cancel\r\n                      </RegularResponsiveButton>\r\n                    </PropDiv>\r\n                  </FlexColumnDiv>\r\n                  <BlankDiv>\r\n                    {timeSlots.map((o, i) => {\r\n                      switch (o.Start.Minute) {\r\n                        case 0:\r\n                          o.Start.Minute = \"00\";\r\n                          break;\r\n                        default:\r\n                      }\r\n                      switch (o.End.Minute) {\r\n                        case 0:\r\n                          o.End.Minute = \"00\";\r\n                          break;\r\n                        default:\r\n                      }\r\n                      return (\r\n                        <div>\r\n                          {\" \"}\r\n                          <HundredPercentFlexDiv key={i}>\r\n                            <FlexColumnStartDiv45Percent>\r\n                              <DeleteConfirmWindow\r\n                                deleteOpen={deleteSlot}\r\n                                onDeleteFunction={() => {\r\n                                  setDeleteSlot(false);\r\n                                  DeleteTimeSlot(timeSlotId);\r\n                                }}\r\n                                closeDel={() => {\r\n                                  setDeleteSlot(false);\r\n                                }}\r\n                              ></DeleteConfirmWindow>\r\n                              <FlexDivSpaceAround>\r\n                                <RegularTextBold>{i + 1 + \" \"}</RegularTextBold>\r\n                                <FlexDiv>\r\n                                  <RegularTextBold>\r\n                                    From: {o.Start.Hour}:{o.Start.Minute}\r\n                                  </RegularTextBold>\r\n                                </FlexDiv>\r\n                                <FlexDiv>\r\n                                  <RegularTextBold>\r\n                                    To: {o.End.Hour}:{o.End.Minute}\r\n                                  </RegularTextBold>\r\n                                </FlexDiv>\r\n                              </FlexDivSpaceAround>\r\n                            </FlexColumnStartDiv45Percent>\r\n                            <FlexDivFlexEnd>\r\n                              {/* <BlueUnderlinePointerPara\r\n                                onClick={() => {\r\n                                  setTimeSlotId(o.Id);\r\n                                  setEditTimeSlotDisplayProp(\"flex\");\r\n                                }}\r\n                              >\r\n                                Edit\r\n                              </BlueUnderlinePointerPara> */}\r\n                            </FlexDivFlexEnd>\r\n                            <FlexDivFlexEnd>\r\n                              <Icon30px20pxPointer\r\n                                onClick={() => {\r\n                                  setTimeSlotId(o.Id);\r\n                                  setDeleteSlot(true);\r\n                                }}\r\n                                src=\"/Garbage_Icon.svg\"\r\n                              ></Icon30px20pxPointer>\r\n                            </FlexDivFlexEnd>\r\n                          </HundredPercentFlexDiv>\r\n                          <hr></hr>\r\n                        </div>\r\n                      );\r\n                    })}\r\n                  </BlankDiv>\r\n                </FlexColumnFullWidth>\r\n              </FlexColumnFullWidth>\r\n            </FlexColumnFullWidth>\r\n          </FlexColumnFullWidth>\r\n        </FlexColumnCont80vwAutoHeight>\r\n      </FlexContMobileColumn>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nInstallerSetupScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default InstallerSetupScreen;\r\n","import React, { useState } from \"react\"; // imports the React library and the hook for state\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\"; // imports a stylesheet for the react-big-calendar component\r\nimport \"react-datepicker/dist/react-datepicker.css\"; // imports a stylesheet for the react-datepicker component\r\nimport styled from \"styled-components\"; // imports a library for creating styled components\r\nimport Input from \"../../comps/Input\"; // imports the Input component from the specified location\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\"; // imports the ColorPalette object from the specified location\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\"; // imports the RegularResponsiveButton component from the specified location\r\nimport {\r\n  FlexColumnContGreenBorderTopRounded,\r\n  FlexDiv,\r\n} from \"../../StylesheetComps/Cont\"; // imports the FlexColumnContGreenBorderTopRounded and FlexDiv components from the specified location\r\nimport { FixedOverlay200vh } from \"../../StylesheetComps/OverlayCont\"; // imports the FixedOverlay200vh component from the specified location\r\nimport { RegularTextBoldRed } from \"../../StylesheetComps/Titles\"; // imports the RegularTextBoldRed component from the specified location\r\n\r\nconst ItemCont = styled.div`\r\n  background-color: white;\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  left: 30%;\r\n  width: 500px;\r\n  border-radius: 10px;\r\n  border: 1px solid black;\r\n  margin: 30px;\r\n  padding-left: 0.5%;\r\n  padding-right: 0.5%;\r\n  align-items: center;\r\n  justify-content: center;\r\n  @media (max-width: 1006px) {\r\n    left: 0%;\r\n    width: 98.5vw;\r\n    height: auto;\r\n    overflow-y: scroll;\r\n    margin: 0px;\r\n  }\r\n`;\r\nconst Header = styled.p`\r\n  font-size: 20px;\r\n  font-weight: 500;\r\n  color: black;\r\n  font-family: Futura;\r\n  margin-left: 12px;\r\n  padding-top: 10px;\r\n`;\r\n\r\nconst AppointmentCreationDiv = styled.div`\r\n  width: 95%;\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n  height: 80%;\r\n`;\r\n\r\nconst SubHeaderPara = styled.p`\r\n  font-family: Futura;\r\n  font-size: 16px;\r\n  width: 150px;\r\n`;\r\n\r\nconst ButtonDiv = styled.div`\r\n  width: 60%;\r\n  display: flex;\r\n  justify-content: space-between;\r\n  margin-top: 1%;\r\n`;\r\n\r\nconst LandscapePara = styled.textarea`\r\n  width: 61%;\r\n  height: 10vh;\r\n  background-color: #ededed;\r\n  border: 0;\r\n  outline: none;\r\n  resize: none;\r\n  overflow: auto;\r\n  border-radius: 4px;\r\n  font-family: Futura;\r\n  font-size: 14px;\r\n  padding: 10px;\r\n  margin-left: 1%;\r\n`;\r\n\r\nconst InputDivsTime = styled.div`\r\n  display: ${(props) => (props.inputdisplay ? props.inputdisplay : \"none\")};\r\n  justify-content: flex-start;\r\n`;\r\n\r\nconst InputClosedDays = styled.input`\r\n  margin: 10px;\r\n  height: 30px;\r\n  @media (max-width: 1006px) {\r\n    width: 50%;\r\n  }\r\n`;\r\n\r\nconst InputDataList = styled.datalist``;\r\n\r\nconst InputOption = styled.option``;\r\n\r\nconst CloseDayInputText = styled.p`\r\n  font-family: Futura;\r\n  font-size: 18px;\r\n  font-weight: bold;\r\n  width: 50px;\r\n`;\r\n\r\nconst CreateSchedule = ({\r\n  open,\r\n  onClick,\r\n  onClose,\r\n  onPreview,\r\n  onScheduleCreate,\r\n  month,\r\n  day,\r\n  year,\r\n  name,\r\n  defaultaddress,\r\n  defaultcity,\r\n  cellphone,\r\n}) => {\r\n  const [contactName, setContactName] = useState(\"\");\r\n  const [address, setAddress] = useState(\"\");\r\n  const [phone, setPhone] = useState(\"\");\r\n  const [city, setEmail] = useState(\"\");\r\n  const [timeSlotDisplayProp] = useState(\"flex\");\r\n  const [openHourSelected, setOpenHourSelected] = useState(0);\r\n  const [openMinuteSelected, setOpenMinuteSelected] = useState(0);\r\n  const [closeHourSelected, setCloseHourSelected] = useState(0);\r\n  const [closeMinuteSelected, setCloseMinuteSelected] = useState(0);\r\n  const [errorText, setErrorText] = useState(\"\");\r\n  const [appDesc, setAppDesc] = useState(\"\");\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      {\" \"}\r\n      <FlexColumnContGreenBorderTopRounded>\r\n        <ItemCont>\r\n          <Header>\r\n            Schedule for {month}/{day}/{year}\r\n          </Header>\r\n\r\n          <AppointmentCreationDiv>\r\n            <InputDivsTime inputdisplay={timeSlotDisplayProp}>\r\n              <CloseDayInputText>From:</CloseDayInputText>\r\n              <InputClosedDays\r\n                type=\"text\"\r\n                maxLength=\"2\"\r\n                list=\"openhours\"\r\n                onChange={(e) => {\r\n                  setOpenHourSelected(e.target.value);\r\n                }}\r\n              />\r\n              <InputDataList id=\"openhours\">\r\n                <InputOption value=\"1\"></InputOption>\r\n                <InputOption value=\"2\"></InputOption>\r\n                <InputOption value=\"3\"></InputOption>\r\n                <InputOption value=\"4\"></InputOption>\r\n                <InputOption value=\"5\"></InputOption>\r\n                <InputOption value=\"6\"></InputOption>\r\n                <InputOption value=\"7\"></InputOption>\r\n                <InputOption value=\"8\"></InputOption>\r\n                <InputOption value=\"9\"></InputOption>\r\n                <InputOption value=\"10\"></InputOption>\r\n                <InputOption value=\"11\"></InputOption>\r\n                <InputOption value=\"12\"></InputOption>\r\n                <InputOption value=\"13\"></InputOption>\r\n                <InputOption value=\"14\"></InputOption>\r\n                <InputOption value=\"15\"></InputOption>\r\n                <InputOption value=\"16\"></InputOption>\r\n                <InputOption value=\"17\"></InputOption>\r\n                <InputOption value=\"18\"></InputOption>\r\n                <InputOption value=\"19\"></InputOption>\r\n                <InputOption value=\"20\"></InputOption>\r\n                <InputOption value=\"21\"></InputOption>\r\n                <InputOption value=\"22\"></InputOption>\r\n                <InputOption value=\"23\"></InputOption>\r\n                <InputOption value=\"24\"></InputOption>\r\n              </InputDataList>\r\n              <InputClosedDays\r\n                type=\"text\"\r\n                maxLength=\"2\"\r\n                list=\"openminutes\"\r\n                onChange={(e) => {\r\n                  setOpenMinuteSelected(e.target.value);\r\n                }}\r\n              />\r\n              <InputDataList id=\"openminutes\"></InputDataList>\r\n            </InputDivsTime>\r\n\r\n            <InputDivsTime inputdisplay={timeSlotDisplayProp}>\r\n              <CloseDayInputText>To:</CloseDayInputText>\r\n              <InputClosedDays\r\n                type=\"text\"\r\n                maxLength=\"2\"\r\n                list=\"closehours\"\r\n                onChange={(e) => {\r\n                  setCloseHourSelected(e.target.value);\r\n                }}\r\n              />\r\n              <InputDataList id=\"closehours\">\r\n                <InputOption value=\"1\"></InputOption>\r\n                <InputOption value=\"2\"></InputOption>\r\n                <InputOption value=\"3\"></InputOption>\r\n                <InputOption value=\"4\"></InputOption>\r\n                <InputOption value=\"5\"></InputOption>\r\n                <InputOption value=\"6\"></InputOption>\r\n                <InputOption value=\"7\"></InputOption>\r\n                <InputOption value=\"8\"></InputOption>\r\n                <InputOption value=\"9\"></InputOption>\r\n                <InputOption value=\"10\"></InputOption>\r\n                <InputOption value=\"11\"></InputOption>\r\n                <InputOption value=\"12\"></InputOption>\r\n                <InputOption value=\"13\"></InputOption>\r\n                <InputOption value=\"14\"></InputOption>\r\n                <InputOption value=\"15\"></InputOption>\r\n                <InputOption value=\"16\"></InputOption>\r\n                <InputOption value=\"17\"></InputOption>\r\n                <InputOption value=\"18\"></InputOption>\r\n                <InputOption value=\"19\"></InputOption>\r\n                <InputOption value=\"20\"></InputOption>\r\n                <InputOption value=\"21\"></InputOption>\r\n                <InputOption value=\"22\"></InputOption>\r\n                <InputOption value=\"23\"></InputOption>\r\n                <InputOption value=\"24\"></InputOption>\r\n              </InputDataList>\r\n\r\n              <InputClosedDays\r\n                type=\"text\"\r\n                maxLength=\"2\"\r\n                list=\"closeminutes\"\r\n                onChange={(e) => {\r\n                  setCloseMinuteSelected(e.target.value);\r\n                }}\r\n              />\r\n              <InputDataList id=\"closeminutes\"></InputDataList>\r\n            </InputDivsTime>\r\n\r\n            <FlexDiv>\r\n              <SubHeaderPara>Schedule Description</SubHeaderPara>\r\n              <LandscapePara\r\n                maxLength=\"250\"\r\n                placeholder=\"Anything you want to tell us?\"\r\n                onChange={(e) => {\r\n                  setAppDesc(e.target.value);\r\n                }}\r\n              ></LandscapePara>\r\n            </FlexDiv>\r\n            <FlexDiv>\r\n              <SubHeaderPara>Contact Name</SubHeaderPara>\r\n              <Input\r\n                defaultValue={name}\r\n                placeholder=\"Contact Name\"\r\n                inputwidth=\"60%\"\r\n                inputheight=\"10px\"\r\n                onChange={(e) => {\r\n                  setContactName(e.target.value);\r\n                }}\r\n              ></Input>\r\n            </FlexDiv>\r\n            <FlexDiv>\r\n              <SubHeaderPara>Address</SubHeaderPara>\r\n              <Input\r\n                defaultValue={defaultaddress}\r\n                placeholder=\"Address\"\r\n                inputwidth=\"60%\"\r\n                inputheight=\"10px\"\r\n                onChange={(e) => {\r\n                  setAddress(e.target.value);\r\n                }}\r\n              ></Input>\r\n            </FlexDiv>\r\n            <FlexDiv>\r\n              <SubHeaderPara>City</SubHeaderPara>\r\n              <Input\r\n                defaultValue={defaultcity}\r\n                placeholder=\"City\"\r\n                inputwidth=\"60%\"\r\n                inputheight=\"10px\"\r\n                onChange={(e) => {\r\n                  setEmail(e.target.value);\r\n                }}\r\n              ></Input>\r\n            </FlexDiv>\r\n            <FlexDiv>\r\n              <SubHeaderPara>Cell Phone</SubHeaderPara>\r\n              <Input\r\n                defaultValue={cellphone}\r\n                placeholder=\"Cell Phone\"\r\n                inputwidth=\"60%\"\r\n                inputheight=\"10px\"\r\n                onChange={(e) => {\r\n                  setPhone(e.target.value);\r\n                }}\r\n              ></Input>\r\n            </FlexDiv>\r\n            <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n\r\n            <ButtonDiv>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  if (openHourSelected === 0 || closeHourSelected === 0) {\r\n                    setErrorText(\"Time not set properly!\");\r\n                  } else {\r\n                    onPreview({\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      appDesc,\r\n                      openHourSelected,\r\n                      openMinuteSelected,\r\n                      closeHourSelected,\r\n                      closeMinuteSelected,\r\n                    });\r\n                    onScheduleCreate(\r\n                      contactName,\r\n                      address,\r\n                      phone,\r\n                      city,\r\n                      appDesc,\r\n                      openHourSelected,\r\n                      openMinuteSelected,\r\n                      closeHourSelected,\r\n                      closeMinuteSelected\r\n                    );\r\n                    onClose();\r\n                    setOpenHourSelected(0);\r\n                    setOpenMinuteSelected(0);\r\n                    setCloseHourSelected(0);\r\n                    setCloseMinuteSelected(0);\r\n                    setErrorText(\"\");\r\n                  }\r\n                }}\r\n              >\r\n                {\" \"}\r\n                Submit\r\n              </RegularResponsiveButton>\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryRed}\r\n                onClick={() => {\r\n                  onClose();\r\n                  setErrorText(\"\");\r\n                  setOpenHourSelected(0);\r\n                  setOpenMinuteSelected(0);\r\n                  setCloseHourSelected(0);\r\n                  setCloseMinuteSelected(0);\r\n                }}\r\n              >\r\n                Cancel\r\n              </RegularResponsiveButton>\r\n            </ButtonDiv>\r\n          </AppointmentCreationDiv>\r\n        </ItemCont>\r\n      </FlexColumnContGreenBorderTopRounded>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nCreateSchedule.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onScheduleCreate: () => {},\r\n  month: 0,\r\n  year: 0,\r\n  day: 0,\r\n  name: \"\",\r\n  defaultaddress: \"\",\r\n  defaultcity: \"\",\r\n  cellphone: \"\",\r\n};\r\n\r\nexport default CreateSchedule;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport CreateSchedule from \"../../comps/CreateSchedule\";\r\nimport EditSchedule from \"../../comps/EditSchedule\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\n\r\nimport format from \"date-fns/format\";\r\nimport getDay from \"date-fns/getDay\";\r\nimport parse from \"date-fns/parse\";\r\nimport startOfWeek from \"date-fns/startOfWeek\";\r\nimport { Calendar, dateFnsLocalizer } from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst MyScheduleScreen = ({ onPreview, onProfileUpdated }) => {\r\n  //=============================================================================\r\n  // MySchedule Screen - Workers can view their personal schedule on this page\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Workers can click on their Schedule to view more information about it\r\n  //=============================================================================\r\n\r\n  const [isCreateSchedule, setIsCreateSchedule] = useState(false);\r\n  const [isEditSchedule, setIsEditSchedule] = useState(false);\r\n  const D = new Date();\r\n  const currentYear = D.getFullYear();\r\n  const currentMonth = D.getMonth() + 1;\r\n  const [scheduleList, setScheduleList] = useState([]);\r\n  var userIdSync = 0;\r\n  var scheduleId = 0;\r\n\r\n  const locales = {\r\n    \"en-US\": require(\"date-fns/locale/en-US\"),\r\n  };\r\n\r\n  const localizer = dateFnsLocalizer({\r\n    format,\r\n    parse,\r\n    startOfWeek,\r\n    getDay,\r\n    locales,\r\n  });\r\n\r\n  // USER INFO\r\n  const [userId, setUserId] = useState(0);\r\n  const [name, setName] = useState(\"\");\r\n  const [storeIdOfUser, setStoreIdOfUser] = useState(0);\r\n  const params = useParams();\r\n\r\n  const GetSessionInfo = async () => {\r\n    setUserId(params.workerId);\r\n    setName(params.workerName);\r\n    setStoreIdOfUser(params.storeId);\r\n    userIdSync = params.workerId;\r\n    GetUserSchedules();\r\n  };\r\n\r\n  const GetUserSchedules = async () => {\r\n    const userId = userIdSync === 0 ? userId : userIdSync;\r\n    const resp = await axios.post(window.$DBURL + \"schedule/crew\", {\r\n      Year: currentYear,\r\n      Month: currentMonth,\r\n      Id: userId,\r\n    });\r\n\r\n    if (\r\n      resp.status === 200 &&\r\n      resp.data !== null &&\r\n      resp.data.schedules !== null\r\n    ) {\r\n      setScheduleList(resp.data.schedules);\r\n    }\r\n  };\r\n\r\n  //CURRENT SCHEDULE\r\n\r\n  const [appDay, setAppDay] = useState(0);\r\n  const [appMonth, setAppMonth] = useState(0);\r\n  const [appYear, setAppYear] = useState(0);\r\n\r\n  const [startHour, setStartHour] = useState(0);\r\n  const [startMinute, setStartMinute] = useState(0);\r\n  const [endHour, setEndHour] = useState(0);\r\n  const [endMinute, setEndMinute] = useState(0);\r\n\r\n  const [contactName, setContactName] = useState(\"\");\r\n  const [appDesc, setAppDesc] = useState(\"\");\r\n  const [address, setAddress] = useState(\"\");\r\n  const [phone, setPhone] = useState(\"\");\r\n  const [city, setCity] = useState(\"\");\r\n  const [scheduleIdAsync, setScheduleIdAsync] = useState(0);\r\n\r\n  //EDIT\r\n  var nameNew = \"\";\r\n  var addressNew = \"\";\r\n  var phoneNew = \"\";\r\n  var cityNew = \"\";\r\n  var descriptionNew = \"\";\r\n\r\n  var startHourNew = 0;\r\n  var startMinuteNew = 0;\r\n  var endHourNew = 0;\r\n  var endMinuteNew = 0;\r\n\r\n  var yearNew = 0;\r\n  var monthNew = 0;\r\n  var dayNew = 0;\r\n\r\n  //NEW\r\n  var nameCreate = \"\";\r\n  var addressCreate = \"\";\r\n  var phoneCreate = \"\";\r\n  var cityCreate = \"\";\r\n  var descCreate = \"\";\r\n\r\n  var startHourCreate = 0;\r\n  var startMinuteCreate = 0;\r\n  var endHourCreate = 0;\r\n  var endMinuteCreate = 0;\r\n\r\n  const GetScheduleInfo = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"schedule/\" + scheduleId);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.schedule !== null) {\r\n          setAppDay(resp.data.schedule.Day);\r\n          setAppMonth(resp.data.schedule.Month);\r\n          setAppYear(resp.data.schedule.Year);\r\n\r\n          setAppDesc(resp.data.schedule.Description);\r\n          setContactName(resp.data.schedule.Contactname);\r\n          setAddress(resp.data.schedule.Street);\r\n          setPhone(resp.data.schedule.Phone);\r\n          setCity(resp.data.schedule.City);\r\n\r\n          if (resp.data.schedule.Start !== null) {\r\n            setStartHour(resp.data.schedule.Start.Hour);\r\n            setStartMinute(resp.data.schedule.Start.Minute);\r\n          }\r\n\r\n          if (resp.data.schedule.End !== null) {\r\n            setEndHour(resp.data.schedule.End.Hour);\r\n            setEndMinute(resp.data.schedule.End.Minute);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetScheduleInfoAsync = async () => {\r\n    try {\r\n      const resp = await axios.get(\r\n        window.$DBURL + \"schedule/\" + scheduleIdAsync\r\n      );\r\n\r\n      if (resp.status === 200 && resp.data && resp.data.schedule) {\r\n        const {\r\n          Day,\r\n          Month,\r\n          Year,\r\n          Start,\r\n          End,\r\n          Description,\r\n          Contactname,\r\n          Street,\r\n          Phone,\r\n          City,\r\n        } = resp.data.schedule;\r\n        setAppDay(Day);\r\n        setAppMonth(Month);\r\n        setAppYear(Year);\r\n\r\n        if (Start) {\r\n          setStartHour(Start.Hour);\r\n          setStartMinute(Start.Minute);\r\n        }\r\n\r\n        if (End) {\r\n          setEndHour(End.Hour);\r\n          setEndMinute(End.Minute);\r\n        }\r\n\r\n        setAppDesc(Description);\r\n        setContactName(Contactname);\r\n        setAddress(Street);\r\n        setPhone(Phone);\r\n        setCity(City);\r\n      }\r\n    } catch (error) {\r\n      // Handle error here\r\n    }\r\n  };\r\n\r\n  const HandleScheduleForm = async ({\r\n    contactName,\r\n    address,\r\n    phone,\r\n    city,\r\n    appDesc,\r\n    openHourSelected,\r\n    openMinuteSelected,\r\n    closeHourSelected,\r\n    closeMinuteSelected,\r\n  }) => {\r\n    nameCreate = contactName;\r\n    addressCreate = address;\r\n    phoneCreate = phone;\r\n    cityCreate = city;\r\n    descCreate = appDesc;\r\n\r\n    startHourCreate = openHourSelected;\r\n    startMinuteCreate = openMinuteSelected;\r\n    endHourCreate = closeHourSelected;\r\n    endMinuteCreate = closeMinuteSelected;\r\n  };\r\n\r\n  const HandleEditScheduleForm = async ({\r\n    contactName,\r\n    address,\r\n    phone,\r\n    city,\r\n    appDesc,\r\n    EditYear,\r\n    EditMonth,\r\n    EditDay,\r\n    openHourSelected,\r\n    openMinuteSelected,\r\n    closeHourSelected,\r\n    closeMinuteSelected,\r\n  }) => {\r\n    nameNew = contactName;\r\n    addressNew = address;\r\n    phoneNew = phone;\r\n    cityNew = city;\r\n    descriptionNew = appDesc;\r\n    startHourNew = openHourSelected;\r\n    startMinuteNew = openMinuteSelected;\r\n    endHourNew = closeHourSelected;\r\n    endMinuteNew = closeMinuteSelected;\r\n    yearNew = EditYear;\r\n    monthNew = EditMonth;\r\n    dayNew = EditDay;\r\n  };\r\n\r\n  const HandleNewSchedule = async ({\r\n    contactName,\r\n    address,\r\n    phone,\r\n    city,\r\n    appDesc,\r\n    openHourSelected,\r\n    openMinuteSelected,\r\n    closeHourSelected,\r\n    closeMinuteSelected,\r\n  }) => {\r\n    const resp = await axios.post(window.$DBURL + \"schedule\", {\r\n      Crewname: name,\r\n      Crew_Id: userId,\r\n      Year: year,\r\n      Month: month,\r\n      Day: day,\r\n      Start: { Hour: startHourCreate, Minute: startMinuteCreate },\r\n      End: { Hour: endHourCreate, Minute: endMinuteCreate },\r\n      Description: descCreate,\r\n      Street: addressCreate,\r\n      City: cityCreate,\r\n      Phone: phoneCreate,\r\n      Contactname: nameCreate,\r\n      Store_Id: storeIdOfUser,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetUserSchedules();\r\n    }\r\n  };\r\n\r\n  const HandleUpdateSchedule = async () => {\r\n    const resp = await axios.put(window.$DBURL + \"schedule\", {\r\n      Crewname: name,\r\n      Id: scheduleIdAsync,\r\n      Year: yearNew || year,\r\n      Month: monthNew || month,\r\n      Day: dayNew || day,\r\n      Start: {\r\n        Hour: startHourNew || startHour,\r\n        Minute: startMinuteNew || startMinute,\r\n      },\r\n      End: { Hour: endHourNew || endHour, Minute: endMinuteNew || endMinute },\r\n      Description: descriptionNew || appDesc,\r\n      Street: addressNew || address,\r\n      City: cityNew || city,\r\n      Phone: phoneNew || phone,\r\n      Contactname: nameNew || contactName,\r\n      Store_Id: storeIdOfUser,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetUserSchedules();\r\n      GetScheduleInfoAsync();\r\n    }\r\n  };\r\n\r\n  const HandleDeleteSchedule = async () => {\r\n    const resp = await axios.delete(\r\n      window.$DBURL + \"schedule/\" + scheduleIdAsync\r\n    );\r\n    if (resp.status === 200) {\r\n      GetUserSchedules();\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const calendarStyle = {\r\n    height: \"65vh\",\r\n    width: \"100%\",\r\n    \"@media (maxWidth: 1006px)\": {\r\n      height: \"65vw\",\r\n    },\r\n  };\r\n\r\n  var fullDate = \"\";\r\n  const [year, setYear] = useState(0);\r\n  const [month, setMonth] = useState(0);\r\n  const [day, setDay] = useState(0);\r\n\r\n  const HandleStartInfo = async () => {\r\n    setYear(fullDate.getFullYear());\r\n    setMonth(fullDate.getMonth() + 1);\r\n    setDay(fullDate.getDate());\r\n  };\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <FullWidthMobileCont100vw100vh>\r\n        <Menu> </Menu>\r\n      </FullWidthMobileCont100vw100vh>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <FlexColumnFullWidth>\r\n          <CreateSchedule\r\n            onPreview={HandleScheduleForm}\r\n            onScheduleCreate={HandleNewSchedule}\r\n            year={year}\r\n            month={month}\r\n            day={day}\r\n            open={isCreateSchedule}\r\n            onClose={() => {\r\n              setIsCreateSchedule(false);\r\n            }}\r\n          ></CreateSchedule>\r\n          <EditSchedule\r\n            DeleteSchedule={() => {\r\n              HandleDeleteSchedule();\r\n              setIsEditSchedule(false);\r\n            }}\r\n            onPreview={HandleEditScheduleForm}\r\n            onScheduleEdit={HandleUpdateSchedule}\r\n            open={isEditSchedule}\r\n            onClose={() => {\r\n              setIsEditSchedule(false);\r\n            }}\r\n            month={appMonth}\r\n            day={appDay}\r\n            year={appYear}\r\n            dfName={contactName}\r\n            dfAddress={address}\r\n            dfCity={city}\r\n            dfCellPhone={phone}\r\n            dfNotes={appDesc}\r\n            startHour={startHour}\r\n            startMinute={startMinute}\r\n            endHour={endHour}\r\n            endMinute={endMinute}\r\n          ></EditSchedule>\r\n          <LeagueSpartanExtraLargeBold>\r\n            {params.workerName + \"'s Personal Schedule\"}\r\n          </LeagueSpartanExtraLargeBold>\r\n          <Calendar\r\n            localizer={localizer}\r\n            events={scheduleList.map((o, i) => {\r\n              return {\r\n                id: o.Id,\r\n                title: o.Description,\r\n                start: new Date(\r\n                  o.Year,\r\n                  o.Month - 1,\r\n                  o.Day,\r\n                  o.Start.Hour,\r\n                  o.Start.Minute\r\n                ),\r\n                end: new Date(\r\n                  o.Year,\r\n                  o.Month - 1,\r\n                  o.Day,\r\n                  o.End.Hour,\r\n                  o.End.Minute\r\n                ),\r\n                allDay: false,\r\n              };\r\n            })}\r\n            startAccessor=\"start\"\r\n            endAccessor=\"end\"\r\n            style={calendarStyle}\r\n            min={new Date(2021, 11, 0, 8, 0, 0)}\r\n            max={new Date(2021, 11, 0, 18, 0, 0)}\r\n            longPressThreshold={10}\r\n            selectable={true}\r\n            onSelectSlot={(slotInfo) => {\r\n              fullDate = slotInfo.slots[0];\r\n              HandleStartInfo();\r\n              setIsCreateSchedule(true);\r\n            }}\r\n            onSelectEvent={(event) => {\r\n              scheduleId = event.id;\r\n              setScheduleIdAsync(event.id);\r\n              GetScheduleInfo();\r\n              fullDate = event.start;\r\n              HandleStartInfo();\r\n              setIsEditSchedule(true);\r\n            }}\r\n            onNavigate={(date) => {\r\n              GetUserSchedules();\r\n            }}\r\n          />\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nMyScheduleScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default MyScheduleScreen;\r\n","// React import\r\nimport React from \"react\";\r\n\r\n// Import of react-big-calendar CSS\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\n\r\n// Import of react-datepicker CSS\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\n// RegularResponsiveButton imported from the \"Components\" stylesheet\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\n// FlexColumnContGreenBorderTopRounded and FlexColumnFullWidth imported from the \"Cont\" stylesheet\r\nimport {\r\n  FlexColumnContGreenBorderTopRounded,\r\n  FlexColumnFullWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\n\r\n// FlexDivSpaceBetween imported from the \"Div\" stylesheet\r\nimport { FlexDivSpaceBetween } from \"../../StylesheetComps/Div\";\r\n\r\n// FixedOverlay200vh imported from the \"OverlayCont\" stylesheet\r\nimport { FixedOverlay200vh } from \"../../StylesheetComps/OverlayCont\";\r\n\r\n// Icon30px20pxPointer imported from the \"Quote\" stylesheet\r\nimport { Icon30px20pxPointer } from \"../../StylesheetComps/Quote\";\r\n\r\n// RegularTextBoldRed imported from the \"Titles\" stylesheet\r\nimport { RegularTextBoldRed } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ClockIn = ({ open, onClose, clockIn, clockOut, clockCheck }) => {\r\n  if (!open) return null;\r\n  if (clockCheck === \"clockInNeeded\") {\r\n    return (\r\n      <FixedOverlay200vh>\r\n        <Icon30px20pxPointer\r\n          src=\"/Close2.svg\"\r\n          onClick={onClose}\r\n        ></Icon30px20pxPointer>\r\n        <FlexColumnContGreenBorderTopRounded>\r\n          <FlexColumnFullWidth>\r\n            <FlexDivSpaceBetween>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  clockIn();\r\n                  onClose();\r\n                }}\r\n              >\r\n                Clock In\r\n              </RegularResponsiveButton>\r\n            </FlexDivSpaceBetween>\r\n          </FlexColumnFullWidth>\r\n        </FlexColumnContGreenBorderTopRounded>\r\n      </FixedOverlay200vh>\r\n    );\r\n  } else if (clockCheck === \"clockOutNeeded\") {\r\n    return (\r\n      <FixedOverlay200vh>\r\n        <Icon30px20pxPointer\r\n          src=\"/Close2.svg\"\r\n          onClick={onClose}\r\n        ></Icon30px20pxPointer>\r\n        <FlexColumnContGreenBorderTopRounded>\r\n          <FlexColumnFullWidth>\r\n            <FlexDivSpaceBetween>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  clockOut();\r\n                  onClose();\r\n                }}\r\n              >\r\n                Clock Out\r\n              </RegularResponsiveButton>\r\n            </FlexDivSpaceBetween>\r\n          </FlexColumnFullWidth>\r\n        </FlexColumnContGreenBorderTopRounded>\r\n      </FixedOverlay200vh>\r\n    );\r\n  } else if (clockCheck === \"workerClockedForDay\") {\r\n    return (\r\n      <FixedOverlay200vh>\r\n        <Icon30px20pxPointer\r\n          src=\"/Close2.svg\"\r\n          onClick={onClose}\r\n        ></Icon30px20pxPointer>\r\n        <FlexColumnContGreenBorderTopRounded>\r\n          <FlexColumnFullWidth>\r\n            <FlexDivSpaceBetween>\r\n              <RegularTextBoldRed>\r\n                You've already clocked in/out for this schedule, please contact\r\n                your manager if an error was made.\r\n              </RegularTextBoldRed>\r\n            </FlexDivSpaceBetween>\r\n          </FlexColumnFullWidth>\r\n        </FlexColumnContGreenBorderTopRounded>\r\n      </FixedOverlay200vh>\r\n    );\r\n  }\r\n};\r\n\r\nClockIn.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onAppointmentEdit: () => {},\r\n  CancelAppointment: () => {},\r\n  MoveForward: () => {},\r\n  DoNotMove: () => {},\r\n  month: 0,\r\n  year: 0,\r\n  day: 0,\r\n  dfName: \"\",\r\n  dfAddress: \"\",\r\n  dfCity: \"\",\r\n  dfCellPhone: \"\",\r\n  dfFlex: false,\r\n  dfNotes: \"\",\r\n  installerId: 0,\r\n  appointmentTime: \"\",\r\n  clockCheck: \"\",\r\n};\r\n\r\nexport default ClockIn;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { GetCurrentTime } from \"../../API_Functions/Utility_Functions\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport ClockIn from \"../../comps/ClockIn\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn,\r\n  FlexRowContFullWidth,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularTextWithMargins,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst ClockInOutScreen = () => {\r\n  //=============================================================================\r\n  // Clock In / Clock Out. Worker is redirected here from link in Menu\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Worker can clock in and out of a schedule that has been created\r\n  //=============================================================================\r\n\r\n  const [clockInOpen, setClockInOpen] = useState(false);\r\n  const [clockId, setClockId] = useState(0);\r\n  const [clockCheck, setClockCheck] = useState(\"\");\r\n  const [scheduleMap, setScheduleMap] = useState([]);\r\n  const D = new Date();\r\n  const currentYear = D.getFullYear();\r\n  const currentMonth = (\"0\" + (D.getMonth() + 1)).slice(-2);\r\n  const currentDay = (\"0\" + D.getDate()).slice(-2);\r\n\r\n  const GetTodaySchedule = async (userId) => {\r\n    const resp = await axios.post(window.$DBURL + \"schedule/crew\", {\r\n      Id: userId,\r\n      Year: currentYear,\r\n      Month: currentMonth,\r\n      Day: currentDay,\r\n    });\r\n    setScheduleMap(resp.data.schedules);\r\n  };\r\n\r\n  const HandleClockIn = async (userId) => {\r\n    var clockin = await GetCurrentTime();\r\n    const resp = await axios.post(window.$DBURL + \"schedule/clock\", {\r\n      Crew_Id: userId,\r\n      Schedule_Id: clockId,\r\n      Clockin: clockin,\r\n    });\r\n    if (resp.status === 200) {\r\n      setClockCheck(\"\");\r\n      setClockId(0);\r\n    }\r\n  };\r\n\r\n  const HandleClockOut = async (userId) => {\r\n    var clockout = await GetCurrentTime();\r\n    const resp = await axios.put(window.$DBURL + \"schedule/worker/clock\", {\r\n      Schedule_Id: clockId,\r\n      Clockout: clockout,\r\n    });\r\n    if (resp.status === 200) {\r\n      setClockCheck(\"\");\r\n      setClockId(0);\r\n    }\r\n  };\r\n\r\n  const ClockStatusCheck = async () => {\r\n    const resp = await axios.get(\r\n      window.$DBURL + \"schedule/clock/sch/\" + clockId\r\n    );\r\n    if (resp.data.clock == null) {\r\n      setClockCheck(\"clockInNeeded\");\r\n    } else if (resp.data.clock.Clockout == null) {\r\n      setClockCheck(\"clockOutNeeded\");\r\n    } else if (resp.data.clock.Clockout !== null) {\r\n      setClockCheck(\"workerClockedForDay\");\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetTodaySchedule(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    ClockStatusCheck();\r\n  }, [clockId]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <LeftCont>\r\n        <Menu></Menu>\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <FlexColumnFullWidth>\r\n          <ClockIn\r\n            open={clockInOpen}\r\n            clockCheck={clockCheck}\r\n            clockIn={() => {\r\n              HandleClockIn(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n            }}\r\n            clockOut={() => {\r\n              HandleClockOut(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n            }}\r\n            onClose={() => {\r\n              setClockInOpen(false);\r\n            }}\r\n          >\r\n            {\" \"}\r\n          </ClockIn>\r\n          <LeagueSpartanExtraLargeBold>\r\n            Select a Schedule to Clock In / Clock Out (24 Hour Time)\r\n          </LeagueSpartanExtraLargeBold>\r\n          {scheduleMap.map((o, i) => (\r\n            <div\r\n              onClick={() => {\r\n                setClockId(o.Id);\r\n                setClockInOpen(true);\r\n              }}\r\n            >\r\n              <FlexRowContFullWidth>\r\n                <RegularTextWithMargins>\r\n                  {o.Month}/{o.Day}/{o.Year}\r\n                </RegularTextWithMargins>\r\n                <RegularTextWithMargins>\r\n                  Start Time -{o.Start.Hour}:{o.Start.Minute}\r\n                </RegularTextWithMargins>\r\n                <RegularTextWithMargins>\r\n                  End Time -{o.End.Hour}:{o.End.Minute}\r\n                </RegularTextWithMargins>\r\n              </FlexRowContFullWidth>\r\n              <hr></hr>\r\n            </div>\r\n          ))}\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nClockInOutScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default ClockInOutScreen;\r\n","// React import\r\nimport React, { useEffect, useState } from \"react\";\r\n\r\n// Import of useParams hook\r\nimport { useParams } from \"react-router-dom\";\r\n\r\n// TextInputProp imported from the \"AuthSheet\" stylesheet\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\n\r\n// FlexRowContFullWidth imported from the \"Cont\" stylesheet\r\nimport { FlexRowContFullWidth } from \"../../StylesheetComps/Cont\";\r\n\r\n// BlueUnderlinePointerPara and RegularText imported from the \"Titles\" stylesheet\r\nimport {\r\n  BlueUnderlinePointerPara,\r\n  RegularText,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\n// UserRole imported from the \"UserRoles\" stylesheet\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\nconst ClockList = ({\r\n  indexNum,\r\n  clockin,\r\n  clockout,\r\n  adjclockout,\r\n  adjclockin,\r\n  year,\r\n  month,\r\n  day,\r\n  onUpdateAdjClock,\r\n  onPreview,\r\n  onSetId,\r\n}) => {\r\n  const [editAdjClockIn, setEditAdjClockIn] = useState(\"Edit\");\r\n  const [editAdjClockOut, setEditAdjClockOut] = useState(\"Edit\");\r\n\r\n  const [adjInDisplay, setAdjInDisplay] = useState(\"none\");\r\n  const [adjOutDisplay, setAdjOutDisplay] = useState(\"none\");\r\n\r\n  const [adjInTextDisplay, setAdjInTextDisplay] = useState(\"block\");\r\n  const [adjOutTextDisplay, setAdjOutTextDisplay] = useState(\"block\");\r\n\r\n  const [adjClockInValue, setAdjClockInValue] = useState(\"\");\r\n  const [adjClockOutValue, setAdjClockOutValue] = useState(\"\");\r\n\r\n  const [clockOutValueHere, setClockOutValueHere] = useState(\"\");\r\n  const [clockInValueHere, setClockInValueHere] = useState(\"\");\r\n  const [adjClockOutValueHere, setAdjClockOutValueHere] = useState(\"\");\r\n  const [adjClockInValueHere, setAdjClockInValueHere] = useState(\"\");\r\n\r\n  const params = useParams();\r\n\r\n  useEffect(() => {\r\n    if (clockout == null) {\r\n      setClockOutValueHere(\"\");\r\n      setEditAdjClockOut(\"\");\r\n    } else {\r\n      setClockOutValueHere(clockout);\r\n    }\r\n\r\n    if (clockin == null) {\r\n      setClockInValueHere(\"\");\r\n      setEditAdjClockIn(\"\");\r\n    } else {\r\n      setClockInValueHere(clockin);\r\n    }\r\n\r\n    if (adjclockin == null) {\r\n      setAdjClockInValueHere(\"\");\r\n    } else {\r\n      setAdjClockInValueHere(adjclockin);\r\n    }\r\n\r\n    if (adjclockout == null) {\r\n      setAdjClockOutValueHere(\"\");\r\n    } else {\r\n      setAdjClockOutValueHere(adjclockout);\r\n    }\r\n  }, [clockout, clockin, adjclockout, adjclockin]);\r\n\r\n  if (params.roleNum === UserRole.Worker) {\r\n    return (\r\n      <FlexRowContFullWidth>\r\n        <FlexRowContFullWidth>\r\n          <RegularText>{indexNum}</RegularText>\r\n        </FlexRowContFullWidth>\r\n\r\n        <FlexRowContFullWidth>\r\n          <RegularText>{month + \"/\" + day + \"/\" + year}</RegularText>\r\n        </FlexRowContFullWidth>\r\n\r\n        <FlexRowContFullWidth>\r\n          <RegularText>{clockInValueHere.substring(11, 16)}</RegularText>\r\n        </FlexRowContFullWidth>\r\n\r\n        <FlexRowContFullWidth>\r\n          <RegularText>{clockOutValueHere.substring(11, 16)}</RegularText>\r\n        </FlexRowContFullWidth>\r\n\r\n        <FlexRowContFullWidth>\r\n          <RegularText>{adjClockInValueHere.substring(11, 16)}</RegularText>\r\n        </FlexRowContFullWidth>\r\n\r\n        <FlexRowContFullWidth>\r\n          <RegularText>{adjClockOutValueHere.substring(11, 16)}</RegularText>\r\n        </FlexRowContFullWidth>\r\n      </FlexRowContFullWidth>\r\n    );\r\n  } else {\r\n    return (\r\n      <FlexRowContFullWidth>\r\n        <FlexRowContFullWidth>\r\n          <RegularText>{indexNum}</RegularText>\r\n        </FlexRowContFullWidth>\r\n\r\n        <FlexRowContFullWidth>\r\n          <RegularText>{month + \"/\" + day + \"/\" + year}</RegularText>\r\n        </FlexRowContFullWidth>\r\n\r\n        <FlexRowContFullWidth>\r\n          <RegularText>{clockInValueHere.substring(11, 16)}</RegularText>\r\n        </FlexRowContFullWidth>\r\n\r\n        <FlexRowContFullWidth>\r\n          <RegularText>{clockOutValueHere.substring(11, 16)}</RegularText>\r\n        </FlexRowContFullWidth>\r\n\r\n        <FlexRowContFullWidth>\r\n          <RegularText textdisplay={adjInTextDisplay}>\r\n            {adjClockInValueHere.substring(11, 16)}\r\n          </RegularText>\r\n          <TextInputProp\r\n            inputdisplay={adjInDisplay}\r\n            defaultValue={adjClockInValueHere.substring(11, 16)}\r\n            onChange={(e) => {\r\n              setAdjClockInValue(e.target.value);\r\n            }}\r\n          ></TextInputProp>\r\n          <BlueUnderlinePointerPara\r\n            onClick={() => {\r\n              if (editAdjClockIn === \"Edit\") {\r\n                setEditAdjClockIn(\"Save\");\r\n                setAdjInTextDisplay(\"none\");\r\n                setAdjInDisplay(\"block\");\r\n                onSetId();\r\n              } else {\r\n                setEditAdjClockIn(\"Edit\");\r\n                setAdjInTextDisplay(\"block\");\r\n                setAdjInDisplay(\"none\");\r\n                onPreview({ adjClockInValue });\r\n                onUpdateAdjClock(adjClockInValue);\r\n                onSetId();\r\n              }\r\n            }}\r\n          >\r\n            {editAdjClockIn}\r\n          </BlueUnderlinePointerPara>\r\n        </FlexRowContFullWidth>\r\n\r\n        <FlexRowContFullWidth>\r\n          <RegularText textdisplay={adjOutTextDisplay}>\r\n            {adjClockOutValueHere.substring(11, 16)}\r\n          </RegularText>\r\n          <TextInputProp\r\n            defaultValue={adjClockOutValueHere.substring(11, 16)}\r\n            inputdisplay={adjOutDisplay}\r\n            onChange={(e) => {\r\n              setAdjClockOutValue(e.target.value);\r\n            }}\r\n          ></TextInputProp>\r\n          <BlueUnderlinePointerPara\r\n            onClick={() => {\r\n              if (editAdjClockOut === \"Edit\") {\r\n                setEditAdjClockOut(\"Save\");\r\n                setAdjOutTextDisplay(\"none\");\r\n                setAdjOutDisplay(\"block\");\r\n                onSetId();\r\n              } else {\r\n                setEditAdjClockOut(\"Edit\");\r\n                setAdjOutTextDisplay(\"block\");\r\n                setAdjOutDisplay(\"none\");\r\n                onPreview({ adjClockOutValue });\r\n                onUpdateAdjClock(adjClockOutValue);\r\n                onSetId();\r\n              }\r\n            }}\r\n          >\r\n            {editAdjClockOut}\r\n          </BlueUnderlinePointerPara>\r\n        </FlexRowContFullWidth>\r\n      </FlexRowContFullWidth>\r\n    );\r\n  }\r\n};\r\n\r\nClockList.defaultProps = {\r\n  ManagerName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onUpdateAdjClock: () => {},\r\n  onSetId: () => {},\r\n  StoreLocationName: \"123 Yonge Street\",\r\n  roleID: 0,\r\n  MetroName: \"Toronto\",\r\n  Username: \"\",\r\n  Email: \"\",\r\n  Phone: \"\",\r\n  workerId: 0,\r\n  storeId: 0,\r\n  indexNum: 0,\r\n  clockin: 0,\r\n  clockout: 0,\r\n  adjclockin: 0,\r\n  adjclockout: 0,\r\n  year: 0,\r\n  month: 0,\r\n  day: 0,\r\n  scheduleId: 0,\r\n};\r\n\r\nexport default ClockList;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\n//DATEPICKER IMPORTS\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport DatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport ClockList from \"../../comps/ClockList\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn,\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContFullWidth,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularText,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst ClockSchedule = () => {\r\n  //================================================================================\r\n  // Clock Schedule Screen. View/Adjust Schedules Clock In/Outs of a worker schedule\r\n  //================================================================================\r\n\r\n  //================================================================================\r\n  // Managers / Accountants should be only ones with access\r\n  //================================================================================\r\n\r\n  const params = useParams();\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [workerName, setWorkerName] = useState(\"\");\r\n  const [clockMap, setClockMap] = useState([]);\r\n  const [startDate, setStartDate] = useState(new Date());\r\n  const [endDate, setEndDate] = useState(new Date());\r\n  const [scheduleId, setScheduleId] = useState(0);\r\n\r\n  const [clockId, setClockId] = useState(0);\r\n  const [clockin, setClockIn] = useState(0);\r\n  const [clockout, setClockOut] = useState(0);\r\n\r\n  var newClockInSync = \"\";\r\n  var newClockOutSync = \"\";\r\n\r\n  var newClockInSyncUpdated = \"default\";\r\n  var newClockOutSyncUpdated = \"default\";\r\n\r\n  var selectedStartYear = startDate.getFullYear();\r\n  var selectedStartMonth = startDate.getMonth() + 1;\r\n  var selectedStartDate = startDate.getDate();\r\n\r\n  var selectedEndYear = endDate.getFullYear();\r\n  var selectedEndMonth = endDate.getMonth() + 1;\r\n  var selectedEndDate = endDate.getDate();\r\n\r\n  const GetWorkerClockRecords = async () => {\r\n    const resp = await axios.post(window.$DBURL + \"schedule/clock/user\", {\r\n      StartDate:\r\n        selectedStartYear +\r\n        \"-\" +\r\n        selectedStartMonth +\r\n        \"-\" +\r\n        selectedStartDate +\r\n        \"T\" +\r\n        0 +\r\n        0 +\r\n        \":\" +\r\n        0 +\r\n        0,\r\n      EndDate:\r\n        selectedEndYear +\r\n        \"-\" +\r\n        selectedEndMonth +\r\n        \"-\" +\r\n        selectedEndDate +\r\n        \"T\" +\r\n        23 +\r\n        \":\" +\r\n        59,\r\n      Id: params.userId,\r\n    });\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.clock !== null) {\r\n          setClockMap(resp.data.clock.Clocks);\r\n          setWorkerName(resp.data.clock.Name);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const HandleFormClock = async ({ adjClockInValue, adjClockOutValue }) => {\r\n    newClockInSync = adjClockInValue;\r\n    newClockOutSync = adjClockOutValue;\r\n    if (adjClockInValue !== undefined && adjClockOutValue !== undefined) {\r\n      newClockInSyncUpdated =\r\n        clockin.substring(0, 10) + adjClockInValue + clockin.substring(16, 20);\r\n      newClockOutSyncUpdated =\r\n        clockout.substring(0, 10) +\r\n        adjClockOutValue +\r\n        clockout.substring(16, 20);\r\n    } else if (adjClockOutValue !== undefined) {\r\n      newClockInSyncUpdated = clockin;\r\n      newClockOutSyncUpdated =\r\n        clockout.substring(0, 11) +\r\n        adjClockOutValue +\r\n        clockout.substring(16, 20);\r\n    } else if (adjClockInValue !== undefined) {\r\n      newClockInSyncUpdated =\r\n        clockin.substring(0, 11) + adjClockInValue + clockin.substring(16, 20);\r\n      newClockOutSyncUpdated = clockout;\r\n    }\r\n  };\r\n\r\n  const HandleAdjustment = async () => {\r\n    if (newClockOutSync === undefined) {\r\n      const resp = await axios.put(window.$DBURL + \"schedule/clock\", {\r\n        Id: clockId,\r\n        Schedule_Id: scheduleId,\r\n        Crew_Id: params.userId,\r\n        Crewname: params.workerName,\r\n        Clockin: clockin,\r\n        Clockout: clockout,\r\n        AdjClockin: newClockInSyncUpdated || clockin,\r\n      });\r\n      if (resp.status === 200) {\r\n      }\r\n      newClockInSyncUpdated = \"\";\r\n    } else if (newClockInSync === undefined) {\r\n      const resp = await axios.put(window.$DBURL + \"schedule/clock\", {\r\n        Id: clockId,\r\n        Schedule_Id: scheduleId,\r\n        Crew_Id: params.userId,\r\n        Crewname: params.workerName,\r\n        Clockin: clockin,\r\n        Clockout: clockout,\r\n        AdjClockout: newClockOutSyncUpdated || clockout,\r\n      });\r\n      if (resp.status === 200) {\r\n      }\r\n      newClockOutSyncUpdated = \"\";\r\n    } else {\r\n    }\r\n    GetWorkerClockRecords();\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetWorkerClockRecords();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    GetWorkerClockRecords();\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n  }, [startDate]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    GetWorkerClockRecords();\r\n  }, [endDate]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <FullWidthMobileCont100vw100vh>\r\n        <Menu> </Menu>\r\n      </FullWidthMobileCont100vw100vh>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <FlexColumnFullWidth>\r\n          <FlexRowContFullWidth>\r\n            <LeagueSpartanExtraLargeBold>\r\n              {workerName}\r\n            </LeagueSpartanExtraLargeBold>\r\n            <FlexDiv>\r\n              <DatePicker\r\n                selected={startDate}\r\n                onChange={(date) => setStartDate(date)}\r\n                selectsStart\r\n                startDate={startDate}\r\n                endDate={endDate}\r\n              />\r\n              <DatePicker\r\n                selected={endDate}\r\n                onChange={(date) => setEndDate(date)}\r\n                selectsEnd\r\n                startDate={startDate}\r\n                endDate={endDate}\r\n                minDate={startDate}\r\n              />\r\n            </FlexDiv>\r\n          </FlexRowContFullWidth>\r\n\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <RegularText>Index</RegularText>\r\n            <RegularText>Date</RegularText>\r\n            <RegularText>Clock-In</RegularText>\r\n            <RegularText>Clock-Out</RegularText>\r\n            <RegularText>Adj. Clock-In</RegularText>\r\n            <RegularText>Adj. Clock-Out</RegularText>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n\r\n          {clockMap.map((o, i) => (\r\n            <ClockList\r\n              key={i}\r\n              indexNum={i + 1}\r\n              year={o.Clockin.substring(0, 4)}\r\n              month={o.Clockin.substring(5, 7)}\r\n              day={o.Clockin.substring(8, 10)}\r\n              clockin={o.Clockin}\r\n              clockout={o.Clockout}\r\n              adjclockin={o.AdjClockin}\r\n              adjclockout={o.AdjClockout}\r\n              roleID={roleNum}\r\n              onPreview={HandleFormClock}\r\n              onUpdateAdjClock={HandleAdjustment}\r\n              onSetId={() => {\r\n                setScheduleId(o.Schedule_Id);\r\n                setClockId(o.Id);\r\n                setClockIn(o.Clockin);\r\n                setClockOut(o.Clockout);\r\n              }}\r\n            ></ClockList>\r\n          ))}\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nClockSchedule.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default ClockSchedule;\r\n","import axios from \"axios\"; // used for making HTTP requests\r\nimport React, { useEffect, useState } from \"react\"; // imports the React library and hooks for state and lifecycle methods\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\"; // imports a stylesheet for the react-big-calendar component\r\nimport \"react-datepicker/dist/react-datepicker.css\"; // imports a stylesheet for the react-datepicker component\r\nimport { useParams } from \"react-router-dom\"; // imports the hook for accessing route parameters\r\nimport styled from \"styled-components\"; // imports a library for creating styled components\r\nimport Input from \"../../comps/Input\"; // imports the Input component from the specified location\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\"; // imports the ColorPalette object from the specified location\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\"; // imports the RegularResponsiveButton component from the specified location\r\nimport { FlexDiv, LeftItemWindowFixed } from \"../../StylesheetComps/Cont\"; // imports the FlexDiv and LeftItemWindowFixed components from the specified location\r\nimport { TextAreaLarge } from \"../../StylesheetComps/LandscapeForm\"; // imports the TextAreaLarge component from the specified location\r\nimport { FixedOverlay200vh } from \"../../StylesheetComps/OverlayCont\"; // imports the FixedOverlay200vh component from the specified location\r\nimport {\r\n  RegularTextBoldRed,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\"; // imports the RegularTextBoldRed and TinyTextItalics components from the specified location\r\n\r\nconst ItemCont = styled.div`\r\n  background-color: white;\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  left: 30%;\r\n  width: 500px;\r\n  border-radius: 10px;\r\n  border: 1px solid black;\r\n  margin: 30px;\r\n  padding-left: 0.5%;\r\n  padding-right: 0.5%;\r\n  align-items: center;\r\n  justify-content: center;\r\n  overflow-y: auto;\r\n  @media (max-width: 1006px) {\r\n    left: 0%;\r\n    width: 98.5vw;\r\n    height: 90vh;\r\n    overflow-y: scroll;\r\n    margin: 0px;\r\n  }\r\n`;\r\nconst Header = styled.p`\r\n  font-size: 20px;\r\n  font-weight: 500;\r\n  color: black;\r\n  font-family: Futura;\r\n  margin-left: 12px;\r\n  padding-top: 10px;\r\n  @media (max-width: 1006px) {\r\n    padding-top: 0px;\r\n    font-size: 18px;\r\n  }\r\n`;\r\n\r\nconst AppointmentSecDiv = styled.div`\r\n  display: flex;\r\n  width: 90%;\r\n`;\r\n\r\nconst SubHeaderPara = styled.p`\r\n  font-family: Futura;\r\n  font-size: 16px;\r\n  width: 150px;\r\n`;\r\n\r\nconst ButtonDiv = styled.div`\r\n  width: 60%;\r\n  display: flex;\r\n  justify-content: space-between;\r\n  margin-top: 1%;\r\n`;\r\n\r\nconst AppointmentContDiv = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  width: 50%;\r\n  margin-right: 10%;\r\n  margin-bottom: 5%;\r\n`;\r\n\r\nconst RadioButtonInnerDiv = styled.div`\r\n  margin-right: 5%;\r\n  display: flex;\r\n  margin-top: auto;\r\n  margin-bottom: auto;\r\n`;\r\n\r\nconst CreateAppointment = ({\r\n  open,\r\n  onClick,\r\n  onClose,\r\n  onPreview,\r\n  defaultSlotId,\r\n  onAppointmentCreate,\r\n  month,\r\n  day,\r\n  year,\r\n  name,\r\n  defaultaddress,\r\n  defaultcity,\r\n  cellphone,\r\n}) => {\r\n  const params = useParams();\r\n  const [contactName, setContactName] = useState(\"\");\r\n  const [address, setAddress] = useState(\"\");\r\n  const [phone, setPhone] = useState(\"\");\r\n  const [city, setEmail] = useState(\"\");\r\n  const [flexible, setFlexible] = useState(false);\r\n\r\n  const [slotId, setSlotId] = useState(0);\r\n  const [appDesc, setAppDesc] = useState(\"\");\r\n\r\n  const [startHour, setStartHour] = useState(\"\");\r\n  const [endHour, setEndHour] = useState(\"\");\r\n  const [startMinute, setStartMinute] = useState(\"\");\r\n  const [endMinute, setEndMinute] = useState(\"\");\r\n\r\n  const [errorText, setErrorText] = useState(\"\");\r\n  const [errorTextDisplay, setErrorTextDisplay] = useState(\"none\");\r\n\r\n  const GetInstallerTimeSlots = async (Id) => {\r\n    const resp = await axios.get(window.$DBURL + \"appointment/slot/\" + Id);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.slot !== null) {\r\n          if (\r\n            resp.data.slot.Start.Minute === 0 &&\r\n            resp.data.slot.End.Minute === 0\r\n          ) {\r\n            setStartHour(resp.data.slot.Start.Hour);\r\n            setStartMinute(resp.data.slot.Start.Minute + \"0\");\r\n            setEndHour(resp.data.slot.End.Hour);\r\n            setEndMinute(resp.data.slot.End.Minute + \"0\");\r\n          }\r\n          if (resp.data.slot.End.Minute === 0) {\r\n            setEndHour(resp.data.slot.End.Hour);\r\n            setEndMinute(resp.data.slot.End.Minute + \"0\");\r\n          }\r\n          if (resp.data.slot.Start.Minute === 0) {\r\n            setStartHour(resp.data.slot.Start.Hour);\r\n            setStartMinute(resp.data.slot.Start.Minute + \"0\");\r\n          }\r\n          if (\r\n            resp.data.slot.Start.Minute < 10 &&\r\n            resp.data.slot.Start.Minute !== 0\r\n          ) {\r\n            setStartHour(resp.data.slot.Start.Hour);\r\n            setStartMinute(\"0\" + resp.data.slot.Start.Minute);\r\n          }\r\n          if (\r\n            resp.data.slot.End.Minute < 10 &&\r\n            resp.data.slot.End.Minute !== 0\r\n          ) {\r\n            setEndHour(resp.data.slot.End.Hour);\r\n            setEndMinute(\"0\" + resp.data.slot.End.Minute);\r\n          }\r\n          if (resp.data.slot.End.Minute > 10) {\r\n            setEndHour(resp.data.slot.End.Hour);\r\n            setEndMinute(resp.data.slot.End.Minute);\r\n          }\r\n          if (resp.data.slot.Start.Minute > 10) {\r\n            setStartHour(resp.data.slot.Start.Hour);\r\n            setStartMinute(resp.data.slot.Start.Minute);\r\n          }\r\n          setSlotId(Id);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetInstallerTimeSlots(params.eventId);\r\n  }, [day, month, year, open, params.eventId]);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      {\" \"}\r\n      <ItemCont>\r\n        <LeftItemWindowFixed>\r\n          <div>\r\n            <Header>\r\n              Appointment for {month}/{day}/{year}\r\n            </Header>\r\n            <AppointmentSecDiv>\r\n              <AppointmentContDiv>\r\n                <SubHeaderPara>Appointment Time</SubHeaderPara>\r\n                <SubHeaderPara>\r\n                  {startHour}:{startMinute} - {endHour}:{endMinute}\r\n                </SubHeaderPara>\r\n              </AppointmentContDiv>\r\n              <AppointmentContDiv>\r\n                <SubHeaderPara>Flexible? </SubHeaderPara>\r\n                <FlexDiv>\r\n                  <RadioButtonInnerDiv>\r\n                    <input\r\n                      type=\"radio\"\r\n                      id=\"yes\"\r\n                      name=\"flexible\"\r\n                      onChange={() => {\r\n                        setFlexible(true);\r\n                      }}\r\n                    />\r\n                    <label htmlFor=\"yes\">Yes</label>\r\n                    <br />\r\n                    <input\r\n                      type=\"radio\"\r\n                      id=\"no\"\r\n                      name=\"flexible\"\r\n                      onChange={() => {\r\n                        setFlexible(false);\r\n                      }}\r\n                    />\r\n                    <label htmlFor=\"no\">No</label>\r\n                    <br />\r\n                  </RadioButtonInnerDiv>\r\n                </FlexDiv>\r\n              </AppointmentContDiv>\r\n            </AppointmentSecDiv>\r\n          </div>\r\n          <TinyTextItalics>\r\n            (If flexible is selected, your appointment will be moved forward if\r\n            an earlier date / time become available)\r\n          </TinyTextItalics>\r\n          <FlexDiv>\r\n            <SubHeaderPara>Notes for Meeting</SubHeaderPara>\r\n            <TextAreaLarge\r\n              maxLength=\"250\"\r\n              placeholder=\"Anything you want to tell us?\"\r\n              onChange={(e) => {\r\n                setAppDesc(e.target.value);\r\n              }}\r\n            ></TextAreaLarge>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <SubHeaderPara>Contact Name</SubHeaderPara>\r\n            <Input\r\n              defaultValue={name}\r\n              placeholder=\"Contact Name\"\r\n              inputwidth=\"60%\"\r\n              inputheight=\"10px\"\r\n              onChange={(e) => {\r\n                setContactName(e.target.value);\r\n              }}\r\n            ></Input>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <SubHeaderPara>Address</SubHeaderPara>\r\n            <Input\r\n              defaultValue={defaultaddress}\r\n              placeholder=\"Address\"\r\n              inputwidth=\"60%\"\r\n              inputheight=\"10px\"\r\n              onChange={(e) => {\r\n                setAddress(e.target.value);\r\n              }}\r\n            ></Input>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <SubHeaderPara>City</SubHeaderPara>\r\n            <Input\r\n              defaultValue={defaultcity}\r\n              placeholder=\"City\"\r\n              inputwidth=\"60%\"\r\n              inputheight=\"10px\"\r\n              onChange={(e) => {\r\n                setEmail(e.target.value);\r\n              }}\r\n            ></Input>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <SubHeaderPara>Cell Phone</SubHeaderPara>\r\n            <Input\r\n              defaultValue={cellphone}\r\n              placeholder=\"Cell Phone\"\r\n              inputwidth=\"60%\"\r\n              inputheight=\"10px\"\r\n              onChange={(e) => {\r\n                setPhone(e.target.value);\r\n              }}\r\n            ></Input>\r\n          </FlexDiv>\r\n          <RegularTextBoldRed display={errorTextDisplay}>\r\n            {errorText}\r\n          </RegularTextBoldRed>\r\n\r\n          <ButtonDiv>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                if (slotId === 0) {\r\n                  setErrorText(\r\n                    \"No Appointment Slot Selected, please return to Calendar and select a date and appointment slot\"\r\n                  );\r\n                  setErrorTextDisplay(\"block\");\r\n                } else {\r\n                  setErrorText(\"\");\r\n                  setErrorTextDisplay(\"none\");\r\n                  onPreview({\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc,\r\n                  });\r\n                  onAppointmentCreate(\r\n                    contactName,\r\n                    address,\r\n                    phone,\r\n                    city,\r\n                    flexible,\r\n                    slotId,\r\n                    appDesc\r\n                  );\r\n                  onClose();\r\n                }\r\n              }}\r\n            >\r\n              Submit\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                onClose();\r\n              }}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n          </ButtonDiv>\r\n        </LeftItemWindowFixed>\r\n      </ItemCont>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nCreateAppointment.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onAppointmentCreate: () => {},\r\n  month: 0,\r\n  year: 0,\r\n  day: 0,\r\n  name: \"\",\r\n  defaultaddress: \"\",\r\n  defaultcity: \"\",\r\n  cellphone: \"\",\r\n  defaultSlotId: 0,\r\n};\r\n\r\nexport default CreateAppointment;\r\n","import React from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport { FlexDiv, LeftItemWindowFixed } from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularText,\r\n} from \"../../../StylesheetComps/Titles\";\r\nimport { AbsoluteOverlayDivFullWidth } from \"../../../StylesheetComps/OverlayCont\";\r\n\r\nconst AvailableWindow = ({ open, day, month, year, PushToSlots, onClose }) => {\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <AbsoluteOverlayDivFullWidth>\r\n        <LeftItemWindowFixed left=\"20%\" top=\"20%\">\r\n          <LeagueSpartanExtraLargeBold>\r\n            Next Available Date after this is:\r\n          </LeagueSpartanExtraLargeBold>\r\n          <RegularText>\r\n            {month}/{day}/{year}\r\n          </RegularText>\r\n          <FlexDiv>\r\n            <RegularResponsiveButton onClick={PushToSlots}>\r\n              Select\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={onClose}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n          </FlexDiv>\r\n        </LeftItemWindowFixed>\r\n      </AbsoluteOverlayDivFullWidth>\r\n    </>\r\n  );\r\n};\r\n\r\nAvailableWindow.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  PushToSlots: () => {},\r\n  day: 0,\r\n  month: 0,\r\n  year: 0,\r\n};\r\n\r\nexport default AvailableWindow;\r\n","/* eslint-disable */\r\n\r\nimport axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport CreateAppointment from \"../../comps/CreateAppointment\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport AvailableWindow from \"../../comps/Windows/AvailableDates\";\r\n\r\nimport * as dates from \"date-arithmetic\";\r\nimport format from \"date-fns/format\";\r\nimport getDay from \"date-fns/getDay\";\r\nimport parse from \"date-fns/parse\";\r\nimport startOfWeek from \"date-fns/startOfWeek\";\r\nimport PropTypes from \"prop-types\";\r\nimport {\r\n  Calendar,\r\n  dateFnsLocalizer,\r\n  Navigate,\r\n  Views,\r\n} from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport TimeGrid from \"react-big-calendar/lib/TimeGrid\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn,\r\n  FlexDiv,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Icon30px20pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst InstallerCalendarScreen = () => {\r\n  //=============================================================================\r\n  // Installer Calendar Screen - Users can make appointments with Installer\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Displays Installer Available Days in Calendar View\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  const locales = {\r\n    \"en-US\": require(\"date-fns/locale/en-US\"),\r\n  };\r\n\r\n  const localizer = dateFnsLocalizer({\r\n    format,\r\n    parse,\r\n    startOfWeek,\r\n    getDay,\r\n    locales,\r\n  });\r\n\r\n  const [appointmentList] = useState([]);\r\n  const [installerColors, setInstallerColors] = useState([]);\r\n  const [closeDays, setCloseDays] = useState([]);\r\n  const [vacationDays, setVacationDays] = useState([]);\r\n  const [createAppointmentOpen, setCreateAppointmentOpen] = useState(false);\r\n  const [defaultSlotId, setDefaultSlotId] = useState(0);\r\n\r\n  const [name, setDefaultName] = useState(0);\r\n  const [defaultAddress, setDefaultAddress] = useState(0);\r\n  const [defaultCity, setDefaultCity] = useState(0);\r\n  const [cellphone, setDefaultCellphone] = useState(0);\r\n\r\n  const [checkLogicBox, setCheckLogicBox] = useState(false);\r\n\r\n  const D = new Date();\r\n  const currentYear = D.getFullYear();\r\n  const currentMonth = D.getMonth() + 1;\r\n\r\n  const [calendarMonth, setCalendarMonth] = useState(currentMonth);\r\n\r\n  const [nextAvailMonth, setNextAvailMonth] = useState(0);\r\n  const [nextAvailDay, setNextAvailDay] = useState(0);\r\n  const [nextAvailYear, setNextAvailYear] = useState(0);\r\n\r\n  const CheckAvailableDates = async () => {\r\n    try {\r\n      // Make an HTTP request to the specified URL with the quote, installer, and current time\r\n      const resp = await axios.post(`${window.$DBURL}appointment/date/quote`, {\r\n        Quote_Id: params.quoteId,\r\n        Installer_Id: params.instUserId,\r\n        CurTime: `${storeYear}-${storeMonth}-${storeDay}T10:00:00`,\r\n      });\r\n\r\n      // If the request was successful and the dates are not null, set the next available date\r\n      if (resp.status === 200 && resp.data && resp.data.dates) {\r\n        const date = resp.data.dates[0];\r\n        setNextAvailMonth(date.substring(5, 7));\r\n        setNextAvailYear(date.substring(0, 4));\r\n        setNextAvailDay(date.substring(8, 10));\r\n        setCheckLogicBox(true);\r\n      }\r\n    } catch (err) {\r\n      // Handle error\r\n    }\r\n  };\r\n\r\n  const HandleDateSelection = async () => {\r\n    const path = `/installersavailable/${params.Id}/${params.storeId}/${nextAvailMonth}/${nextAvailDay}/${nextAvailYear}/${params.instUserId}/${params.quoteId}`;\r\n    history.push(path);\r\n  };\r\n\r\n  const GetSessionInfo = async () => {\r\n    try {\r\n      // Get the user information from session storage\r\n      const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n      // Set the default name, address, city, and cellphone using the user information\r\n      setDefaultName(userInfo.Name);\r\n      setDefaultAddress(userInfo.Street);\r\n      setDefaultCity(userInfo.City);\r\n      setDefaultCellphone(userInfo.Phone);\r\n\r\n      // Get the installer's close days, colors, and vacation days\r\n      GetInstallerCloseDays();\r\n      GetInstallerColors();\r\n      GetInstallerVacationDays();\r\n\r\n      // If the route ID is 1, handle the start info time slots\r\n      if (params.routeId == 1) {\r\n        HandleStartInfoTimeSlots();\r\n      }\r\n    } catch (err) {\r\n      // Handle the error here\r\n    }\r\n  };\r\n\r\n  const GetInstallerColors = async () => {\r\n    try {\r\n      const resp = await axios.post(\r\n        `${window.$DBURL}appointment/installer/calendar`,\r\n        {\r\n          Year: currentYear,\r\n          Month: currentMonth,\r\n          Installer_Id: params.instUserId,\r\n        }\r\n      );\r\n\r\n      if (resp.status === 200 && resp.data && resp.data.status) {\r\n        setInstallerColors(resp.data.status);\r\n      }\r\n    } catch (err) {\r\n      // handle error\r\n    }\r\n  };\r\n\r\n  const GetInstallerColorsAsync = async () => {\r\n    try {\r\n      const resp = await axios.post(\r\n        `${window.$DBURL}appointment/installer/calendar`,\r\n        {\r\n          Year: currentYear,\r\n          Month: calendarMonth,\r\n          Installer_Id: params.instUserId,\r\n        }\r\n      );\r\n\r\n      if (resp.status === 200 && resp.data && resp.data.status) {\r\n        setInstallerColors(resp.data.status);\r\n      }\r\n    } catch (err) {\r\n      // handle error\r\n    }\r\n  };\r\n\r\n  const GetInstallerCloseDays = async () => {\r\n    try {\r\n      const resp = await axios.get(\r\n        `${window.$DBURL}appointment/close/installer/${params.instUserId}`\r\n      );\r\n\r\n      if (resp.status === 200 && resp.data && resp.data.closedays) {\r\n        setCloseDays(resp.data.closedays);\r\n      }\r\n    } catch (err) {\r\n      // handle error\r\n    }\r\n  };\r\n\r\n  const GetInstallerVacationDays = async () => {\r\n    try {\r\n      const resp = await axios.get(\r\n        `${window.$DBURL}appointment/vacation/user/${params.instUserId}`\r\n      );\r\n\r\n      if (resp.status === 200 && resp.data && resp.data.vacationdays) {\r\n        setVacationDays(resp.data.vacationdays);\r\n      }\r\n    } catch (err) {\r\n      // handle error\r\n    }\r\n  };\r\n\r\n  var fullDate = \"\";\r\n  var storeMonth = 0;\r\n  var storeYear = 0;\r\n  var storeDay = 0;\r\n  const [year, setYear] = useState(0);\r\n  const [month, setMonth] = useState(0);\r\n  const [day, setDay] = useState(0);\r\n\r\n  var bookd = new Date();\r\n  var bookfullyear = bookd.getFullYear();\r\n  var bookmonth = (\"0\" + (bookd.getMonth() + 1)).slice(-2);\r\n  var bookday = (\"0\" + bookd.getDate()).slice(-2);\r\n  var bookhour = (\"0\" + bookd.getHours()).slice(-2);\r\n  var booktime = (\"0\" + bookd.getMinutes()).slice(-2);\r\n  var bookseconds = (\"0\" + bookd.getSeconds()).slice(-2);\r\n\r\n  const HandleAppointment = async (\r\n    contactName,\r\n    address,\r\n    phone,\r\n    city,\r\n    flexible,\r\n    slotId,\r\n    appDesc\r\n  ) => {\r\n    try {\r\n      const bookTime = `${bookfullyear}-${bookmonth}-${bookday}T${bookhour}:${booktime}:${bookseconds}`;\r\n      const payload = {\r\n        DailyOpenSlot_Id: slotId,\r\n        Installer_Id: params.instUserId,\r\n        Day: day,\r\n        Month: month,\r\n        Year: year,\r\n        Flexible: flexible,\r\n        InstallerName: params.instName,\r\n        BookTime: bookTime,\r\n        Contactname: contactName || name,\r\n        Phone: phone || cellphone,\r\n        Street: address || defaultAddress,\r\n        City: city || defaultCity,\r\n        Description: appDesc,\r\n        Store_Id: params.storeId,\r\n      };\r\n\r\n      let resp;\r\n      if (params.quoteId === 0) {\r\n        resp = await axios.post(`${window.$DBURL}appointment`, payload);\r\n      } else {\r\n        resp = await axios.post(\r\n          `${window.$DBURL}appointment/quote/${params.quoteId}`,\r\n          payload\r\n        );\r\n      }\r\n\r\n      if (resp.status === 200) {\r\n        GetInstallerColorsAsync();\r\n      }\r\n    } catch (err) {\r\n      // Handle the error here\r\n    }\r\n  };\r\n\r\n  // const HandleAppointment = async (\r\n  //   contactName,\r\n  //   address,\r\n  //   phone,\r\n  //   city,\r\n  //   flexible,\r\n  //   slotId,\r\n  //   appDesc\r\n  // ) => {\r\n  //   if (params.quoteId === 0) {\r\n  //     const resp = await axios.post(window.$DBURL + \"appointment\", {\r\n  //       DailyOpenSlot_Id: slotId,\r\n  //       Installer_Id: params.instUserId,\r\n  //       Day: day,\r\n  //       Month: month,\r\n  //       Year: year,\r\n  //       Flexible: flexible,\r\n  //       InstallerName: params.instName,\r\n  //       BookTime:\r\n  //         bookfullyear +\r\n  //         \"-\" +\r\n  //         bookmonth +\r\n  //         \"-\" +\r\n  //         bookday +\r\n  //         \"T\" +\r\n  //         bookhour +\r\n  //         \":\" +\r\n  //         booktime +\r\n  //         \":\" +\r\n  //         bookseconds,\r\n  //       Contactname: contactName || name,\r\n  //       Phone: phone || cellphone,\r\n  //       Street: address || defaultAddress,\r\n  //       City: city || defaultCity,\r\n  //       Description: appDesc,\r\n  //       Store_Id: params.storeId,\r\n  //     });\r\n  //     if (resp.status === 200) {\r\n  //       GetInstallerColorsAsync();\r\n  //     }\r\n  //   } else {\r\n  //     const resp = await axios.post(\r\n  //       window.$DBURL + \"appointment/quote/\" + params.quoteId,\r\n  //       {\r\n  //         DailyOpenSlot_Id: slotId,\r\n  //         Installer_Id: params.instUserId,\r\n  //         Day: day,\r\n  //         Month: month,\r\n  //         Year: year,\r\n  //         Flexible: flexible,\r\n  //         InstallerName: params.instName,\r\n  //         BookTime:\r\n  //           bookfullyear +\r\n  //           \"-\" +\r\n  //           bookmonth +\r\n  //           \"-\" +\r\n  //           bookday +\r\n  //           \"T\" +\r\n  //           bookhour +\r\n  //           \":\" +\r\n  //           booktime +\r\n  //           \":\" +\r\n  //           bookseconds,\r\n  //         Contactname: contactName || name,\r\n  //         Phone: phone || cellphone,\r\n  //         Street: address || defaultAddress,\r\n  //         City: city || defaultCity,\r\n  //         Description: appDesc,\r\n  //         Store_Id: params.storeId,\r\n  //       }\r\n  //     );\r\n  //     if (resp.status === 200) {\r\n  //       GetInstallerColorsAsync();\r\n  //     }\r\n  //   }\r\n  // };\r\n\r\n  const installerSlotPropGetter = (date) => {\r\n    return { style: { backgroundColor: \"white\" } };\r\n  };\r\n\r\n  const closeDayPropGetter = (date) => {\r\n    var obj = installerColors.find((o, i) => {\r\n      if (\r\n        (o.Date === date.getDate() &&\r\n          o.Month === date.getMonth() + 1 &&\r\n          o.Year === date.getFullYear() &&\r\n          o.Status === 1) ||\r\n        (o.Date === date.getDate() &&\r\n          o.Month === date.getMonth() + 1 &&\r\n          o.Year === date.getFullYear() &&\r\n          o.Status === 2) ||\r\n        (o.Date === date.getDate() &&\r\n          o.Month === date.getMonth() + 1 &&\r\n          o.Year === date.getFullYear() &&\r\n          o.Status === -1)\r\n      )\r\n        return installerColors[i];\r\n    });\r\n    if (\r\n      obj !== undefined &&\r\n      obj.Date === date.getDate() &&\r\n      obj.Month === date.getMonth() + 1 &&\r\n      obj.Year === date.getFullYear() &&\r\n      obj.Status === 1\r\n    )\r\n      return { style: { backgroundColor: \"#169ADB\", cursor: \"pointer\" } };\r\n    else if (\r\n      obj !== undefined &&\r\n      obj.Date === date.getDate() &&\r\n      obj.Month === date.getMonth() + 1 &&\r\n      obj.Year === date.getFullYear() &&\r\n      obj.Status === 2\r\n    )\r\n      return { style: { backgroundColor: \"red\", cursor: \"not-allowed\" } };\r\n    else if (\r\n      obj !== undefined &&\r\n      obj.Date === date.getDate() &&\r\n      obj.Month === date.getMonth() + 1 &&\r\n      obj.Year === date.getFullYear() &&\r\n      obj.Status === -1\r\n    )\r\n      return { style: { backgroundColor: \"grey\", cursor: \"not-allowed\" } };\r\n\r\n    var holidayObj = vacationDays.find((o, i) => {\r\n      if (\r\n        o.Day === date.getDate() &&\r\n        o.Month === date.getMonth() + 1 &&\r\n        o.Year === date.getFullYear()\r\n      )\r\n        return vacationDays[i];\r\n    });\r\n    if (\r\n      holidayObj !== undefined &&\r\n      holidayObj.Day === date.getDate() &&\r\n      holidayObj.Month === date.getMonth() + 1 &&\r\n      holidayObj.Year === date.getFullYear()\r\n    )\r\n      return { style: { backgroundColor: \"grey\", cursor: \"not-allowed\" } };\r\n\r\n    switch (date.getDay()) {\r\n      case 0:\r\n        return {\r\n          className: \"close-days\",\r\n          style: {\r\n            backgroundColor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 0) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"grey\"\r\n              : \"\",\r\n            cursor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 0) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"not-allowed\"\r\n              : \"pointer\",\r\n          },\r\n        };\r\n        break;\r\n      case 1:\r\n        return {\r\n          className: \"close-days\",\r\n          style: {\r\n            backgroundColor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 1) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"grey\"\r\n              : \"\",\r\n            cursor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 1) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"not-allowed\"\r\n              : \"pointer\",\r\n          },\r\n        };\r\n        break;\r\n      case 2:\r\n        return {\r\n          className: \"close-days\",\r\n          style: {\r\n            backgroundColor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 2) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"grey\"\r\n              : \"\",\r\n            cursor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 2) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"not-allowed\"\r\n              : \"pointer\",\r\n          },\r\n        };\r\n        break;\r\n      case 3:\r\n        return {\r\n          className: \"close-days\",\r\n          style: {\r\n            backgroundColor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 3) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"grey\"\r\n              : \"\",\r\n            cursor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 3) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"not-allowed\"\r\n              : \"pointer\",\r\n          },\r\n        };\r\n        break;\r\n      case 4:\r\n        return {\r\n          className: \"close-days\",\r\n          style: {\r\n            backgroundColor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 4) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"grey\"\r\n              : \"\",\r\n            cursor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 4) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"not-allowed\"\r\n              : \"pointer\",\r\n          },\r\n        };\r\n        break;\r\n      case 5:\r\n        return {\r\n          className: \"close-days\",\r\n          style: {\r\n            backgroundColor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 5) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"grey\"\r\n              : \"\",\r\n            cursor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 5) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"not-allowed\"\r\n              : \"pointer\",\r\n          },\r\n        };\r\n        break;\r\n      case 6:\r\n        return {\r\n          className: \"close-days\",\r\n          style: {\r\n            backgroundColor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 6) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"grey\"\r\n              : \"\",\r\n            cursor: closeDays.find(function (o, i) {\r\n              if (o.WeekDay === 6) {\r\n                return true;\r\n              }\r\n            })\r\n              ? \"not-allowed\"\r\n              : \"pointer\",\r\n          },\r\n        };\r\n        break;\r\n      default:\r\n    }\r\n  };\r\n\r\n  class MyWeek extends React.Component {\r\n    render() {\r\n      let {\r\n        date,\r\n        localizer,\r\n        min = localizer.startOf(new Date(), \"day\"),\r\n        max = localizer.endOf(new Date(), \"day\"),\r\n        scrollToTime = localizer.startOf(new Date(), \"day\"),\r\n      } = this.props;\r\n      let range = MyWeek.range(date, { localizer });\r\n\r\n      return (\r\n        <TimeGrid\r\n          {...this.props}\r\n          range={range}\r\n          eventOffset={15}\r\n          localizer={localizer}\r\n          min={min}\r\n          max={max}\r\n          scrollToTime={scrollToTime}\r\n        />\r\n      );\r\n    }\r\n  }\r\n\r\n  MyWeek.propTypes = {\r\n    date: PropTypes.instanceOf(Date).isRequired,\r\n    localizer: PropTypes.any,\r\n    min: PropTypes.instanceOf(Date),\r\n    max: PropTypes.instanceOf(Date),\r\n    scrollToTime: PropTypes.instanceOf(Date),\r\n  };\r\n\r\n  MyWeek.range = (date, { localizer }) => {\r\n    let start = date;\r\n    let end = dates.add(start, 0, \"day\");\r\n\r\n    let current = start;\r\n    let range = [];\r\n\r\n    while (localizer.lte(current, end, \"day\")) {\r\n      range.push(current);\r\n      current = localizer.add(current, 1, \"day\");\r\n    }\r\n\r\n    return range;\r\n  };\r\n\r\n  MyWeek.navigate = (date, action, { localizer }) => {\r\n    switch (action) {\r\n      case Navigate.PREVIOUS:\r\n        return localizer.add(date, -1, \"day\");\r\n\r\n      case Navigate.NEXT:\r\n        return localizer.add(date, 1, \"day\");\r\n\r\n      default:\r\n        return date;\r\n    }\r\n  };\r\n\r\n  MyWeek.title = (date) => {\r\n    return `Installer Appointment Slots: ${date.toLocaleDateString()}`;\r\n  };\r\n\r\n  const HandleStartInfo = async () => {\r\n    setYear(fullDate.getFullYear());\r\n    setMonth(fullDate.getMonth() + 1);\r\n    setDay(fullDate.getDate());\r\n  };\r\n\r\n  const HandleStartInfoTimeSlots = async () => {\r\n    setYear(params.year);\r\n    setMonth(params.month);\r\n    setDay(params.day);\r\n    setDefaultSlotId(params.instId);\r\n    setCreateAppointmentOpen(true);\r\n  };\r\n\r\n  const calendarStyle = {\r\n    height: \"65vh\",\r\n    width: \"100%\",\r\n    \"@media (maxWidth: 1006px)\": {\r\n      height: \"65vw\",\r\n    },\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    GetInstallerColorsAsync();\r\n  }, [calendarMonth]);\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <FullWidthMobileCont100vw100vh>\r\n        <Menu> </Menu>\r\n      </FullWidthMobileCont100vw100vh>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <FlexColumnFullWidth>\r\n          <CreateAppointment\r\n            name={name}\r\n            defaultSlotId={defaultSlotId}\r\n            defaultaddress={defaultAddress}\r\n            defaultcity={defaultCity}\r\n            cellphone={cellphone}\r\n            year={year}\r\n            month={month}\r\n            day={day}\r\n            open={createAppointmentOpen}\r\n            onClose={() => {\r\n              setCreateAppointmentOpen(false);\r\n            }}\r\n            onAppointmentCreate={HandleAppointment}\r\n          ></CreateAppointment>\r\n          <FlexDiv>\r\n            <Icon30px20pxPointer\r\n              src=\"/backarrow.svg\"\r\n              onClick={() => {\r\n                history.push(\r\n                  \"/storeinstallers/\" + params.Id + \"/\" + params.storeId\r\n                );\r\n              }}\r\n            ></Icon30px20pxPointer>\r\n            <LeagueSpartanExtraLargeBold>\r\n              {params.instName + \"'s Installer Calendar\"}\r\n            </LeagueSpartanExtraLargeBold>\r\n          </FlexDiv>\r\n          <AvailableWindow\r\n            PushToSlots={HandleDateSelection}\r\n            onClose={() => {\r\n              setCheckLogicBox(false);\r\n            }}\r\n            open={checkLogicBox}\r\n            day={nextAvailDay}\r\n            month={nextAvailMonth}\r\n            year={nextAvailYear}\r\n          ></AvailableWindow>\r\n          <Calendar\r\n            localizer={localizer}\r\n            events={appointmentList.map((o, i) => {\r\n              return {\r\n                id: o.Id,\r\n                title: o.Description + \" with \" + o.InstallerName,\r\n                start: new Date(\r\n                  o.Year,\r\n                  o.Month - 1,\r\n                  o.Day,\r\n                  o.Start.Hour,\r\n                  o.Start.Minute\r\n                ),\r\n                end: new Date(\r\n                  o.Year,\r\n                  o.Month - 1,\r\n                  o.Day,\r\n                  o.End.Hour,\r\n                  o.End.Minute\r\n                ),\r\n                allDay: false,\r\n              };\r\n            })}\r\n            startAccessor=\"start\"\r\n            endAccessor=\"end\"\r\n            style={calendarStyle}\r\n            dayPropGetter={closeDayPropGetter}\r\n            views={{ month: true, week: true, day: true }}\r\n            selectable={true}\r\n            min={new Date(2021, 11, 0, 8, 0, 0)}\r\n            max={new Date(2021, 11, 0, 18, 0, 0)}\r\n            longPressThreshold={10}\r\n            defaultView={Views.MONTH}\r\n            slotPropGetter={installerSlotPropGetter}\r\n            onSelectSlot={(slotInfo) => {\r\n              fullDate = slotInfo.slots[0];\r\n              storeMonth = fullDate.getMonth() + 1;\r\n              storeYear = fullDate.getFullYear();\r\n              storeDay = fullDate.getDate();\r\n              if (\r\n                closeDays.find(function (o, i) {\r\n                  return o.WeekDay === fullDate.getDay();\r\n                })\r\n              ) {\r\n              } else if (\r\n                vacationDays.find(function (o, i) {\r\n                  return (\r\n                    o.Day === fullDate.getDate() &&\r\n                    o.Month === fullDate.getMonth() + 1 &&\r\n                    o.Year === fullDate.getFullYear()\r\n                  );\r\n                })\r\n              ) {\r\n              } else if (\r\n                installerColors.find(function (o, i) {\r\n                  return (\r\n                    o.Date === fullDate.getDate() &&\r\n                    o.Month === fullDate.getMonth() + 1 &&\r\n                    o.Year === fullDate.getFullYear() &&\r\n                    o.Status === 2\r\n                  );\r\n                })\r\n              ) {\r\n              } else if (D > fullDate) {\r\n              } else if (\r\n                installerColors.find(function (o, i) {\r\n                  return (\r\n                    o.Date === fullDate.getDate() &&\r\n                    o.Month === fullDate.getMonth() + 1 &&\r\n                    o.Year === fullDate.getFullYear() &&\r\n                    o.Status === -1\r\n                  );\r\n                })\r\n              ) {\r\n              } else if (params.quoteId !== \"0\") {\r\n                CheckAvailableDates();\r\n              } else {\r\n                HandleStartInfo();\r\n                history.push(\r\n                  \"/installersavailable/\" +\r\n                    params.Id +\r\n                    \"/\" +\r\n                    params.storeId +\r\n                    \"/\" +\r\n                    storeMonth +\r\n                    \"/\" +\r\n                    storeDay +\r\n                    \"/\" +\r\n                    storeYear +\r\n                    \"/\" +\r\n                    params.instUserId +\r\n                    \"/0\"\r\n                );\r\n              }\r\n            }}\r\n            onNavigate={(date) => {\r\n              setCalendarMonth(date.getMonth() + 1);\r\n            }}\r\n          />\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nInstallerCalendarScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default InstallerCalendarScreen;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  LargeResponsiveButton,\r\n  TextInput300x50,\r\n} from \"../../StylesheetComps/AuthSheet\";\r\nimport { FlexColumnFullWidth } from \"../../StylesheetComps/Cont\";\r\nimport { FlexDivCenter } from \"../../StylesheetComps/Div\";\r\nimport { Image200x200pxContain } from \"../../StylesheetComps/Imgs/Images\";\r\nimport { SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularTextBoldRed,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst AcceptOrderScreen = () => {\r\n  const params = useParams();\r\n  const [username, setUsername] = useState(\"\");\r\n  const [password, setPassword] = useState(\"\");\r\n  const [error, setError] = useState(\"\");\r\n  const [headerText, setHeaderText] = useState(\r\n    \"Please enter your credentials to accept this order:\"\r\n  );\r\n  const [inputDivDisplay, setInputDivDisplay] = useState(\"flex\");\r\n\r\n  const GetSessionInfo = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"users/profile\");\r\n    sessionStorage.setItem(\"userInfo\", JSON.stringify(resp.data.User));\r\n  };\r\n\r\n  const HandleAccept = async (quoteid, itemid, supplierId) => {\r\n    const resp = await axios.post(\r\n      window.$DBURL +\r\n        \"order/quote/\" +\r\n        quoteid +\r\n        \"/item/\" +\r\n        itemid +\r\n        \"/supplier/\" +\r\n        supplierId +\r\n        \"/accept\"\r\n    );\r\n    if (resp.status === 200) {\r\n      setHeaderText(\"Thank you for accepting this quote!\");\r\n      setInputDivDisplay(\"none\");\r\n    } else {\r\n      setError(\"There was an error accepting this quote\");\r\n    }\r\n  };\r\n\r\n  //Log supplier in, if authenticated, accept the order\r\n\r\n  const GetAuthToken = async () => {\r\n    var resp = await axios\r\n      .post(window.$DBURL + \"users/session/login\", {\r\n        Username: username,\r\n        Password: password,\r\n      })\r\n      .catch(handleErrors);\r\n    if (resp == null) {\r\n      resp = null;\r\n    } else if (resp.status === 200) {\r\n      const token = resp.data.Session.AuthToken;\r\n      axios.defaults.baseURL = window.$DBURL;\r\n      sessionStorage.setItem(\"token\", token);\r\n      axios.defaults.headers.common[\"Authorization\"] = \"Basic \" + token;\r\n      HandleAccept(params.quoteid, params.itemid, resp.data.User.Id);\r\n    } else {\r\n      setError(\"The info you entered is incorrect\");\r\n    }\r\n    function handleErrors(err) {\r\n      if (err.request) {\r\n        setError(\"Incorrect Username or Password\");\r\n      } else if (err.response) {\r\n        setError(\"Incorrect Username or Password\");\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []);\r\n\r\n  return (\r\n    <FlexDivCenter>\r\n      <FlexColumnFullWidth>\r\n        <FlexColumnFullWidth>\r\n          <Image200x200pxContain src=\"/newrhodeslogo.svg\"></Image200x200pxContain>\r\n          <LeagueSpartanExtraLargeBold>\r\n            {headerText}\r\n          </LeagueSpartanExtraLargeBold>\r\n          <FlexColumnFullWidth display={inputDivDisplay}>\r\n            <RegularTextBoldRed>{error}</RegularTextBoldRed>\r\n            <SmallHeader>Username</SmallHeader>\r\n            <TextInput300x50\r\n              placeholder=\"Username\"\r\n              inputheight=\"2%\"\r\n              onChange={(e) => {\r\n                setUsername(e.target.value);\r\n              }}\r\n            ></TextInput300x50>\r\n            <SmallHeader>Password</SmallHeader>\r\n            <TextInput300x50\r\n              type=\"password\"\r\n              placeholder=\"Password\"\r\n              inputheight=\"2%\"\r\n              onChange={(e) => {\r\n                setPassword(e.target.value);\r\n              }}\r\n            ></TextInput300x50>\r\n            <LargeResponsiveButton\r\n              onClick={() => {\r\n                GetAuthToken();\r\n              }}\r\n            >\r\n              Accept Order\r\n            </LargeResponsiveButton>\r\n          </FlexColumnFullWidth>\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnFullWidth>\r\n    </FlexDivCenter>\r\n  );\r\n};\r\n\r\nAcceptOrderScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default AcceptOrderScreen;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport Input from \"../../comps/Input\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { FlexColumnFullWidth } from \"../../StylesheetComps/Cont\";\r\nimport { FlexDivCenter } from \"../../StylesheetComps/Div\";\r\nimport { Image200x200pxContain } from \"../../StylesheetComps/Imgs/Images\";\r\nimport { SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularTextBoldRed,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst RejectOrderScreen = () => {\r\n  //=============================================================================\r\n  // Reject Order Screen - Supplier rejects an order with New Rhodes Construction\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Input of credentials required.\r\n  //=============================================================================\r\n\r\n  const GetSessionInfo = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"users/profile\");\r\n    sessionStorage.setItem(\"userInfo\", JSON.stringify(resp.data.User));\r\n  };\r\n\r\n  const params = useParams();\r\n  const [username, setUsername] = useState(\"\");\r\n  const [password, setPassword] = useState(\"\");\r\n  const [error, setError] = useState(\"\");\r\n  const [headerText, setHeaderText] = useState(\r\n    \"Please enter your credentials to reject this order:\"\r\n  );\r\n  const [inputDivDisplay, setInputDivDisplay] = useState(\"flex\");\r\n  var supplieridSync = 0;\r\n  const [supplierid, setSupplierid] = useState(0);\r\n\r\n  const HandleAccept = async () => {\r\n    if (supplieridSync === 0) {\r\n      const resp = await axios\r\n        .post(\r\n          window.$DBURL +\r\n            \"order/quote/\" +\r\n            params.quoteid +\r\n            \"/item/\" +\r\n            params.itemid +\r\n            \"/supplier/\" +\r\n            supplierid +\r\n            \"/reject\"\r\n        )\r\n        .catch(handleErrors);\r\n      if (resp.status === 200) {\r\n        setHeaderText(\r\n          \"Sorry for missing this opportunity. Hope to work together next time!\"\r\n        );\r\n        setInputDivDisplay(\"none\");\r\n      }\r\n      function handleErrors(err) {\r\n        if (err.request) {\r\n          setError(err.response.data.Message);\r\n        } else if (err.response) {\r\n          setError(err.response.data.Message);\r\n        } else if (err.status === 200) {\r\n          setHeaderText(\r\n            \"Sorry for missing this opportunity. Hope to work together next time!\"\r\n          );\r\n          setInputDivDisplay(\"none\");\r\n        }\r\n      }\r\n    } else {\r\n      const resp = await axios\r\n        .post(\r\n          window.$DBURL +\r\n            \"order/quote/\" +\r\n            params.quoteid +\r\n            \"/item/\" +\r\n            params.itemid +\r\n            \"/supplier/\" +\r\n            supplieridSync +\r\n            \"/reject\"\r\n        )\r\n        .catch(handleErrors);\r\n      if (resp.status === 200) {\r\n        setHeaderText(\r\n          \"Sorry for missing this opportunity. Hope to work together next time!\"\r\n        );\r\n        setInputDivDisplay(\"none\");\r\n      }\r\n      function handleErrors(err) {\r\n        if (err.request) {\r\n          setError(err.response.data.Message);\r\n        } else if (err.response) {\r\n          setError(err.response.data.Message);\r\n        } else if (err.status === 200) {\r\n          setHeaderText(\r\n            \"Sorry for missing this opportunity. Hope to work together next time!\"\r\n          );\r\n          setInputDivDisplay(\"none\");\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetAuthToken = async () => {\r\n    var resp = await axios\r\n      .post(window.$DBURL + \"users/session/login\", {\r\n        Username: username,\r\n        Password: password,\r\n      })\r\n      .catch(handleErrors);\r\n    if (resp == null) {\r\n      resp = null;\r\n    } else if (resp.data !== \"Password is too short.\") {\r\n      const token = resp.data.Session.AuthToken;\r\n      axios.defaults.baseURL = window.$DBURL;\r\n      sessionStorage.setItem(\"token\", token);\r\n      axios.defaults.headers.common[\"Authorization\"] = \"Basic \" + token;\r\n      setSupplierid(resp.data.User.Id);\r\n      supplieridSync = resp.data.User.Id;\r\n      HandleAccept();\r\n    }\r\n\r\n    function handleErrors(err) {\r\n      if (err.request) {\r\n        setError(\"Incorrect Username or Password\");\r\n      } else if (err.response) {\r\n        setError(\"Incorrect Username or Password\");\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []);\r\n\r\n  return (\r\n    <FlexDivCenter>\r\n      <FlexColumnFullWidth>\r\n        <FlexColumnFullWidth>\r\n          <Image200x200pxContain src=\"/newrhodeslogo.svg\"></Image200x200pxContain>\r\n          <LeagueSpartanExtraLargeBold>\r\n            {headerText}\r\n          </LeagueSpartanExtraLargeBold>\r\n          <FlexColumnFullWidth display={inputDivDisplay}>\r\n            <RegularTextBoldRed>{error}</RegularTextBoldRed>\r\n            <SmallHeader>Username</SmallHeader>\r\n            <Input\r\n              placeholder=\"Username\"\r\n              inputheight=\"2%\"\r\n              inputwidth=\"50%\"\r\n              onChange={(e) => {\r\n                setUsername(e.target.value);\r\n              }}\r\n            ></Input>\r\n            <SmallHeader>Password</SmallHeader>\r\n            <Input\r\n              type=\"password\"\r\n              placeholder=\"Password\"\r\n              inputheight=\"2%\"\r\n              inputwidth=\"50%\"\r\n              onChange={(e) => {\r\n                setPassword(e.target.value);\r\n              }}\r\n            ></Input>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                GetAuthToken();\r\n              }}\r\n            >\r\n              Reject Order\r\n            </RegularResponsiveButton>\r\n          </FlexColumnFullWidth>\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnFullWidth>\r\n    </FlexDivCenter>\r\n  );\r\n};\r\n\r\nRejectOrderScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default RejectOrderScreen;\r\n","import React from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { FlexCont300x150px } from \"../../StylesheetComps/Cont\";\r\nimport { RegularText, LeagueSpartanLarge } from \"../../StylesheetComps/Titles\";\r\nimport {\r\n  Div30Percent,\r\n  Div70Percent,\r\n  FlexEndDivAutox15Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon80x80Percent } from \"../../StylesheetComps/Imgs/Icons\";\r\n\r\nconst StoreListInstallerCard = ({ CatHeadText, CatParaText, catId }) => {\r\n  const params = useParams();\r\n\r\n  return (\r\n    <FlexCont300x150px>\r\n      <Div30Percent>\r\n        <Icon80x80Percent src=\"/storemanagement.svg\"></Icon80x80Percent>\r\n      </Div30Percent>\r\n      <Div70Percent>\r\n        <Link\r\n          to={\"/storeinstallers/\" + params.Id + \"/\" + catId}\r\n          style={{ textDecoration: \"none\", color: \"black\" }}\r\n        >\r\n          <LeagueSpartanLarge>{CatHeadText}</LeagueSpartanLarge>\r\n        </Link>\r\n        <RegularText>{CatParaText}</RegularText>\r\n      </Div70Percent>\r\n      <FlexEndDivAutox15Percent></FlexEndDivAutox15Percent>\r\n    </FlexCont300x150px>\r\n  );\r\n};\r\n\r\nStoreListInstallerCard.defaultProps = {\r\n  CatHeadText: \"Fencing\",\r\n  CatParaText:\r\n    \"This is a category for the products that are contained within, sample text\",\r\n  CatButtonText: \"View Products\",\r\n  CatUrl: \"\",\r\n  catId: 0,\r\n  storeId: 0,\r\n};\r\n\r\nexport default StoreListInstallerCard;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport StoreListInstallerCard from \"../../comps/StoreListInstallerCard\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport {\r\n  Div70PerWidth7PerHeight,\r\n  FlexCont80PercentMobileOpt,\r\n  FlexRowContFullWidth,\r\n  LeftCont,\r\n  RightCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreListInstallerScreen = () => {\r\n  //=============================================================================\r\n  // Installer Store List Screen - If there is more than 1 store in the user's\r\n  // Metro, display the stores available in that Metro.\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Redirects to View Installers Page onClick\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n\r\n  //AXIOS\r\n  const [storeList, setStoreList] = useState([]);\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n\r\n  const GetStoreList = async (metro_id) => {\r\n    const resp = await axios.get(window.$DBURL + \"store/metro/\" + metro_id);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.stores !== null) {\r\n          setStoreList(resp.data.stores);\r\n        }\r\n      }\r\n    }\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetStoreList(params.Id);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (roleNum !== 1000) {\r\n    return (\r\n      <FlexRowContFullWidth>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <RightCont>\r\n          <ActionMenu />\r\n          <RightViewFullWidth>\r\n            <Div70PerWidth7PerHeight>\r\n              <LeagueSpartanExtraLargeBold>\r\n                View Installers by Store\r\n              </LeagueSpartanExtraLargeBold>\r\n            </Div70PerWidth7PerHeight>\r\n            <FlexCont80PercentMobileOpt>\r\n              {storeList.map((o, i) => (\r\n                <StoreListInstallerCard\r\n                  key={i}\r\n                  CatHeadText={o.Name}\r\n                  CatParaText={o.Address}\r\n                  catId={o.Id}\r\n                ></StoreListInstallerCard>\r\n              ))}\r\n            </FlexCont80PercentMobileOpt>\r\n          </RightViewFullWidth>\r\n        </RightCont>\r\n      </FlexRowContFullWidth>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nStoreListInstallerScreen.defaultProps = {};\r\n\r\nexport default StoreListInstallerScreen;\r\n","import React from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { FlexCont300x150px } from \"../../StylesheetComps/Cont\";\r\nimport { RegularText, LeagueSpartanLarge } from \"../../StylesheetComps/Titles\";\r\nimport {\r\n  Div30Percent,\r\n  Div70Percent,\r\n  FlexEndDivAutox15Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon80x80Percent } from \"../../StylesheetComps/Imgs/Icons\";\r\n\r\nconst StoreListCalendarCard = ({ CatHeadText, CatParaText, catId }) => {\r\n  const params = useParams();\r\n\r\n  return (\r\n    <FlexCont300x150px>\r\n      <Div30Percent>\r\n        <Icon80x80Percent src=\"/storemanagement.svg\"></Icon80x80Percent>\r\n      </Div30Percent>\r\n      <Div70Percent>\r\n        <Link\r\n          to={\"/storecalendar/\" + params.Id + \"/\" + catId}\r\n          style={{ textDecoration: \"none\", color: \"black\" }}\r\n        >\r\n          <LeagueSpartanLarge>{CatHeadText}</LeagueSpartanLarge>\r\n        </Link>\r\n        <RegularText>{CatParaText}</RegularText>\r\n      </Div70Percent>\r\n      <FlexEndDivAutox15Percent></FlexEndDivAutox15Percent>\r\n    </FlexCont300x150px>\r\n  );\r\n};\r\n\r\nStoreListCalendarCard.defaultProps = {\r\n  CatHeadText: \"Fencing\",\r\n  CatParaText:\r\n    \"This is a category for the products that are contained within, sample text\",\r\n  CatButtonText: \"View Products\",\r\n  CatUrl: \"\",\r\n  catId: 0,\r\n  storeId: 0,\r\n};\r\n\r\nexport default StoreListCalendarCard;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport StoreListCalendarCard from \"../../comps/StoreListCalendarCard\";\r\nimport {\r\n  Div70PerWidth7PerHeight,\r\n  FlexCont100vw100vh,\r\n  FlexCont80PercentMobileOpt,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont80vwAutoHeight } from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreListCalendarScreen = () => {\r\n  //=============================================================================\r\n  // Store Calendar List - If there is more than 1 store in a Metro, User must\r\n  // select the store they want before being redirected to that Store Calendar\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n\r\n  const [storeList, getStoreList] = useState([]);\r\n\r\n  const GetStoreList = async (metro_id) => {\r\n    const resp = await axios.get(window.$DBURL + \"store/metro/\" + metro_id);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.stores !== null) {\r\n          getStoreList(resp.data.stores);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetStoreList(params.Id);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <Div70PerWidth7PerHeight>\r\n            <LeagueSpartanExtraLargeBold>\r\n              View Calendar by Store\r\n            </LeagueSpartanExtraLargeBold>\r\n          </Div70PerWidth7PerHeight>\r\n          <FlexCont80PercentMobileOpt>\r\n            {storeList.map((o, i) => (\r\n              <StoreListCalendarCard\r\n                key={i}\r\n                CatHeadText={o.Name}\r\n                CatParaText={o.Address}\r\n                catId={o.Id}\r\n              ></StoreListCalendarCard>\r\n            ))}\r\n          </FlexCont80PercentMobileOpt>\r\n        </RightViewFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nStoreListCalendarScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  RoleName: \"Role Name Ex. Estimator\",\r\n};\r\n\r\nexport default StoreListCalendarScreen;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\n\r\nimport format from \"date-fns/format\";\r\nimport getDay from \"date-fns/getDay\";\r\nimport parse from \"date-fns/parse\";\r\nimport startOfWeek from \"date-fns/startOfWeek\";\r\nimport { Calendar, dateFnsLocalizer, Views } from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexDiv70x7Percent } from \"../../StylesheetComps/Div\";\r\nimport {\r\n  HundredPercentFlexDiv,\r\n  Icon30px20pxPointer,\r\n} from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularTextBoldRed,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreListInstallersAvailableScreen = ({\r\n  onPreview,\r\n  onProfileUpdated,\r\n  storeId,\r\n}) => {\r\n  //=============================================================================\r\n  // Installers Available Screen - User views Timeslots available for Installer\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // This page is redirects to Installer Calendar where user is prompted to\r\n  // create an appointment using the timeslot selected on this page\r\n  //=============================================================================\r\n\r\n  const history = useHistory();\r\n\r\n  const [noneAvailableText, setNoneAvailableText] = useState(\"\");\r\n\r\n  const locales = {\r\n    \"en-US\": require(\"date-fns/locale/en-US\"),\r\n  };\r\n\r\n  const [installerHeader, setInstallerHeader] = useState(\"\");\r\n\r\n  const localizer = dateFnsLocalizer({\r\n    format,\r\n    parse,\r\n    startOfWeek,\r\n    getDay,\r\n    locales,\r\n  });\r\n\r\n  const params = useParams();\r\n\r\n  const [startHour, setStartHour] = useState(0);\r\n  const [startMinute, setStartMinute] = useState(0);\r\n  const [endHour, setEndHour] = useState(0);\r\n  const [endMinute, setEndMinute] = useState(0);\r\n\r\n  const [installerList, setInstallerList] = useState([]);\r\n\r\n  const GetInstallers = async () => {\r\n    try {\r\n      const resp = await axios.post(\r\n        `${window.$DBURL}appointment/store/available`,\r\n        {\r\n          Year: params.storeYear,\r\n          Month: params.storeMonth,\r\n          Day: params.storeDay,\r\n          Store_Id: params.storeId,\r\n        }\r\n      );\r\n      if (resp?.data?.openslots?.length > 0) {      \r\n        setInstallerList(resp.data.openslots);\r\n        setStartHour(resp.data.openslots[0].Start_Hour);\r\n        setStartMinute(resp.data.openslots[0].Start_Minute);\r\n        const maxObj = resp.data.openslots.reduce((max, obj) =>\r\n          max.End_Hour > obj.End_Hour ? max : obj\r\n        );\r\n        const maxMinute = resp.data.openslots.reduce((max, obj) =>\r\n          max.End_Hour > obj.End_Hour ? max : obj\r\n        );\r\n        setEndMinute(maxMinute.End_Minute);\r\n        setEndHour(maxObj.End_Hour);\r\n      }\r\n      else{\r\n        setNoneAvailableText(\"No time slots set up for appointment\");\r\n      }\r\n    } catch (error) {\r\n      // handle error\r\n    }\r\n  };\r\n\r\n  const GetSingleInstaller = async () => {\r\n    try {\r\n      const resp = await axios.post(\r\n        window.$DBURL + \"appointment/installer/available\",\r\n        {\r\n          Year: params.storeYear,\r\n          Month: params.storeMonth,\r\n          Day: params.storeDay,\r\n          Installer_Id: params.instId,\r\n        }\r\n      );\r\n      const data = resp;\r\n      if ( data?.openslots?.length > 0) {\r\n        setInstallerList(data.openslots);\r\n        setStartHour(data.openslots[0].Start_Hour);\r\n        setStartMinute(data.openslots[0].Start_Minute);\r\n        setInstallerHeader(`${data.openslots[0].Name} Timeslots Available on`);\r\n        const maxObj = data.openslots.reduce(\r\n          (max, obj) => (max.End_Hour > obj.End_Hour ? max : obj),\r\n          {}\r\n        );\r\n        const maxMinute = data.openslots.reduce(\r\n          (max, obj) => (max.End_Hour > obj.End_Hour ? max : obj),\r\n          {}\r\n        );\r\n        setEndMinute(maxMinute.End_Minute);\r\n        setEndHour(maxObj.End_Hour);\r\n      } else {\r\n        setNoneAvailableText(\"No time slot set up for appointment\");\r\n      }\r\n    } catch (error) {\r\n      // Handle error\r\n    }\r\n  };\r\n\r\n  const getCustomToolbar = (toolbar) => {\r\n    return null;\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (params.instId === 0) {\r\n      GetInstallers();\r\n      setInstallerHeader(\"Installers Available on\");\r\n    } else if (params.intId !== 0) {\r\n      GetSingleInstaller();\r\n    }\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const calendarStyle = {\r\n    height: \"75vh\",\r\n    width: \"100%\",\r\n    \"@media (maxWidth: 1006px)\": {\r\n      height: \"65vw\",\r\n    },\r\n  };\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <FullWidthMobileCont100vw100vh>\r\n        <Menu> </Menu>\r\n      </FullWidthMobileCont100vw100vh>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <FlexColumnFullWidth>\r\n          <FlexDiv70x7Percent>\r\n            <HundredPercentFlexDiv>\r\n              <Icon30px20pxPointer\r\n                src=\"/backarrow.svg\"\r\n                onClick={() => {\r\n                  // Destructure the properties from the params object\r\n                  const { instId, Id, storeId } = params;\r\n\r\n                  // Use a ternary operator to determine which path to push to history\r\n                  history.push(\r\n                    instId === 0\r\n                      ? `/storecalendar/${Id}/${storeId}`\r\n                      : `/storeinstallers/${Id}/${storeId}`\r\n                  );\r\n                }}\r\n              ></Icon30px20pxPointer>\r\n              <LeagueSpartanExtraLargeBold>\r\n                {installerHeader +\r\n                  \" \" +\r\n                  params.storeMonth +\r\n                  \"/\" +\r\n                  params.storeDay +\r\n                  \"/\" +\r\n                  params.storeYear}\r\n              </LeagueSpartanExtraLargeBold>\r\n            </HundredPercentFlexDiv>\r\n          </FlexDiv70x7Percent>\r\n          <RegularTextBoldRed>{noneAvailableText}</RegularTextBoldRed>\r\n          <Calendar\r\n            localizer={localizer}\r\n            defaultDate={\r\n              new Date(params.storeYear, params.storeMonth - 1, params.storeDay)\r\n            }\r\n            events={installerList.map((o, i) => {\r\n              return {\r\n                id: o.Id,\r\n                title: o.Name + \" is available\",\r\n                start: new Date(\r\n                  params.storeYear,\r\n                  params.storeMonth - 1,\r\n                  params.storeDay,\r\n                  o.Start_Hour,\r\n                  o.Start_Minute\r\n                ),\r\n                end: new Date(\r\n                  params.storeYear,\r\n                  params.storeMonth - 1,\r\n                  params.storeDay,\r\n                  o.End_Hour,\r\n                  o.End_Minute\r\n                ),\r\n                allDay: false,\r\n                installerUserId: o.User_Id,\r\n                InstallerName: o.Name,\r\n              };\r\n            })}\r\n            startAccessor=\"start\"\r\n            endAccessor=\"end\"\r\n            style={calendarStyle}\r\n            dayLayoutAlgorithm=\"no-overlap\"\r\n            min={new Date(2021, 1, 1, startHour, startMinute, 0)}\r\n            max={new Date(2021, 12, 31, endHour, endMinute, 0)}\r\n            longPressThreshold={10}\r\n            views={{ month: true, week: true, day: true }}\r\n            defaultView={Views.DAY}\r\n            components={{\r\n              toolbar: getCustomToolbar,\r\n            }}\r\n            onNavigate={() => {\r\n              GetInstallers();\r\n            }}\r\n            onSelectEvent={(event) => {\r\n              // Destructure the properties from the params object\r\n              const { Id, storeId, storeYear, storeMonth, storeDay, quoteId } =\r\n                params;\r\n\r\n              // Destructure the properties from the event object\r\n              const { id, installerUserId, InstallerName } = event;\r\n\r\n              // Use template literals to create the path string\r\n              const path = `/installercalendar/${Id}/${storeId}/${id}/${installerUserId}/${InstallerName}/1/${storeYear}/${storeMonth}/${storeDay}/${quoteId}`;\r\n\r\n              // Push the path to history\r\n              history.push(path);\r\n            }}\r\n          />\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nStoreListInstallersAvailableScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n  storeId: 0,\r\n};\r\n\r\nexport default StoreListInstallersAvailableScreen;\r\n","// React import\r\nimport React from \"react\";\r\n\r\n// Import of Navigate function from react-big-calendar\r\nimport { Navigate } from \"react-big-calendar\";\r\n\r\n// Import of react-big-calendar CSS\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\n\r\n// Import of react-datepicker CSS\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\n// Import of PropTypes\r\nimport PropTypes from \"prop-types\";\r\n\r\n// Import of date-arithmetic module\r\nimport * as dates from \"date-arithmetic\";\r\n\r\n// Import of TimeGrid from react-big-calendar\r\nimport TimeGrid from \"react-big-calendar/lib/TimeGrid\";\r\n\r\n// FixedOverlay200vh imported from the \"OverlayCont\" stylesheet\r\nimport { FixedOverlay200vh } from \"../../StylesheetComps/OverlayCont\";\r\n\r\n// FlexColumnContGreenBorderTopRounded, FlexColumnFullWidth, and FlexRowCont100PercentSpaceBetween imported from the \"Cont\" stylesheet\r\nimport {\r\n  FlexColumnContGreenBorderTopRounded,\r\n  FlexColumnFullWidth,\r\n  FlexRowCont100PercentSpaceBetween,\r\n} from \"../../StylesheetComps/Cont\";\r\n\r\n// RegularText imported from the \"Titles\" stylesheet\r\nimport { RegularText } from \"../../StylesheetComps/Titles\";\r\n\r\n// RegularResponsiveButton imported from the \"Components\" stylesheet\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\n// ColorPalette imported from the \"Colors\" stylesheet\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\nconst ConfirmCancel = ({ open, onClose, MoveForward, DoNotMove }) => {\r\n  class MyWeek extends React.Component {\r\n    render() {\r\n      let {\r\n        date,\r\n        localizer,\r\n        min = localizer.startOf(new Date(), \"day\"),\r\n        max = localizer.endOf(new Date(), \"day\"),\r\n        scrollToTime = localizer.startOf(new Date(), \"day\"),\r\n      } = this.props;\r\n      let range = MyWeek.range(date, { localizer });\r\n\r\n      return (\r\n        <TimeGrid\r\n          {...this.props}\r\n          range={range}\r\n          eventOffset={15}\r\n          localizer={localizer}\r\n          min={min}\r\n          max={max}\r\n          scrollToTime={scrollToTime}\r\n        />\r\n      );\r\n    }\r\n  }\r\n\r\n  MyWeek.propTypes = {\r\n    date: PropTypes.instanceOf(Date).isRequired,\r\n    localizer: PropTypes.any,\r\n    min: PropTypes.instanceOf(Date),\r\n    max: PropTypes.instanceOf(Date),\r\n    scrollToTime: PropTypes.instanceOf(Date),\r\n  };\r\n\r\n  MyWeek.range = (date, { localizer }) => {\r\n    let start = date;\r\n    let end = dates.add(start, 0, \"day\");\r\n\r\n    let current = start;\r\n    let range = [];\r\n\r\n    while (localizer.lte(current, end, \"day\")) {\r\n      range.push(current);\r\n      current = localizer.add(current, 1, \"day\");\r\n    }\r\n\r\n    return range;\r\n  };\r\n\r\n  MyWeek.navigate = (date, action, { localizer }) => {\r\n    switch (action) {\r\n      case Navigate.PREVIOUS:\r\n        return localizer.add(date, -1, \"day\");\r\n\r\n      case Navigate.NEXT:\r\n        return localizer.add(date, 1, \"day\");\r\n\r\n      default:\r\n        return date;\r\n    }\r\n  };\r\n\r\n  MyWeek.title = (date) => {\r\n    return `Installer Appointment Slots: ${date.toLocaleDateString()}`;\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContGreenBorderTopRounded>\r\n        <FlexColumnFullWidth>\r\n          <RegularText>Move forward all flexible appointments?</RegularText>\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                onClose();\r\n                MoveForward();\r\n              }}\r\n            >\r\n              Yes\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                onClose();\r\n                DoNotMove();\r\n              }}\r\n            >\r\n              No\r\n            </RegularResponsiveButton>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnContGreenBorderTopRounded>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nConfirmCancel.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onAppointmentEdit: () => {},\r\n  CancelAppointment: () => {},\r\n  MoveForward: () => {},\r\n  DoNotMove: () => {},\r\n  month: 0,\r\n  year: 0,\r\n  day: 0,\r\n  dfName: \"\",\r\n  dfAddress: \"\",\r\n  dfCity: \"\",\r\n  dfCellPhone: \"\",\r\n  dfFlex: false,\r\n  dfNotes: \"\",\r\n  appointmentTime: \"\",\r\n};\r\n\r\nexport default ConfirmCancel;\r\n","/* eslint-disable */\r\n\r\nimport axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport ConfirmCancel from \"../../comps/ConfirmCancel\";\r\nimport EditAppointment from \"../../comps/EditAppointment\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\n\r\nimport format from \"date-fns/format\";\r\nimport getDay from \"date-fns/getDay\";\r\nimport parse from \"date-fns/parse\";\r\nimport startOfWeek from \"date-fns/startOfWeek\";\r\nimport { Calendar, dateFnsLocalizer } from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst InstallerPersonalCalendar = ({ onPreview, onProfileUpdated }) => {\r\n  //=============================================================================\r\n  // Installers Personal Calendar - Install can view their Scheduled Appointments\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // Page should only be accessable and viewable by Installers\r\n  //=============================================================================\r\n\r\n  const [installerId, setInstallerId] = useState(0);\r\n  const [isEditAppointment, setIsEditAppointment] = useState(false);\r\n  const D = new Date();\r\n  const currentYear = D.getFullYear();\r\n  const currentMonth = D.getMonth() + 1;\r\n  const [appointmentList, setAppointmentList] = useState([]);\r\n  const [calendarMonth, setCalendarMonth] = useState(currentMonth);\r\n  const [nameofUser, setNameOfUser] = useState(\"\");\r\n  const [startTimeSlot, setStartTimeSlot] = useState(0);\r\n  const [endTimeSlot, setEndTimeSlot] = useState(0);\r\n  const [startTimeSlotMinute, setStartTimeSlotMinute] = useState(0);\r\n  const [endTimeSlotMinute, setEndTimeSlotMinute] = useState(0);\r\n\r\n  const [appDay, setAppDay] = useState(0);\r\n  const [appMonth, setAppMonth] = useState(0);\r\n  const [appYear, setAppYear] = useState(0);\r\n\r\n  const [startHour, setStartHour] = useState(0);\r\n  const [startMinute, setStartMinute] = useState(0);\r\n  const [endHour, setEndHour] = useState(0);\r\n  const [endMinute, setEndMinute] = useState(0);\r\n\r\n  const [flexible, setFlexible] = useState(false);\r\n\r\n  const [slotId, setSlotId] = useState(0);\r\n  const [appId, setAppId] = useState(0);\r\n\r\n  const [contactName, setContactName] = useState(\"\");\r\n  const [appDesc, setAppDesc] = useState(\"\");\r\n  const [address, setAddress] = useState(\"\");\r\n  const [phone, setPhone] = useState(\"\");\r\n  const [city, setCity] = useState(\"\");\r\n\r\n  const [appointmentIdAsync, setAppointmentIdAsync] = useState(0);\r\n  const [ConfirmCancelOpen, setConfirmCancelOpen] = useState(false);\r\n  const [ConfirmDateChange, setConfirmDateChange] = useState(false);\r\n\r\n  var appointmentId = 0;\r\n  var contactNameNew = \"\";\r\n  var addressNew = \"\";\r\n  var phoneNew = \"\";\r\n  var cityNew = \"\";\r\n  var flexibleNew = \"\";\r\n  var slotIdNew = 0;\r\n  var appDescNew = \"\";\r\n  var newDay = \"\";\r\n  var newMonth = \"\";\r\n  var newYear = \"\";\r\n\r\n  const locales = {\r\n    \"en-US\": require(\"date-fns/locale/en-US\"),\r\n  };\r\n\r\n  const localizer = dateFnsLocalizer({\r\n    format,\r\n    parse,\r\n    startOfWeek,\r\n    getDay,\r\n    locales,\r\n  });\r\n\r\n  //Get Installer Personal Information\r\n\r\n  const GetSessionInfo = async () => {\r\n    setNameOfUser(JSON.parse(sessionStorage.getItem(\"userInfo\")).Name);\r\n    setInstallerId(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n    GetTimeSlots(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n    GetUserAppointmentsAsync(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n  };\r\n\r\n  //Get Own TimeSlots\r\n\r\n  const GetTimeSlots = async (installerId) => {\r\n    try {\r\n      // Make an HTTP GET request to the specified URL\r\n      const resp = await axios.get(\r\n        window.$DBURL + \"appointment/slot/installer/\" + installerId\r\n      );\r\n\r\n      // Check if the request was successful and there are time slots available\r\n      if (\r\n        resp.status === 200 &&\r\n        resp.data &&\r\n        resp.data.timeslots &&\r\n        resp.data.timeslots.length > 0\r\n      ) {\r\n        // Set the start time slot and minute\r\n        setStartTimeSlot(resp.data.timeslots[0].Start.Hour);\r\n        setStartTimeSlotMinute(resp.data.timeslots[0].Start.Minute);\r\n        // Set the end time slot and minute\r\n        setEndTimeSlot(\r\n          resp.data.timeslots[resp.data.timeslots.length - 1].End.Hour\r\n        );\r\n        setEndTimeSlotMinute(\r\n          resp.data.timeslots[resp.data.timeslots.length - 1].End.Minute\r\n        );\r\n      }\r\n    } catch (error) {\r\n      // Handle error\r\n    }\r\n  };\r\n\r\n  //Get Appointments booked with Installer\r\n\r\n  const GetUserAppointmentsAsync = async (installerId) => {\r\n    try {\r\n      // Make an HTTP POST request to the specified URL\r\n      const resp = await axios.post(window.$DBURL + \"appointment/installer\", {\r\n        Year: currentYear,\r\n        Month: calendarMonth,\r\n        Day: 0,\r\n        Installer_Id: installerId,\r\n      });\r\n\r\n      // Check if the request was successful and there are appointments available\r\n      if (\r\n        resp.status === 200 &&\r\n        resp.data &&\r\n        resp.data.appointment &&\r\n        resp.data.appointment.length > 0\r\n      ) {\r\n        // Filter Set the appointment list after filtering out invalid appointments\r\n        setAppointmentList(\r\n          resp.data.appointment.filter(function (o, i) {\r\n            if (o.Start !== null && o.End !== null && o.Id !== 0) {\r\n              return o;\r\n            }\r\n          })\r\n        );\r\n      }\r\n    } catch (error) {\r\n      // Handle error\r\n    }\r\n  };\r\n\r\n  const [yearUpdated, setYearUpdated] = useState(0);\r\n  const [monthUpdated, setMonthUpdated] = useState(0);\r\n  const [dayUpdate, setDayUpdate] = useState(0);\r\n\r\n  const HandleAppointmentForm = async ({\r\n    contactName,\r\n    address,\r\n    phone,\r\n    city,\r\n    flexible,\r\n    slotId,\r\n    appDesc,\r\n    EditYear,\r\n    EditMonth,\r\n    EditDay,\r\n  }) => {\r\n    contactNameNew = contactName;\r\n    addressNew = address;\r\n    phoneNew = phone;\r\n    cityNew = city;\r\n    flexibleNew = flexible;\r\n    slotIdNew = slotId;\r\n    appDescNew = appDesc;\r\n    newDay = EditDay;\r\n    newMonth = EditMonth;\r\n    newYear = EditYear;\r\n    setDayUpdate(EditDay);\r\n    setMonthUpdated(EditMonth);\r\n    setYearUpdated(EditYear);\r\n  };\r\n\r\n  //Update Appointment with Homeowner\r\n\r\n  const HandleAppointmentUpdated = async ({\r\n    editName,\r\n    editAddress,\r\n    editPhone,\r\n    editCity,\r\n    editFlexible,\r\n    editSlotId,\r\n    editAppDesc,\r\n  }) => {\r\n    if (\r\n      (newDay === appDay &&\r\n        newMonth === appMonth &&\r\n        newYear === appYear &&\r\n        slotIdNew === slotId) ||\r\n      slotIdNew === 0\r\n    ) {\r\n      const resp = await axios.put(window.$DBURL + \"appointment\", {\r\n        Id: appId,\r\n        DailyOpenSlot_Id: slotIdNew || slotId,\r\n        Day: newDay || appDay,\r\n        Month: newMonth || appMonth,\r\n        Year: newYear || appYear,\r\n        Flexible: flexibleNew,\r\n        Contactname: contactNameNew || contactName,\r\n        Phone: phoneNew || phone,\r\n        City: cityNew || city,\r\n        Street: addressNew || address,\r\n        Description: appDescNew || appDesc,\r\n      });\r\n      if (resp.status === 200) {\r\n        GetAppointmentInfoAsync(appointmentIdAsync);\r\n        GetUserAppointmentsAsync(installerId);\r\n      }\r\n    } else {\r\n      const resp = await axios.put(window.$DBURL + \"appointment/all\", {\r\n        Id: appId,\r\n        DailyOpenSlot_Id: slotIdNew || slotId,\r\n        Day: newDay || appDay,\r\n        Month: newMonth || appMonth,\r\n        Year: newYear || appYear,\r\n        Flexible: flexibleNew,\r\n        Contactname: contactNameNew || contactName,\r\n        Phone: phoneNew || phone,\r\n        City: cityNew || city,\r\n        Street: addressNew || address,\r\n        Description: appDescNew || appDesc,\r\n      });\r\n      if (resp.status === 200) {\r\n        GetAppointmentInfoAsync(appointmentIdAsync);\r\n        GetUserAppointmentsAsync(installerId);\r\n      }\r\n    }\r\n  };\r\n\r\n  //Update Appointment with Homeowner and move other appointments forward\r\n\r\n  const HandleAppointmentUpdatedInstallerMove = async () => {\r\n    const resp = await axios.put(window.$DBURL + \"appointment/all\", {\r\n      Id: appId,\r\n      DailyOpenSlot_Id: slotIdNew || slotId,\r\n      Day: dayUpdate || appDay,\r\n      Month: monthUpdated || appMonth,\r\n      Year: yearUpdated || appYear,\r\n      Flexible: flexibleNew,\r\n      Contactname: contactNameNew || contactName,\r\n      Phone: phoneNew || phone,\r\n      City: cityNew || city,\r\n      Street: addressNew || address,\r\n      Description: appDescNew || appDesc,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetAppointmentInfoAsync(appointmentIdAsync);\r\n      GetUserAppointmentsAsync(installerId);\r\n      GetTimeSlots(installerId);\r\n    }\r\n  };\r\n\r\n  //Update Appointment with Homeowner and don't move other appointments forward\r\n\r\n  const HandleAppointmentUpdatedInstallerStay = async () => {\r\n    const resp = await axios.put(window.$DBURL + \"appointment\", {\r\n      Id: appId,\r\n      DailyOpenSlot_Id: slotIdNew || slotId,\r\n      Day: dayUpdate || appDay,\r\n      Month: monthUpdated || appMonth,\r\n      Year: yearUpdated || appYear,\r\n      Flexible: flexibleNew,\r\n      Contactname: contactNameNew || contactName,\r\n      Phone: phoneNew || phone,\r\n      City: cityNew || city,\r\n      Street: addressNew || address,\r\n      Description: appDescNew || appDesc,\r\n    });\r\n    if (resp.status === 200) {\r\n      GetAppointmentInfoAsync(appointmentIdAsync);\r\n      GetUserAppointmentsAsync(installerId);\r\n      GetTimeSlots(installerId);\r\n    }\r\n  };\r\n\r\n  //Cancel Appointment with Homeowner and move other appointments forward\r\n\r\n  const HandleCancel = async (appointmentId, installerId) => {\r\n    try {\r\n      const resp = await axios.delete(\r\n        `${window.$DBURL}appointment/cancel/${appointmentId}`\r\n      );\r\n      if (resp.status === 200) {\r\n        GetUserAppointmentsAsync(installerId);\r\n        GetTimeSlots(installerId);\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Cancel Appointment with Homeowner and don't move other appointments forward\r\n\r\n  const HandleCancelNoMove = async (appointmentId, installerId) => {\r\n    try {\r\n      const resp = await axios.delete(\r\n        `${window.$DBURL}appointment/${appointmentId}`\r\n      );\r\n      if (resp.status === 200) {\r\n        GetUserAppointmentsAsync(installerId);\r\n        GetTimeSlots(installerId);\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Get Appointment Info\r\n\r\n  const GetAppointmentInfoAsync = async (appointmentId) => {\r\n    // The try-catch block is used to handle any potential errors that may occur while sending\r\n    // the GET request.\r\n    try {\r\n      const resp = await axios.get(\r\n        `${window.$DBURL}appointment/${appointmentId}`\r\n      );\r\n      if (resp.status === 200) {\r\n        const { data } = resp;\r\n        if (data && data.appointment) {\r\n          const { appointment } = data;\r\n          setAppDay(appointment.Day);\r\n          setAppMonth(appointment.Month);\r\n          setAppYear(appointment.Year);\r\n\r\n          // Update the start time of the appointment if it is not null.\r\n          if (appointment.Start) {\r\n            setStartHour(appointment.Start.Hour);\r\n            setStartMinute(appointment.Start.Minute);\r\n          }\r\n\r\n          // Update the end time of the appointment if it is not null.\r\n          if (appointment.End) {\r\n            setEndHour(appointment.End.Hour);\r\n            setEndMinute(appointment.End.Minute);\r\n          }\r\n\r\n          setFlexible(appointment.Flexible);\r\n          setSlotId(appointment.DailyOpenSlot_Id);\r\n          setAppId(appointment.Id);\r\n\r\n          setContactName(appointment.Contactname);\r\n          setAppDesc(appointment.Description);\r\n          setAddress(appointment.Street);\r\n          setPhone(appointment.Phone);\r\n          setCity(appointment.City);\r\n\r\n          setInstallerId(appointment.Installer_Id);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      // If an error occurs, log it to the console for further investigation.\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Get Appointment Info\r\n\r\n  const GetAppointmentInfo = async (appointmentId) => {\r\n    try {\r\n      const resp = await axios.get(\r\n        `${window.$DBURL}appointment/${appointmentId}`\r\n      );\r\n      const { data } = resp;\r\n      const { appointment } = data;\r\n\r\n      setAppDay(appointment.Day);\r\n      setAppMonth(appointment.Month);\r\n      setAppYear(appointment.Year);\r\n\r\n      if (appointment.Start) {\r\n        setStartHour(appointment.Start.Hour);\r\n        setStartMinute(appointment.Start.Minute);\r\n      }\r\n\r\n      if (appointment.End) {\r\n        setEndHour(appointment.End.Hour);\r\n        setEndMinute(appointment.End.Minute);\r\n      }\r\n\r\n      setFlexible(appointment.Flexible);\r\n      setSlotId(appointment.DailyOpenSlot_Id);\r\n      setAppId(appointment.Id);\r\n\r\n      setContactName(appointment.Contactname);\r\n      setAppDesc(appointment.Description);\r\n      setAddress(appointment.Street);\r\n      setPhone(appointment.Phone);\r\n      setCity(appointment.City);\r\n\r\n      setInstallerId(appointment.Installer_Id);\r\n\r\n      // If the start or end time of the appointment is exactly on the hour (e.g. 12:00),\r\n      // set the minute value to \"00\" rather than 0.\r\n      if (appointment.Start.Minute === 0 && appointment.End.Minute === 0) {\r\n        setStartMinute(\"00\");\r\n        setEndMinute(\"00\");\r\n      } else if (appointment.End.Minute === 0) {\r\n        setEndMinute(\"00\");\r\n      } else if (appointment.Start.Minute === 0) {\r\n        setStartMinute(\"00\");\r\n      } else {\r\n        setStartMinute(appointment.Start.Minute);\r\n        setEndMinute(appointment.End.Minute);\r\n      }\r\n    } catch (error) {\r\n      // If an error occurs, log it to the console for further investigation.\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Calendar Prop Getter (Change Calendar Day Colour based on availability of the day)\r\n\r\n  const closeDayPropGetter = (date) => {\r\n    // Use the Array.prototype.find() method to search the appointmentList array for an\r\n    // appointment that matches the specified date.\r\n    const appointment = appointmentList.find((o) => {\r\n      return (\r\n        o.Day === date.getDate() &&\r\n        o.Month === date.getMonth() + 1 &&\r\n        o.Year === date.getFullYear()\r\n      );\r\n    });\r\n\r\n    // If an appointment is found that matches the date, return an object with a style\r\n    // property that sets the background color of the date to green.\r\n    if (appointment) {\r\n      return { style: { backgroundColor: \"#169ADB\" } };\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    GetUserAppointmentsAsync(installerId);\r\n  }, [calendarMonth]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const calendarStyle = {\r\n    height: \"65vh\",\r\n    width: \"100%\",\r\n    \"@media (maxWidth: 1006px)\": {\r\n      height: \"65vw\",\r\n    },\r\n  };\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <FullWidthMobileCont100vw100vh>\r\n        <Menu> </Menu>\r\n      </FullWidthMobileCont100vw100vh>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <FlexColumnFullWidth>\r\n          <EditAppointment\r\n            currentTimeslotId={slotId}\r\n            appointmentTime={\r\n              startHour + \":\" + startMinute + \" - \" + endHour + \":\" + endMinute\r\n            }\r\n            CancelAppointment={() => {\r\n              setConfirmCancelOpen(true);\r\n            }}\r\n            onPreview={HandleAppointmentForm}\r\n            onAppointmentEdit={HandleAppointmentUpdated}\r\n            onUpdateDate={() => {\r\n              setConfirmDateChange(true);\r\n            }}\r\n            installerId={installerId}\r\n            dfName={contactName}\r\n            dfNotes={appDesc}\r\n            dfAddress={address}\r\n            dfCity={city}\r\n            dfCellPhone={phone}\r\n            month={appMonth}\r\n            day={appDay}\r\n            year={appYear}\r\n            dfFlex={flexible}\r\n            open={isEditAppointment}\r\n            onClose={() => {\r\n              setIsEditAppointment(false);\r\n            }}\r\n          ></EditAppointment>\r\n          <ConfirmCancel\r\n            open={ConfirmCancelOpen}\r\n            MoveForward={() => {\r\n              HandleCancel(appointmentIdAsync, installerId);\r\n            }}\r\n            DoNotMove={() => {\r\n              HandleCancelNoMove(appointmentIdAsync, installerId);\r\n            }}\r\n            onClose={() => {\r\n              setConfirmCancelOpen(false);\r\n            }}\r\n          ></ConfirmCancel>\r\n          <ConfirmCancel\r\n            open={ConfirmDateChange}\r\n            MoveForward={() => {\r\n              HandleAppointmentUpdatedInstallerMove();\r\n              GetAppointmentInfoAsync(appointmentIdAsync);\r\n              GetUserAppointmentsAsync(installerId);\r\n            }}\r\n            DoNotMove={() => {\r\n              HandleAppointmentUpdatedInstallerStay();\r\n              GetAppointmentInfoAsync(appointmentIdAsync);\r\n              GetUserAppointmentsAsync(installerId);\r\n            }}\r\n            onClose={() => {\r\n              setConfirmDateChange(false);\r\n            }}\r\n          ></ConfirmCancel>\r\n          <LeagueSpartanExtraLargeBold>\r\n            {nameofUser + \"'s Personal Calendar\"}\r\n          </LeagueSpartanExtraLargeBold>\r\n          <Calendar\r\n            localizer={localizer}\r\n            events={appointmentList.map((o, i) => {\r\n              return {\r\n                id: o.Id,\r\n                title: o.Description + \" with \" + o.Contactname,\r\n                start: new Date(\r\n                  o.Year,\r\n                  o.Month - 1,\r\n                  o.Day,\r\n                  o.Start.Hour,\r\n                  o.Start.Minute\r\n                ),\r\n                end: new Date(\r\n                  o.Year,\r\n                  o.Month - 1,\r\n                  o.Day,\r\n                  o.End.Hour,\r\n                  o.End.Minute\r\n                ),\r\n                allDay: false,\r\n              };\r\n            })}\r\n            startAccessor=\"start\"\r\n            endAccessor=\"end\"\r\n            style={calendarStyle}\r\n            dayLayoutAlgorithm=\"no-overlap\"\r\n            min={new Date(2021, 11, 0, startTimeSlot, startTimeSlotMinute, 0)}\r\n            max={new Date(2021, 11, 0, endTimeSlot, endTimeSlotMinute, 0)}\r\n            longPressThreshold={10}\r\n            dayPropGetter={closeDayPropGetter}\r\n            onSelectEvent={(event) => {\r\n              setIsEditAppointment(true);\r\n              appointmentId = event.id;\r\n              setAppointmentIdAsync(event.id);\r\n              GetAppointmentInfo(appointmentIdAsync);\r\n            }}\r\n            onNavigate={(date) => {\r\n              setCalendarMonth(date.getMonth() + 1);\r\n            }}\r\n          />\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nInstallerPersonalCalendar.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default InstallerPersonalCalendar;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\n//DATEPICKER IMPORTS\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport DatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport ClockList from \"../../comps/ClockList\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContFullWidth,\r\n  FullWidthMobileCont100vw100vh,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularText,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst ClockScheduleSummary = () => {\r\n  //===============================================================================\r\n  // Clock Schedule Summary Screen. Staff can view Schedules for all their workers\r\n  //===============================================================================\r\n\r\n  //===============================================================================\r\n  // Managers / Accountants should be only ones with access\r\n  //===============================================================================\r\n\r\n  const params = useParams();\r\n\r\n  const [roleNum] = useState(1000);\r\n  const [workerName] = useState(\"\");\r\n  const [clockMap, setClockMap] = useState([]);\r\n\r\n  var d = new Date();\r\n  var fullyear = d.getFullYear();\r\n  var month = (\"0\" + (d.getMonth() + 1)).slice(-2);\r\n  var day = (\"0\" + d.getDate()).slice(-2);\r\n\r\n  const [scheduleId, setScheduleId] = useState(0);\r\n  const [clockId, setClockId] = useState(0);\r\n  const [clockin, setClockIn] = useState(0);\r\n  const [clockout, setClockOut] = useState(0);\r\n\r\n  var newClockInSync = \"\";\r\n  var newClockOutSync = \"\";\r\n\r\n  var newClockInSyncUpdated = \"default\";\r\n  var newClockOutSyncUpdated = \"default\";\r\n\r\n  const [startDate, setStartDate] = useState(\r\n    new Date(fullyear + \"/\" + month + \"/\" + day)\r\n  );\r\n  const [endDate, setEndDate] = useState(\r\n    new Date(fullyear + \"/\" + month + \"/\" + day)\r\n  );\r\n  var selectedStartYear = startDate.getFullYear();\r\n  var selectedStartMonth = startDate.getMonth() + 1;\r\n  var selectedStartDate = startDate.getDate();\r\n\r\n  var selectedEndYear = endDate.getFullYear();\r\n  var selectedEndMonth = endDate.getMonth() + 1;\r\n  var selectedEndDate = endDate.getDate();\r\n\r\n  const GetWorkerClockRecords = async () => {\r\n    const resp = await axios.post(window.$DBURL + \"schedule/clock/store\", {\r\n      StartDate:\r\n        selectedStartYear +\r\n        \"-\" +\r\n        selectedStartMonth +\r\n        \"-\" +\r\n        selectedStartDate +\r\n        \"T\" +\r\n        0 +\r\n        0 +\r\n        \":\" +\r\n        0 +\r\n        0,\r\n      EndDate:\r\n        selectedEndYear +\r\n        \"-\" +\r\n        selectedEndMonth +\r\n        \"-\" +\r\n        selectedEndDate +\r\n        \"T\" +\r\n        23 +\r\n        \":\" +\r\n        59,\r\n      Id: params.Id,\r\n    });\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.clock !== null) {\r\n          setClockMap(resp.data.clocks);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const HandleFormClock = async ({ adjClockInValue, adjClockOutValue }) => {\r\n    newClockInSync = adjClockInValue;\r\n    newClockOutSync = adjClockOutValue;\r\n    if (adjClockInValue !== undefined && adjClockOutValue !== undefined) {\r\n      newClockInSyncUpdated =\r\n        clockin.substring(0, 10) + adjClockInValue + clockin.substring(16, 20);\r\n      newClockOutSyncUpdated =\r\n        clockout.substring(0, 10) +\r\n        adjClockOutValue +\r\n        clockout.substring(16, 20);\r\n    } else if (adjClockOutValue !== undefined) {\r\n      newClockInSyncUpdated = clockin;\r\n      newClockOutSyncUpdated =\r\n        clockout.substring(0, 11) +\r\n        adjClockOutValue +\r\n        clockout.substring(16, 20);\r\n    } else if (adjClockInValue !== undefined) {\r\n      newClockInSyncUpdated =\r\n        clockin.substring(0, 11) + adjClockInValue + clockin.substring(16, 20);\r\n      newClockOutSyncUpdated = clockout;\r\n    }\r\n  };\r\n\r\n  const HandleAdjustment = async () => {\r\n    if (newClockOutSync === undefined) {\r\n      const resp = await axios.put(window.$DBURL + \"schedule/clock\", {\r\n        Id: clockId,\r\n        Schedule_Id: scheduleId,\r\n        Crew_Id: params.userId,\r\n        Crewname: params.workerName,\r\n        Clockin: clockin,\r\n        Clockout: clockout,\r\n        AdjClockin: newClockInSyncUpdated || clockin,\r\n      });\r\n      if (resp.status === 200) {\r\n        newClockInSyncUpdated = \"\";\r\n      }\r\n    } else if (newClockInSync === undefined) {\r\n      const resp = await axios.put(window.$DBURL + \"schedule/clock\", {\r\n        Id: clockId,\r\n        Schedule_Id: scheduleId,\r\n        Crew_Id: params.userId,\r\n        Crewname: params.workerName,\r\n        Clockin: clockin,\r\n        Clockout: clockout,\r\n        AdjClockout: newClockOutSyncUpdated || clockout,\r\n      });\r\n      if (resp.status === 200) {\r\n        newClockOutSyncUpdated = \"\";\r\n      }\r\n    }\r\n    GetWorkerClockRecords();\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetWorkerClockRecords();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    GetWorkerClockRecords();\r\n  }, [startDate]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    GetWorkerClockRecords();\r\n  }, [endDate]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <FullWidthMobileCont100vw100vh>\r\n        <Menu> </Menu>\r\n      </FullWidthMobileCont100vw100vh>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <FlexColumnFullWidth>\r\n          <FlexRowContFullWidth>\r\n            <LeagueSpartanExtraLargeBold>\r\n              {workerName}\r\n            </LeagueSpartanExtraLargeBold>\r\n            <FlexRowContFullWidth>\r\n              <DatePicker\r\n                selected={startDate}\r\n                onChange={(date) => setStartDate(date)}\r\n                selectsStart\r\n                startDate={startDate}\r\n                endDate={endDate}\r\n              />\r\n              <DatePicker\r\n                selected={endDate}\r\n                onChange={(date) => setEndDate(date)}\r\n                selectsEnd\r\n                startDate={startDate}\r\n                endDate={endDate}\r\n                minDate={startDate}\r\n              />\r\n            </FlexRowContFullWidth>\r\n            <RegularResponsiveButton>\r\n              Export to Spreadsheet\r\n            </RegularResponsiveButton>\r\n          </FlexRowContFullWidth>\r\n\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <RegularText>Index</RegularText>\r\n            <RegularText>Date</RegularText>\r\n            <RegularText>Clock-In</RegularText>\r\n            <RegularText>Clock-Out</RegularText>\r\n            <RegularText>Adj. Clock-In</RegularText>\r\n            <RegularText>Adj. Clock-Out</RegularText>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n\r\n          {clockMap.map((o, i) => (\r\n            <div key={i}>\r\n              <LeagueSpartanExtraLargeBold>\r\n                {o.Name}\r\n              </LeagueSpartanExtraLargeBold>\r\n              {o.Clocks.map((record, keyNum) => (\r\n                <ClockList\r\n                  key={i}\r\n                  indexNum={i + 1}\r\n                  year={record.Clockin.substring(0, 4)}\r\n                  month={record.Clockin.substring(5, 7)}\r\n                  day={record.Clockin.substring(8, 10)}\r\n                  clockin={record.Clockin}\r\n                  clockout={record.Clockout}\r\n                  adjclockin={record.AdjClockin}\r\n                  adjclockout={record.AdjClockout}\r\n                  roleID={roleNum}\r\n                  onPreview={HandleFormClock}\r\n                  onUpdateAdjClock={HandleAdjustment}\r\n                  onSetId={() => {\r\n                    setScheduleId(o.Schedule_Id);\r\n                    setClockId(record.Id);\r\n                    setClockIn(record.Clockin);\r\n                    setClockOut(record.Clockout);\r\n                  }}\r\n                ></ClockList>\r\n              ))}\r\n              <LeagueSpartanExtraLargeBold>\r\n                Total Hours:{\" \"}\r\n              </LeagueSpartanExtraLargeBold>\r\n              <RegularText>{o.Hours.toFixed(2)} hours worked</RegularText>\r\n              <hr></hr>\r\n            </div>\r\n          ))}\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nClockScheduleSummary.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default ClockScheduleSummary;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\n\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  HundredPercentFlexDiv,\r\n  Icon30px20pxPointer,\r\n} from \"../../StylesheetComps/Quote\";\r\n\r\nimport format from \"date-fns/format\";\r\nimport getDay from \"date-fns/getDay\";\r\nimport parse from \"date-fns/parse\";\r\nimport startOfWeek from \"date-fns/startOfWeek\";\r\nimport { Calendar, dateFnsLocalizer, Views } from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\n\r\nimport {\r\n  Div70PerWidth7PerHeight,\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreScheduleDayScreen = ({ onPreview, onProfileUpdated, storeId }) => {\r\n  //=============================================================================\r\n  // Store Schedule Day Screen - View all workers schedule on Selected Date\r\n  //=============================================================================\r\n\r\n  const history = useHistory();\r\n\r\n  const locales = {\r\n    \"en-US\": require(\"date-fns/locale/en-US\"),\r\n  };\r\n\r\n  const localizer = dateFnsLocalizer({\r\n    format,\r\n    parse,\r\n    startOfWeek,\r\n    getDay,\r\n    locales,\r\n  });\r\n\r\n  const params = useParams();\r\n\r\n  const [startHour, setStartHour] = useState(0);\r\n  const [startMinute, setStartMinute] = useState(0);\r\n  const [endHour, setEndHour] = useState(0);\r\n  const [endMinute, setEndMinute] = useState(0);\r\n  const [installerList, setInstallerList] = useState([]);\r\n\r\n  const GetSchedulesForDay = async () => {\r\n    const resp = await axios.post(window.$DBURL + \"schedule/store\", {\r\n      Id: params.storeId,\r\n      Year: params.storeYear,\r\n      Month: params.storeMonth,\r\n      Day: params.storeDay,\r\n    });\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.schedules !== null) {\r\n          if (resp.data.schedules.length > 0) {\r\n            setInstallerList(resp.data.schedules);\r\n            setStartHour(resp.data.schedules[0].Start.Hour);\r\n            setStartMinute(resp.data.schedules[0].Start.Minute);\r\n            let maxObj = resp.data.schedules.reduce((max, obj) =>\r\n              max.End.Hour > obj.End.Hour ? max : obj\r\n            );\r\n            let maxMinute = resp.data.schedules.reduce((max, obj) =>\r\n              max.End.Hour > obj.End.Hour ? max : obj\r\n            );\r\n            setEndMinute(maxMinute.End.Minute);\r\n            setEndHour(maxObj.End.Hour);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const getCustomToolbar = (toolbar) => {\r\n    return null;\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSchedulesForDay();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <FlexColumnFullWidth>\r\n          <Div70PerWidth7PerHeight>\r\n            <HundredPercentFlexDiv>\r\n              <Icon30px20pxPointer\r\n                src=\"/backarrow.svg\"\r\n                onClick={() => {\r\n                  history.push(\"/storeschedule\");\r\n                }}\r\n              ></Icon30px20pxPointer>\r\n              <LeagueSpartanExtraLargeBold>\r\n                {\"Workers Scheduled on \" +\r\n                  params.storeMonth +\r\n                  \"/\" +\r\n                  params.storeDay +\r\n                  \"/\" +\r\n                  params.storeYear}\r\n              </LeagueSpartanExtraLargeBold>\r\n            </HundredPercentFlexDiv>\r\n          </Div70PerWidth7PerHeight>\r\n          <Calendar\r\n            localizer={localizer}\r\n            defaultDate={\r\n              new Date(params.storeYear, params.storeMonth - 1, params.storeDay)\r\n            }\r\n            events={installerList.map((o, i) => {\r\n              return {\r\n                id: o.Id,\r\n                title: o.Crewname,\r\n                start: new Date(\r\n                  params.storeYear,\r\n                  params.storeMonth - 1,\r\n                  params.storeDay,\r\n                  o.Start.Hour,\r\n                  o.Start.Minute\r\n                ),\r\n                end: new Date(\r\n                  params.storeYear,\r\n                  params.storeMonth - 1,\r\n                  params.storeDay,\r\n                  o.End.Hour,\r\n                  o.End.Minute\r\n                ),\r\n                allDay: false,\r\n                installerUserId: o.Crew_Id,\r\n                InstallerName: o.Crewname,\r\n              };\r\n            })}\r\n            startAccessor=\"start\"\r\n            endAccessor=\"end\"\r\n            style={{ height: \"75%\", width: \"100%\" }}\r\n            dayLayoutAlgorithm=\"no-overlap\"\r\n            min={new Date(2021, 1, 1, startHour, startMinute, 0)}\r\n            max={new Date(2021, 12, 31, endHour, endMinute, 0)}\r\n            views={{ month: true, week: true, day: true }}\r\n            defaultView={Views.DAY}\r\n            components={{\r\n              toolbar: getCustomToolbar,\r\n            }}\r\n            onNavigate={() => {\r\n              GetSchedulesForDay();\r\n            }}\r\n            onSelectEvent={(event) => {\r\n              history.push(\"/storeschedule\");\r\n            }}\r\n          />\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nStoreScheduleDayScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n  storeId: 0,\r\n};\r\n\r\nexport default StoreScheduleDayScreen;\r\n","import React from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { FlexCont300x150px } from \"../../StylesheetComps/Cont\";\r\nimport { RegularText, LeagueSpartanLarge } from \"../../StylesheetComps/Titles\";\r\nimport {\r\n  Div30Percent,\r\n  Div70Percent,\r\n  FlexEndDivAutox15Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon80x80Percent } from \"../../StylesheetComps/Imgs/Icons\";\r\n\r\nconst StoreEstimateListCard = ({ CatHeadText, CatParaText, storeId }) => {\r\n  const params = useParams();\r\n\r\n  return (\r\n    <FlexCont300x150px>\r\n      <Div30Percent>\r\n        <Icon80x80Percent src=\"/storemanagement.svg\"></Icon80x80Percent>\r\n      </Div30Percent>\r\n      <Div70Percent>\r\n        <Link\r\n          to={\"/estimate/\" + params.Id + \"/\" + storeId}\r\n          style={{ textDecoration: \"none\", color: \"black\" }}\r\n        >\r\n          <LeagueSpartanLarge>{CatHeadText}</LeagueSpartanLarge>\r\n        </Link>\r\n        <RegularText>{CatParaText}</RegularText>\r\n      </Div70Percent>\r\n      <FlexEndDivAutox15Percent></FlexEndDivAutox15Percent>\r\n    </FlexCont300x150px>\r\n  );\r\n};\r\nStoreEstimateListCard.defaultProps = {\r\n  CatHeadText: \"Fencing\",\r\n  CatParaText:\r\n    \"This is a category for the products that are contained within, sample text\",\r\n  storeId: 0,\r\n};\r\n\r\nexport default StoreEstimateListCard;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport StoreEstimateListCard from \"../../comps/StoreEstimateListCard\";\r\nimport {\r\n  Div70PerWidth7PerHeight,\r\n  FlexCont100vw100vh,\r\n  FlexCont80PercentMobileOpt,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont80vwAutoHeight } from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { LeagueSpartanExtraLargeBold } from \"../../StylesheetComps/Titles\";\r\n\r\nconst StoreListEstimateScreen = () => {\r\n  //=============================================================================\r\n  // MyStore List Screen - User selects their own store\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n\r\n  const [storeList, getStoreList] = useState([]);\r\n  const [storeMesssage, setStoreMessage] = useState(\"Select your Store\");\r\n\r\n  const GetStoreList = async () => {\r\n    if (params.Id === 0) {\r\n      setStoreMessage(\r\n        \"Please select a Metro & City in your Profile to gain access to the Form\"\r\n      );\r\n    } else {\r\n      const resp = await axios.get(window.$DBURL + \"store/metro/\" + params.Id);\r\n      if (resp.status === 200) {\r\n        if (resp.data !== null) {\r\n          if (resp.data.stores !== null) {\r\n            getStoreList(resp.data.stores);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetStoreList();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <RightViewFullWidth>\r\n          <Div70PerWidth7PerHeight>\r\n            <LeagueSpartanExtraLargeBold>\r\n              {storeMesssage}\r\n            </LeagueSpartanExtraLargeBold>\r\n          </Div70PerWidth7PerHeight>\r\n          <FlexCont80PercentMobileOpt>\r\n            {storeList.map((o, i) => (\r\n              <StoreEstimateListCard\r\n                key={i}\r\n                CatHeadText={o.Name}\r\n                storeId={o.Id}\r\n                CatParaText={o.Address}\r\n                catId={o.Id}\r\n              ></StoreEstimateListCard>\r\n            ))}\r\n          </FlexCont80PercentMobileOpt>\r\n        </RightViewFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nStoreListEstimateScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  RoleName: \"Role Name Ex. Estimator\",\r\n};\r\n\r\nexport default StoreListEstimateScreen;\r\n","/* eslint-disable */\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport axios from \"axios\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexColumnCont100xAutoPercent,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  LeftCont,\r\n  FlexColumn81vwLightGrey,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Cont } from \"../../StylesheetComps/Projects\";\r\nimport { ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport { Icon100x100 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { SmallText } from \"../../StylesheetComps/Titles\";\r\nimport { FlexColumnContBoxShadow } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  Image300x200,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { CreateDepositRecord } from \"../../API_Functions/Utility_Functions\";\r\nimport { SetQuoteTo_Buy_Install } from \"../../API_Functions/CaseQuote_Functions\";\r\nconst PaymentSuccessScreen = ({ onPreview, onProfileUpdated }) => {\r\n  //=============================================================================\r\n  // Payment Success Screen - User redirected here on Successful Stripe Payment\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // User will redirect to QuoteAppointment Page to Book Appointment with Inst.\r\n  //=============================================================================\r\n\r\n  const [roleNum, setRoleNum] = useState(0);\r\n  const [userInfo, setUserInfo] = useState({});\r\n  const [showDepositInfo, setShowDepositInfo] = useState(\"none\");\r\n\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  const D = new Date();\r\n  const currentYear = D.getFullYear();\r\n  const currentMonth = (\"0\" + (D.getMonth() + 1)).slice(-2);\r\n  const currentDay = (\"0\" + D.getDate()).slice(-2);\r\n  const currentHour = (\"0\" + D.getHours()).slice(-2);\r\n  const currentMinute = (\"0\" + D.getMinutes()).slice(-2);\r\n\r\n  // const GetProfileInfo = async () => {\r\n  //   sessionStorage.setItem(\"token\", params.token);\r\n  //   axios.defaults.baseURL = window.$DBURL;\r\n  //   axios.defaults.headers.common[\"Authorization\"] = \"Basic \" + params.token;\r\n  //   const resp = await axios.get(window.$DBURL + \"users/profile\");\r\n  //   sessionStorage.setItem(\"userInfo\", JSON.stringify(resp.data.user));\r\n  //   setUserInfo(JSON.parse(sessionStorage.getItem(\"userInfo\")));\r\n  //   setRoleNum(resp.data.user.Role);\r\n  //   if (params.invoiceid === 0 || params.invoiceid === \"0\")\r\n  //     setShowDepositInfo(\"flex\");\r\n  // };\r\n\r\n  // // Create deposit transaction record and inform yardhack managers\r\n  // const CreateDepositTransactionRecord = async () => {\r\n  //   var CardPayRequest = {\r\n  //     Quote_Id: params.quoteId,\r\n  //     Store_Id: params.storeId,\r\n  //     Amt: params.amount,\r\n  //     TransTime:\r\n  //       currentYear +\r\n  //       \"-\" +\r\n  //       currentMonth +\r\n  //       \"-\" +\r\n  //       currentDay +\r\n  //       \"T\" +\r\n  //       currentHour +\r\n  //       \":\" +\r\n  //       currentMinute,\r\n  //     TransactionId: params.transactionid,\r\n  //     CustomerCreditCardInfo: {\r\n  //       CreditCardType: \"\",\r\n  //       CardNumber: \"\",\r\n  //     },\r\n  //     CurrencyCode: params.currency,\r\n  //     AuthToken: params.token,\r\n  //   };\r\n  //   var deposit = await CreateDepositRecord(CardPayRequest);\r\n  //   if (deposit !== null) {\r\n  //   }\r\n  // };\r\n  // const ProcessSuccessPay = async () => {\r\n  //   await GetProfileInfo();\r\n  //   //await CreateDepositTransactionRecord()\r\n  // };\r\n  // useEffect(() => {\r\n  //   // SetHeaderAuthorization();\r\n  //   ProcessSuccessPay();\r\n  // }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const MarkEstimateAsPaid = async (estimateid) => {\r\n  const resp = await SetQuoteTo_Buy_Install(estimateid)\r\n  if(resp){\r\n    console.log(resp)\r\n  }\r\n  }\r\n\r\n  useEffect(() => {\r\n    MarkEstimateAsPaid(params.quoteId)\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (roleNum !== UserRole.Loading) {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          {/* <Menu> </Menu> */}\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          {/* <ActionMenu></ActionMenu> */}\r\n\r\n          <ContentCont77vw>\r\n            <FlexColumnFullWidth display=\"block\" height=\"auto\" margin=\"0\">\r\n              <FlexColumnCont100xAutoPercent>\r\n                <Image300x200 src={\"/Watering_Icon.svg\"}></Image300x200>\r\n                <SmallHeaderLeagueSpartan fontsize=\"24px\">\r\n                  Payment Successful! Thank you!\r\n                </SmallHeaderLeagueSpartan>\r\n\r\n                <br></br>\r\n                <br></br>\r\n\r\n                <FlexRowCont100PercentSpaceBetween\r\n                  display={'flex'}\r\n                  mobileflexdirection=\"column\"\r\n                >\r\n                  <FlexColumnContBoxShadow>\r\n                    <Icon100x100 src=\"/number1.svg\"></Icon100x100>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Schedule Project\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\n                      Once your project is scheduled, you will be contacted for\r\n                      confirmation.\r\n                    </SmallText>\r\n                  </FlexColumnContBoxShadow>\r\n\r\n                  <FlexColumnContBoxShadow>\r\n                    <Icon100x100 src=\"/number2.svg\"></Icon100x100>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Delivery {\"&\"} Construction\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\n                      Our team will deliver the materials and begin construction\r\n                      based on the timeline.\r\n                    </SmallText>\r\n                  </FlexColumnContBoxShadow>\r\n\r\n                  <FlexColumnContBoxShadow>\r\n                    <Icon100x100 src=\"/number3.svg\"></Icon100x100>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Complete Payment\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\n                      After completion you will receive the final invoice for\r\n                      the project.\r\n                    </SmallText>\r\n                  </FlexColumnContBoxShadow>\r\n                </FlexRowCont100PercentSpaceBetween>\r\n\r\n                <br></br>\r\n                <br></br>\r\n{/* \r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/CasesPersonal/\" +\r\n                        userInfo.Metro_Id +\r\n                        \"/\" +\r\n                        userInfo.Store_Id\r\n                    );\r\n                  }}\r\n                >\r\n                  View Projects\r\n                </RegularResponsiveButton> */}\r\n              </FlexColumnCont100xAutoPercent>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nPaymentSuccessScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default PaymentSuccessScreen;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport axios from \"axios\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexColumnCont100xAutoPercent,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  LeftCont,\r\n  FlexColumn81vwLightGrey,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Cont } from \"../../StylesheetComps/Projects\";\r\nimport { ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport { Icon100x100 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { SmallText } from \"../../StylesheetComps/Titles\";\r\nimport { FlexColumnContBoxShadow } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  Image300x200,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  CreateDepositRecord,\r\n  CreatePayRecord,\r\n} from \"../../API_Functions/Utility_Functions\";\r\nconst PaymentSuccessTransitScreen = () => {\r\n  //=============================================================================\r\n  // Payment Success Screen - User redirected here on Successful Stripe Payment\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // User will redirect to QuoteAppointment Page to Book Appointment with Inst.\r\n  //=============================================================================\r\n\r\n  const [roleNum, setRoleNum] = useState(0);\r\n  const [userInfo, setUserInfo] = useState({});\r\n\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  const D = new Date();\r\n  const currentYear = D.getFullYear();\r\n  const currentMonth = (\"0\" + (D.getMonth() + 1)).slice(-2);\r\n  const currentDay = (\"0\" + D.getDate()).slice(-2);\r\n  const currentHour = (\"0\" + D.getHours()).slice(-2);\r\n  const currentMinute = (\"0\" + D.getMinutes()).slice(-2);\r\n\r\n  // const GetProfileInfo = async () => {\r\n  //   sessionStorage.setItem(\"token\", params.token);\r\n  //   axios.defaults.baseURL = window.$DBURL;\r\n  //   axios.defaults.headers.common[\"Authorization\"] = \"Basic \" + params.token;\r\n  //   const resp = await axios.get(window.$DBURL + \"users/profile\");\r\n  //   sessionStorage.setItem(\"userInfo\", JSON.stringify(resp.data.user));\r\n  //   setUserInfo(JSON.parse(sessionStorage.getItem(\"userInfo\")));\r\n  //   setRoleNum(resp.data.user.Role);\r\n  // };\r\n\r\n  // Create payment transaction record and inform yardhack managers\r\n  const CreateTransactionRecord = async (invoiceid) => {\r\n    var CardPayRequest = {\r\n      Quote_Id: params.quoteId,\r\n      Store_Id: params.storeId,\r\n      Amt: params.amount,\r\n      TransTime:\r\n        currentYear +\r\n        \"-\" +\r\n        currentMonth +\r\n        \"-\" +\r\n        currentDay +\r\n        \"T\" +\r\n        currentHour +\r\n        \":\" +\r\n        currentMinute,\r\n      TransactionId: params.transactionid,\r\n      CustomerCreditCardInfo: {\r\n        CreditCardType: \"\",\r\n        CardNumber: \"\",\r\n      },\r\n      CurrencyCode: params.currency,\r\n      AuthToken: params.token,\r\n      InvoiceId: invoiceid,\r\n    };\r\n    if (invoiceid === 0 || invoiceid === \"0\")\r\n      await CreateDepositRecord(CardPayRequest);\r\n    else await CreatePayRecord(CardPayRequest);\r\n  };\r\n  const ProcessSuccessPay = async () => {\r\n    // CreateTransactionRecord(params.invoiceid);\r\n    history.push(\r\n      \"/paymentsuccess/\" +\r\n        params.quoteId +\r\n        \"/\" +\r\n        params.storeId +\r\n        \"/\" +\r\n        params.token +\r\n        \"/\" +\r\n        params.transactionid +\r\n        \"/\" +\r\n        params.amount +\r\n        \"/\" +\r\n        params.currency +\r\n        \"/\" +\r\n        params.invoiceid\r\n    );\r\n  };\r\n  useEffect(() => {\r\n    // SetHeaderAuthorization();\r\n    ProcessSuccessPay();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          {/* <ActionMenu></ActionMenu> */}\r\n\r\n          <ContentCont77vw>\r\n            <FlexColumnFullWidth display={\"block\"} height=\"auto\" margin=\"0\">\r\n              <FlexColumnCont100xAutoPercent>\r\n                <Image300x200 src={\"/Watering_Icon.svg\"}></Image300x200>\r\n                <SmallHeaderLeagueSpartan fontsize=\"24px\">\r\n                  Deposit Payment Successful! Your Project is Ready.\r\n                </SmallHeaderLeagueSpartan>\r\n\r\n                <br></br>\r\n                <br></br>\r\n\r\n                <FlexRowCont100PercentSpaceBetween mobileflexdirection=\"column\">\r\n                  <FlexColumnContBoxShadow>\r\n                    <Icon100x100 src=\"/number1.svg\"></Icon100x100>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Schedule Project\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\n                      Once your project is scheduled, you will be contacted for\r\n                      confirmation.\r\n                    </SmallText>\r\n                  </FlexColumnContBoxShadow>\r\n\r\n                  <FlexColumnContBoxShadow>\r\n                    <Icon100x100 src=\"/number2.svg\"></Icon100x100>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Delivery {\"&\"} Construction\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\n                      Our team will deliver the materials and begin construction\r\n                      based on the timeline.\r\n                    </SmallText>\r\n                  </FlexColumnContBoxShadow>\r\n\r\n                  <FlexColumnContBoxShadow>\r\n                    <Icon100x100 src=\"/number3.svg\"></Icon100x100>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Complete Payment\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\n                      After completion you will receive the final invoice for\r\n                      the project.\r\n                    </SmallText>\r\n                  </FlexColumnContBoxShadow>\r\n                </FlexRowCont100PercentSpaceBetween>\r\n\r\n                <br></br>\r\n                <br></br>\r\n\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/CasesPersonal/\" +\r\n                        userInfo.Metro_Id +\r\n                        \"/\" +\r\n                        userInfo.Store_Id\r\n                    );\r\n                  }}\r\n                >\r\n                  View Projects\r\n                </RegularResponsiveButton>\r\n              </FlexColumnCont100xAutoPercent>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  } \r\n\r\nPaymentSuccessTransitScreen.defaultProps = {\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default PaymentSuccessTransitScreen;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport axios from \"axios\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  FlexRowCont,\r\n  FlexColumnCont100xAutoPercent,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  LeftCont,\r\n  FlexColumn81vwLightGrey,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Cont } from \"../../StylesheetComps/Projects\";\r\nimport { ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport { SmallText } from \"../../StylesheetComps/Titles\";\r\nimport { FlexColumnContBoxShadow } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  Image300x200,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\nconst PaymentFailScreen = ({ onPreview, onProfileUpdated }) => {\r\n  //=============================================================================\r\n  // Payment Success Screen - User redirected here on Successful Stripe Payment\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // User will redirect to QuoteAppointment Page to Book Appointment with Inst.\r\n  //=============================================================================\r\n\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  const [roleNum, setRoleNum] = useState(0);\r\n  const [userInfo, setUserInfo] = useState({});\r\n\r\n  \r\n\r\n  const GetProfileInfo = async () => {\r\n    sessionStorage.setItem(\"token\", params.token);\r\n    axios.defaults.baseURL = window.$DBURL;\r\n    axios.defaults.headers.common[\"Authorization\"] = \"Basic \" + params.token;\r\n    const resp = await axios.get(window.$DBURL + \"users/profile\");\r\n    sessionStorage.setItem(\"userInfo\", JSON.stringify(resp.data.user));\r\n    setUserInfo(JSON.parse(sessionStorage.getItem(\"userInfo\")));\r\n    setRoleNum(resp.data.user.Role);\r\n  };\r\n\r\n  useEffect(() => {\r\n    // SetHeaderAuthorization();\r\n    GetProfileInfo();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (roleNum !== UserRole.Loading) {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          {/* <Menu> </Menu> */}\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ActionMenu></ActionMenu>\r\n\r\n          <ContentCont77vw>\r\n            <FlexColumnFullWidth display={\"block\"} height=\"auto\" margin=\"0\">\r\n              <FlexColumnCont100xAutoPercent>\r\n                <Image300x200 src={\"/Payment_Error_Icon.svg\"}></Image300x200>\r\n                <SmallHeaderLeagueSpartan fontsize=\"24px\">\r\n                  Payment Not Completed\r\n                </SmallHeaderLeagueSpartan>\r\n\r\n                <br></br>\r\n                <br></br>\r\n\r\n                <FlexRowCont width=\"70%\" mobileflexdirection=\"column\">\r\n                  <FlexColumnContBoxShadow>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Try a Different Payment Method\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\nThere's been an issue with your payment, please use a different payment method, or try again later. We're sorry for the inconvenience!\r\n                    </SmallText>\r\n                  </FlexColumnContBoxShadow>\r\n\r\n                  <FlexColumnContBoxShadow>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Speak With Us Directly\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\n                      Having difficulty with payment? Contact us to find a\r\n                      solution.\r\n                    </SmallText>\r\n                    <a\r\n                      rel=\"noreferrer\"\r\n                      href=\"https://www.newrhodesconstruction.com/contact-us/\"\r\n                      target={\"_blank\"}\r\n                      style={{ \"text-decoration\": \"none\" }}\r\n                    >\r\n                      <RegularResponsiveButton>\r\n                        Contact Us\r\n                      </RegularResponsiveButton>\r\n                    </a>\r\n                  </FlexColumnContBoxShadow>\r\n                </FlexRowCont>\r\n\r\n                <br></br>\r\n                <br></br>\r\n              </FlexColumnCont100xAutoPercent>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nPaymentFailScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default PaymentFailScreen;\r\n","import React from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont70PercentFlexStart,\r\n  FlexRowContBoxShadow,\r\n  FlexRowContFlexStart,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexDivSpaceAround } from \"../../StylesheetComps/Div\";\r\nimport { LeagueSpartanRegular } from \"../../StylesheetComps/Titles\";\r\n\r\nconst InstallerQuoteAppCard = ({\r\n  InstallerName,\r\n  installerUserId,\r\n  month,\r\n  day,\r\n  year,\r\n  metroId,\r\n  storeId,\r\n}) => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  return (\r\n    <FlexRowCont70PercentFlexStart>\r\n      <FlexRowContBoxShadow>\r\n        <FlexRowCont100PercentSpaceBetween>\r\n          <FlexRowContFlexStart>\r\n            <LeagueSpartanRegular>{InstallerName}</LeagueSpartanRegular>\r\n          </FlexRowContFlexStart>\r\n          <FlexDivSpaceAround>\r\n            <RegularResponsiveButton\r\n              width={\"250px\"}\r\n              onClick={() => {\r\n                history.push(\r\n                  \"/installersavailable/\" +\r\n                    metroId +\r\n                    \"/\" +\r\n                    storeId +\r\n                    \"/\" +\r\n                    month +\r\n                    \"/\" +\r\n                    day +\r\n                    \"/\" +\r\n                    year +\r\n                    \"/\" +\r\n                    installerUserId +\r\n                    \"/\" +\r\n                    params.quoteId\r\n                );\r\n              }}\r\n            >\r\n              Select Earliest Date: ({month}/{day}/{year})\r\n            </RegularResponsiveButton>\r\n\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                history.push(\r\n                  \"/installercalendar/\" +\r\n                    metroId +\r\n                    \"/\" +\r\n                    storeId +\r\n                    \"/\" +\r\n                    0 +\r\n                    \"/\" +\r\n                    installerUserId +\r\n                    \"/\" +\r\n                    InstallerName +\r\n                    \"/\" +\r\n                    0 +\r\n                    \"/\" +\r\n                    0 +\r\n                    \"/\" +\r\n                    0 +\r\n                    \"/\" +\r\n                    0 +\r\n                    \"/\" +\r\n                    params.quoteId\r\n                );\r\n              }}\r\n              width={\"230px\"}\r\n              bgcolor={ColorPalette.PrimaryGrey}\r\n            >\r\n              Select Date (With Interruptions)\r\n            </RegularResponsiveButton>\r\n          </FlexDivSpaceAround>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n      </FlexRowContBoxShadow>\r\n    </FlexRowCont70PercentFlexStart>\r\n  );\r\n};\r\n\r\nInstallerQuoteAppCard.defaultProps = {\r\n  InstallerName: \"Default Name\",\r\n  installerUserId: 0,\r\n  month: 0,\r\n  day: 0,\r\n  year: 0,\r\n  metroId: 0,\r\n  storeId: 0,\r\n};\r\n\r\nexport default InstallerQuoteAppCard;\r\n","import moment from \"moment\";\r\nimport { useEffect, useState } from \"react\";\r\nimport ReactDatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { SetQuoteTo_Bid } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n    FlexRowCont100PercentSpaceBetween, FlexRowContFlexStart,\r\n    LeftItemWindowFixed\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FlexColumnDivSpaceBetween } from \"../../../StylesheetComps/Div\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport {\r\n    RegularText\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst ConfirmBiddingDateWindow = ({\r\n  open,\r\n  onClose,\r\n  startdate,\r\n  leftbuttontext,\r\n  rightbuttontext,\r\n  leftbuttoncolor,\r\n  rightbuttoncolor,\r\n  left,\r\n  LeftFunction,\r\n  RightFunction,\r\n  width,\r\n  top,\r\n  quote\r\n}) => {\r\n\r\n    const [startDate, setStartDate] = useState(new Date());\r\n    const [reactDatePickerToggle, setReactDatePickerToggle] = useState(true);\r\n    const [windowText, setWindowText] = useState(\"\");\r\n    const [postButtonDisplay, setPostButtonDisplay] = useState(\"none\");\r\n\r\n    const params = useParams()\r\n    const history = useHistory()\r\n\r\n    const PostQuoteForBid = async (quote, startdate) => {\r\n        var selectedStartYear = startdate.getFullYear();\r\n        var selectedStartMonth = startdate.getMonth() + 1;\r\n        var selectedStartDate = startdate.getDate();\r\n    \r\n        var selectedDate =\r\n          selectedStartYear +\r\n          \"-\" +\r\n          selectedStartMonth +\r\n          \"-\" +\r\n          selectedStartDate +\r\n          \"T\" +\r\n          0 +\r\n          0 +\r\n          \":\" +\r\n          0 +\r\n          0;\r\n    \r\n        quote.DesiredInstallDate = selectedDate;\r\n        await SetQuoteTo_Bid(quote);\r\n        history.push(`/CasesPersonal/${params.metroId}/${params.storeId}`);\r\n      };\r\n\r\n      useEffect(() => {\r\n        if(moment(startDate).format('LL') !== moment(new Date).format('LL')){\r\n            setWindowText(`You've selected ${moment(startDate).format(\r\n                \"LL\"\r\n              )} as your preferred project start date. Post project for bid?`)\r\n            setPostButtonDisplay(`block`)\r\n        } else {\r\n            setWindowText(`Please select your preferred project install start date.`)\r\n            setPostButtonDisplay(`none`)\r\n        }\r\n      }, [startDate]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexRowContFlexStart>\r\n        <LeftItemWindowFixed left={left} top={top} width={`600px`} actualheight={`300px`}>\r\n          <FlexRowCont100PercentSpaceBetween alignitems={`baseline`} height={`100%`}>\r\n          <ReactDatePicker\r\n                open={reactDatePickerToggle}\r\n                placeholderText=\"Select Date\"\r\n                minDate={new Date()}\r\n                onSelect={(date) => {\r\n                  setStartDate(date);\r\n                }}\r\n              />\r\n\r\n            <FlexColumnDivSpaceBetween width=\"100%\">\r\n            <RegularText>{windowText}</RegularText>\r\n            <FlexRowCont100PercentSpaceBetween>\r\n            <RegularResponsiveButton\r\n              bgcolor={leftbuttoncolor}\r\n              onClick={LeftFunction}\r\n            >\r\n              {leftbuttontext}\r\n            </RegularResponsiveButton>{\" \"}\r\n            <RegularResponsiveButton\r\n            display={postButtonDisplay}\r\n              bgcolor={rightbuttoncolor}\r\n              onClick={()=>{PostQuoteForBid(quote, startDate)}}\r\n            >\r\n              {`Post Project for Bid`}\r\n            </RegularResponsiveButton>\r\n                </FlexRowCont100PercentSpaceBetween>  \r\n            </FlexColumnDivSpaceBetween>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n        </LeftItemWindowFixed>\r\n      </FlexRowContFlexStart>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nConfirmBiddingDateWindow.defaultProps = {\r\n  RightFunction: () => {},\r\n  LeftFunction: () => {},\r\n  rightbuttoncolor: ColorPalette.PrimaryButtonBlue,\r\n  leftbuttoncolor: ColorPalette.PrimaryButtonBlue,\r\n  left: \"40%\",\r\n  top: \"5%\",\r\n};\r\n\r\nexport default ConfirmBiddingDateWindow;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCaseById,\r\n  GetQuoteById\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { GetCurrentTime, SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport InstallerQuoteAppCard from \"../../comps/InstallerQuoteAppCard\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  DivWithDisplay,\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexContMobileColumn, FullWidthMobileCont100vw100vh\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { LeagueSpartanExtraLargeBold, SmallHeaderOpenSansBold } from \"../../StylesheetComps/Titles\";\r\n// Import of react-datepicker CSS\r\nimport moment from \"moment\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport ConfirmBiddingDateWindow from \"../../comps/Windows/ConfirmBiddingDateWindow\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { FlexColumnDiv } from \"../../StylesheetComps/Div\";\r\n\r\nconst QuoteAppointmentScreen = () => {\r\n  //=============================================================================\r\n  // Quote Appointment Screen - User redirected from PaySuccess on successful\r\n  // Stripe payment.\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // This page displays next available dates for Installers to take their Quotes\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  const [installerDates, setInstallerDates] = useState([]);\r\n\r\n  const [userMetroId, setUserMetroId] = useState(0);\r\n\r\n  const [caseStoreId, setCaseStoreId] = useState(0);\r\n\r\n  const [startDate, setStartDate] = useState(new Date());\r\n\r\n  const [confirmWindowOpen, setConfirmWindowOpen] = useState(false);\r\n  const [datePickerOpen, setDatePickerOpen] = useState(false);\r\n\r\n  const [Quote, setQuote] = useState();\r\n  const GetSessionInfo = async () => {\r\n    const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    setUserMetroId(userInfo.Metro_Id);\r\n  };\r\n\r\n  const GetCaseQuote = async (quoteid) => {\r\n    var data = await GetQuoteById(quoteid);\r\n    if (data !== null) {\r\n      setQuote(data.quote);\r\n      var casedata = await GetCaseById(data.quote.Case_Id);\r\n      if (casedata !== null) {\r\n        setCaseStoreId(casedata.Case.Store_Id);\r\n        GetInstallerEarliestTimes(casedata.Case.Store_Id);\r\n      }\r\n    }\r\n  };\r\n\r\n  const GetInstallerEarliestTimes = async (storeid) => {\r\n    const curtime = await GetCurrentTime();\r\n    let resp;\r\n    if (storeid === 0) {\r\n      resp = await axios.post(\r\n        `${window.$DBURL}appointment/quote/store/${caseStoreId}/installerdates`,\r\n        { Quote_Id: params.quoteId, CurTime: curtime }\r\n      );\r\n    } else {\r\n      resp = await axios.post(\r\n        `${window.$DBURL}appointment/quote/store/${storeid}/installerdates`,\r\n        { Quote_Id: params.quoteId, CurTime: curtime }\r\n      );\r\n    }\r\n    if (resp.status === 200 && resp.data && resp.data.installerdates) {\r\n      setInstallerDates(resp.data.installerdates);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetSessionInfo();\r\n    SetHeaderAuthorization();\r\n    GetCaseQuote(params.quoteId);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexContMobileColumn>\r\n      <FullWidthMobileCont100vw100vh>\r\n        <Menu> </Menu>\r\n      </FullWidthMobileCont100vw100vh>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu />\r\n        <FlexColumnFullWidth>\r\n          <LeagueSpartanExtraLargeBold>\r\n            Earliest Date Available For Installers\r\n          </LeagueSpartanExtraLargeBold>\r\n          <DivWithDisplay>\r\n            <DivWithDisplay width=\"50%\">\r\n              Please select the earliest date for a installer to complete your\r\n              project without interruption, or choose an earlier date to start\r\n              if you are ok with interruptions. Alternatively, you can put your\r\n              project up to receive bids from non-affiliated installers that may\r\n              start your project earlier with a little higher install charge.\r\n            </DivWithDisplay>\r\n            <FlexColumnDiv>\r\n              <ConfirmBiddingDateWindow\r\n                quote={Quote}\r\n                open={confirmWindowOpen}\r\n                width=\"400px\"\r\n                top=\"30%\"\r\n                left={`35%`}\r\n                leftbuttoncolor={ColorPalette.PrimaryRed}\r\n                leftbuttontext={`Cancel`}\r\n                LeftFunction={() => {\r\n                  setConfirmWindowOpen(false);\r\n                }}\r\n                rightbuttoncolor={ColorPalette.PrimaryButtonBlue}\r\n                rightbuttontext={`Confirm Date`}\r\n                startdate={`${moment(startDate).format(\r\n                  \"LL\"\r\n                )}`}\r\n              ></ConfirmBiddingDateWindow>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  setConfirmWindowOpen(true);\r\n                }}\r\n              >\r\n                Put Estimate up for Bid\r\n              </RegularResponsiveButton>\r\n            </FlexColumnDiv>\r\n          </DivWithDisplay>\r\n          <br></br>\r\n          <SmallHeaderOpenSansBold>Earliest Available Start Dates:</SmallHeaderOpenSansBold>\r\n          <br></br>\r\n          {installerDates.map((o, i) => (\r\n            <InstallerQuoteAppCard\r\n              metroId={userMetroId}\r\n              installerUserId={o.User_Id}\r\n              storeId={caseStoreId}\r\n              InstallerName={o.Name}\r\n              year={o.Date.substring(0, 4)}\r\n              month={o.Date.substring(5, 7)}\r\n              day={o.Date.substring(8, 10)}\r\n            ></InstallerQuoteAppCard>\r\n          ))}\r\n        </FlexColumnFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContMobileColumn>\r\n  );\r\n};\r\n\r\nQuoteAppointmentScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default QuoteAppointmentScreen;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport CaseCard from \"../../comps/CaseCard\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport DeleteConfirmWindow from \"../../comps/Windows/DeleteProduct\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexCont76PercentMobile,\r\n  FlexContMobileTopVH,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont80vwAutoHeight } from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport {\r\n  Div150pxMobile250px,\r\n  Div150pxMobileDisplayNone,\r\n  Div80px,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  LeagueFontSize100Percent,\r\n  LeagueSpartanLarge,\r\n  StyledHRPropColour,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst UserCasesScreen = () => {\r\n  //=============================================================================\r\n  // Users Cases Screen - Manager/Estimator can view all cases of a user\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n\r\n  const [cases, setCases] = useState([]);\r\n\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [caseId, setCaseId] = useState(0);\r\n\r\n  const [deleteCase, setDeleteCase] = useState(false);\r\n\r\n  const GetUserCases = async () => {\r\n    const resp = await axios.get(window.$DBURL + \"case/user/\" + params.userId);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        setCases(resp.data.Cases);\r\n      }\r\n    }\r\n\r\n    setRoleNum(JSON.parse(sessionStorage.getItem(\"userInfo\")).Role);\r\n  };\r\n\r\n  const HandleCaseDel = async (caseId) => {\r\n    const resp = await axios.delete(window.$DBURL + \"case/\" + caseId);\r\n    if (resp !== null) {\r\n    }\r\n    GetUserCases();\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetUserCases();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (\r\n    roleNum === UserRole.Admin ||\r\n    roleNum === UserRole.Manager ||\r\n    UserRole.Estimator\r\n  ) {\r\n    return (\r\n      <FlexContMobileTopVH>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n\r\n        <FlexColumnCont80vwAutoHeight>\r\n          <ActionMenu />\r\n          <RightViewFullWidth>\r\n            <LeagueSpartanLarge>\r\n              {params.userName + \"'s Cases\"}\r\n            </LeagueSpartanLarge>\r\n            <StyledHRPropColour\r\n              border={`0.5px solid ${ColorPalette.PrimaryGrey} `}\r\n            ></StyledHRPropColour>\r\n            <FlexCont76PercentMobile hoverbg=\"white\">\r\n              <Div80px>\r\n                <LeagueFontSize100Percent>Index</LeagueFontSize100Percent>\r\n              </Div80px>\r\n              <Div150pxMobile250px>\r\n                <LeagueFontSize100Percent>Case Number</LeagueFontSize100Percent>\r\n              </Div150pxMobile250px>\r\n              <Div150pxMobile250px>\r\n                <LeagueFontSize100Percent>Homeowner</LeagueFontSize100Percent>\r\n              </Div150pxMobile250px>\r\n              <Div150pxMobileDisplayNone>\r\n                <LeagueFontSize100Percent>\r\n                  Submitted Time\r\n                </LeagueFontSize100Percent>\r\n              </Div150pxMobileDisplayNone>\r\n              <Div150pxMobile250px>\r\n                <LeagueFontSize100Percent>Estimator</LeagueFontSize100Percent>\r\n              </Div150pxMobile250px>\r\n              <Div150pxMobile250px>\r\n                <LeagueFontSize100Percent>Status</LeagueFontSize100Percent>\r\n              </Div150pxMobile250px>\r\n              <Div150pxMobile250px>\r\n                <LeagueFontSize100Percent>Delete</LeagueFontSize100Percent>\r\n              </Div150pxMobile250px>\r\n            </FlexCont76PercentMobile>\r\n            {cases.map((o, i) => (\r\n              <div>\r\n                <DeleteConfirmWindow\r\n                  deleteOpen={deleteCase}\r\n                  onDeleteFunction={() => {\r\n                    HandleCaseDel(caseId);\r\n                  }}\r\n                  closeDel={() => {\r\n                    setDeleteCase(false);\r\n                  }}\r\n                ></DeleteConfirmWindow>\r\n                <CaseCard\r\n                  index={cases.length - i - 1}\r\n                  key={i}\r\n                  Status={o.CaseStatus}\r\n                  EstimatorName={o.Estimator}\r\n                  CaseId={o.Id}\r\n                  ClientName={o.Name}\r\n                  CaseNumber={\"#\" + o.CaseNumber}\r\n                  DateText={o.CreateTime}\r\n                  onDel={() => {\r\n                    setCaseId(o.Id);\r\n                    setDeleteCase(true);\r\n                  }}\r\n                ></CaseCard>\r\n              </div>\r\n            ))}\r\n          </RightViewFullWidth>\r\n        </FlexColumnCont80vwAutoHeight>\r\n      </FlexContMobileTopVH>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nUserCasesScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default UserCasesScreen;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  AddToolKit,\r\n  GetToolKitObject,\r\n} from \"../../../API_Functions/Tool_Functions\";\r\nimport { UploadFileToCloud } from \"../../../API_Functions/Utility_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  ContMargin20px,\r\n  FlexDiv,\r\n  FlexRowCont,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FlexDivCenter } from \"../../../StylesheetComps/Div\";\r\nimport { Image200x200pxContain } from \"../../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  TextAreaLarge,\r\n  TextInputReusable,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Icon30px30pxPointer } from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanExtraLargeWidth200px,\r\n  RegularTextBoldRed,\r\n  StyledHRPropColour,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst ToolKitAdd = ({ open, onClose, RefreshToolKitList, ToolKitPosProp }) => {\r\n  const params = useParams();\r\n  const [toolkitObj, setToolkitObj] = useState({});\r\n  const [ToolKitPos] = useState(ToolKitPosProp);\r\n  const [errorText] = useState(\"\");\r\n  const [ToolKitImgDisplay, setToolKitImgDisplay] = useState(\"\");\r\n  const [photoDisplay, setPhotoDisplay] = useState(\"none\");\r\n  const hiddenFileInput = React.useRef(null);\r\n\r\n  var file = \"\";\r\n\r\n  function handleUpload(event) {\r\n    file = event.target.files[0];\r\n    UploadFile(file);\r\n  }\r\n\r\n  const UploadFile = async (file) => {\r\n    var pic = await UploadFileToCloud(file);\r\n    if (pic !== null) {\r\n      setToolKitImgDisplay(pic);\r\n      toolkitObj.ImageUrl = pic;\r\n      setPhotoDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const GetToolKitStructure = async () => {\r\n    var data = await GetToolKitObject();\r\n    setToolkitObj(data);\r\n  };\r\n\r\n  const AddNewToolKit = async (toolkitobj) => {\r\n    var data = await AddToolKit(toolkitobj);\r\n    if (data !== null) {\r\n      RefreshToolKitList();\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetToolKitStructure();\r\n  }, []);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      {\" \"}\r\n      <ContMargin20px>\r\n        <LeftItemWindowFixed width=\"100px\">\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              ToolKit Name\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInputReusable\r\n              placeholder=\"ToolKit Name\"\r\n              onChange={(e) => {\r\n                var toolkit = toolkitObj;\r\n                toolkit.Name = e.target.value;\r\n                setToolkitObj(toolkit);\r\n              }}\r\n            ></TextInputReusable>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              Code\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInputReusable\r\n              placeholder=\"ToolKit Code\"\r\n              onChange={(e) => {\r\n                var toolkit = toolkitObj;\r\n                toolkit.Code = e.target.value;\r\n                setToolkitObj(toolkit);\r\n              }}\r\n            ></TextInputReusable>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              Position\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextInputReusable\r\n              placeholder=\"Position\"\r\n              value={ToolKitPos}\r\n              onChange={(e) => {\r\n                var toolkit = toolkitObj;\r\n                toolkit.Position = e.target.value;\r\n                setToolkitObj(toolkit);\r\n              }}\r\n            ></TextInputReusable>\r\n          </FlexDiv>\r\n          <FlexDiv>\r\n            <LeagueSpartanExtraLargeWidth200px>\r\n              ToolKit Description\r\n            </LeagueSpartanExtraLargeWidth200px>\r\n            <TextAreaLarge\r\n              maxlength=\"100\"\r\n              onChange={(e) => {\r\n                var toolkit = toolkitObj;\r\n                toolkit.Description = e.target.value;\r\n                setToolkitObj(toolkit);\r\n              }}\r\n            ></TextAreaLarge>\r\n          </FlexDiv>\r\n          <LeagueSpartanExtraLargeWidth200px>\r\n            ToolKit Picture\r\n          </LeagueSpartanExtraLargeWidth200px>\r\n          <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n          <FlexRowCont>\r\n            <Image200x200pxContain\r\n              display={photoDisplay}\r\n              src={window.$IMGURL + ToolKitImgDisplay}\r\n            ></Image200x200pxContain>\r\n            <Icon30px30pxPointer\r\n              display={photoDisplay}\r\n              src=\"/Garbage_Icon.svg\"\r\n              onClick={() => {\r\n                toolkitObj.ImageUrl = \"\";\r\n                setToolKitImgDisplay(\"\");\r\n                setPhotoDisplay(\"none\");\r\n              }}\r\n            ></Icon30px30pxPointer>\r\n          </FlexRowCont>\r\n          <TextInputReusable\r\n            type=\"file\"\r\n            id=\"ToolKitpic\"\r\n            ref={hiddenFileInput}\r\n            name=\"filename\"\r\n            onChange={handleUpload}\r\n          ></TextInputReusable>\r\n          <StyledHRPropColour\r\n            border={`0.5px solid white`}\r\n            width=\"70%\"\r\n          ></StyledHRPropColour>\r\n          <FlexDivCenter>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                toolkitObj.Store_Id = params.Id;\r\n                AddNewToolKit(toolkitObj);\r\n                setToolKitImgDisplay(\"\");\r\n                setPhotoDisplay(\"none\");\r\n                onClose();\r\n              }}\r\n            >\r\n              Save\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                onClose();\r\n                setToolKitImgDisplay(\"\");\r\n                setPhotoDisplay(\"none\");\r\n              }}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n          </FlexDivCenter>\r\n          <StyledHRPropColour\r\n            border={`0.5px solid white`}\r\n            width=\"70%\"\r\n          ></StyledHRPropColour>{\" \"}\r\n        </LeftItemWindowFixed>\r\n      </ContMargin20px>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nToolKitAdd.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onToolKitAdd: () => {},\r\n  onSetFile: () => {},\r\n  onReleaseFile: () => {},\r\n  ToolKitPosProp: 0,\r\n};\r\n\r\nexport default ToolKitAdd;\r\n","import axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { UpdateToolKit } from \"../../../API_Functions/Tool_Functions\";\r\nimport { UploadFileToCloud } from \"../../../API_Functions/Utility_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont500x850px,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FlexDivCenter } from \"../../../StylesheetComps/Div\";\r\nimport { Image200x200pxContain } from \"../../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  TextAreaLarge,\r\n  TextInputReusable,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Icon30px20pxPointer } from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanRegularMinWidth,\r\n  RegularTextBoldRed,\r\n  StyledHRPropColour,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst ToolKitEdit = ({ open, onClose, RefreshToolkitList, toolkitobj }) => {\r\n  const [ToolKitDefaultUrl, setToolKitDefaultUrl] = useState(\r\n    toolkitobj?.ImageUrl\r\n  );\r\n  const [photoDisplay, setPhotoDisplay] = useState(\"block\");\r\n  const [errorText] = useState(\"\");\r\n  var file = \"\";\r\n\r\n  function handleUpload(event) {\r\n    file = event.target.files[0];\r\n    UploadFile(file);\r\n  }\r\n\r\n  const UploadFile = async (file) => {\r\n    var pic = await UploadFileToCloud(file);\r\n    if (pic !== null) {\r\n      setToolKitDefaultUrl(pic);\r\n      toolkitobj.ImageUrl = pic;\r\n      setPhotoDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const DeleteImg = async (img) => {\r\n    var resp = await axios.delete(window.$DBURL + \"utilities/image\", {\r\n      data: { Url: img },\r\n    });\r\n    if (resp.status === 200) {\r\n      toolkitobj.ImageUrl = \"\";\r\n      setToolKitDefaultUrl(\"\");\r\n    }\r\n  };\r\n\r\n  const UpdateToolKitFunction = async (toolkitobj) => {\r\n    var data = await UpdateToolKit(toolkitobj);\r\n    if (data !== null) {\r\n      RefreshToolkitList();\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (file) {\r\n      const reader = new FileReader();\r\n      reader.onloadend = () => {};\r\n      reader.readAsDataURL(file);\r\n    }\r\n  }, [file]);\r\n\r\n  useEffect(() => {\r\n    setToolKitDefaultUrl(toolkitobj?.ImageUrl);\r\n  }, [toolkitobj?.ImageUrl]);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      {\" \"}\r\n      <Cont500x850px>\r\n        <LeftItemWindowFixed width=\"100px\">\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <LeagueSpartanRegularMinWidth>\r\n              ToolKit Name\r\n            </LeagueSpartanRegularMinWidth>\r\n            <TextInputReusable\r\n              key={toolkitobj.Name}\r\n              placeholder=\"ToolKit Name\"\r\n              defaultValue={toolkitobj.Name}\r\n              onChange={(e) => {\r\n                toolkitobj.Name = e.target.value;\r\n              }}\r\n            ></TextInputReusable>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n          <hr></hr>\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <LeagueSpartanRegularMinWidth>Code</LeagueSpartanRegularMinWidth>\r\n            <TextInputReusable\r\n              key={toolkitobj.Code}\r\n              placeholder=\"ToolKit Code\"\r\n              defaultValue={toolkitobj.Code}\r\n              onChange={(e) => {\r\n                toolkitobj.Code = e.target.value;\r\n              }}\r\n            ></TextInputReusable>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n          <hr></hr>\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <LeagueSpartanRegularMinWidth>\r\n              Position\r\n            </LeagueSpartanRegularMinWidth>\r\n            <TextInputReusable\r\n              key={toolkitobj.Position}\r\n              placeholder=\"Position\"\r\n              defaultValue={toolkitobj.Position}\r\n              onChange={(e) => {\r\n                toolkitobj.Position = e.target.value;\r\n              }}\r\n            ></TextInputReusable>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n\r\n          <hr></hr>\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <LeagueSpartanRegularMinWidth>\r\n              ToolKit Description\r\n            </LeagueSpartanRegularMinWidth>\r\n            <TextAreaLarge\r\n              maxlength=\"100\"\r\n              onChange={(e) => {\r\n                toolkitobj.Description = e.target.value;\r\n              }}\r\n              defaultValue={toolkitobj.Description}\r\n            ></TextAreaLarge>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n          <hr></hr>\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <LeagueSpartanRegularMinWidth>\r\n              ToolKit Picture\r\n            </LeagueSpartanRegularMinWidth>\r\n            <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n            <FlexRowCont100PercentSpaceBetween>\r\n              <Image200x200pxContain\r\n                display={photoDisplay}\r\n                src={window.$IMGURL + ToolKitDefaultUrl}\r\n              ></Image200x200pxContain>\r\n              <Icon30px20pxPointer\r\n                display={photoDisplay}\r\n                src=\"/Garbage_Icon.svg\"\r\n                onClick={() => {\r\n                  DeleteImg(ToolKitDefaultUrl);\r\n                  setToolKitDefaultUrl(\"\");\r\n                  setPhotoDisplay(\"none\");\r\n                }}\r\n              ></Icon30px20pxPointer>\r\n            </FlexRowCont100PercentSpaceBetween>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n          <TextInputReusable\r\n            type=\"file\"\r\n            id=\"ToolKitpic\"\r\n            name=\"filename\"\r\n            onChange={handleUpload}\r\n          ></TextInputReusable>\r\n          <StyledHRPropColour\r\n            border={`0.5px solid white`}\r\n            width=\"70%\"\r\n          ></StyledHRPropColour>\r\n          <FlexDivCenter>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                UpdateToolKitFunction(toolkitobj);\r\n                onClose();\r\n                setPhotoDisplay(\"block\");\r\n              }}\r\n            >\r\n              Save\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                onClose();\r\n                setPhotoDisplay(\"block\");\r\n              }}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n          </FlexDivCenter>\r\n          <StyledHRPropColour\r\n            border={`0.5px solid white`}\r\n            width=\"70%\"\r\n          ></StyledHRPropColour>\r\n        </LeftItemWindowFixed>\r\n      </Cont500x850px>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nToolKitEdit.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onToolKitEdit: () => {},\r\n  onImgDelete: () => {},\r\n  ToolKitName: \"ToolKit Name\",\r\n  ToolKitCode: \"Default Code\",\r\n  ToolKitDesc: \"\",\r\n  RadioSelect: 0,\r\n  ToolKitUrl: \"\",\r\n  ToolKitPosProp: 0,\r\n};\r\n\r\nexport default ToolKitEdit;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ToolkitCard from \"../../comps/ToolkitCard\";\r\nimport DeleteConfirmWindow from \"../../comps/Windows/DeleteProduct\";\r\nimport ToolKitAdd from \"../../comps/Windows/ToolKitAdd\";\r\nimport ToolKitEdit from \"../../comps/Windows/ToolKitEdit\";\r\n//Functions Import\r\n\r\nimport {\r\n  DeleteToolKit,\r\n  GetStoreToolKits,\r\n  GetToolKit,\r\n} from \"../../API_Functions/Tool_Functions\";\r\n\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  Div70PerWidth7PerHeight,\r\n  DivWithDisplay,\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnFullWidth,\r\n  FlexCont100vw100vh,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { FlexDiv40Percent, FlexDiv80Percent } from \"../../StylesheetComps/Div\";\r\nimport { SmallHeaderLeagueSpartan, TextInput100Percent, TextInput72Percent, TextInputRegular, TextInputReusable } from \"../../StylesheetComps/LandscapeForm\";\r\nimport { Icon30px20pxPointer, Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { InputField } from \"../../StylesheetComps/Inputs\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { GetStoreTools } from \"../../API_Functions/CatProduct_Functions\";\r\nimport ToolCard from \"../../comps/ToolCard\";\r\nimport { StyledHRGreyBreak } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ToolKitScreen = () => {\r\n  //=============================================================================\r\n  // ToolKit Screen - View ToolKits (Essentially Categories for Tools)\r\n  //=============================================================================\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n  const [storeToolKits, getStoreToolKits] = useState([]);\r\n  const [toolkitObj, setToolkitObj] = useState({});\r\n  const [deleteToolkitId, setDeleteToolkitId] = useState(0);\r\n\r\n  const [isNewToolKitOpen, setIsNewToolKitOpen] = useState(false);\r\n  const [isEditToolKitOpen, setIsEditToolKitOpen] = useState(false);\r\n  const [isDeleteToolKitOpen, setIsDeleteToolKitOpen] = useState(false);\r\n\r\n  //Search Features: \r\n  const [storeTools, setStoreTools] = useState([]);\r\n  const [unfilteredTools, setUnfilteredTools] = useState([]);\r\n\r\n  const HandleDeleteKit = async (id) => {\r\n    var data = await DeleteToolKit(id);\r\n    if (data === null) {\r\n      GetStoreToolKitsMap(params.Id);\r\n    }\r\n  };\r\n\r\n  // const FilterTools = (toollist, text) => {\r\n  //   if (text === \"\") {\r\n  //     setStoreTools([]);\r\n  //   } else {\r\n  //     setStoreTools(\r\n  //       toollist.filter((o) => {\r\n  //         return o.Name.toLowerCase().includes(text.toLowerCase());\r\n  //       })\r\n  //     );\r\n  //   }\r\n  // };\r\n\r\n  const FilterTools = (toollist, text) => {\r\n    if (text === \"\") {\r\n      setStoreTools([]);\r\n    } else {\r\n      // Split the search text into words and convert them to lowercase\r\n      const searchTextWords = text.toLowerCase().split(\" \");\r\n  \r\n      // Filter the tool list\r\n      const filteredTools = toollist.filter(tool => {\r\n        // Convert the tool's name to lowercase\r\n        const toolNameLower = tool.Name.toLowerCase();\r\n  \r\n        // Check if every word from the search text is included in the tool's name\r\n        return searchTextWords.every(searchWord => toolNameLower.includes(searchWord));\r\n      });\r\n  \r\n      // Update the store with the filtered tools\r\n      setStoreTools(filteredTools);\r\n    }\r\n  };\r\n  \r\n\r\n  const GetStoreToolsFunc = async (storeid) => {\r\n    try {\r\n      const resp = await GetStoreTools(storeid)\r\n      if(resp.data !== null){\r\n        setUnfilteredTools(resp.tools)\r\n      }\r\n    } catch (error) {\r\n      setStoreTools([])\r\n      setUnfilteredTools([])\r\n      window.alert(`Trouble receiving Tool Information: ${error.message}`)\r\n    }\r\n  }\r\n\r\n  const GetStoreToolKitsMap = async (id) => {\r\n    var data = await GetStoreToolKits(id);\r\n    if (data == null) return;\r\n    getStoreToolKits(data.toolkit);\r\n  };\r\n\r\n  const GetToolKitInfo = async (id) => {\r\n    var data = await GetToolKit(id);\r\n    if (data == null) return;\r\n    setToolkitObj(data);\r\n    setIsEditToolKitOpen(true);\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetStoreToolKitsMap(params.Id);\r\n    GetStoreToolsFunc(params.Id)\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <DivWithDisplay flexdirection='row'>\r\n      <LeftCont>\r\n      <Menu onReset={() => {\r\n            setIsNewToolKitOpen(false);\r\n            setIsEditToolKitOpen(false);\r\n          }}></Menu>\r\n        </LeftCont>\r\n\r\n<FlexColumnFullWidth height='100vh'>\r\n<ToolKitAdd\r\n            ToolKitPosProp={storeToolKits.length + 1}\r\n            open={isNewToolKitOpen}\r\n            onClose={() => {\r\n              setIsNewToolKitOpen(false);\r\n            }}\r\n            RefreshToolKitList={() => {\r\n              GetStoreToolKitsMap(params.Id);\r\n            }}\r\n          ></ToolKitAdd>\r\n          <ToolKitEdit\r\n            open={isEditToolKitOpen}\r\n            onClose={() => {\r\n              setIsEditToolKitOpen(false);\r\n            }}\r\n            RefreshToolkitList={() => {\r\n              GetStoreToolKitsMap(params.Id);\r\n            }}\r\n            toolkitobj={toolkitObj}\r\n          ></ToolKitEdit>\r\n    <DivWithDisplay width='100%'>\r\n      <DivWithDisplay>\r\n        <DivWithDisplay alignitems='left' flexdirection='row'>\r\n          <Icon30px30pxPointer\r\n          margin='10px'\r\n          src='/backarrow.svg'\r\n          onClick={() => {\r\n            history.push(\"/Store/\" + params.Id);\r\n          }}\r\n          >\r\n            </Icon30px30pxPointer>\r\n            <SmallHeaderLeagueSpartan width='auto'>\r\n              Tool Kits\r\n              </SmallHeaderLeagueSpartan>\r\n              <RegularResponsiveButton\r\n              margin='8px'\r\n              onClick={() => {\r\n                setIsNewToolKitOpen(true);\r\n              }}\r\n            >\r\n              Add Toolkit\r\n            </RegularResponsiveButton>\r\n            </DivWithDisplay>\r\n            <DivWithDisplay flexdirection='row'>\r\n            <InputField \r\n            placeholder=\"Search for a Tool\"\r\n            inputwidth=\"70%\"\r\n            inputheight=\"25%\"\r\n            inputborderadius=\"10px\"\r\n            onChange={(e) => {\r\n              FilterTools(unfilteredTools, e.target.value);\r\n            }}\r\n          ></InputField>\r\n  </DivWithDisplay>\r\n  <StyledHRGreyBreak></StyledHRGreyBreak>\r\n  <DeleteConfirmWindow\r\n            deleteOpen={isDeleteToolKitOpen}\r\n            closeDel={() => {\r\n              setIsDeleteToolKitOpen(false);\r\n            }}\r\n            onDeleteFunction={() => {\r\n              HandleDeleteKit(deleteToolkitId);\r\n            }}\r\n          ></DeleteConfirmWindow>\r\n                 {storeToolKits.map((o, i) => (\r\n              <ToolkitCard\r\n                kitId={o.Id}\r\n                key={i}\r\n                KitHeadText={o.Name}\r\n                KitUrl={o.ImageUrl === \"\" ? \"\" : window.$IMGURL + o.ImageUrl}\r\n                DelKit={() => {\r\n                  setDeleteToolkitId(o.Id);\r\n                  setIsDeleteToolKitOpen(true);\r\n                }}\r\n                EditKit={() => {\r\n                  GetToolKitInfo(o.Id);\r\n                }}\r\n              ></ToolkitCard>\r\n            ))}\r\n            </DivWithDisplay>\r\n            </DivWithDisplay>\r\n\r\n  </FlexColumnFullWidth>\r\n\r\n</DivWithDisplay>\r\n\r\n    // <FlexCont100vw100vh>\r\n    //   <LeftCont>\r\n    //     <Menu\r\n    //       onReset={() => {\r\n    //         setIsNewToolKitOpen(false);\r\n    //         setIsEditToolKitOpen(false);\r\n    //       }}\r\n    //     >\r\n    //       {\" \"}\r\n    //     </Menu>\r\n    //   </LeftCont>\r\n\r\n    //   <FlexColumnCont80vwAutoHeight>\r\n    //     <ActionMenu />\r\n    //     <RightViewFullWidth>\r\n    //       <ToolKitAdd\r\n    //         ToolKitPosProp={storeToolKits.length + 1}\r\n    //         open={isNewToolKitOpen}\r\n    //         onClose={() => {\r\n    //           setIsNewToolKitOpen(false);\r\n    //         }}\r\n    //         RefreshToolKitList={() => {\r\n    //           GetStoreToolKitsMap(params.Id);\r\n    //         }}\r\n    //       ></ToolKitAdd>\r\n    //       <ToolKitEdit\r\n    //         open={isEditToolKitOpen}\r\n    //         onClose={() => {\r\n    //           setIsEditToolKitOpen(false);\r\n    //         }}\r\n    //         RefreshToolkitList={() => {\r\n    //           GetStoreToolKitsMap(params.Id);\r\n    //         }}\r\n    //         toolkitobj={toolkitObj}\r\n    //       ></ToolKitEdit>\r\n    //       <Div70PerWidth7PerHeight>\r\n    //         <Icon30px20pxPointer\r\n    //           src=\"/backarrow.svg\"\r\n    //           onClick={() => {\r\n    //             history.push(\"/Store/\" + params.Id);\r\n    //           }}\r\n    //         ></Icon30px20pxPointer>\r\n    //         <SmallHeaderLeagueSpartan width=\"20%\">\r\n    //           Toolkits\r\n    //         </SmallHeaderLeagueSpartan>\r\n    //         <RegularResponsiveButton\r\n    //           onClick={() => {\r\n    //             setIsNewToolKitOpen(true);\r\n    //           }}\r\n    //         >\r\n    //           Add Toolkit\r\n    //         </RegularResponsiveButton>\r\n    //       </Div70PerWidth7PerHeight>\r\n    //       <DeleteConfirmWindow\r\n    //         deleteOpen={isDeleteToolKitOpen}\r\n    //         closeDel={() => {\r\n    //           setIsDeleteToolKitOpen(false);\r\n    //         }}\r\n    //         onDeleteFunction={() => {\r\n    //           HandleDeleteKit(deleteToolkitId);\r\n    //         }}\r\n    //       ></DeleteConfirmWindow>\r\n    //       <FlexDiv80Percent>\r\n    //       <InputField placeholder=\"Search for a Tool\"\r\n    //       onChange={(e) => {\r\n    //         FilterTools(unfilteredTools, e.target.value);\r\n    //       }}\r\n    //       ></InputField>\r\n    //      {storeTools.map((o, i) => (\r\n    //           <ToolCard\r\n    //             key={i}\r\n    //             relToolProd={() => {\r\n    //               var toolKitName = storeToolKits.find(toolKit => toolKit.Id === o.ToolKit_Id)?.Name;\r\n    //               history.push(\r\n    //                 \"/toollist/\" + params.Id + \"/\" + o.ToolKit_Id + '/' + toolKitName\r\n    //               );\r\n    //             }}\r\n    //             ToolID={o.Id}\r\n    //             ToolHeadText={o.Name}\r\n    //             ToolUrl={o.VideoUrl}\r\n    //             onView={() => {\r\n    //               var toolKitName = storeToolKits.find(toolKit => toolKit.Id === o.ToolKit_Id)?.Name;\r\n    //               history.push(\r\n    //                 \"/toollist/\" + params.Id + \"/\" + o.ToolKit_Id + '/' + toolKitName\r\n    //               );\r\n    //             }}\r\n    //           ></ToolCard>\r\n    //         ))}\r\n    //       <br></br>\r\n    //         {storeToolKits.map((o, i) => (\r\n    //           <ToolkitCard\r\n    //             kitId={o.Id}\r\n    //             key={i}\r\n    //             KitHeadText={o.Name}\r\n    //             KitUrl={o.ImageUrl === \"\" ? \"\" : window.$IMGURL + o.ImageUrl}\r\n    //             DelKit={() => {\r\n    //               setDeleteToolkitId(o.Id);\r\n    //               setIsDeleteToolKitOpen(true);\r\n    //             }}\r\n    //             EditKit={() => {\r\n    //               GetToolKitInfo(o.Id);\r\n    //             }}\r\n    //           ></ToolkitCard>\r\n    //         ))}\r\n    //       </FlexDiv80Percent>\r\n    //     </RightViewFullWidth>\r\n    //   </FlexColumnCont80vwAutoHeight>\r\n    // </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nToolKitScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  MetroName: \"EXAMPLE Toronto\",\r\n};\r\n\r\nexport default ToolKitScreen;\r\n","/* eslint-disable */\r\n\r\nimport axios from \"axios\";\r\nimport React, { useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { GetUserCases } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { AddStaffToStore, GetStoreByMetro } from \"../../../API_Functions/Store_Functions\";\r\nimport {\r\n  GetCityList,\r\n  GetMetroList,\r\n} from \"../../../API_Functions/Utility_Functions\";\r\nimport { MobileWideGreenButton } from \"../../../MobileComponents/Buttons\";\r\nimport { Div100vw20vh } from \"../../../MobileComponents/Divs\";\r\nimport { LogoRelative, TopImage20vh } from \"../../../MobileComponents/Images\";\r\nimport { UnderlinedBoldTitle16px } from \"../../../MobileComponents/Text\";\r\nimport {\r\n  AuthCont,\r\n  BodyPara,\r\n  Header,\r\n  LeftAuthCont,\r\n  LeftItemsCont,\r\n  LinkText,\r\n  Logo,\r\n  MediumGreenButton,\r\n  MediumWhiteButton,\r\n  PrivacyPolicy,\r\n  RedirectDiv,\r\n  RightAuthCont,\r\n  RightBarDiv,\r\n  RightItemsCont,\r\n  TextInput300x50,\r\n} from \"../../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { FlexRowCont100PercentFlexEnd } from \"../../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../../StylesheetComps/Menu\";\r\nimport { StyledHRPropColour } from \"../../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../../StylesheetComps/UserRoles\";\r\n\r\nconst LoginPage = () => {\r\n  const history = useHistory();\r\n\r\n  const [loginForm, setLoginForm] = useState(true);\r\n  const [twofactor, setTwoFactor] = useState(false);\r\n  const [showMetroSelection, setShowMetroSelection] = useState(false);\r\n  const [forgotPassword, setForgotPassword] = useState(false);\r\n\r\n  const [selectedMetroId, setSelectedMetroId] = useState(0);\r\n  const [selectedMetroName, setSelectedMetroName] = useState(\"\");\r\n  const [selectedCityId, setSelectedCityId] = useState(0);\r\n  const [selectedCityName, setSelectedCityName] = useState(\"\");\r\n\r\n  const [userId, setUserId] = useState(0);\r\n  const [username, setUsername] = useState(0);\r\n\r\n  const [metroList, setMetroList] = useState([]);\r\n  const [cityList, setCityList] = useState([]);\r\n\r\n  const [flexHeight, setFlexHeight] = useState(\"60%\");\r\n\r\n  const [metroSelectionText, setShowMetroSelectionText] = useState(\r\n    \"Make sure you are in our service area by selecting one of the areas below.\"\r\n  );\r\n\r\n  const [forgotPasswordText, setForgotPasswordText] = useState(\r\n    \"Enter your username and send password. Check your email for a temporary password. Log in using the temporary password. Update your password on your profile page.\"\r\n  );\r\n\r\n  const [forgotPasswordButtonText, setForgotPasswordButtonText] =\r\n    useState(\"Send Password\");\r\n\r\n  const [metroSelectionButtonDisplay, setShowMetroSelectionButtonDisplay] =\r\n    useState(\"none\");\r\n\r\n  const [un, setUn] = useState(\"\");\r\n  const [pass, setPass] = useState(\"\");\r\n  const [enteredCode, setEnteredCode] = useState(\"\");\r\n  const [actualCode, setActualCode] = useState(\"\");\r\n  const [errorMessage, setErrorMessage] = useState(\"\");\r\n\r\n  const [forgotPasswordEmail, setForgotPasswordEmail] = useState(\"\");\r\n\r\n  const GetVerifyCodeFunction = async (username, password) => {\r\n    const resp = await axios\r\n      .post(window.$DBURL + \"users/verify\", {\r\n        Username: username,\r\n        Password: password,\r\n      })\r\n      .catch(handleErrors);\r\n    if (resp !== undefined) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.code !== null) {\r\n          setErrorMessage(\"\");\r\n          setActualCode(resp.data.code);\r\n          setTwoFactor(true);\r\n          setLoginForm(false);\r\n          setShowMetroSelection(false);\r\n          setForgotPassword(false);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  // const LoginFunction = async (enteredCode, actualCode, username, password) => {\r\n  //   if (enteredCode.length !== 6) {\r\n  //     setErrorMessage(\"Entered Code is not 6 characters\");\r\n  //   } else if (enteredCode === actualCode) {\r\n  //     const resp = await axios.post(window.$DBURL + \"users/session/login\", {\r\n  //       Username: username,\r\n  //       Password: password,\r\n  //     });\r\n  //     if (resp.status === 200) {\r\n  //       const token = resp.data.Session.AuthToken;\r\n  //       axios.defaults.baseURL = window.$DBURL;\r\n  //       sessionStorage.setItem(\"token\", token);\r\n  //       axios.defaults.headers.common[\"Authorization\"] = \"Basic \" + token;\r\n  //       if (resp.data !== null) {\r\n  //         if (resp.data.User !== null) {\r\n  //           if (resp.data.User.Metro_Id === 0 || resp.data.User.City_Id === 0) {\r\n  //             sessionStorage.setItem(\r\n  //               \"userInfo\",\r\n  //               JSON.stringify(resp.data.User)\r\n  //             );\r\n  //             var metros = await GetMetroList();\r\n  //             if (metros !== null) {\r\n  //               setMetroList(metros);\r\n  //               setUserId(resp.data.User.Id);\r\n  //               setUsername(resp.data.User.Username);\r\n  //               setShowMetroSelection(true);\r\n  //               setTwoFactor(false);\r\n  //               setLoginForm(false);\r\n  //               setForgotPassword(false);\r\n  //             }\r\n  //           } else {\r\n  //             sessionStorage.setItem(\r\n  //               \"userInfo\",\r\n  //               JSON.stringify(resp.data.User)\r\n  //             );\r\n  //             setEnteredCode(\"\");\r\n  //             var data = await GetUserCases(\r\n  //               JSON.parse(sessionStorage.getItem(\"userInfo\")).Id\r\n  //             );\r\n\r\n  //             if (data !== null) {\r\n  //               if (data.Cases.length > 0 || window.$ISMOBILE === true) {\r\n  //                 history.push(\"/home\");\r\n  //               } else {\r\n  //                 history.push(\"/home\");\r\n  //               }\r\n  //             }\r\n  //           }\r\n  //         }\r\n  //       }\r\n  //     }\r\n  //   }\r\n  // };\r\n\r\n  const LoginFunction = async (enteredCode, actualCode, username, password) => {\r\n    // Validate entered code\r\n    if (!isValidCode(enteredCode, actualCode)) return;\r\n\r\n    // Authenticate user\r\n    const resp = await loginUser(username, password);\r\n    if (!resp || resp.status !== 200) return;\r\n\r\n    // Set session and global configurations\r\n    const user = resp.data.User;\r\n    configureSession(resp.data.Session.AuthToken, user);\r\n\r\n    // Navigate based on user data\r\n    await navigateUser(user);\r\n};\r\n\r\nconst isValidCode = (enteredCode, actualCode) => {\r\n    if (enteredCode.length !== 6) {\r\n        setErrorMessage(\"Entered Code is not 6 characters\");\r\n        return false;\r\n    }\r\n\r\n    if (enteredCode !== actualCode) {\r\n        setErrorMessage(\"Incorrect code entered\");\r\n        return false;\r\n    }\r\n\r\n    return true;\r\n};\r\n\r\nconst loginUser = async (username, password) => {\r\n    try {\r\n        return await axios.post(window.$DBURL + \"users/session/login\", {\r\n            Username: username,\r\n            Password: password,\r\n        });\r\n    } catch (error) {\r\n        // Handle the error (e.g. set error message)\r\n        console.error('Login failed:', error);\r\n        return null;\r\n    }\r\n};\r\n\r\nconst configureSession = (token, user) => {\r\n    axios.defaults.baseURL = window.$DBURL;\r\n    sessionStorage.setItem(\"token\", token);\r\n    axios.defaults.headers.common[\"Authorization\"] = \"Basic \" + token;\r\n\r\n    if (user) {\r\n        sessionStorage.setItem(\"userInfo\", JSON.stringify(user));\r\n    }\r\n};\r\n\r\nconst navigateUser = async (user) => {\r\n    if (!user) return;\r\n\r\n    if (user.Metro_Id === 0 || user.City_Id === 0) {\r\n        const metros = await GetMetroList();\r\n        if (!metros) return;\r\n\r\n        setMetroList(metros);\r\n        setUserId(user.Id);\r\n        setUsername(user.Username);\r\n        setShowMetroSelection(true);\r\n        setTwoFactor(false);\r\n        setLoginForm(false);\r\n        setForgotPassword(false);\r\n    } else {\r\n        const data = await GetUserCases(JSON.parse(sessionStorage.getItem(\"userInfo\")).Id);\r\n\r\n        // If the user has cases or if on mobile, navigate to home\r\n        if (data !== null) {\r\n            history.push(\"/home\");\r\n        }\r\n    }\r\n};\r\n\r\nconst Login = async (username, password) => {\r\n  const resp = await attemptLogin(username, password);\r\n  if (!resp || resp.status !== 200) return;\r\n\r\n  setupSession(resp.data.Session.AuthToken);\r\n  \r\n  const user = resp.data.User;\r\n  if (!user) return;\r\n\r\n  sessionStorage.setItem(\"userInfo\", JSON.stringify(user));\r\n\r\n  await processUserData(user);\r\n};\r\n\r\nconst attemptLogin = async (username, password) => {\r\n  try {\r\n      return await axios.post(`${window.$DBURL}users/session/login`, {\r\n          Username: username,\r\n          Password: password,\r\n      });\r\n  } catch (err) {\r\n      processLoginErrors(err);\r\n      return null;\r\n  }\r\n};\r\n\r\nconst setupSession = (token) => {\r\n  axios.defaults.baseURL = window.$DBURL;\r\n  sessionStorage.setItem(\"token\", token);\r\n  axios.defaults.headers.common[\"Authorization\"] = `Basic ${token}`;\r\n};\r\n\r\nconst processUserData = async (user) => {\r\n  if (user.Metro_Id === 0 || user.City_Id === 0) {\r\n      const metros = await GetMetroList();\r\n      if (!metros) return;\r\n\r\n      setMetroList(metros);\r\n      setUserId(user.Id);\r\n      setUsername(user.Username);\r\n      updateUIForMetroSelection();\r\n  } else {\r\n      setEnteredCode(\"\");\r\n      const data = await GetUserCases(user.Id);\r\n      navigateAccordingToData(data);\r\n  }\r\n};\r\n\r\nconst updateUIForMetroSelection = () => {\r\n  setShowMetroSelection(true);\r\n  setTwoFactor(false);\r\n  setLoginForm(false);\r\n  setForgotPassword(false);\r\n};\r\n\r\nconst navigateAccordingToData = (data) => {\r\n  const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n  if (userInfo && (userInfo.Role === UserRole.Manager || userInfo.Role === UserRole.Estimator)) {\r\n    history.push(`/cases/${userInfo.Metro_Id}/${userInfo.Metro_Id}`);\r\n  } else {\r\n    history.push(\"/home\");\r\n  }\r\n};\r\n\r\nconst processLoginErrors = (err) => {\r\n  if (err.response || err.request) {\r\n    setErrorMessage(\"Incorrect Username or Password!\");\r\n  }\r\n};\r\n\r\n\r\n\r\n\r\n  // const Login = async (username, password) => {\r\n  //   const resp = await axios\r\n  //     .post(window.$DBURL + \"users/session/login\", {\r\n  //       Username: username,\r\n  //       Password: password,\r\n  //     })\r\n  //     .catch(handleErrors);\r\n  //   if (resp?.status === 200) {\r\n  //     const token = resp.data.Session.AuthToken;\r\n  //     axios.defaults.baseURL = window.$DBURL;\r\n  //     sessionStorage.setItem(\"token\", token);\r\n  //     axios.defaults.headers.common[\"Authorization\"] = \"Basic \" + token;\r\n  //     if (resp.data !== null) {\r\n  //       if (resp.data.User !== null) {\r\n  //         sessionStorage.setItem(\"userInfo\", JSON.stringify(resp.data.User));\r\n  //         if (resp.data.User.Metro_Id === 0 || resp.data.User.City_Id === 0) {\r\n  //           var metros = await GetMetroList();\r\n  //           if (metros !== null) {\r\n  //             setMetroList(metros);\r\n  //             setUserId(resp.data.User.Id);\r\n  //             setUsername(resp.data.User.Username);\r\n  //             setShowMetroSelection(true);\r\n  //             setLoginForm(false);\r\n  //             setTwoFactor(false);\r\n  //             setForgotPassword(false);\r\n  //           }\r\n  //         } else {\r\n  //           setEnteredCode(\"\");\r\n  //           var data = await GetUserCases(\r\n  //             JSON.parse(sessionStorage.getItem(\"userInfo\")).Id\r\n  //           );\r\n\r\n  //           if (data !== null) {\r\n  //             if (data.Cases.length > 0 || window.$ISMOBILE === true) {\r\n  //               history.push(\"/home\");\r\n  //             } else {\r\n  //               history.push(\"/home\");\r\n  //             }\r\n  //           }\r\n  //         }\r\n  //       }\r\n  //     }\r\n  //   }\r\n\r\n  //   function handleErrors(err) {\r\n  //     if (err.request) {\r\n  //       setErrorMessage(\"Incorrect Username or Password!\");\r\n  //     } else if (err.response) {\r\n  //       setErrorMessage(\"Incorrect Username or Password!\");\r\n  //     }\r\n  //   }\r\n  // };\r\n\r\n  const GetCities = async (metroid) => {\r\n    var cities = await GetCityList(metroid);\r\n    if (cities !== null) {\r\n      setMetroList([]);\r\n      setCityList(cities);\r\n    }\r\n  };\r\n\r\n  // const HandlePasswordReset = async (forgotPasswordEmail) => {\r\n  //   const resp = await axios\r\n  //     .post(window.$DBURL + \"users/reset/\" + forgotPasswordEmail)\r\n  //     .catch(handleErrors);\r\n  //   if (resp !== undefined) {\r\n  //     setForgotPasswordText(\"We've sent a temporary password to your email\");\r\n  //     setForgotPasswordButtonText(\"Continue\");\r\n  //   }\r\n  //   if (resp === undefined) {\r\n  //     if (\r\n  //       forgotPasswordText ===\r\n  //       \"Error Submitting Email, Please wait a few moments and try again.\"\r\n  //     ) {\r\n  //       setForgotPasswordText(\r\n  //         \"Still not working? Contact us via the Contact Link in the top right of your screen.\"\r\n  //       );\r\n  //     } else {\r\n  //       setForgotPasswordText(\r\n  //         \"Error Submitting Email, Please wait a few moments and try again.\"\r\n  //       );\r\n  //     }\r\n  //   }\r\n  // };\r\n\r\n  const HandlePasswordReset = async (forgotPasswordEmail) => {\r\n    try {\r\n        const resp = await axios.post(`${window.$DBURL}users/reset/${forgotPasswordEmail}`);\r\n\r\n        if (resp) {\r\n            setForgotPasswordText(\"We've sent a temporary password to your email\");\r\n            setForgotPasswordButtonText(\"Continue\");\r\n        }\r\n    } catch (error) {\r\n        processResetErrors();\r\n    }\r\n};\r\n\r\nconst processResetErrors = () => {\r\n    const errorMessage = \"Error Submitting Email, Please wait a few moments and try again.\";\r\n    \r\n    if (forgotPasswordText === errorMessage) {\r\n        setForgotPasswordText(\"Still not working? Contact us via the Contact Link in the top right of your screen.\");\r\n    } else {\r\n        setForgotPasswordText(errorMessage);\r\n    }\r\n};\r\n\r\n\r\n  const UpdateUserLocationInfo = async (\r\n    metroId,\r\n    metroName,\r\n    cityId,\r\n    cityName,\r\n    username,\r\n    userId\r\n  ) => {\r\n    const resp = await axios.put(window.$DBURL + \"users\", {\r\n      Metro_Id: metroId,\r\n      City_Id: cityId,\r\n      Metro: metroName,\r\n      City: cityName,\r\n      Id: userId,\r\n      Username: username,\r\n    });\r\n    if (resp.status === 200) {\r\n      const resp = await axios.get(window.$DBURL + \"users/profile\", {});\r\n      if (resp.status === 200) {\r\n        if (resp.data !== null) {\r\n          if (resp.data.Metro_Id !== 0) {\r\n            sessionStorage.setItem(\"userInfo\", JSON.stringify(resp.data.user));\r\n            if (window.$ISMOBILE === true) {\r\n              history.push(\"/home\");\r\n            } else {\r\n              history.push(\"/home\");\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const AddInstallerToStore = async(metroid)=>{\r\n    var user = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    if(user.Role === UserRole.Installer)\r\n    {\r\n      var data = await GetStoreByMetro(metroid);\r\n      if(data?.length>0)\r\n      {\r\n        await AddStaffToStore(data[0].Id); //Assume there is only one store per metro now.\r\n      }\r\n    }\r\n  }\r\n\r\n  function handleErrors(err) {\r\n    if (err.request) {\r\n      setErrorMessage(\"Incorrect Username or Password\");\r\n    } else if (err.response) {\r\n      setErrorMessage(\"Incorrect Username or Password\");\r\n    }\r\n  }\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    return (\r\n      <AuthCont>\r\n        <LeftAuthCont backgroundimg=\"/Log In Image.png\">\r\n          <LeftItemsCont>\r\n            <Logo src=\"NRCLogoRegularWhite.png\"></Logo>\r\n            <Header headercolor=\"white\">Create Account</Header>\r\n            <BodyPara fontsize=\"18px\" bodycolor=\"white\">\r\n            Join the New Rhodes community and get started on your project today.\r\n            </BodyPara>\r\n            <MediumWhiteButton\r\n              onClick={() => {\r\n                history.push(\"/signup\");\r\n              }}\r\n            >\r\n              Sign Up\r\n            </MediumWhiteButton>\r\n          </LeftItemsCont>\r\n        </LeftAuthCont>\r\n\r\n        <RightAuthCont>\r\n          <Div100vw20vh>\r\n            <TopImage20vh src=\"/Log In Image.png\"></TopImage20vh>\r\n            <LogoRelative src=\"/NRCLogoRegularBlack.png\"></LogoRelative>\r\n          </Div100vw20vh>\r\n\r\n          <br></br>\r\n          {loginForm === true ? (\r\n            <RightItemsCont>\r\n              <Header marginbottom=\"1.25%\">Welcome Back!</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"50%\" marginbottom=\"2.5%\">\r\n              Log in to your account here.\r\n              </BodyPara>\r\n              <TextInput300x50\r\n                name=\"username\"\r\n                placeholder=\"Username\"\r\n                inputwidth=\"40%\"\r\n                inputheight=\"2.5vh\"\r\n                onChange={(e) => {\r\n                  setUn(e.target.value);\r\n                }}\r\n              ></TextInput300x50>\r\n              <TextInput300x50\r\n                name=\"pass\"\r\n                type=\"password\"\r\n                placeholder=\"Password\"\r\n                inputwidth=\"40%\"\r\n                inputheight=\"2.5vh\"\r\n                onChange={(e) => {\r\n                  setPass(e.target.value);\r\n                }}\r\n              ></TextInput300x50>\r\n              <RedirectDiv>\r\n                <LinkText\r\n                  fontsize=\"16px\"\r\n                  onClick={() => {\r\n                    setForgotPassword(true);\r\n                    setLoginForm(false);\r\n                  }}\r\n                >\r\n                  Forgot password?\r\n                </LinkText>\r\n              </RedirectDiv>\r\n              <SmallHeader margintop=\"3%\" color=\"red\">\r\n                {errorMessage}\r\n              </SmallHeader>\r\n              <br></br>\r\n              <MobileWideGreenButton\r\n                onClick={() => {\r\n                  Login(un, pass);\r\n                }}\r\n              >\r\n                Log In\r\n              </MobileWideGreenButton>\r\n              <UnderlinedBoldTitle16px\r\n                onClick={() => {\r\n                  history.push(\"/signup\");\r\n                }}\r\n              >\r\n                Create Account\r\n              </UnderlinedBoldTitle16px>\r\n            </RightItemsCont>\r\n          ) : twofactor === true ? (\r\n            <RightItemsCont top=\"10%\">\r\n              <Header>One More Step.</Header>\r\n              <BodyPara marginbottom=\"1%\" bodycolor=\"black\" width=\"50%\">\r\n                Enter the security code sent to your cell phone or email to sign\r\n                into your account\r\n              </BodyPara>\r\n              <input type=\"password\" style={{ display: \"none\" }} />\r\n              <TextInput300x50\r\n                key=\"\"\r\n                placeholder=\"Enter Code\"\r\n                autoComplete=\"new-password\"\r\n                onblur='this.type=\"password\"'\r\n                onfocus='this.type=\"text\"'\r\n                inputwidth=\"40%\"\r\n                inputheight=\"2.5vh\"\r\n                onChange={(e) => {\r\n                  setEnteredCode(e.target.value);\r\n                }}\r\n              ></TextInput300x50>\r\n              <RedirectDiv>\r\n                <LinkText\r\n                  fontsize=\"16px\"\r\n                  onClick={() => {\r\n                    window.open(\r\n                      \"https://www.newrhodesconstruction.com/contact-us/\",\r\n                      \"_blank\"\r\n                    );\r\n                  }}\r\n                >\r\n                  Didn't receive a code?\r\n                </LinkText>\r\n              </RedirectDiv>\r\n              <SmallHeader margintop=\"3%\" color=\"red\">\r\n                {errorMessage}\r\n              </SmallHeader>\r\n              <br></br>\r\n              <MobileWideGreenButton\r\n                onClick={() => {\r\n                  LoginFunction(enteredCode, actualCode, un, pass);\r\n                }}\r\n              >\r\n                Enter\r\n              </MobileWideGreenButton>\r\n            </RightItemsCont>\r\n          ) : showMetroSelection === true ? (\r\n            <RightItemsCont>\r\n              <Header>Set Your Location</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"50%\">\r\n                {metroSelectionText}\r\n              </BodyPara>\r\n              {metroList.map((o, i) => (\r\n                <div>\r\n                  <LinkText\r\n                    key={i}\r\n                    onClick={() => {\r\n                      setSelectedMetroId(o.Id);\r\n                      setSelectedMetroName(o.Name);\r\n                      GetCities(o.Id);\r\n                    }}\r\n                  >\r\n                    {o.Name}\r\n                  </LinkText>\r\n                  <StyledHRPropColour\r\n                    border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                  ></StyledHRPropColour>\r\n                </div>\r\n              ))}\r\n              <FlexColumnCont\r\n                height={flexHeight}\r\n                margin=\"3%\"\r\n                justifycontent=\"flex-start\"\r\n                width=\"60%\"\r\n                mobilewidth=\"80vw\"\r\n                borderradius=\"10px\"\r\n                overflowy=\"auto\"\r\n              >\r\n                {cityList.map((o, i) => (\r\n                  <LinkText\r\n                    key={i}\r\n                    onClick={() => {\r\n                      setSelectedCityId(o.Id);\r\n                      setSelectedCityName(o.Name);\r\n                      setCityList([]);\r\n                      setShowMetroSelectionButtonDisplay(\"block\");\r\n                      setFlexHeight(\"0%\");\r\n                      setShowMetroSelectionText(\r\n                        \"Great, Now you have completed your profile.\"\r\n                      );\r\n                    }}\r\n                  >\r\n                    {o.Name}\r\n                  </LinkText>\r\n                ))}\r\n              </FlexColumnCont>\r\n              <MobileWideGreenButton\r\n                display={metroSelectionButtonDisplay}\r\n                onClick={() => {\r\n                  UpdateUserLocationInfo(\r\n                    selectedMetroId,\r\n                    selectedMetroName,\r\n                    selectedCityId,\r\n                    selectedCityName,\r\n                    username,\r\n                    userId\r\n                  );\r\n\r\n                  AddInstallerToStore(selectedMetroId);\r\n                }}\r\n              >\r\n                Continue\r\n              </MobileWideGreenButton>\r\n            </RightItemsCont>\r\n          ) : forgotPassword === true ? (\r\n            <RightItemsCont>\r\n              <Header>Forgot your password?</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"50%\">\r\n                {forgotPasswordText}\r\n              </BodyPara>\r\n              <TextInput300x50\r\n                key=\"\"\r\n                autoComplete=\"new-password\"\r\n                placeholder=\"Username\"\r\n                inputwidth=\"40%\"\r\n                inputheight=\"2.5vh\"\r\n                onChange={(e) => {\r\n                  setForgotPasswordEmail(e.target.value);\r\n                }}\r\n              ></TextInput300x50>\r\n              <br></br>\r\n              <MobileWideGreenButton\r\n                onClick={() => {\r\n                  if (forgotPasswordButtonText === \"Send Password\") {\r\n                    HandlePasswordReset(forgotPasswordEmail);\r\n                  } else {\r\n                    setLoginForm(true);\r\n                    setForgotPassword(false);\r\n                    setForgotPasswordText(\r\n                      \"No worries! Enter the username you used below to be sent a temporary password!\"\r\n                    );\r\n                    setForgotPasswordButtonText(\"Send Password\");\r\n                  }\r\n                }}\r\n              >\r\n                {forgotPasswordButtonText}\r\n              </MobileWideGreenButton>\r\n              <UnderlinedBoldTitle16px\r\n                onClick={() => {\r\n                  setForgotPassword(false);\r\n                  setLoginForm(true);\r\n                }}\r\n              >\r\n               Continue\r\n              </UnderlinedBoldTitle16px>\r\n            </RightItemsCont>\r\n          ) : null}\r\n\r\n          <FlexRowCont100PercentFlexEnd height=\"15%\">\r\n            <PrivacyPolicy>\r\n              All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n            </PrivacyPolicy>\r\n          </FlexRowCont100PercentFlexEnd>\r\n        </RightAuthCont>\r\n      </AuthCont>\r\n    );\r\n  } else {\r\n    return (\r\n      <AuthCont>\r\n        <LeftAuthCont backgroundimg=\"/Log In Image.png\">\r\n          <LeftItemsCont>\r\n            <Logo src=\"NRCLogoRegularWhite.png\"></Logo>\r\n            <Header headercolor=\"white\">Create Account</Header>\r\n            <BodyPara fontsize=\"18px\" bodycolor=\"white\">\r\n            Join the New Rhodes community and get started on your project today.\r\n            </BodyPara>\r\n            <MediumWhiteButton\r\n              onClick={() => {\r\n                history.push(\"/signup\");\r\n              }}\r\n            >\r\n              Sign Up\r\n            </MediumWhiteButton>\r\n          </LeftItemsCont>\r\n        </LeftAuthCont>\r\n\r\n        <RightAuthCont>\r\n          <RightBarDiv>\r\n            <LinkText\r\n              onClick={() => {\r\n                window.open(\"https://www.newrhodesconstruction.com/\", \"_blank\");\r\n              }}\r\n            >\r\n              Home\r\n            </LinkText>\r\n            <LinkText\r\n              onClick={() => {\r\n                window.open(\"https://www.newrhodesconstruction.com/about/\", \"_blank\");\r\n              }}\r\n            >\r\n              About\r\n            </LinkText>\r\n            <LinkText\r\n              onClick={() => {\r\n                window.open(\r\n                  \"https://www.newrhodesconstruction.com/contact-us/\",\r\n                  \"_blank\"\r\n                );\r\n              }}\r\n            >\r\n              Contact\r\n            </LinkText>\r\n          </RightBarDiv>\r\n          {/* Login Form */}\r\n          {loginForm === true ? (\r\n            <RightItemsCont>\r\n              <Header marginbottom=\"1.25%\">Welcome Back!</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"50%\" marginbottom=\"2.5%\">\r\n              Log in to your account here.\r\n              </BodyPara>\r\n              <TextInput300x50\r\n                name=\"username\"\r\n                placeholder=\"Username\"\r\n                inputwidth=\"40%\"\r\n                inputheight=\"2.5vh\"\r\n                onChange={(e) => {\r\n                  setUn(e.target.value);\r\n                }}\r\n              ></TextInput300x50>\r\n              <TextInput300x50\r\n                name=\"pass\"\r\n                type=\"password\"\r\n                placeholder=\"Password\"\r\n                inputwidth=\"40%\"\r\n                inputheight=\"2.5vh\"\r\n                onChange={(e) => {\r\n                  setPass(e.target.value);\r\n                }}\r\n              ></TextInput300x50>\r\n              <RedirectDiv>\r\n                <LinkText\r\n                  fontsize=\"16px\"\r\n                  onClick={() => {\r\n                    setLoginForm(false);\r\n                    setForgotPassword(true);\r\n                  }}\r\n                >\r\n                  Forgot Password?\r\n                </LinkText>\r\n              </RedirectDiv>\r\n              <SmallHeader margintop=\"3%\" color=\"red\">\r\n                {errorMessage}\r\n              </SmallHeader>\r\n              <MediumGreenButton\r\n                onClick={() => {\r\n                  Login(un, pass);\r\n                }}\r\n              >\r\n                Log In\r\n              </MediumGreenButton>\r\n              <SmallHeader\r\n                cursor=\"pointer\"\r\n                display=\"none\"\r\n                margintop=\"5%\"\r\n                textdecoration=\"underline\"\r\n                color=\"blue\"\r\n                onClick={() => {\r\n                  history.push(\"/signup\");\r\n                }}\r\n              >\r\n                Don't have an account? Signup here\r\n              </SmallHeader>\r\n            </RightItemsCont>\r\n          ) : //   Two Factor Display\r\n          twofactor === true ? (\r\n            <RightItemsCont top=\"10%\">\r\n              <Header>One More Step.</Header>\r\n              <BodyPara marginbottom=\"1%\" bodycolor=\"black\" width=\"50%\">\r\n                Enter the security code sent to your cell phone or email to sign\r\n                into your account\r\n              </BodyPara>\r\n              <input type=\"password\" style={{ display: \"none\" }} />\r\n              <TextInput300x50\r\n                key=\"\"\r\n                placeholder=\"Enter Code\"\r\n                autoComplete=\"new-password\"\r\n                onblur='this.type=\"password\"'\r\n                onfocus='this.type=\"text\"'\r\n                inputwidth=\"40%\"\r\n                inputheight=\"2.5vh\"\r\n                onChange={(e) => {\r\n                  setEnteredCode(e.target.value);\r\n                }}\r\n              ></TextInput300x50>\r\n              <RedirectDiv>\r\n                <LinkText\r\n                  fontsize=\"16px\"\r\n                  onClick={() => {\r\n                    window.open(\r\n                      \"https://www.newrhodesconstruction.com/contact-us/\",\r\n                      \"_blank\"\r\n                    );\r\n                  }}\r\n                >\r\n                  Didn't receive a code?\r\n                </LinkText>\r\n              </RedirectDiv>\r\n              <SmallHeader margintop=\"3%\" color=\"red\">\r\n                {errorMessage}\r\n              </SmallHeader>\r\n              <MediumGreenButton\r\n                onClick={() => {\r\n                  LoginFunction(enteredCode, actualCode, un, pass);\r\n                }}\r\n              >\r\n                Enter\r\n              </MediumGreenButton>\r\n            </RightItemsCont>\r\n          ) : showMetroSelection === true ? (\r\n            <RightItemsCont>\r\n              <Header>Set Your Location.</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"50%\">\r\n                {metroSelectionText}\r\n              </BodyPara>\r\n              {metroList.map((o, i) => (\r\n                <div>\r\n                  <LinkText\r\n                    key={i}\r\n                    onClick={() => {\r\n                      setSelectedMetroId(o.Id);\r\n                      setSelectedMetroName(o.Name);\r\n                      GetCities(o.Id);\r\n                    }}\r\n                  >\r\n                    {o.Name}\r\n                  </LinkText>\r\n                  <StyledHRPropColour\r\n                    border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                  ></StyledHRPropColour>\r\n                </div>\r\n              ))}\r\n              <FlexColumnCont\r\n                height={flexHeight}\r\n                margin=\"3%\"\r\n                justifycontent=\"flex-start\"\r\n                width=\"60%\"\r\n                borderradius=\"10px\"\r\n                overflowy=\"auto\"\r\n              >\r\n                {cityList.map((o, i) => (\r\n                  <LinkText\r\n                    key={i}\r\n                    onClick={() => {\r\n                      setSelectedCityId(o.Id);\r\n                      setSelectedCityName(o.Name);\r\n                      setCityList([]);\r\n                      setShowMetroSelectionButtonDisplay(\"block\");\r\n                      setFlexHeight(\"0%\");\r\n                      setShowMetroSelectionText(\r\n                        \"Great, Now you have completed your profile.\"\r\n                      );\r\n                    }}\r\n                  >\r\n                    {o.Name}\r\n                  </LinkText>\r\n                ))}\r\n              </FlexColumnCont>\r\n              <MediumGreenButton\r\n                display={metroSelectionButtonDisplay}\r\n                onClick={() => {\r\n                  UpdateUserLocationInfo(\r\n                    selectedMetroId,\r\n                    selectedMetroName,\r\n                    selectedCityId,\r\n                    selectedCityName,\r\n                    username,\r\n                    userId\r\n                  );\r\n\r\n                  AddInstallerToStore(selectedMetroId);\r\n                }}\r\n              >\r\n                Continue\r\n              </MediumGreenButton>\r\n            </RightItemsCont>\r\n          ) : forgotPassword ? (\r\n            <RightItemsCont>\r\n              <Header>Forgot your password?</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"50%\">\r\n                {forgotPasswordText}\r\n              </BodyPara>\r\n              <br></br>\r\n              <TextInput300x50\r\n                key=\"\"\r\n                autoComplete=\"new-password\"\r\n                placeholder=\"Username\"\r\n                inputwidth=\"40%\"\r\n                inputheight=\"2.5vh\"\r\n                onChange={(e) => {\r\n                  setForgotPasswordEmail(e.target.value);\r\n                }}\r\n              ></TextInput300x50>\r\n              <br></br>\r\n              <MediumGreenButton\r\n                mobilewidth=\"76vw\"\r\n                width=\"40%\"\r\n                onClick={() => {\r\n                  if (forgotPasswordButtonText === \"Send Password\") {\r\n                    HandlePasswordReset(forgotPasswordEmail);\r\n                  } else {\r\n                    setLoginForm(true);\r\n                    setForgotPassword(false);\r\n                    setForgotPasswordText(\r\n                      \"No worries! Enter the username you used below to be sent a temporary password!\"\r\n                    );\r\n                    setForgotPasswordButtonText(\"Send Password\");\r\n                  }\r\n                }}\r\n              >\r\n                {forgotPasswordButtonText}\r\n              </MediumGreenButton>\r\n            </RightItemsCont>\r\n          ) : null}\r\n\r\n          <FlexRowCont100PercentFlexEnd height=\"15%\">\r\n            <PrivacyPolicy>\r\n              All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n            </PrivacyPolicy>\r\n          </FlexRowCont100PercentFlexEnd>\r\n        </RightAuthCont>\r\n      </AuthCont>\r\n    );\r\n  }\r\n};\r\n\r\nLoginPage.defaultProps = {\r\n  h1: \"This is my default text\",\r\n};\r\n\r\nexport default LoginPage;\r\n","/* eslint-disable */\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport axios from \"axios\";\r\n\r\nimport { AuthCont } from \"../../../StylesheetComps/AuthSheet\";\r\n\r\n//Left Container\r\nimport { LeftAuthCont } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { LeftItemsCont } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { Logo } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { Header } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { BodyPara } from \"../../../StylesheetComps/AuthSheet\";\r\n\r\n//Right Container\r\nimport {\r\n  RightAuthCont,\r\n  MediumGreenButton,\r\n  MediumWhiteButton,\r\n} from \"../../../StylesheetComps/AuthSheet\";\r\nimport { RightItemsCont } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { RightBarDiv } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { LinkText } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { PrivacyPolicy } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { TextInput300x50 } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { InputDiv } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { SmallHeader } from \"../../../StylesheetComps/Menu\";\r\nimport { passwordStrength } from \"check-password-strength\";\r\nimport { FlexColumnCont } from \"../../../StylesheetComps/Menu\";\r\nimport {\r\n  Div100vw20vh,\r\n  SignupItemContWithEffects,\r\n  AuthPageCont,\r\n} from \"../../../MobileComponents/Divs\";\r\nimport {\r\n  LogoRelative,\r\n  TopImage20vh,\r\n  TopImage40vh,\r\n} from \"../../../MobileComponents/Images\";\r\nimport { MobileWideGreenButton } from \"../../../MobileComponents/Buttons\";\r\nimport {\r\n  ErrorMessage12px,\r\n  UnderlinedBoldTitle16px,\r\n} from \"../../../MobileComponents/Text\";\r\n\r\nconst SignUpPage = () => {\r\n  const history = useHistory();\r\n  const [isMobile, setIsMobile] = useState(false);\r\n\r\n  //New User Credentials\r\n  const [un, setUn] = useState(\"\");\r\n  const [phone, setPhone] = useState(\"\");\r\n  const [email, setEmail] = useState(\"\");\r\n  const [pass, setPass] = useState(\"\");\r\n  const [confirmPass, setConfirmPass] = useState(\"\");\r\n\r\n  const [errorMessage, setErrorMessage] = useState(\"\");\r\n\r\n  const [signUpForm, setSignUpForm] = useState(true);\r\n  const [activateAccount, setActivateAccount] = useState(false);\r\n\r\n  const [displayPasswordInfo, setDisplayPasswordInfo] = useState(\"none\");\r\n\r\n  const [passwordColor, setPasswordColor] = useState(\"white\");\r\n\r\n  const SignupUser = async (username, phone, email, password) => {\r\n    if (pass !== confirmPass) {\r\n      setErrorMessage(\"Passwords don't match!\");\r\n    } else if (un.includes(\" \")) {\r\n      setErrorMessage(\"Username cannot contain spaces\");\r\n    } else if (un === \"\" || phone === \"\" || email === \"\" || pass === \"\") {\r\n      setErrorMessage(\"Please fill out all form inputs\");\r\n    } else if (passwordColor !== \"green\") {\r\n      setErrorMessage(\"Password not strong enough!\");\r\n    } else {\r\n      const resp = await axios\r\n        .post(window.$DBURL + \"users\", {\r\n          Name: null,\r\n          Username: username,\r\n          Password: password,\r\n          Platform: navigator.userAgent.substring(0, 50),\r\n          Metro_Id: 0,\r\n          City_Id: 0,\r\n          Phone: phone,\r\n          Email: email,\r\n        })\r\n        .catch(handleErrors);\r\n      if (resp !== undefined) {\r\n        setActivateAccount(true);\r\n        setSignUpForm(false);\r\n      }\r\n    }\r\n  };\r\n\r\n  const CheckPasswordStrength = async (password) => {\r\n    if (displayPasswordInfo === \"none\") {\r\n      setDisplayPasswordInfo(\"flex\");\r\n    }\r\n    switch (\r\n      passwordStrength(password, [\r\n        {\r\n          id: 0,\r\n          value: \"Too weak\",\r\n          minDiversity: 0,\r\n          minLength: 0,\r\n        },\r\n        {\r\n          id: 1,\r\n          value: \"Weak\",\r\n          minDiversity: 2,\r\n          minLength: 4,\r\n        },\r\n        {\r\n          id: 2,\r\n          value: \"Medium\",\r\n          minDiversity: 3,\r\n          minLength: 6,\r\n        },\r\n        {\r\n          id: 3,\r\n          value: \"Strong\",\r\n          minDiversity: 4,\r\n          minLength: 8,\r\n        },\r\n      ]).value\r\n    ) {\r\n      case \"Too weak\":\r\n        setPasswordColor(\"red\");\r\n        break;\r\n\r\n      case \"Weak\":\r\n        setPasswordColor(\"orange\");\r\n        break;\r\n\r\n      case \"Medium\":\r\n        setPasswordColor(\"yellow\");\r\n        break;\r\n\r\n      case \"Strong\":\r\n        setPasswordColor(\"green\");\r\n        break;\r\n      default:\r\n    }\r\n  };\r\n\r\n  function handleErrors(err) {\r\n    if (err.request) {\r\n      setErrorMessage(err.response.data.Message);\r\n    } else if (err.response) {\r\n      setErrorMessage(err.response.data.Message);\r\n    }\r\n  }\r\n\r\n  window.onscroll = function () {\r\n    scrollFunction();\r\n  };\r\n\r\n  function scrollFunction() {\r\n    if (isMobile !== false) {\r\n      if (\r\n        document.body.scrollTop > 20 ||\r\n        document.documentElement.scrollTop > 20\r\n      ) {\r\n        if (\r\n          document.getElementById(\"headerimage\") !== null &&\r\n          document.getElementById(\"itemscontainer\") !== null &&\r\n          document.getElementById(\"logoimage\") !== null\r\n        ) {\r\n          document.getElementById(\"headerimage\").style.height = \"15vh\";\r\n          document.getElementById(\"itemscontainer\").style.top = \"-10%\";\r\n          document.getElementById(\"logoimage\").style.height = \"70px\";\r\n          document.getElementById(\"logoimage\").style.bottom = \"25%\";\r\n        }\r\n      } else {\r\n        if (\r\n          document.getElementById(\"headerimage\") !== null &&\r\n          document.getElementById(\"itemscontainer\") !== null &&\r\n          document.getElementById(\"logoimage\") !== null\r\n        ) {\r\n          document.getElementById(\"headerimage\").style.height = \"20vh\";\r\n          document.getElementById(\"itemscontainer\").style.top = \"1.5%\";\r\n          document.getElementById(\"logoimage\").style.height = \"120px\";\r\n          document.getElementById(\"logoimage\").style.bottom = \"45%\";\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    if (\r\n      /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\r\n        navigator.userAgent\r\n      ) ||\r\n      /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n        navigator.userAgent.substr(0, 4)\r\n      )\r\n    ) {\r\n      setIsMobile(true);\r\n    }\r\n  }, []);\r\n\r\n  if (isMobile == true) {\r\n    if (signUpForm === true) {\r\n      return (\r\n        <AuthPageCont>\r\n          <LeftAuthCont backgroundimg=\"/Signup Page Image.png\">\r\n            <LeftItemsCont>\r\n              <Logo src=\"/NRCLogoRegularWhite.png\"></Logo>\r\n              <Header headercolor=\"white\">Welcome Back!</Header>\r\n              <BodyPara bodycolor=\"white\">\r\n                Log into your New Rhodes Construction account here.\r\n              </BodyPara>\r\n              <MediumWhiteButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Log In\r\n              </MediumWhiteButton>\r\n            </LeftItemsCont>\r\n          </LeftAuthCont>\r\n\r\n          <RightAuthCont>\r\n            <Div100vw20vh>\r\n              <TopImage20vh\r\n                id=\"headerimage\"\r\n                src=\"/Signup Page Image.png\"\r\n              ></TopImage20vh>\r\n              <LogoRelative\r\n                id=\"logoimage\"\r\n                src=\"/NRCLogoRegularWhite.png\"\r\n              ></LogoRelative>\r\n            </Div100vw20vh>\r\n\r\n            <br></br>\r\n            <br></br>\r\n            <br></br>\r\n\r\n            <SignupItemContWithEffects id=\"itemscontainer\">\r\n              <Header marginbottom=\"0.5%\">Homeowner Signup</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"50%\" marginbottom=\"3%\">\r\n              Join our platform and easily get started on your project. Sign up now using your email.\r\n                {/* <SmallHeader\r\n                mobilefontsize=\"18px\"\r\n                cursor=\"pointer\"\r\n                display=\"block\"\r\n                mobiledisplay=\"block\"\r\n                margintop=\"5%\"\r\n                textdecoration=\"underline\"\r\n                color=\"blue\"\r\n                onClick={() => {\r\n                  history.push(\"/installer_register\");\r\n                }}\r\n              >\r\n                If you are an installer, register here\r\n              </SmallHeader> */}\r\n              </BodyPara>\r\n              {/* <SmallHeader\r\n                mobilefontsize=\"18px\"\r\n                cursor=\"pointer\"\r\n                display=\"block\"\r\n                mobiledisplay=\"block\"\r\n                margintop=\"5%\"\r\n                textdecoration=\"underline\"\r\n                color=\"blue\"\r\n                onClick={() => {\r\n                  history.push(\"/installer_register\");\r\n                }}\r\n              >\r\n                If you are an installer, register here\r\n              </SmallHeader> */}\r\n              <InputDiv mobileflexdirection=\"column\">\r\n                {/* <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Email or Username\"\r\n                  mobilewidth=\"70vw\"\r\n                  inputwidth=\"7\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setUn(e.target.value);\r\n                  }}\r\n                ></TextInput300x50> */}\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Email Address\"\r\n                  mobilewidth=\"70vw\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setEmail(e.target.value);\r\n                    setUn(e.target.value)\r\n                  }}\r\n                ></TextInput300x50>\r\n                    <TextInput300x50\r\n                  inputmarginleft=\"5%\"\r\n                  inputmarginleftmobile=\"0\"\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Cell Phone\"\r\n                  mobilewidth=\"70vw\"\r\n                  inputwidth=\"40%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setPhone(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  type=\"password\"\r\n                  placeholder=\"Password\"\r\n                  mobilewidth=\"70vw\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setPass(e.target.value);\r\n                    CheckPasswordStrength(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  type=\"password\"\r\n                  mobilewidth=\"70vw\"\r\n                  placeholder=\"Confirm Password\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setConfirmPass(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n              </InputDiv>\r\n              <br></br>\r\n              <ErrorMessage12px>{errorMessage}</ErrorMessage12px>\r\n              <FlexColumnCont\r\n                display={displayPasswordInfo}\r\n                height=\"20%\"\r\n                padding=\"5px\"\r\n                margintop=\"5px\"\r\n                width=\"42%\"\r\n                margin=\"0\"\r\n              >\r\n                <FlexColumnCont\r\n                  mobilewidth=\"70vw\"\r\n                  borderradius=\"10px\"\r\n                  margin=\"0\"\r\n                  height=\"0.5%\"\r\n                  padding=\"5px\"\r\n                  margintop=\"-15px\"\r\n                  width=\"100%\"\r\n                  bgcolor={passwordColor}\r\n                  border=\"1px solid #d3d3d3\"\r\n                ></FlexColumnCont>\r\n                <BodyPara\r\n                  bodycolor=\"grey\"\r\n                  fontsize=\"14px\"\r\n                  width=\"100%\"\r\n                  margintop=\"2.5%\"\r\n                >\r\n                  Password must contain at least one lower- and upper-case letter, one number, \r\n                  one special character, and be longer than eight characters.\r\n                </BodyPara>\r\n              </FlexColumnCont>\r\n              <MobileWideGreenButton\r\n                onClick={() => {\r\n                  SignupUser(un, phone, email, pass);\r\n                }}\r\n              >\r\n                Sign Up\r\n              </MobileWideGreenButton>  \r\n              {/* <SmallHeader\r\n                mobilefontsize=\"18px\"\r\n                cursor=\"pointer\"\r\n                display=\"block\"\r\n                mobiledisplay=\"block\"\r\n                margintop=\"5%\"\r\n                textdecoration=\"underline\"\r\n                color=\"blue\"\r\n                onClick={() => {\r\n                  history.push(\"/installer_register\");\r\n                }}\r\n              >\r\n                If you are an installer, register here\r\n              </SmallHeader>            */}\r\n              <UnderlinedBoldTitle16px\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Have an account? Login here\r\n              </UnderlinedBoldTitle16px>\r\n            </SignupItemContWithEffects>\r\n\r\n            <FlexColumnCont\r\n              width=\"95%\"\r\n              height=\"5%\"\r\n              margintop=\"3.75vw\"\r\n              flexdirection=\"row\"\r\n              justifycontent=\"flex-end\"\r\n              alignitems=\"right\"\r\n            >\r\n              <PrivacyPolicy>\r\n                All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n              </PrivacyPolicy>\r\n            </FlexColumnCont>\r\n          </RightAuthCont>\r\n        </AuthPageCont>\r\n      );\r\n    } else if (activateAccount === true) {\r\n      return (\r\n        <AuthCont>\r\n          <LeftAuthCont backgroundimg=\"/Signup Page Image.png\">\r\n            <LeftItemsCont>\r\n              <Logo src=\"NRCLogoRegularWhite.png\"></Logo>\r\n              <Header headercolor=\"white\">Welcome Back!</Header>\r\n              <BodyPara bodycolor=\"white\">\r\n                Log into your New Rhodes Construction account here.\r\n              </BodyPara>\r\n              <MediumWhiteButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Log In\r\n              </MediumWhiteButton>\r\n            </LeftItemsCont>\r\n          </LeftAuthCont>\r\n\r\n          <RightAuthCont>\r\n            <Div100vw20vh>\r\n              <TopImage40vh\r\n                id=\"headerimage\"\r\n                src=\"/Signup Page Image.png\"\r\n              ></TopImage40vh>\r\n              <LogoRelative\r\n                id=\"logoimage\"\r\n                src=\"/NRCLogoRegularWhite.png\"\r\n              ></LogoRelative>\r\n            </Div100vw20vh>\r\n\r\n            <br></br>\r\n            <br></br>\r\n            <br></br>\r\n\r\n            <RightItemsCont top=\"20%\">\r\n              <Header>Verify Your Account</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"55%\">\r\n              Verify your account by clicking the verification link sent to your email or phone number.\r\n              </BodyPara>\r\n              <br></br>\r\n              <MobileWideGreenButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Continue\r\n              </MobileWideGreenButton>\r\n            </RightItemsCont>\r\n\r\n            <FlexColumnCont\r\n              width=\"95%\"\r\n              height=\"5%\"\r\n              margintop=\"3.75vw\"\r\n              flexdirection=\"row\"\r\n              justifycontent=\"flex-end\"\r\n              alignitems=\"right\"\r\n            >\r\n              <PrivacyPolicy>\r\n                All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n              </PrivacyPolicy>\r\n            </FlexColumnCont>\r\n          </RightAuthCont>\r\n        </AuthCont>\r\n      );\r\n    }\r\n  } else {\r\n    if (signUpForm === true) {\r\n      return (\r\n        <AuthCont>\r\n          <LeftAuthCont backgroundimg=\"/Signup Page Image.png\">\r\n            <LeftItemsCont>\r\n              <Logo src=\"NRCLogoRegularWhite.png\"></Logo>\r\n              <Header headercolor=\"white\">Welcome Back!</Header>\r\n              <BodyPara bodycolor=\"white\">\r\n                Log into your New Rhodes Construction account here.\r\n              </BodyPara>\r\n              <MediumWhiteButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Log In\r\n              </MediumWhiteButton>\r\n            </LeftItemsCont>\r\n          </LeftAuthCont>\r\n\r\n          <RightAuthCont>\r\n            <RightBarDiv>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\"https://www.newrhodesconstruction.com/\", \"_blank\");\r\n                }}\r\n              >\r\n                Home\r\n              </LinkText>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\"https://www.newrhodesconstruction.com/about/\", \"_blank\");\r\n                }}\r\n              >\r\n                About\r\n              </LinkText>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\r\n                    \"https://www.newrhodesconstruction.com/contact-us/\",\r\n                    \"_blank\"\r\n                  );\r\n                }}\r\n              >\r\n                Contact\r\n              </LinkText>\r\n            </RightBarDiv>\r\n\r\n            <RightItemsCont top=\"1.5%\">\r\n              <Header marginbottom=\"0.5%\">Homeowner Signup</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"50%\" marginbottom=\"3%\">\r\n              Join our platform and easily get started on your project. Sign up now using your email.\r\n\r\n                {/* <SmallHeader\r\n                mobilefontsize=\"18px\"\r\n                cursor=\"pointer\"\r\n                display=\"block\"\r\n                mobiledisplay=\"block\"\r\n                margintop=\"5%\"\r\n                textdecoration=\"underline\"\r\n                color=\"blue\"\r\n                onClick={() => {\r\n                  history.push(\"/installer_register\");\r\n                }}\r\n              >\r\n                If you are an installer, register here\r\n              </SmallHeader> */}\r\n              </BodyPara>\r\n              <InputDiv>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Email Address\"\r\n                  mobilewidth=\"62vw\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setEmail(e.target.value);\r\n                    setUn(e.target.value)\r\n                  }}\r\n                ></TextInput300x50>\r\n              </InputDiv>\r\n              <InputDiv>\r\n                {/* <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Email or username\"\r\n                  mobilewidth=\"62vw\"\r\n                  inputwidth=\"40%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setUn(e.target.value);\r\n                  }}\r\n                ></TextInput300x50> */}\r\n                <TextInput300x50\r\n                  inputmarginleftmobile=\"0\"\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Cell Phone\"\r\n                  mobilewidth=\"62vw\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setPhone(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n              </InputDiv>\r\n           \r\n              <InputDiv>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  type=\"password\"\r\n                  placeholder=\"Password\"\r\n                  mobilewidth=\"62vw\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setPass(e.target.value);\r\n                    CheckPasswordStrength(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n              </InputDiv>\r\n              <InputDiv>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  type=\"password\"\r\n                  mobilewidth=\"62vw\"\r\n                  placeholder=\"Confirm Password\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setConfirmPass(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n              </InputDiv>\r\n              <SmallHeader margintop=\"2%\" color=\"red\">\r\n                {errorMessage}\r\n              </SmallHeader>\r\n              <FlexColumnCont\r\n                display={displayPasswordInfo}\r\n                height=\"20%\"\r\n                padding=\"5px\"\r\n                margintop=\"5px\"\r\n                width=\"42%\"\r\n                margin=\"0\"\r\n              >\r\n                <FlexColumnCont\r\n                  mobilewidth=\"70vw\"\r\n                  borderradius=\"10px\"\r\n                  margin=\"0\"\r\n                  height=\"0.5%\"\r\n                  padding=\"5px\"\r\n                  margintop=\"-15px\"\r\n                  width=\"100%\"\r\n                  bgcolor={passwordColor}\r\n                  border=\"1px solid #d3d3d3\"\r\n                ></FlexColumnCont>\r\n                <BodyPara\r\n                  bodycolor=\"grey\"\r\n                  fontsize=\"14px\"\r\n                  width=\"100%\"\r\n                  margintop=\"2.5%\"\r\n                >\r\n                   Password must contain at least one lower- and upper-case letter, one number, \r\n                  one special character, and be longer than eight characters.\r\n                </BodyPara>\r\n              </FlexColumnCont>\r\n              <MediumGreenButton\r\n                onClick={() => {\r\n                  SignupUser(un, phone, email, pass);\r\n                }}\r\n              >\r\n                Sign Up\r\n              </MediumGreenButton>\r\n              {/* <SmallHeader\r\n                mobilefontsize=\"18px\"\r\n                cursor=\"pointer\"\r\n                display=\"block\"\r\n                mobiledisplay=\"block\"\r\n                margintop=\"5%\"\r\n                textdecoration=\"underline\"\r\n                color=\"blue\"\r\n                onClick={() => {\r\n                  history.push(\"/installer_register\");\r\n                }}\r\n              >\r\n                If you are an installer, register here\r\n              </SmallHeader> */}\r\n              <SmallHeader\r\n                mobilefontsize=\"18px\"\r\n                cursor=\"pointer\"\r\n                display=\"none\"\r\n                mobiledisplay=\"block\"\r\n                margintop=\"5%\"\r\n                textdecoration=\"underline\"\r\n                color=\"blue\"\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Have an account? Login here\r\n              </SmallHeader>\r\n            </RightItemsCont>\r\n\r\n            <FlexColumnCont\r\n              width=\"95%\"\r\n              height=\"5%\"\r\n              margintop=\"3.75vw\"\r\n              flexdirection=\"row\"\r\n              justifycontent=\"flex-end\"\r\n              alignitems=\"right\"\r\n            >\r\n              <PrivacyPolicy>\r\n                All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n              </PrivacyPolicy>\r\n            </FlexColumnCont>\r\n          </RightAuthCont>\r\n        </AuthCont>\r\n      );\r\n    } else if (activateAccount === true) {\r\n      return (\r\n        <AuthCont>\r\n          <LeftAuthCont backgroundimg=\"/Signup Page Image.png\">\r\n            <LeftItemsCont>\r\n              <Logo src=\"NRCLogoRegularWhite.png\"></Logo>\r\n              <Header headercolor=\"white\">Welcome Back!</Header>\r\n              <BodyPara bodycolor=\"white\">\r\n                Log into your New Rhodes Construction account here.\r\n              </BodyPara>\r\n              <MediumWhiteButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Log In\r\n              </MediumWhiteButton>\r\n            </LeftItemsCont>\r\n          </LeftAuthCont>\r\n\r\n          <RightAuthCont>\r\n            <RightBarDiv>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\"https://www.newrhodesconstruction.com/\", \"_blank\");\r\n                }}\r\n              >\r\n                Home\r\n              </LinkText>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\"https://www.newrhodesconstruction.com/about/\", \"_blank\");\r\n                }}\r\n              >\r\n                About\r\n              </LinkText>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\r\n                    \"https://www.newrhodesconstruction.com/contact-us/\",\r\n                    \"_blank\"\r\n                  );\r\n                }}\r\n              >\r\n                Contact\r\n              </LinkText>\r\n            </RightBarDiv>\r\n\r\n            <RightItemsCont top=\"22%\">\r\n              <Header>Thank you!</Header>\r\n              <Header margin=\"0\" margintop=\"-2.5%\">\r\n                Welcome to New Rhodes Construction.\r\n              </Header>\r\n              <BodyPara bodycolor=\"black\" width=\"55%\">\r\n                Please Log In To Select Your Region.\r\n              </BodyPara>\r\n              <MediumGreenButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n               Continue\r\n              </MediumGreenButton>\r\n            </RightItemsCont>\r\n\r\n            <FlexColumnCont\r\n              width=\"95%\"\r\n              height=\"5%\"\r\n              margintop=\"3.75vw\"\r\n              flexdirection=\"row\"\r\n              justifycontent=\"flex-end\"\r\n              alignitems=\"right\"\r\n            >\r\n              <PrivacyPolicy>\r\n                All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n              </PrivacyPolicy>\r\n            </FlexColumnCont>\r\n          </RightAuthCont>\r\n        </AuthCont>\r\n      );\r\n    }\r\n  }\r\n};\r\n\r\nSignUpPage.defaultProps = {\r\n  h1: \"This is my default text\",\r\n};\r\n\r\nexport default SignUpPage;\r\n","/* eslint-disable */\r\n\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport axios from \"axios\";\r\n\r\nimport { AuthCont } from \"../../../StylesheetComps/AuthSheet\";\r\n\r\n//Left Container\r\nimport { LeftAuthCont } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { LeftItemsCont } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { Logo } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { Header } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { BodyPara } from \"../../../StylesheetComps/AuthSheet\";\r\n\r\n//Right Container\r\nimport {\r\n  RightAuthCont,\r\n  MediumGreenButton,\r\n  MediumWhiteButton,\r\n} from \"../../../StylesheetComps/AuthSheet\";\r\nimport { RightItemsCont } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { RightBarDiv } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { LinkText } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { PrivacyPolicy } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { TextInput300x50 } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { InputDiv } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { SmallHeader } from \"../../../StylesheetComps/Menu\";\r\nimport { passwordStrength } from \"check-password-strength\";\r\nimport { FlexColumnCont } from \"../../../StylesheetComps/Menu\";\r\nimport {\r\n  Div100vw20vh,\r\n  SignupItemContWithEffects,\r\n  AuthPageCont,\r\n} from \"../../../MobileComponents/Divs\";\r\nimport {\r\n  LogoRelative,\r\n  TopImage20vh,\r\n  TopImage40vh,\r\n} from \"../../../MobileComponents/Images\";\r\nimport { MobileWideGreenButton } from \"../../../MobileComponents/Buttons\";\r\nimport {\r\n  ErrorMessage12px,\r\n  UnderlinedBoldTitle16px,\r\n} from \"../../../MobileComponents/Text\";\r\n\r\nconst InstallerRegisterPage = () => {\r\n  const history = useHistory();\r\n  const [isMobile, setIsMobile] = useState(false);\r\n\r\n  //New User Credentials\r\n  const [un, setUn] = useState(\"\");\r\n  const [phone, setPhone] = useState(\"\");\r\n  const [email, setEmail] = useState(\"\");\r\n  const [pass, setPass] = useState(\"\");\r\n  const [confirmPass, setConfirmPass] = useState(\"\");\r\n\r\n  const [errorMessage, setErrorMessage] = useState(\"\");\r\n\r\n  const [signUpForm, setSignUpForm] = useState(true);\r\n  const [activateAccount, setActivateAccount] = useState(false);\r\n\r\n  const [displayPasswordInfo, setDisplayPasswordInfo] = useState(\"none\");\r\n\r\n  const [passwordColor, setPasswordColor] = useState(\"white\");\r\n\r\n  const InstallerRegister = async (username, phone, email, password) => {\r\n    if (pass !== confirmPass) {\r\n      setErrorMessage(\"Passwords don't match!\");\r\n    } else if (un.includes(\" \")) {\r\n      setErrorMessage(\"Username cannot contain spaces\");\r\n    } else if (un === \"\" || phone === \"\" || email === \"\" || pass === \"\") {\r\n      setErrorMessage(\"Please fill out all form inputs\");\r\n    } else if (passwordColor !== \"green\") {\r\n      setErrorMessage(\"Password not strong enough!\");\r\n    } else {\r\n      const resp = await axios\r\n        .post(window.$DBURL + \"users/installer\", {\r\n          Name: null,\r\n          Username: username,\r\n          Password: password,\r\n          Platform: navigator.userAgent.substring(0, 50),\r\n          Metro_Id: 0,\r\n          City_Id: 0,\r\n          Phone: phone,\r\n          Email: email,\r\n        })\r\n        .catch(handleErrors);\r\n      if (resp !== undefined) {\r\n        setActivateAccount(true);\r\n        setSignUpForm(false);\r\n      }\r\n    }\r\n  };\r\n\r\n  const CheckPasswordStrength = async (password) => {\r\n    if (displayPasswordInfo === \"none\") {\r\n      setDisplayPasswordInfo(\"flex\");\r\n    }\r\n    switch (\r\n      passwordStrength(password, [\r\n        {\r\n          id: 0,\r\n          value: \"Too weak\",\r\n          minDiversity: 0,\r\n          minLength: 0,\r\n        },\r\n        {\r\n          id: 1,\r\n          value: \"Weak\",\r\n          minDiversity: 2,\r\n          minLength: 4,\r\n        },\r\n        {\r\n          id: 2,\r\n          value: \"Medium\",\r\n          minDiversity: 3,\r\n          minLength: 6,\r\n        },\r\n        {\r\n          id: 3,\r\n          value: \"Strong\",\r\n          minDiversity: 4,\r\n          minLength: 8,\r\n        },\r\n      ]).value\r\n    ) {\r\n      case \"Too weak\":\r\n        setPasswordColor(\"red\");\r\n        break;\r\n\r\n      case \"Weak\":\r\n        setPasswordColor(\"orange\");\r\n        break;\r\n\r\n      case \"Medium\":\r\n        setPasswordColor(\"yellow\");\r\n        break;\r\n\r\n      case \"Strong\":\r\n        setPasswordColor(\"green\");\r\n        break;\r\n      default:\r\n    }\r\n  };\r\n\r\n  function handleErrors(err) {\r\n    if (err.request) {\r\n      setErrorMessage(err.response.data.Message);\r\n    } else if (err.response) {\r\n      setErrorMessage(err.response.data.Message);\r\n    }\r\n  }\r\n\r\n  window.onscroll = function () {\r\n    scrollFunction();\r\n  };\r\n\r\n  function scrollFunction() {\r\n    if (isMobile !== false) {\r\n      if (\r\n        document.body.scrollTop > 20 ||\r\n        document.documentElement.scrollTop > 20\r\n      ) {\r\n        if (\r\n          document.getElementById(\"headerimage\") !== null &&\r\n          document.getElementById(\"itemscontainer\") !== null &&\r\n          document.getElementById(\"logoimage\") !== null\r\n        ) {\r\n          document.getElementById(\"headerimage\").style.height = \"15vh\";\r\n          document.getElementById(\"itemscontainer\").style.top = \"-10%\";\r\n          document.getElementById(\"logoimage\").style.height = \"70px\";\r\n          document.getElementById(\"logoimage\").style.bottom = \"25%\";\r\n        }\r\n      } else {\r\n        if (\r\n          document.getElementById(\"headerimage\") !== null &&\r\n          document.getElementById(\"itemscontainer\") !== null &&\r\n          document.getElementById(\"logoimage\") !== null\r\n        ) {\r\n          document.getElementById(\"headerimage\").style.height = \"20vh\";\r\n          document.getElementById(\"itemscontainer\").style.top = \"1.5%\";\r\n          document.getElementById(\"logoimage\").style.height = \"120px\";\r\n          document.getElementById(\"logoimage\").style.bottom = \"45%\";\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    if (\r\n      /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\r\n        navigator.userAgent\r\n      ) ||\r\n      /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n        navigator.userAgent.substr(0, 4)\r\n      )\r\n    ) {\r\n      setIsMobile(true);\r\n    }\r\n  }, []);\r\n\r\n  if (isMobile == true) {\r\n    if (signUpForm === true) {\r\n      return (\r\n        <AuthPageCont>\r\n          <LeftAuthCont backgroundimg=\"/Signup Page Image.png\">\r\n            <LeftItemsCont>\r\n              <Logo src=\"NRCLogoRegularBlack.png\"></Logo>\r\n              <Header headercolor=\"white\">Welcome Back!</Header>\r\n              <BodyPara bodycolor=\"white\">\r\n                Log into your New Rhodes Construction account here.\r\n              </BodyPara>\r\n              <MediumWhiteButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Log In\r\n              </MediumWhiteButton>\r\n            </LeftItemsCont>\r\n          </LeftAuthCont>\r\n\r\n          <RightAuthCont>\r\n            <Div100vw20vh>\r\n              <TopImage20vh\r\n                id=\"headerimage\"\r\n                src=\"/Signup Page Image.png\"\r\n              ></TopImage20vh>\r\n              <LogoRelative\r\n                id=\"logoimage\"\r\n                src=\"/NRCLogoRegularBlack.png\"\r\n              ></LogoRelative>\r\n            </Div100vw20vh>\r\n\r\n            <br></br>\r\n            <br></br>\r\n            <br></br>\r\n\r\n            <SignupItemContWithEffects id=\"itemscontainer\">\r\n              <Header marginbottom=\"0.5%\">Installer Registration</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"50%\" marginbottom=\"3%\">\r\n              To find projects posted by homeowners, you need register as an installer. \r\n               You can use your email as username.\r\n               <SmallHeader\r\n                mobilefontsize=\"18px\"\r\n                cursor=\"pointer\"\r\n                display=\"block\"\r\n                mobiledisplay=\"block\"\r\n                margintop=\"5%\"\r\n                textdecoration=\"underline\"\r\n                color=\"blue\"\r\n                onClick={() => {\r\n                  history.push(\"/signup\");\r\n                }}\r\n              >\r\n                If you are a home owner to submit your project, click here to sign up\r\n              </SmallHeader>\r\n              </BodyPara>\r\n              <InputDiv mobileflexdirection=\"column\">\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Email or Username\"\r\n                  mobilewidth=\"70vw\"\r\n                  inputwidth=\"7\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setUn(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n                <TextInput300x50\r\n                  inputmarginleft=\"5%\"\r\n                  inputmarginleftmobile=\"0\"\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Cell Phone\"\r\n                  mobilewidth=\"70vw\"\r\n                  inputwidth=\"40%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setPhone(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Email Address\"\r\n                  mobilewidth=\"70vw\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setEmail(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  type=\"password\"\r\n                  placeholder=\"Password\"\r\n                  mobilewidth=\"70vw\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setPass(e.target.value);\r\n                    CheckPasswordStrength(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  type=\"password\"\r\n                  mobilewidth=\"70vw\"\r\n                  placeholder=\"Confirm Password\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setConfirmPass(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n              </InputDiv>\r\n              <br></br>\r\n              <ErrorMessage12px>{errorMessage}</ErrorMessage12px>\r\n              <FlexColumnCont\r\n                display={displayPasswordInfo}\r\n                height=\"20%\"\r\n                padding=\"5px\"\r\n                margintop=\"5px\"\r\n                width=\"42%\"\r\n                margin=\"0\"\r\n              >\r\n                <FlexColumnCont\r\n                  mobilewidth=\"70vw\"\r\n                  borderradius=\"10px\"\r\n                  margin=\"0\"\r\n                  height=\"0.5%\"\r\n                  padding=\"5px\"\r\n                  margintop=\"-15px\"\r\n                  width=\"100%\"\r\n                  bgcolor={passwordColor}\r\n                  border=\"1px solid #d3d3d3\"\r\n                ></FlexColumnCont>\r\n                <BodyPara\r\n                  bodycolor=\"grey\"\r\n                  fontsize=\"14px\"\r\n                  width=\"100%\"\r\n                  margintop=\"2.5%\"\r\n                >\r\n                    Password must contain at least one lower- and upper-case letter, one number, \r\n                  one special character, and be longer than eight characters.\r\n                </BodyPara>\r\n              </FlexColumnCont>\r\n              <MobileWideGreenButton\r\n                onClick={() => {\r\n                  InstallerRegister(un, phone, email, pass);\r\n                }}\r\n              >\r\n                Register\r\n              </MobileWideGreenButton>\r\n              <UnderlinedBoldTitle16px\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Have an account? Login here\r\n              </UnderlinedBoldTitle16px>\r\n            </SignupItemContWithEffects>\r\n\r\n            <FlexColumnCont\r\n              width=\"95%\"\r\n              height=\"5%\"\r\n              margintop=\"3.75vw\"\r\n              flexdirection=\"row\"\r\n              justifycontent=\"flex-end\"\r\n              alignitems=\"right\"\r\n            >\r\n              <PrivacyPolicy>\r\n                All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n              </PrivacyPolicy>\r\n            </FlexColumnCont>\r\n          </RightAuthCont>\r\n        </AuthPageCont>\r\n      );\r\n    } else if (activateAccount === true) {\r\n      return (\r\n        <AuthCont>\r\n          <LeftAuthCont backgroundimg=\"/Signup Page Image.png\">\r\n            <LeftItemsCont>\r\n              <Logo src=\"NRCLogoRegularBlack.png\"></Logo>\r\n              <Header headercolor=\"white\">Welcome Back!</Header>\r\n              <BodyPara bodycolor=\"white\">\r\n                Log into your New Rhodes Construction account here.\r\n              </BodyPara>\r\n              <MediumWhiteButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Log In\r\n              </MediumWhiteButton>\r\n            </LeftItemsCont>\r\n          </LeftAuthCont>\r\n\r\n          <RightAuthCont>\r\n            <Div100vw20vh>\r\n              <TopImage40vh\r\n                id=\"headerimage\"\r\n                src=\"/Signup Page Image.png\"\r\n              ></TopImage40vh>\r\n              <LogoRelative\r\n                id=\"logoimage\"\r\n                src=\"/NRCLogoRegularBlack.png\"\r\n              ></LogoRelative>\r\n            </Div100vw20vh>\r\n\r\n            <br></br>\r\n            <br></br>\r\n            <br></br>\r\n\r\n            <RightItemsCont top=\"20%\">\r\n              <Header>Verify Your Account</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"55%\">\r\n              Verify your account by clicking the verification link sent to your email or phone number.\r\n              </BodyPara>\r\n              <br></br>\r\n              <MobileWideGreenButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Continue\r\n              </MobileWideGreenButton>\r\n            </RightItemsCont>\r\n\r\n            <FlexColumnCont\r\n              width=\"95%\"\r\n              height=\"5%\"\r\n              margintop=\"3.75vw\"\r\n              flexdirection=\"row\"\r\n              justifycontent=\"flex-end\"\r\n              alignitems=\"right\"\r\n            >\r\n              <PrivacyPolicy>\r\n                All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n              </PrivacyPolicy>\r\n            </FlexColumnCont>\r\n          </RightAuthCont>\r\n        </AuthCont>\r\n      );\r\n    }\r\n  } else {\r\n    if (signUpForm === true) {\r\n      return (\r\n        <AuthCont>\r\n          <LeftAuthCont backgroundimg=\"/Signup Page Image.png\">\r\n            <LeftItemsCont>\r\n              <Logo src=\"NRCLogoRegularBlack.png\"></Logo>\r\n              <Header headercolor=\"white\">Welcome Back!</Header>\r\n              <BodyPara bodycolor=\"white\">\r\n                Log into your New Rhodes Construction account here.\r\n              </BodyPara>\r\n              <MediumWhiteButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Log In\r\n              </MediumWhiteButton>\r\n            </LeftItemsCont>\r\n          </LeftAuthCont>\r\n\r\n          <RightAuthCont>\r\n            <RightBarDiv>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\"https://www.newrhodesconstruction.com/\", \"_blank\");\r\n                }}\r\n              >\r\n                Home\r\n              </LinkText>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\"https://www.newrhodesconstruction.com/about/\", \"_blank\");\r\n                }}\r\n              >\r\n                About\r\n              </LinkText>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\r\n                    \"https://www.newrhodesconstruction.com/contact-us/\",\r\n                    \"_blank\"\r\n                  );\r\n                }}\r\n              >\r\n                Contact\r\n              </LinkText>\r\n            </RightBarDiv>\r\n\r\n            <RightItemsCont top=\"1.5%\">\r\n              <Header marginbottom=\"0.5%\">Installer Registration</Header>\r\n              <BodyPara bodycolor=\"black\" width=\"50%\" marginbottom=\"3%\">\r\n                To find projects posted by homeowners, you need register as an installer. \r\n                You can use your email as username.\r\n                <SmallHeader\r\n                mobilefontsize=\"18px\"\r\n                cursor=\"pointer\"\r\n                display=\"block\"\r\n                mobiledisplay=\"block\"\r\n                margintop=\"5%\"\r\n                textdecoration=\"underline\"\r\n                color=\"blue\"\r\n                onClick={() => {\r\n                  history.push(\"/signup\");\r\n                }}\r\n              >\r\n                If you are a home owner to submit your project, click here to sign up\r\n              </SmallHeader>\r\n              </BodyPara>\r\n              <InputDiv mobileflexdirection=\"column\">\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Email or Username\"\r\n                  mobilewidth=\"62vw\"\r\n                  inputwidth=\"40%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setUn(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n                <TextInput300x50\r\n                  inputmarginleft=\"5%\"\r\n                  inputmarginleftmobile=\"0\"\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Cell Phone\"\r\n                  mobilewidth=\"62vw\"\r\n                  inputwidth=\"40%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setPhone(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n              </InputDiv>\r\n              <InputDiv>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  placeholder=\"Email Address\"\r\n                  mobilewidth=\"62vw\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setEmail(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n              </InputDiv>\r\n              <InputDiv>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  type=\"password\"\r\n                  placeholder=\"Password\"\r\n                  mobilewidth=\"62vw\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setPass(e.target.value);\r\n                    CheckPasswordStrength(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n              </InputDiv>\r\n              <InputDiv>\r\n                <TextInput300x50\r\n                  autoComplete=\"new-password\"\r\n                  type=\"password\"\r\n                  mobilewidth=\"62vw\"\r\n                  placeholder=\"Confirm Password\"\r\n                  inputwidth=\"100%\"\r\n                  inputheight=\"2.5vh\"\r\n                  onChange={(e) => {\r\n                    setConfirmPass(e.target.value);\r\n                  }}\r\n                ></TextInput300x50>\r\n              </InputDiv>\r\n              <SmallHeader margintop=\"2%\" color=\"red\">\r\n                {errorMessage}\r\n              </SmallHeader>\r\n              <FlexColumnCont\r\n                display={displayPasswordInfo}\r\n                height=\"20%\"\r\n                padding=\"5px\"\r\n                margintop=\"5px\"\r\n                width=\"42%\"\r\n                margin=\"0\"\r\n              >\r\n                <FlexColumnCont\r\n                  mobilewidth=\"70vw\"\r\n                  borderradius=\"10px\"\r\n                  margin=\"0\"\r\n                  height=\"0.5%\"\r\n                  padding=\"5px\"\r\n                  margintop=\"-15px\"\r\n                  width=\"100%\"\r\n                  bgcolor={passwordColor}\r\n                  border=\"1px solid #d3d3d3\"\r\n                ></FlexColumnCont>\r\n                <BodyPara\r\n                  bodycolor=\"grey\"\r\n                  fontsize=\"14px\"\r\n                  width=\"100%\"\r\n                  margintop=\"2.5%\"\r\n                >\r\n                  Password must contain at least one lower- and upper-case letter, one number, \r\n                  one special character, and be longer than eight characters.\r\n                </BodyPara>\r\n              </FlexColumnCont>\r\n              <MediumGreenButton\r\n                onClick={() => {\r\n                  InstallerRegister(un, phone, email, pass);\r\n                }}\r\n              >\r\n                Register\r\n              </MediumGreenButton>\r\n              <SmallHeader\r\n                mobilefontsize=\"18px\"\r\n                cursor=\"pointer\"\r\n                display=\"none\"\r\n                mobiledisplay=\"block\"\r\n                margintop=\"5%\"\r\n                textdecoration=\"underline\"\r\n                color=\"blue\"\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Have an account? Login here\r\n              </SmallHeader>\r\n            </RightItemsCont>\r\n\r\n            <FlexColumnCont\r\n              width=\"95%\"\r\n              height=\"5%\"\r\n              margintop=\"3.75vw\"\r\n              flexdirection=\"row\"\r\n              justifycontent=\"flex-end\"\r\n              alignitems=\"right\"\r\n            >\r\n              <PrivacyPolicy>\r\n                All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n              </PrivacyPolicy>\r\n            </FlexColumnCont>\r\n          </RightAuthCont>\r\n        </AuthCont>\r\n      );\r\n    } else if (activateAccount === true) {\r\n      return (\r\n        <AuthCont>\r\n          <LeftAuthCont backgroundimg=\"/Signup Page Image.png\">\r\n            <LeftItemsCont>\r\n              <Logo src=\"NRCLogoRegularBlack.png\"></Logo>\r\n              <Header headercolor=\"white\">Welcome Back!</Header>\r\n              <BodyPara bodycolor=\"white\">\r\n                Log into your New Rhodes Construction account here.\r\n              </BodyPara>\r\n              <MediumWhiteButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Log In\r\n              </MediumWhiteButton>\r\n            </LeftItemsCont>\r\n          </LeftAuthCont>\r\n\r\n          <RightAuthCont>\r\n            <RightBarDiv>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\"https://www.newrhodesconstruction.com/\", \"_blank\");\r\n                }}\r\n              >\r\n                Home\r\n              </LinkText>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\"https://www.newrhodesconstruction.com/about/\", \"_blank\");\r\n                }}\r\n              >\r\n                About\r\n              </LinkText>\r\n              <LinkText\r\n                onClick={() => {\r\n                  window.open(\r\n                    \"https://www.newrhodesconstruction.com/contact-us/\",\r\n                    \"_blank\"\r\n                  );\r\n                }}\r\n              >\r\n                Contact\r\n              </LinkText>\r\n            </RightBarDiv>\r\n\r\n            <RightItemsCont top=\"22%\">\r\n              <Header>Thank you!</Header>\r\n              <Header margin=\"0\" margintop=\"-2.5%\">\r\n                Welcome to New Rhodes Construction.\r\n              </Header>\r\n              <BodyPara bodycolor=\"black\" width=\"55%\">\r\n                Please Log In and Select Your Region\r\n              </BodyPara>\r\n              <MediumGreenButton\r\n                onClick={() => {\r\n                  history.push(\"/\");\r\n                }}\r\n              >\r\n                Continue\r\n              </MediumGreenButton>\r\n            </RightItemsCont>\r\n\r\n            <FlexColumnCont\r\n              width=\"95%\"\r\n              height=\"5%\"\r\n              margintop=\"3.75vw\"\r\n              flexdirection=\"row\"\r\n              justifycontent=\"flex-end\"\r\n              alignitems=\"right\"\r\n            >\r\n              <PrivacyPolicy>\r\n                All rights reserved 2020 New Rhodes Construction Privacy Policy\r\n              </PrivacyPolicy>\r\n            </FlexColumnCont>\r\n          </RightAuthCont>\r\n        </AuthCont>\r\n      );\r\n    }\r\n  }\r\n};\r\n\r\nInstallerRegisterPage.defaultProps = {\r\n  h1: \"This is my default text\",\r\n};\r\n\r\nexport default InstallerRegisterPage;","// Importing React\r\nimport React from \"react\";\r\n\r\n// Importing stylesheet components\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\n// Importing API functions\r\nimport { CaseStatus } from \"../../API_Functions/CaseQuote_Functions\";\r\n\r\n// Importing mobile-specific stylesheet components\r\nimport { RegularTextMobileSmall } from \"../../StylesheetComps/Titles\";\r\n\r\nconst CaseStatusButton = ({ Status, StatusText, StatusColor }) => {\r\n  switch (Status) {\r\n    case CaseStatus.Drafted:\r\n      StatusText = \"Draft\";\r\n      StatusColor = ColorPalette.DarkGrey;\r\n      break;\r\n    case CaseStatus.Submitted:\r\n      StatusText = \"Submitted\";\r\n      StatusColor = ColorPalette.PrimaryRed;\r\n      break;\r\n    case CaseStatus.Accepted:\r\n      StatusText = \"Assigned\";\r\n      StatusColor = ColorPalette.PrimaryButtonBlue;\r\n      break;\r\n    case CaseStatus.Processed:\r\n      StatusText = \"Estimated\";\r\n      StatusColor = ColorPalette.PrimaryButtonBlue;\r\n      break;\r\n    case CaseStatus.Closed:\r\n      StatusText = \"Closed\";\r\n      StatusColor = ColorPalette.DarkGrey;\r\n      break;\r\n    case CaseStatus.PayPending:\r\n      StatusText = \"Accepted Project\";\r\n      StatusColor = ColorPalette.PrimaryYellow;\r\n      break;\r\n    case CaseStatus.Construction:\r\n      StatusText = \"In-Progress\";\r\n      StatusColor = ColorPalette.PrimaryOrange;\r\n      break;\r\n    case CaseStatus.CancelRequested:\r\n      StatusText = \"Cancel Requested\";\r\n      StatusColor = ColorPalette.PrimaryRed;\r\n      break;\r\n    case CaseStatus.Canceled:\r\n      StatusText = \"Cancelled\";\r\n      StatusColor = ColorPalette.PrimaryRed;\r\n      break;\r\n    default:\r\n      StatusText = \"Draft\";\r\n      StatusColor = ColorPalette.DarkGrey;\r\n  }\r\n\r\n  return (\r\n    <RegularTextMobileSmall bgcolor={StatusColor}>\r\n      {\" \"}\r\n      {StatusText}{\" \"}\r\n    </RegularTextMobileSmall>\r\n  );\r\n};\r\n\r\nCaseStatusButton.defaultProps = {};\r\n\r\nexport default CaseStatusButton;\r\n","import React, { useEffect } from 'react';\r\n\r\nconst CalendlyWidget = () => {\r\n    useEffect(() => {\r\n        // Create script element\r\n        const script = document.createElement('script');\r\n        script.src = 'https://assets.calendly.com/assets/external/widget.js';\r\n        script.async = true;\r\n\r\n        // Append script to the body\r\n        document.body.appendChild(script);\r\n\r\n        // Cleanup function to remove script from the body on component unmount\r\n        return () => {\r\n            document.body.removeChild(script);\r\n        };\r\n    }, []);\r\n\r\n    return (\r\n        <div \r\n            className=\"calendly-inline-widget\" \r\n            data-url=\"https://calendly.com/d/2kb-8wf-np4?hide_gdpr_banner=1&primary_color=169adb\" \r\n            style={{ minWidth: \"45%\", height: \"90vh\", marginLeft:'20px', marginBottom:'20px', marginRight:'20px' }}\r\n        ></div>\r\n    );\r\n};\r\n\r\nexport default CalendlyWidget;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../StylesheetComps/Menu\";\r\n\r\nimport { GetUserCases } from \"../../API_Functions/CaseQuote_Functions\";\r\n\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\nimport CaseStatusButton from \"../../comps/CaseStatusButton\";\r\nimport { MobileWideGreenButton } from \"../../MobileComponents/Buttons\";\r\nimport {\r\n  Div100vw20vh,\r\n  GreenBorderColumnDiv,\r\n  MobileSpaceAroundDiv,\r\n} from \"../../MobileComponents/Divs\";\r\nimport { TopImage40vh } from \"../../MobileComponents/Images\";\r\nimport {\r\n  GreenLeagueText,\r\n  MenuHeader,\r\n  MobileBodyText,\r\n  RegularGreenLeagueText,\r\n} from \"../../MobileComponents/Text\";\r\nimport { GreenButtonWidth12VWHeight40 } from \"../../StylesheetComps/AuthSheet\";\r\nimport {\r\n  DivWithMarginPadding,\r\n  FlexColumnCont80vwAutoHeight,\r\n  FlexColumnCont80x100Percent,\r\n  FlexColumnContAutoHeightLeftAlign,\r\n  FlexColumnFullWidth,\r\n  FlexColumnFullWidthMargins,\r\n  FlexContDashboard,\r\n  FlexContDashboardHeightFixed,\r\n  FlexContzIndex1,\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContFullWidth,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  Image200x200pxContain,\r\n  RoundedImageFullWidth,\r\n} from \"../../StylesheetComps/Imgs/Images\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  LeagueSpartanExtraLargeWidth200px,\r\n  RegularText,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport CalendlyWidget from \"../../comps/CalendlyWidget\";\r\nimport { FlexDivMargins } from \"../../StylesheetComps/Div\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\nconst DashboardScreen = () => {\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [recentUserCases, setRecentUserCases] = useState([]);\r\n  const [mostRecentCase, setMostRecentCase] = useState([]);\r\n  const history = useHistory();\r\n  const [metroId, setMetroId] = useState(0);\r\n  const [storeId, setStoreId] = useState(0);\r\n\r\n  window.addEventListener(\"beforeinstallprompt\", (ev) => {\r\n    ev.preventDefault();\r\n\r\n    ActionMenu.onclick = () => ev.prompt();\r\n  });\r\n\r\n  const GetCurrentProjects = async (userId) => {\r\n    try {\r\n      // Get the user cases\r\n      const cases = await GetUserCases(userId);\r\n  \r\n      // If there are any cases, set the recent user cases and the most recent case\r\n      if (cases.Cases && cases.Cases.length) {\r\n        setRecentUserCases(cases.Cases.slice(0, 3));\r\n        setMostRecentCase(cases.Cases.slice(0, 1));\r\n      }\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const CheckStoreEstimates = async (metroId, storeId) => {\r\n    try {\r\n      // Make an HTTP request to the specified URL\r\n      const resp = await axios.get(`${window.$DBURL}store/metro/${metroId}`);\r\n  \r\n      // Check the response status and ensure the data and stores properties are not null\r\n      if (resp.status === 200 && resp.data && resp.data.stores) {\r\n        if (storeId === 0) {\r\n          // If there is more than one store, navigate to the store list page\r\n          if (resp.data.stores.length !== 1) {\r\n            history.push(`/storelistestimate/${metroId}`);\r\n          } else {\r\n            // If there is only one store, navigate to the estimate page for that store\r\n            history.push(`/estimate/${metroId}/${resp.data.stores[0].Id}`);\r\n          }\r\n        } else {\r\n          // If a store ID was specified, navigate to the estimate page for that store\r\n          history.push(`/estimate/${metroId}/${storeId}`);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      // Log any errors that occurred during the HTTP request\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  //Test Supabase Data Loading\r\n  \r\n\r\n  useEffect(() => {\r\n    // Set the header authorization\r\n    SetHeaderAuthorization();\r\n  \r\n    // Get the user info from session storage\r\n    const userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n  \r\n    // Set the role number, current projects, metro ID, and store ID\r\n    setRoleNum(userinfo.Role);\r\n    GetCurrentProjects(userinfo.Id);\r\n    setMetroId(userinfo.Metro_Id);\r\n    setStoreId(userinfo.Store_Id);\r\n  }, []);\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    if (roleNum !== UserRole.Loading || roleNum !== UserRole.Manager || roleNum !== UserRole.Estimator) {\r\n      return (\r\n        <FlexContzIndex1>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n\r\n          <FlexColumnCont80vwAutoHeight>\r\n            <ActionMenu mobilePageProp=\"Home\"></ActionMenu>\r\n\r\n            <Div100vw20vh>\r\n              <TopImage40vh src=\"/homescreenimg.png\"></TopImage40vh>\r\n            </Div100vw20vh>\r\n\r\n            <FlexColumnCont\r\n              flexdirection=\"row\"\r\n              height=\"98%\"\r\n              width=\"81%\"\r\n              margin=\"0.25%\"\r\n              marginbottom=\"0\"\r\n              mobileflexdirection=\"column\"\r\n              mobilepaddingbottom=\"15vh\"\r\n            >\r\n              <FlexColumnCont height=\"90%\" mobileflexdirection=\"column\">\r\n                <GreenBorderColumnDiv>\r\n                  <GreenLeagueText>\r\n                    Ready to Start Your Project?\r\n                  </GreenLeagueText>\r\n                  <MobileBodyText>\r\n                    Start your project today and receive a free estimate.\r\n                  </MobileBodyText>\r\n                  <MobileWideGreenButton\r\n                    onClick={() => {\r\n                      CheckStoreEstimates(metroId, storeId);\r\n                    }}\r\n                  >\r\n                    New Project\r\n                  </MobileWideGreenButton>\r\n                </GreenBorderColumnDiv>\r\n              </FlexColumnCont>\r\n\r\n              <MobileSpaceAroundDiv>\r\n                <MenuHeader>Current Projects</MenuHeader>\r\n                <RegularGreenLeagueText\r\n                  fontsize=\"10px\"\r\n                  onClick={() => {\r\n                    history.push(\"/CasesPersonal/\" + metroId + \"/\" + storeId);\r\n                  }}\r\n                >\r\n                  View All\r\n                </RegularGreenLeagueText>\r\n              </MobileSpaceAroundDiv>\r\n\r\n              <br></br>\r\n\r\n              {recentUserCases.map((o, i) => (\r\n                <FlexColumnCont\r\n                  key={i}\r\n                  borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n                  mobilejustifycontent=\"space-between\"\r\n                  mobilewidth=\"90%\"\r\n                  cursor=\"pointer\"\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/viewcaseuser/\" +\r\n                        o.Metro_Id +\r\n                        \"/\" +\r\n                        o.Store_Id +\r\n                        \"/\" +\r\n                        o.Id\r\n                    );\r\n                  }}\r\n                  flexdirection=\"row\"\r\n                  justifycontent=\"flex-start\"\r\n                >\r\n                  <FlexColumnCont width=\"32%\" alignitems=\"left\">\r\n                    <SmallHeader\r\n                      width=\"100%\"\r\n                      mobilefontsize=\"14px\"\r\n                      fontsize=\"16px\"\r\n                    >\r\n                      {o.Tittle}\r\n                    </SmallHeader>\r\n                    <SmallHeader fontsize=\"16px\">{o.Street}</SmallHeader>\r\n                  </FlexColumnCont>\r\n                  <FlexColumnCont\r\n                    mobiledisplay=\"none\"\r\n                    wordwrap=\"break-word\"\r\n                    width=\"20%\"\r\n                    alignitems=\"left\"\r\n                  >\r\n                    {o.CreateTime.substring(0, 10)}\r\n                  </FlexColumnCont>\r\n                  <FlexColumnCont width=\"18%\" alignitems=\"left\">\r\n                    <CaseStatusButton Status={o.CaseStatus}></CaseStatusButton>\r\n                  </FlexColumnCont>\r\n                </FlexColumnCont>\r\n              ))}\r\n            </FlexColumnCont>\r\n          </FlexColumnCont80vwAutoHeight>\r\n        </FlexContzIndex1>\r\n      );\r\n    } else if (roleNum == UserRole.Manager || roleNum == UserRole.Estimator) {\r\n      return (\r\n        <FlexContzIndex1>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n\r\n        <FlexColumnCont80vwAutoHeight>\r\n          <ActionMenu mobilePageProp=\"Home\"></ActionMenu>\r\n\r\n          <Div100vw20vh>\r\n            <TopImage40vh src=\"/homescreenimg.png\"></TopImage40vh>\r\n          </Div100vw20vh>\r\n\r\n          <FlexColumnCont\r\n            flexdirection=\"row\"\r\n            height=\"98%\"\r\n            width=\"81%\"\r\n            margin=\"0.25%\"\r\n            marginbottom=\"0\"\r\n            mobileflexdirection=\"column\"\r\n            mobilepaddingbottom=\"15vh\"\r\n          >\r\n            <FlexColumnCont height=\"90%\" mobileflexdirection=\"column\">\r\n              <GreenBorderColumnDiv>\r\n                <GreenLeagueText>\r\n                  Ready to Start Your Project?\r\n                </GreenLeagueText>\r\n                <MobileBodyText>\r\n                  Start your project today and receive a free estimate.\r\n                </MobileBodyText>\r\n                <MobileWideGreenButton\r\n                  onClick={() => {\r\n                    CheckStoreEstimates(metroId, storeId);\r\n                  }}\r\n                >\r\n                  New Project\r\n                </MobileWideGreenButton>\r\n              </GreenBorderColumnDiv>\r\n            </FlexColumnCont>\r\n\r\n            <MobileSpaceAroundDiv>\r\n              <MenuHeader>Current Projects</MenuHeader>\r\n              <RegularGreenLeagueText\r\n                fontsize=\"10px\"\r\n                onClick={() => {\r\n                  history.push(\"/CasesPersonal/\" + metroId + \"/\" + storeId);\r\n                }}\r\n              >\r\n                View All\r\n              </RegularGreenLeagueText>\r\n            </MobileSpaceAroundDiv>\r\n\r\n            <br></br>\r\n\r\n            {recentUserCases.map((o, i) => (\r\n              <FlexColumnCont\r\n                key={i}\r\n                borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n                mobilejustifycontent=\"space-between\"\r\n                mobilewidth=\"90%\"\r\n                cursor=\"pointer\"\r\n                onClick={() => {\r\n                  history.push(\r\n                    \"/viewcaseuser/\" +\r\n                      o.Metro_Id +\r\n                      \"/\" +\r\n                      o.Store_Id +\r\n                      \"/\" +\r\n                      o.Id\r\n                  );\r\n                }}\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n              >\r\n                <FlexColumnCont width=\"32%\" alignitems=\"left\">\r\n                  <SmallHeader\r\n                    width=\"100%\"\r\n                    mobilefontsize=\"14px\"\r\n                    fontsize=\"16px\"\r\n                  >\r\n                    {o.Tittle}\r\n                  </SmallHeader>\r\n                  <SmallHeader fontsize=\"16px\">{o.Street}</SmallHeader>\r\n                </FlexColumnCont>\r\n                <FlexColumnCont\r\n                  mobiledisplay=\"none\"\r\n                  wordwrap=\"break-word\"\r\n                  width=\"20%\"\r\n                  alignitems=\"left\"\r\n                >\r\n                  {o.CreateTime.substring(0, 10)}\r\n                </FlexColumnCont>\r\n                <FlexColumnCont width=\"18%\" alignitems=\"left\">\r\n                  <CaseStatusButton Status={o.CaseStatus}></CaseStatusButton>\r\n                </FlexColumnCont>\r\n              </FlexColumnCont>\r\n            ))}\r\n          </FlexColumnCont>\r\n        </FlexColumnCont80vwAutoHeight>\r\n      </FlexContzIndex1>\r\n      );\r\n    } else {\r\n      return (\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      );\r\n    }\r\n  } else {\r\n    //Desktop\r\n    if (roleNum !== UserRole.Loading) {\r\n      return (\r\n        <FlexContzIndex1>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n\r\n          <FlexColumnFullWidth>\r\n            <FlexColumnCont80x100Percent width=\"80vw\">\r\n              <FlexContDashboard>\r\n                {/* <FlexRowContFullWidth>\r\n                  <RoundedImageFullWidth src=\"/Dashboard_Golf.png\"></RoundedImageFullWidth>\r\n\r\n                  <FlexColumnCont margin=\"3%\" height=\"auto\">\r\n                    <FlexColumnContAutoHeightLeftAlign>\r\n                      <FlexColumnContAutoHeightLeftAlign>\r\n                        <LeagueSpartanExtraLargeBold>\r\n                          Start a New Project\r\n                        </LeagueSpartanExtraLargeBold>\r\n                        <RegularText>\r\n                          New Project and receive a free cost estimate and construction plan. Once\r\n                          approved, we'll schedule the work and start building!\r\n                        </RegularText>\r\n                      </FlexColumnContAutoHeightLeftAlign>\r\n                      <br></br>\r\n                      <GreenButtonWidth12VWHeight40\r\n                        bgcolor={ColorPalette.PrimaryButtonBlue}\r\n                        fontsize=\"1vw\"\r\n                        lineheight=\"290%\"\r\n                        border=\"4px solid white\"\r\n                        hoveropacity=\"75%\"\r\n                        onClick={() => {\r\n                          CheckStoreEstimates(metroId, storeId);\r\n                        }}\r\n                      >\r\n                        New Project\r\n                      </GreenButtonWidth12VWHeight40>\r\n                    </FlexColumnContAutoHeightLeftAlign>\r\n                  </FlexColumnCont>\r\n                </FlexRowContFullWidth> */}\r\n                <FlexDiv>\r\n                <RoundedImageFullWidth marginleft='1vw' height='90vh' width=\"40vw\" objfit=\"cover\" src=\"/Log In Image.png\"></RoundedImageFullWidth>\r\n                <CalendlyWidget></CalendlyWidget>\r\n\r\n                </FlexDiv>\r\n\r\n              </FlexContDashboard>\r\n\r\n              {/* <FlexRowCont100PercentSpaceBetween>\r\n                <FlexContDashboardHeightFixed\r\n                  paddingtop=\"5vh\"\r\n                  paddingbottom=\"10vh\"\r\n                >\r\n                  <FlexRowCont100PercentSpaceBetween>\r\n                    <LeagueSpartanExtraLargeBold>\r\n                      Recent Project\r\n                    </LeagueSpartanExtraLargeBold>\r\n                    <RegularGreenLeagueText\r\n                      onClick={() => {\r\n                        history.push(\r\n                          \"/CasesPersonal/\" + metroId + \"/\" + storeId\r\n                        );\r\n                      }}\r\n                    >\r\n                      View All\r\n                    </RegularGreenLeagueText>\r\n                  </FlexRowCont100PercentSpaceBetween>\r\n\r\n                  <br></br>\r\n\r\n                  {mostRecentCase.map((o, i) => (\r\n                    <FlexColumnCont\r\n                      key={i}\r\n                      cursor=\"pointer\"\r\n                      onClick={() => {\r\n                        history.push(\r\n                          \"/viewcaseuser/\" +\r\n                            o.Metro_Id +\r\n                            \"/\" +\r\n                            o.Store_Id +\r\n                            \"/\" +\r\n                            o.Id\r\n                        );\r\n                      }}\r\n                      flexdirection=\"row\"\r\n                      justifycontent=\"flex-start\"\r\n                    >\r\n                      <FlexColumnCont\r\n                        width=\"auto\"\r\n                        alignitems=\"left\"\r\n                        margin=\"0%\"\r\n                      >\r\n                        <SmallHeaderLeagueSpartan\r\n                          marginbottom=\"0px\"\r\n                          margintop=\"0px\"\r\n                        >\r\n                          {o.Tittle}\r\n                        </SmallHeaderLeagueSpartan>\r\n                        <SmallHeader fontsize=\"16px\" marginleft=\"0px\">\r\n                          {o.Street}\r\n                        </SmallHeader>\r\n                      </FlexColumnCont>\r\n                    </FlexColumnCont>\r\n                  ))}\r\n                </FlexContDashboardHeightFixed>\r\n\r\n                <FlexContDashboardHeightFixed paddingtop=\"0\" paddingbottom=\"10vh\">\r\n                  <FlexRowContFullWidth>\r\n                    <FlexColumnFullWidth>\r\n                      <LeagueSpartanExtraLargeBold>\r\n                        Support\r\n                      </LeagueSpartanExtraLargeBold>\r\n\r\n                      <br></br>\r\n                      <FlexColumnCont\r\n                        flexdirection=\"row\"\r\n                        justifycontent=\"flex-start\"\r\n                      >\r\n                        <FlexColumnCont\r\n                          width=\"auto\"\r\n                          alignitems=\"left\"\r\n                          margin=\"0%\"\r\n                        >\r\n                          <SmallHeaderLeagueSpartan\r\n                            marginbottom=\"0px\"\r\n                            margintop=\"0px\"\r\n                          >\r\n                            Contact our team for help.\r\n                          </SmallHeaderLeagueSpartan>\r\n\r\n                          <SmallHeader fontsize=\"16px\" marginleft=\"0px\">\r\n                            +1 (778) 800-3598\r\n                          </SmallHeader>\r\n                        </FlexColumnCont>\r\n                      </FlexColumnCont>\r\n                    </FlexColumnFullWidth>\r\n                    <Image200x200pxContain src=\"/CustomerServiceIcon.svg\"></Image200x200pxContain>\r\n                  </FlexRowContFullWidth>\r\n                </FlexContDashboardHeightFixed>\r\n              </FlexRowCont100PercentSpaceBetween> */}\r\n            </FlexColumnCont80x100Percent>\r\n          </FlexColumnFullWidth>\r\n        </FlexContzIndex1>\r\n      );\r\n    } else {\r\n      return (\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      );\r\n    }\r\n  }\r\n};\r\n\r\nDashboardScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default DashboardScreen;\r\n","// Importing React\r\nimport React from \"react\";\r\n\r\n// Importing React hooks\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\n// Importing stylesheet components\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { CaseCardCont } from \"../../StylesheetComps/Projects\";\r\nimport { SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport { GreenNavigationButton } from \"../../StylesheetComps/LandscapeForm\";\r\nimport {\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexRowContPropWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\n\r\n// Importing API functions\r\nimport { CaseStatus } from \"../../API_Functions/CaseQuote_Functions\";\r\n\r\n// Importing mobile components\r\nimport { LeagueHeader12px } from \"../../MobileComponents/Text\";\r\n\r\n// Importing custom buttons\r\nimport { LargeResponsiveButton } from \"../../StylesheetComps/AuthSheet\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\nconst CaseCardUser = ({\r\n  ProjectName,\r\n  Status,\r\n  CaseId,\r\n  StatusText,\r\n  StatusColor,\r\n  Address,\r\n  StartDate,\r\n}) => {\r\n  const { Id, storeId } = useParams();\r\n  const history = useHistory();\r\n  const projectpath = `/viewcaseuser/${Id}/${storeId}/${CaseId}`;\r\n\r\n  switch (Status) {\r\n    case CaseStatus.Drafted:\r\n      StatusText = \"Draft\";\r\n      StatusColor = ColorPalette.DarkGrey;\r\n      break;\r\n    case CaseStatus.Submitted:\r\n      StatusText = \"Submitted\";\r\n      StatusColor = ColorPalette.PrimaryRed;\r\n      break;\r\n    case CaseStatus.Accepted:\r\n      StatusText = \"Assigned\";\r\n      StatusColor = ColorPalette.PrimaryButtonBlue;\r\n      break;\r\n    case CaseStatus.Processed:\r\n      StatusText = \"Estimated\";\r\n      StatusColor = ColorPalette.PrimaryButtonBlue;\r\n      break;\r\n    case CaseStatus.Closed:\r\n      StatusText = \"Closed\";\r\n      StatusColor = ColorPalette.DarkGrey;\r\n      break;\r\n    case CaseStatus.PayPending:\r\n      StatusText = \"Accepted Project\";\r\n      StatusColor = ColorPalette.PrimaryYellow;\r\n      break;\r\n    case CaseStatus.Construction:\r\n      StatusText = \"In-Progress\";\r\n      StatusColor = ColorPalette.PrimaryOrange;\r\n      break;\r\n    case CaseStatus.CancelRequested:\r\n      StatusText = \"Cancel Requested\";\r\n      StatusColor = ColorPalette.PrimaryRed;\r\n      break;\r\n    case CaseStatus.Canceled:\r\n      StatusText = \"Cancelled\";\r\n      StatusColor = ColorPalette.PrimaryRed;\r\n      break;\r\n    default:\r\n      StatusText = \"Draft\";\r\n      StatusColor = ColorPalette.DarkGrey;\r\n  }\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    return (\r\n      <CaseCardCont\r\n        onClick={() => {\r\n          history.push(projectpath);\r\n        }}\r\n      >\r\n        <FlexColumnCont100xAutoPercent>\r\n          <LeagueHeader12px>{ProjectName}</LeagueHeader12px>\r\n          <SmallHeader>{Address}</SmallHeader>\r\n        </FlexColumnCont100xAutoPercent>\r\n\r\n        <FlexColumnCont100xAutoPercent>\r\n          <SmallHeader>{StartDate.substring(0, 10)}</SmallHeader>\r\n          <GreenNavigationButton\r\n            mobilemargintop=\"0\"\r\n            width=\"150px\"\r\n            mobilewidth=\"30vw\"\r\n            height=\"2.5vw\"\r\n            bgcolor={StatusColor}\r\n          >\r\n            {\" \"}\r\n            {StatusText}{\" \"}\r\n          </GreenNavigationButton>\r\n        </FlexColumnCont100xAutoPercent>\r\n      </CaseCardCont>\r\n    );\r\n  } else {\r\n    return (\r\n      <CaseCardCont\r\n        onClick={() => {\r\n          history.push(projectpath);\r\n        }}\r\n      >\r\n        <FlexRowContPropWidth width=\"25%\">\r\n          <SmallHeader>{ProjectName}</SmallHeader>\r\n        </FlexRowContPropWidth>\r\n\r\n        <FlexRowContPropWidth mobiledisplay=\"none\" width=\"30%\">\r\n          <SmallHeader>{Address}</SmallHeader>\r\n        </FlexRowContPropWidth>\r\n\r\n        <FlexRowContPropWidth mobiledisplay=\"none\" width=\"35%\">\r\n          <SmallHeader>{StartDate.substring(0, 10)}</SmallHeader>\r\n        </FlexRowContPropWidth>\r\n\r\n        <FlexRowContPropWidth\r\n          mobilejustifycontent=\"space-between\"\r\n          width=\"25%\"\r\n          height=\"100%\"\r\n        >\r\n          <RegularResponsiveButton\r\n            width=\"12.5vw\"\r\n            bgcolor={StatusColor}\r\n          >\r\n            {\" \"}\r\n            {StatusText}{\" \"}\r\n          </RegularResponsiveButton>\r\n        </FlexRowContPropWidth>\r\n      </CaseCardCont>\r\n    );\r\n  }\r\n};\r\n\r\nCaseCardUser.defaultProps = {\r\n  DateText: \"\",\r\n  TimeText: \"\",\r\n  ClientName: \"John Smith\",\r\n  Status: 0,\r\n  StatusText: \"Default\",\r\n  CaseId: 0,\r\n  DefaultColor: \"#F53838\",\r\n  StatusColor: \"grey\",\r\n  EstimatorName: \"Estimator\",\r\n  CaseImgs: [\"name\"],\r\n  ProjectName: \"Default Proj Name\",\r\n  Address: \"Default Address\",\r\n  StartDate: \"Default Start Date\",\r\n};\r\n\r\nexport default CaseCardUser;\r\n","//  React Imports ---------------------------------------\r\nimport React, { useState, useEffect } from \"react\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport axios from \"axios\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\n\r\n//  Imported Components ---------------------------------\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\nimport CaseCardUser from \"../../comps/CaseCardUser\";\r\n\r\n// Imported Styled Components ---------------------------\r\nimport {\r\n  LeftCont,\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnFullWidthMargins,\r\n  FlexColumnPropWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\nimport { Cont, ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { Header } from \"../../StylesheetComps/AuthSheet\";\r\nimport { GetUserCases } from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { LeagueFontSize100Percent } from \"../../StylesheetComps/Titles\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport { Div100vw10vh } from \"../../MobileComponents/Divs\";\r\nimport { TopImage15vh } from \"../../MobileComponents/Images\";\r\nimport { MobileWideGreenButtonRelative } from \"../../MobileComponents/Buttons\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\nconst MyProjectsScreen = () => {\r\n  var userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n  const params = useParams();\r\n\r\n  const [userCase, setUserCases] = useState([]);\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [metroId, setMetroId] = useState(0);\r\n  const [storeId, setStoreId] = useState(0);\r\n  const history = useHistory();\r\n\r\n  const RetrieveUserCases = async (userid) => {\r\n    let data = await GetUserCases(userid);\r\n    if (data !== null) {\r\n      setUserCases(data.Cases);\r\n      setRoleNum(userinfo.Role);\r\n    }\r\n  };\r\n\r\n  const CheckStoreEstimates = async (metroId, storeId) => {\r\n    const resp = await axios.get(window.$DBURL + \"store/metro/\" + metroId);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.stores !== null) {\r\n          if (storeId === 0) {\r\n            if (resp.data.stores.length !== 1) {\r\n              history.push(\"/storelistestimate/\" + metroId);\r\n            } else {\r\n              history.push(\r\n                \"/estimate/\" + metroId + \"/\" + resp.data.stores[0].Id\r\n              );\r\n            }\r\n          } else {\r\n            history.push(\"/estimate/\" + metroId + \"/\" + storeId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    setRoleNum(userinfo.Role);\r\n    RetrieveUserCases(userinfo.Id);\r\n    setMetroId(userinfo.Metro_Id);\r\n    setStoreId(userinfo.Store_Id);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    if (roleNum !== UserRole.Loading) {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <FlexColumn81vwLightGrey>\r\n            <ActionMenu\r\n              mobilePageProp=\"Projects\"\r\n              pageProp={\"Projects\"}\r\n              projectsbottom={\"4px solid \" + ColorPalette.PrimaryButtonBlue}\r\n            ></ActionMenu>\r\n\r\n            <Div100vw10vh>\r\n              <TopImage15vh src=\"/homescreenimg.png\"></TopImage15vh>\r\n            </Div100vw10vh>\r\n\r\n            <MobileWideGreenButtonRelative\r\n              onClick={() => {\r\n                CheckStoreEstimates(metroId, storeId);\r\n              }}\r\n            >\r\n              New Project +\r\n            </MobileWideGreenButtonRelative>\r\n\r\n            <ContentCont77vw>\r\n              <FlexColumnFullWidthMargins>\r\n                {/*  <Header margintop=\"0%\" marginbottom=\"0%\" fontsize=\"20px\">\r\n                  Current Projects\r\n                </Header> */}\r\n\r\n                <FlexColumnCont\r\n                  justifycontent=\"flex-start\"\r\n                  margin=\"0\"\r\n                  margintop=\"2%\"\r\n                  borderbottom={\"4px solid \" + ColorPalette.PrimaryButtonBlue}\r\n                  height=\"45px\"\r\n                  width=\"99%\"\r\n                  flexdirection=\"row\"\r\n                >\r\n                  <FlexColumnPropWidth\r\n                    width=\"auto\"\r\n                    marginright=\"11%\"\r\n                    marginleft=\"3.5%\"\r\n                  >\r\n                    <LeagueFontSize100Percent>\r\n                      Project Name\r\n                    </LeagueFontSize100Percent>\r\n                  </FlexColumnPropWidth>\r\n\r\n                  <FlexColumnPropWidth width=\"auto\" marginright=\"16.5%\">\r\n                    <LeagueFontSize100Percent>Address</LeagueFontSize100Percent>\r\n                  </FlexColumnPropWidth>\r\n\r\n                  <FlexColumnPropWidth width=\"auto\" marginright=\"28%\">\r\n                    <LeagueFontSize100Percent>Date</LeagueFontSize100Percent>\r\n                  </FlexColumnPropWidth>\r\n\r\n                  <FlexColumnPropWidth width=\"auto\" height=\"100%\">\r\n                    <LeagueFontSize100Percent>Status</LeagueFontSize100Percent>\r\n                  </FlexColumnPropWidth>\r\n                </FlexColumnCont>\r\n\r\n                {userCase.map((o, i) => (\r\n                  <CaseCardUser\r\n                    CaseImgs={o.ImageUrl}\r\n                    Status={o.CaseStatus}\r\n                    CaseId={o.Id}\r\n                    EstimatorName={o.Estimator}\r\n                    ProjectName={o.Tittle}\r\n                    Address={o.Street}\r\n                    StartDate={o.CreateTime}\r\n                    ClientName={o.Name}\r\n                    key={i}\r\n                    CaseNumber={\"#\" + o.CaseNumber}\r\n                    DateText={o.CreateTime}\r\n                  ></CaseCardUser>\r\n                ))}\r\n              </FlexColumnFullWidthMargins>\r\n            </ContentCont77vw>\r\n          </FlexColumn81vwLightGrey>\r\n        </Cont>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  } else if (roleNum !== UserRole.Loading) {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ActionMenu\r\n            mobilePageProp=\"Projects\"\r\n            pageProp={\"Projects\"}\r\n            projectsbottom={\"4px solid \" + ColorPalette.PrimaryButtonBlue}\r\n          ></ActionMenu>\r\n          <ContentCont77vw>\r\n            <FlexColumnFullWidthMargins>\r\n              {/* <Header margintop=\"0%\" marginbottom=\"0%\" fontsize=\"20px\">\r\n                Current Projects\r\n              </Header> */}\r\n\r\n              <FlexColumnCont\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n                margintop=\"1%\"\r\n                borderbottom={\"4px solid \" + ColorPalette.PrimaryButtonBlue}\r\n                height=\"6%\"\r\n                width=\"99%\"\r\n                flexdirection=\"row\"\r\n              >\r\n                <FlexColumnPropWidth\r\n                  width=\"auto\"\r\n                  minwidth=\"115px\"\r\n                  marginright=\"8.5vw\"\r\n                >\r\n                  <LeagueFontSize100Percent>\r\n                    Project Name\r\n                  </LeagueFontSize100Percent>\r\n                </FlexColumnPropWidth>\r\n\r\n                <FlexColumnPropWidth width=\"auto\" marginright=\"14vw\">\r\n                  <LeagueFontSize100Percent>Address</LeagueFontSize100Percent>\r\n                </FlexColumnPropWidth>\r\n\r\n                <FlexColumnPropWidth width=\"auto\" marginright=\"19vw\">\r\n                  <LeagueFontSize100Percent>Date</LeagueFontSize100Percent>\r\n                </FlexColumnPropWidth>\r\n\r\n                <FlexColumnPropWidth width=\"auto\" height=\"100%\">\r\n                  <LeagueFontSize100Percent></LeagueFontSize100Percent>\r\n                </FlexColumnPropWidth>\r\n              </FlexColumnCont>\r\n\r\n              {userCase.map((o, i) => (\r\n                <CaseCardUser\r\n                  CaseImgs={o.ImageUrl}\r\n                  Status={o.CaseStatus}\r\n                  CaseId={o.Id}\r\n                  EstimatorName={o.Estimator}\r\n                  ProjectName={o.Tittle}\r\n                  Address={o.Street}\r\n                  StartDate={o.CreateTime}\r\n                  ClientName={o.Name}\r\n                  key={i}\r\n                  CaseNumber={\"#\" + o.CaseNumber}\r\n                  DateText={o.CreateTime}\r\n                ></CaseCardUser>\r\n              ))}\r\n            </FlexColumnFullWidthMargins>\r\n          </ContentCont77vw>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nMyProjectsScreen.defaultProps = {};\r\n\r\nexport default MyProjectsScreen;\r\n","import { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { QuoteStatus } from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { MobileSmallGreenButton } from \"../../MobileComponents/Buttons\";\r\nimport { LeagueHeader12px } from \"../../MobileComponents/Text\";\r\nimport { LargeResponsiveButton } from \"../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { FlexColumnCont100xAutoPercent } from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport { CaseCardCont } from \"../../StylesheetComps/Projects\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport { MediumHeader100PercentWidth } from \"../../StylesheetComps/Titles\";\r\nconst ProposalCardUser = ({ proposalObj, numberOfQuotes, proposallist }) => {\r\n  const history = useHistory();\r\n  const [marginLeftRevision, setMarginLeftRevision] = useState(\"\");\r\n  const revisionMarginLeft = \"0px\";\r\n  const [revisionText, setRevisionText] = useState(\"\");\r\n  const [statusColor, setStatusColor] = useState(\"\");\r\n  const [statusText, setStatusText] = useState(\"\");\r\n  const [highestRevisionNumber, setHighestRevisionNumber] = useState(0);\r\n\r\n  useEffect(() => {\r\n    var quotetag = \"\";\r\n    switch (proposalObj.QuoteStatus) {\r\n      case QuoteStatus.Created:\r\n        setStatusText(\"New\");\r\n        setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n        break;\r\n      case QuoteStatus.UserNotified:\r\n        setStatusText(\"New\");\r\n        setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n        break;\r\n      case QuoteStatus.RevisionRequested:\r\n        setStatusText(\"Revision Pending\");\r\n        setStatusColor(ColorPalette.PrimaryGrey);\r\n        break;\r\n      case QuoteStatus.Approved:\r\n        setStatusText(\"Approved\");\r\n        setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n        break;\r\n      case QuoteStatus.Declined:\r\n        setStatusText(\"Declined\");\r\n        setStatusColor(ColorPalette.PrimaryRed);\r\n        break;\r\n      case QuoteStatus.Buy:\r\n        setStatusText(\"Supply Material\");\r\n        setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n        break;\r\n      case QuoteStatus.Buy_Install:\r\n        setStatusText(\"Accepted\");\r\n        setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n        break;\r\n      case QuoteStatus.Expired:\r\n        setStatusText(\"Expired\");\r\n        setStatusColor(ColorPalette.PrimaryRed);\r\n        break;\r\n      case QuoteStatus.Canceled:\r\n        setStatusText(\"Cancelled\");\r\n        setStatusColor(ColorPalette.PrimaryRed);\r\n        break;\r\n      default:\r\n    }\r\n    if (proposalObj.Tittle !== null) {\r\n      quotetag = \" - \" + proposalObj.Tittle;\r\n    } else {\r\n      quotetag = \" \";\r\n    }\r\n    if (proposalObj.Revision === 0) {\r\n      switch (proposalObj.Proposal) {\r\n        case 0:\r\n          setRevisionText(\"Proposal\" + quotetag);\r\n          break;\r\n        default:\r\n          setRevisionText(\"Option \" + proposalObj.Proposal + quotetag);\r\n      }\r\n    } else {\r\n      switch (proposalObj.Proposal) {\r\n        case 0:\r\n          setMarginLeftRevision(revisionMarginLeft);\r\n          setRevisionText(\r\n            \"Proposal - Revision \" + proposalObj.Revision + quotetag\r\n          );\r\n          break;\r\n        default:\r\n          setMarginLeftRevision(revisionMarginLeft);\r\n          setRevisionText(\r\n            \"Option \" +\r\n              proposalObj.Proposal +\r\n              \" - Revision \" +\r\n              proposalObj.Revision +\r\n              quotetag\r\n          );\r\n      }\r\n    }\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const DetermineRevisionNumber = async (quotelist) => {\r\n    var proposalcases = quotelist.filter((o) => {\r\n      return o.Proposal === proposalObj.Proposal;\r\n    });\r\n\r\n    setHighestRevisionNumber(\r\n      Math.max.apply(\r\n        Math,\r\n        proposalcases.map((o) => o.Revision)\r\n      ) + 1\r\n    );\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (proposallist !== undefined && proposallist !== null) {\r\n      DetermineRevisionNumber(proposallist);\r\n    }\r\n  }, [proposallist]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const params = useParams();\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    return (\r\n      <CaseCardCont\r\n        onClick={() => {\r\n          history.push(\r\n            \"/viewquoteuser/\" +\r\n              params.Id +\r\n              \"/\" +\r\n              params.storeId +\r\n              \"/\" +\r\n              params.caseId +\r\n              \"/\" +\r\n              proposalObj.Id +\r\n              \"/\" +\r\n              numberOfQuotes +\r\n              \"/\" +\r\n              highestRevisionNumber\r\n          );\r\n        }}\r\n      >\r\n        <FlexColumnCont100xAutoPercent>\r\n          <LeagueHeader12px>{revisionText}</LeagueHeader12px>\r\n        </FlexColumnCont100xAutoPercent>\r\n\r\n        <FlexColumnCont100xAutoPercent>\r\n          <SmallHeader>{proposalObj.AddTime.substring(0, 10)}</SmallHeader>\r\n          <MobileSmallGreenButton\r\n            mobilemargintop=\"0\"\r\n            width=\"150px\"\r\n            mobilewidth=\"30vw\"\r\n            height=\"2.5vw\"\r\n            bgcolor={statusColor}\r\n            onClick={() => {\r\n              history.push(\r\n                \"/viewquoteuser/\" +\r\n                  params.Id +\r\n                  \"/\" +\r\n                  params.storeId +\r\n                  \"/\" +\r\n                  params.caseId +\r\n                  \"/\" +\r\n                  proposalObj.Id +\r\n                  \"/\" +\r\n                  numberOfQuotes +\r\n                  \"/\" +\r\n                  highestRevisionNumber\r\n              );\r\n            }}\r\n          >\r\n            {\" \"}\r\n            {statusText}{\" \"}\r\n          </MobileSmallGreenButton>\r\n        </FlexColumnCont100xAutoPercent>\r\n      </CaseCardCont>\r\n    );\r\n  } else {\r\n    return (\r\n      <FlexColumnCont\r\n        marginleft={marginLeftRevision}\r\n        mobilewidth=\"90vw\"\r\n        mobilejustifycontent=\"space-between\"\r\n        justifycontent=\"flex-start\"\r\n        margin=\"0\"\r\n        paddingbottom='10px'\r\n        margintop=\"0%\"\r\n        borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n        height=\"100%\"\r\n        width=\"100%\"\r\n        flexdirection=\"row\"\r\n      >\r\n        <Icon30px30pxPointer\r\n          display={\r\n            proposalObj?.QuoteStatus === QuoteStatus.Buy ||\r\n            proposalObj?.QuoteStatus === QuoteStatus.Buy_Install\r\n              ? \"block\"\r\n              : \"none\"\r\n          }\r\n          src=\"/Green_Checkmark_Icon.svg\"\r\n        ></Icon30px30pxPointer>\r\n        <MediumHeader100PercentWidth\r\n          maxwidth=\"74%\"\r\n          cursor=\"pointer\"\r\n          onClick={() => {\r\n            history.push(\r\n              \"/viewquoteuser/\" +\r\n                params.Id +\r\n                \"/\" +\r\n                params.storeId +\r\n                \"/\" +\r\n                params.caseId +\r\n                \"/\" +\r\n                proposalObj.Id +\r\n                \"/\" +\r\n                numberOfQuotes +\r\n                \"/\" +\r\n                highestRevisionNumber\r\n            );\r\n          }}\r\n        >\r\n          {revisionText}\r\n        </MediumHeader100PercentWidth>\r\n\r\n        <MediumHeader100PercentWidth maxwidth=\"13%\">\r\n          {proposalObj.AddTime.substring(0, 10)}\r\n        </MediumHeader100PercentWidth>\r\n\r\n        <LargeResponsiveButton\r\n          width=\"20%\"\r\n          bgcolor={statusColor}\r\n          onClick={() => {\r\n            history.push(\r\n              \"/viewquoteuser/\" +\r\n                params.Id +\r\n                \"/\" +\r\n                params.storeId +\r\n                \"/\" +\r\n                params.caseId +\r\n                \"/\" +\r\n                proposalObj.Id +\r\n                \"/\" +\r\n                numberOfQuotes +\r\n                \"/\" +\r\n                highestRevisionNumber\r\n            );\r\n          }}\r\n        >\r\n          {statusText}\r\n        </LargeResponsiveButton>\r\n      </FlexColumnCont>\r\n    );\r\n  }\r\n};\r\n\r\nProposalCardUser.defaultProps = {};\r\n\r\nexport default ProposalCardUser;\r\n","import React from \"react\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { SmallTextPadding } from \"../../../StylesheetComps/Titles\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { DeleteCaseById } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\nconst DeleteProjectWindow = ({ deleteOpen, CloseWindow, projectId }) => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  const DeleteProject = async (project_id, metro_id, store_id) => {\r\n    var data = await DeleteCaseById(project_id);\r\n    if (data === null) {\r\n    }\r\n    history.push(\"/CasesPersonal/\" + metro_id + \"/\" + store_id);\r\n  };\r\n\r\n  if (!deleteOpen) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContRedBorderTopRounded>\r\n        <SmallHeaderLeagueSpartan>\r\n          You're about to delete your project\r\n        </SmallHeaderLeagueSpartan>\r\n        <SmallTextPadding>\r\n          Are you sure you want to delete your project? All of your project’s\r\n          information, photos, and progress will be permanently removed and you\r\n          won’t be able to see them again.\r\n        </SmallTextPadding>\r\n        <FlexRowCont>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={CloseWindow}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              CloseWindow();\r\n              DeleteProject(projectId, params.Id, params.storeId);\r\n            }}\r\n          >\r\n            Delete Project\r\n          </RegularResponsiveButton>\r\n        </FlexRowCont>\r\n      </FlexColumnContRedBorderTopRounded>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nDeleteProjectWindow.defaultProps = {\r\n  CloseWindow: () => {},\r\n};\r\n\r\nexport default DeleteProjectWindow;\r\n","import React from \"react\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { SmallTextPadding } from \"../../../StylesheetComps/Titles\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { SetCaseTo_CancelRequested } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\nconst RequestProjectCancelWindow = ({\r\n  deleteOpen,\r\n  CloseWindow,\r\n  onRequestCancelFunction,\r\n  projectId,\r\n}) => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  const ChangeCaseStatus_RequestCancellation = async (project_id) => {\r\n    var data = await SetCaseTo_CancelRequested(project_id);\r\n    if (data !== null) {\r\n      history.push(\"/CasesPersonal/\" + params.Id + \"/\" + params.storeId);\r\n    }\r\n  };\r\n\r\n  if (!deleteOpen) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContRedBorderTopRounded>\r\n        <SmallHeaderLeagueSpartan>\r\n          You're about to request to cancel your project\r\n        </SmallHeaderLeagueSpartan>\r\n        <SmallTextPadding>\r\n          Are you sure you want to request to cancel your project? Once approved\r\n          by your guide, your project will be cancelled.\r\n        </SmallTextPadding>\r\n        <FlexRowCont>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={CloseWindow}\r\n          >\r\n            Return\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              CloseWindow();\r\n              ChangeCaseStatus_RequestCancellation(projectId);\r\n            }}\r\n          >\r\n            Request Cancellation\r\n          </RegularResponsiveButton>\r\n        </FlexRowCont>\r\n      </FlexColumnContRedBorderTopRounded>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nRequestProjectCancelWindow.defaultProps = {\r\n  onRequestCancelFunction: () => {},\r\n  CloseWindow: () => {},\r\n};\r\n\r\nexport default RequestProjectCancelWindow;\r\n","export const CaseStatus = {\r\n    Drafted: 0,\r\n    Submitted: 1,\r\n    Accepted: 2,\r\n    Processed: 3,\r\n    Closed: 4,\r\n    CancelRequested: 5,\r\n    PayPending: 6,\r\n    Construction: 7,\r\n    Canceled: -1,\r\n  }","/* eslint-disable */\r\n\r\n// React Imports -------------------------------------\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCaseById,\r\n  QuoteStatus,\r\n  SetCaseTo_Submit,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\n// Imported Components -------------------------------\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\nimport ProposalCardUser from \"../../comps/ProposalCardUser\";\r\nimport DeleteProjectWindow from \"../../comps/Windows/DeleteProject\";\r\nimport RequestProjectCancelWindow from \"../../comps/Windows/RequestProjectCancel\";\r\nimport {\r\n  Div100vw20vh,\r\n  WhiteTopRoundedDivAutoHeight,\r\n} from \"../../MobileComponents/Divs\";\r\nimport { TopImage40vh } from \"../../MobileComponents/Images\";\r\nimport { MobileBodyTextFullWidth } from \"../../MobileComponents/Text\";\r\nimport { LargeResponsiveButton } from \"../../StylesheetComps/AuthSheet\";\r\nimport { CaseStatus } from \"../../StylesheetComps/CaseStatus\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n// Imported Styled Components ------------------------\r\nimport {\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnFullWidth,\r\n  FlexColumnPropWidth,\r\n  FlexCont90PercentAutoHeight,\r\n  FlexContFullWidthJustifyCenter,\r\n  FlexRowCont300x200,\r\n  FlexRowContFlexStartMobileColumn,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { GridContainer2Wide } from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Icon20x20,\r\n  Icon30x30,\r\n  Icon45x45,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { Image80x100px } from \"../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  FlexContBottomGrey,\r\n  FlexDivFlexStartCenter,\r\n  FlexInfoCont,\r\n  Image300x200GreenBorder,\r\n  LandscapePara,\r\n  PhotoContExtra,\r\n  SmallHeaderLeagueSpartan,\r\n  WideFlexInfoCont,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport { Cont, ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport {\r\n  LeagueSpartanLarge,\r\n  MediumHeader100PercentWidth,\r\n  MediumHeader100PercentWidthWhiteText,\r\n  RegularText,\r\n  RegularTextSmallWithWidth,\r\n  SmallGreenLeagueText,\r\n  SmallText,\r\n  SmallTextPadding,\r\n  SmallTitleBoldWithWidth,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\nconst ViewProjectUserView = () => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  const [projectInfoDisplay, setProjectInfoDisplay] = useState(\"none\");\r\n\r\n  const [draftCaseVisible, setDraftCaseVisible] = useState(\"none\");\r\n  const [missingPhotosVisible] = useState(\"none\");\r\n  const [introVisible, setIntroVisible] = useState(\"none\");\r\n  const [proposalVisible, setProposalVisible] = useState(\"none\");\r\n  const [invoiceVisible, setInvoiceVisible] = useState(\"none\");\r\n\r\n  const [projectName, setProjectName] = useState(\"\");\r\n  const [projectAreaString, setProjectAreaString] = useState(\"\");\r\n  const [projectScopeString, setProjectScopeString] = useState(\"\");\r\n  const [ProjectTypeString, setProjectTypeString] = useState(\"\");\r\n  const [ProjectStyleString, setProjectStyleString] = useState(\"\");\r\n  const [ProjectBudgetString, setProjectBudgetString] = useState(\"\");\r\n  const [projectDescriptionString, setProjectDescriptionString] = useState(\"\");\r\n\r\n  const [projectProposalsDisplay, setProjectProposalsDisplay] =\r\n    useState(\"none\");\r\n  const [projectInvoicesDisplay, setProjectInvoicesDisplay] = useState(\"none\");\r\n\r\n  const [projectInfoArrow, setProjectInfoArrow] = useState(\"/downarrow.svg\");\r\n  const [projectProposalArrow, setProjectProposalArrow] =\r\n    useState(\"/downarrow.svg\");\r\n  const [projectInvoiceArrow, setProjectInvoiceArrow] =\r\n    useState(\"/downarrow.svg\");\r\n\r\n  const [deleteProjectDisplay, setDeleteProjectDisplay] = useState(\"none\");\r\n  const [deleteProjectWindowDisplay, setDeleteProjectWindowDisplay] =\r\n    useState(false);\r\n  const [deleteProjectBorder, setDeleteProjectDisplayBorder] = useState(\r\n    \"2px solid \" + ColorPalette.PrimaryRed\r\n  );\r\n\r\n  const [requestCancelDisplay, setRequestCancelDisplay] = useState(\"none\");\r\n  const [requestCancelWindowDisplay, setRequestCancelWindowDisplay] =\r\n    useState(false);\r\n  const [requestCancelProjectBorder] = useState(\r\n    \"2px solid \" + ColorPalette.PrimaryRed\r\n  );\r\n\r\n  const [backProposalArrowDisplay, setBackProposalArrowDisplay] =\r\n    useState(\"none\");\r\n  const [backProjectArrowDisplay, setBackProjectArrowDisplay] =\r\n    useState(\"none\");\r\n\r\n  const [projectObj, setProjectObj] = useState({});\r\n  const [projectInvoices, setProjectInvoices] = useState([]);\r\n  const [projectProposals, setProjectProposals] = useState([]);\r\n\r\n  const [projectPhotos, setProjectPhotos] = useState([]);\r\n\r\n  const [submitButtonDisplay, setSubmitButtonDisplay] = useState(\"block\");\r\n\r\n  const [PDFMap, setPDFMap] = useState([]);\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n\r\n  const [expiredProjectProposalArrow, setExpiredProjectProposalArrow] =\r\n    useState(\"/downarrow.svg\");\r\n  const [expiredProjectProposalsDisplay, setExpiredProjectProposalsDisplay] =\r\n    useState(\"none\");\r\n  const [expiredProposalVisible, setExpiredProposalVisible] = useState(\"block\");\r\n\r\n  const DisplayProjectInfo = async (arrow) => {\r\n    if (arrow === \"/uparrow.svg\") {\r\n      setProjectInfoDisplay(\"none\");\r\n      setProjectInfoArrow(\"/downarrow.svg\");\r\n    } else {\r\n      setProjectInfoDisplay(\"flex\");\r\n      setProjectInfoArrow(\"/uparrow.svg\");\r\n    }\r\n  };\r\n\r\n  const DisplayProjectProposals = async (arrow, type) => {\r\n    // For non-expired proposals\r\n    if (type === \"nonExpired\") {\r\n      if (arrow === \"/uparrow.svg\") {\r\n        setProjectProposalsDisplay(\"none\");\r\n        setProjectProposalArrow(\"/downarrow.svg\");\r\n      } else {\r\n        setProjectProposalsDisplay(\"flex\");\r\n        setProjectProposalArrow(\"/uparrow.svg\");\r\n      }\r\n    }\r\n    // For expired proposals\r\n    else if (type === \"expired\") {\r\n      if (arrow === \"/uparrow.svg\") {\r\n        setExpiredProjectProposalsDisplay(\"none\");\r\n        setExpiredProjectProposalArrow(\"/downarrow.svg\");\r\n      } else {\r\n        setExpiredProjectProposalsDisplay(\"flex\");\r\n        setExpiredProjectProposalArrow(\"/uparrow.svg\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const DisplayProjectInvoices = async (arrow) => {\r\n    if (arrow === \"/uparrow.svg\") {\r\n      setProjectInvoicesDisplay(\"none\");\r\n      setProjectInvoiceArrow(\"/downarrow.svg\");\r\n    } else {\r\n      setProjectInvoicesDisplay(\"flex\");\r\n      setProjectInvoiceArrow(\"/uparrow.svg\");\r\n    }\r\n  };\r\n\r\n  const SetupProjectForDisplay = async (caseid) => {\r\n    var data = await GetCaseById(caseid);\r\n\r\n    if (data !== null) {\r\n      var project = data.Case;\r\n      if (project !== null) {\r\n        setProjectObj(project);\r\n        SetupProjectDescriptionStrings(project.Description);\r\n        SetProposalVisibility(project);\r\n        SetInvoiceVisibility(project);\r\n        SetProjectControlButtons(project.CaseStatus, project.Photos);\r\n        if (project.Invoices !== null) {\r\n          setProjectInvoices(project.Invoices);\r\n        }\r\n        if (data.Case.Tittle !== null && data.Case.Tittle !== undefined) {\r\n          setProjectName(project.Tittle);\r\n        }\r\n        if (project.Photos !== null) {\r\n          setPDFMap(\r\n            project.Photos.filter(\r\n              (o) =>\r\n                o.File?.slice(-4) === \".pdf\" || o.File?.slice(-4) === \".PDF\"\r\n            )\r\n          );\r\n          setProjectPhotos(\r\n            project.Photos.filter(\r\n              (o) =>\r\n                !o.File?.includes(\".pdf\") || !(o.File?.slice(-4) !== \".PDF\")\r\n            )\r\n          );\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const SetupProjectDescriptionStrings = async (projectdesc) => {\r\n    setProjectDescriptionString(\r\n      projectdesc.substring(projectdesc.indexOf(\"Description:\") + 12)\r\n    );\r\n    setProjectAreaString(\r\n      projectdesc.substring(\r\n        projectdesc.indexOf(\"Project Area\") + 13,\r\n        projectdesc.indexOf(\",\") - 1\r\n      )\r\n    );\r\n    setProjectScopeString(\r\n      projectdesc.substring(\r\n        projectdesc.indexOf(\"Project Scope\") + 14,\r\n        projectdesc.indexOf(\",\", projectdesc.indexOf(\",\") + 1)\r\n      )\r\n    );\r\n    setProjectTypeString(\r\n      projectdesc.substring(\r\n        projectdesc.indexOf(\"Project Type\") + 13,\r\n        projectdesc.indexOf(\", Project Style\") - 1\r\n      )\r\n    );\r\n    setProjectStyleString(\r\n      projectdesc.substring(\r\n        projectdesc.indexOf(\"Project Style\") + 14,\r\n        projectdesc.indexOf(\",Project Budget\") - 1\r\n      )\r\n    );\r\n    setProjectBudgetString(\r\n      projectdesc.substring(\r\n        projectdesc.indexOf(\"Project Budget:\") + 15,\r\n        projectdesc.indexOf(\", Description\")\r\n      )\r\n    );\r\n  };\r\n\r\n  const SetProjectControlButtons = async (case_status, photos) => {\r\n    switch (case_status) {\r\n      case CaseStatus.Drafted:\r\n        setDraftCaseVisible(\"block\");\r\n\r\n        setDeleteProjectDisplay(\"flex\");\r\n        setRequestCancelDisplay(\"none\");\r\n        break;\r\n      case CaseStatus.Submitted:\r\n        setDraftCaseVisible(\"none\");\r\n        setRequestCancelDisplay(\"flex\");\r\n        setDeleteProjectDisplay(\"none\");\r\n        break;\r\n      case CaseStatus.Accepted:\r\n        setDraftCaseVisible(\"none\");\r\n        setRequestCancelDisplay(\"flex\");\r\n        setDeleteProjectDisplay(\"none\");\r\n        break;\r\n      case CaseStatus.Processed:\r\n        setDraftCaseVisible(\"none\");\r\n        setRequestCancelDisplay(\"flex\");\r\n        setDeleteProjectDisplay(\"none\");\r\n        break;\r\n      case CaseStatus.Closed:\r\n        setDraftCaseVisible(\"none\");\r\n        setRequestCancelDisplay(\"none\");\r\n        setDeleteProjectDisplay(\"none\");\r\n        break;\r\n      case CaseStatus.CancelRequested:\r\n        setDraftCaseVisible(\"none\");\r\n        setDeleteProjectDisplay(\"none\");\r\n        setRequestCancelDisplay(\"none\");\r\n        setDeleteProjectDisplayBorder(\"2px solid \" + ColorPalette.PrimaryRed);\r\n        break;\r\n      case CaseStatus.Canceled:\r\n        setDraftCaseVisible(\"none\");\r\n        setDeleteProjectDisplay(\"none\");\r\n        setRequestCancelDisplay(\"none\");\r\n        setDeleteProjectDisplayBorder(\"2px solid \" + ColorPalette.PrimaryRed);\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n  };\r\n  const SetProposalVisibility = async (projectobj) => {\r\n    if (projectobj.Quotes !== null) {\r\n      AddProposalsToArray(projectobj.Quotes);\r\n    }\r\n    if (\r\n      projectobj.Quotes.filter((o) => {\r\n        return o.QuoteStatus !== QuoteStatus.Created;\r\n      }).length > 0\r\n    ) {\r\n      setIntroVisible(\"block\");\r\n      setProposalVisible(\"block\");\r\n      setBackProposalArrowDisplay(\"block\");\r\n      setProjectProposalArrow(\"/uparrow.svg\");\r\n      setProjectProposalsDisplay(\"flex\");\r\n    } else {\r\n      setProjectInfoDisplay(\"flex\");\r\n      setBackProjectArrowDisplay(\"block\");\r\n      setProjectInfoArrow(\"/downarrow.svg\");\r\n      setProposalVisible(\"none\");\r\n      setProjectProposalsDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const AddProposalsToArray = async (quotes) => {\r\n    var filteredquotes = quotes.filter((o) => {\r\n      return o.QuoteStatus !== QuoteStatus.Created;\r\n    });\r\n    setProjectProposals(\r\n      filteredquotes.sort((a, b) =>\r\n        a.Proposal > b.Proposal\r\n          ? 1\r\n          : a.Proposal === b.Proposal\r\n          ? a.Revision > b.Revision\r\n            ? 1\r\n            : -1\r\n          : -1\r\n      )\r\n    );\r\n  };\r\n\r\n  const SetInvoiceVisibility = async (projectobj) => {\r\n    if (projectobj.Invoices !== null) {\r\n      if (projectobj.Invoices.length > 0) {\r\n        setInvoiceVisible(\"block\");\r\n      } else {\r\n        setInvoiceVisible(\"none\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const ChangeProjectStatusToSubmit = async (caseid) => {\r\n    setSubmitButtonDisplay(\"none\");\r\n    setDraftCaseVisible(\"none\");\r\n    var data = await SetCaseTo_Submit(caseid);\r\n    if (data !== null) {\r\n      if (data.Case !== null) SetProjectControlButtons(data.Case.CaseStatus);\r\n    }\r\n  };\r\n\r\n  const PushToPayment = async (amount, caseid, quoteid, invoiceid) => {\r\n    history.push(\r\n      \"/payment/\" + amount + \"/\" + caseid + \"/\" + quoteid + \"/\" + invoiceid\r\n    );\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    var userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    setRoleNum(userinfo.Role);\r\n    SetupProjectForDisplay(params.caseId);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    if (roleNum !== UserRole.Loading) {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <FlexColumn81vwLightGrey>\r\n            <ActionMenu\r\n              mobilePageProp={projectName}\r\n              pageProp={\"Projects - \" + projectName}\r\n              projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n            ></ActionMenu>\r\n\r\n            <ContentCont77vw display={draftCaseVisible}>\r\n              <FlexCont90PercentAutoHeight>\r\n                <SmallHeaderLeagueSpartan>\r\n                  Ready to Submit?\r\n                </SmallHeaderLeagueSpartan>\r\n                <FlexColumnContCenterAlign>\r\n                  <SmallText>\r\n                    Review all of your information and confirm the details. Once\r\n                    you press Submit Project, our team will be alerted and get\r\n                    started right away. You will receive a confirmation email,\r\n                    as well as a project proposal within 1-2 days*\r\n                  </SmallText>\r\n                </FlexColumnContCenterAlign>\r\n                <br></br>\r\n                <RegularResponsiveButton\r\n                  display={submitButtonDisplay}\r\n                  onClick={() => {\r\n                    ChangeProjectStatusToSubmit(projectObj.Id);\r\n                  }}\r\n                >\r\n                  Submit Project\r\n                </RegularResponsiveButton>\r\n              </FlexCont90PercentAutoHeight>\r\n            </ContentCont77vw>\r\n\r\n            <ContentCont77vw display={missingPhotosVisible}>\r\n              <FlexCont90PercentAutoHeight>\r\n                <SmallHeaderLeagueSpartan>\r\n                  You are still missing some photos.\r\n                </SmallHeaderLeagueSpartan>\r\n                <FlexColumnContCenterAlign>\r\n                  <SmallText>\r\n                    We seem to be missing some required photos for your project.\r\n                    You can add the Street View, Access Area, Panorama, and Area\r\n                    of Work photos by pressing the \"Edit\" button below.\r\n                  </SmallText>\r\n                </FlexColumnContCenterAlign>\r\n                <br></br>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/updatecase/\" +\r\n                        params.Id +\r\n                        \"/\" +\r\n                        params.storeId +\r\n                        \"/\" +\r\n                        params.caseId\r\n                    );\r\n                  }}\r\n                >\r\n                  Edit Project\r\n                </RegularResponsiveButton>\r\n              </FlexCont90PercentAutoHeight>\r\n            </ContentCont77vw>\r\n\r\n            <Div100vw20vh>\r\n              <TopImage40vh src=\"/homescreenimg.png\"></TopImage40vh>\r\n            </Div100vw20vh>\r\n\r\n            {/* Project Information --------------------------------------------------------------- */}\r\n\r\n            <WhiteTopRoundedDivAutoHeight>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <Icon30x30\r\n                  display={backProjectArrowDisplay}\r\n                  src=\"/leftarrow.svg\"\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/CasesPersonal/\" + params.Id + \"/\" + params.storeId\r\n                    );\r\n                  }}\r\n                ></Icon30x30>\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"1.25%\">\r\n                  Project Information\r\n                </SmallHeaderLeagueSpartan>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/updatecase/\" +\r\n                        params.Id +\r\n                        \"/\" +\r\n                        params.storeId +\r\n                        \"/\" +\r\n                        params.caseId\r\n                    );\r\n                  }}\r\n                >\r\n                  Edit\r\n                </RegularResponsiveButton>\r\n                <Icon30x30\r\n                  src={projectInfoArrow}\r\n                  onClick={() => {\r\n                    DisplayProjectInfo(projectInfoArrow);\r\n                  }}\r\n                ></Icon30x30>\r\n              </FlexColumnCont>\r\n\r\n              <FlexContBottomGrey width=\"95%\" height=\"1%\"></FlexContBottomGrey>\r\n\r\n              <FlexColumnFullWidth display={projectInfoDisplay}>\r\n                <FlexColumnCont\r\n                  flexdirection=\"row\"\r\n                  justifycontent=\"flex-start\"\r\n                  height=\"auto\"\r\n                  width=\"80%\"\r\n                  margin=\"0\"\r\n                  mobileflexdirection=\"column\"\r\n                  mobilewidth=\"90vw\"\r\n                  tabletflexdirection=\"column\"\r\n                  tabletalignitems=\"baseline\"\r\n                >\r\n                  <FlexInfoCont mobilewidth=\"100%\">\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallTitleBoldWithWidth>\r\n                          Case Number\r\n                        </SmallTitleBoldWithWidth>\r\n                      </WideFlexInfoCont>\r\n                      <RegularTextSmallWithWidth>\r\n                        #{projectObj.CaseNumber}\r\n                      </RegularTextSmallWithWidth>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallTitleBoldWithWidth>\r\n                          Full Name:\r\n                        </SmallTitleBoldWithWidth>\r\n                      </WideFlexInfoCont>\r\n                      <RegularTextSmallWithWidth>\r\n                        {projectObj.Name}\r\n                      </RegularTextSmallWithWidth>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallTitleBoldWithWidth>\r\n                          Phone Number:\r\n                        </SmallTitleBoldWithWidth>\r\n                      </WideFlexInfoCont>\r\n                      <RegularTextSmallWithWidth>\r\n                        {projectObj.Phone}\r\n                      </RegularTextSmallWithWidth>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallTitleBoldWithWidth>\r\n                          Email Address:\r\n                        </SmallTitleBoldWithWidth>\r\n                      </WideFlexInfoCont>\r\n                      <RegularTextSmallWithWidth>\r\n                        {projectObj.Email}\r\n                      </RegularTextSmallWithWidth>\r\n                    </WideFlexInfoCont>\r\n                  </FlexInfoCont>\r\n\r\n                  <FlexInfoCont mobilewidth=\"100%\">\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallTitleBoldWithWidth>\r\n                          Address:\r\n                        </SmallTitleBoldWithWidth>\r\n                      </WideFlexInfoCont>\r\n                      <RegularTextSmallWithWidth>\r\n                        {projectObj.Street}\r\n                      </RegularTextSmallWithWidth>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallTitleBoldWithWidth>City:</SmallTitleBoldWithWidth>\r\n                      </WideFlexInfoCont>\r\n\r\n                      <RegularTextSmallWithWidth>\r\n                        {projectObj.City}\r\n                      </RegularTextSmallWithWidth>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallTitleBoldWithWidth>\r\n                          Region:\r\n                        </SmallTitleBoldWithWidth>\r\n                      </WideFlexInfoCont>\r\n\r\n                      <RegularTextSmallWithWidth>\r\n                        {projectObj.Metro}\r\n                      </RegularTextSmallWithWidth>\r\n                    </WideFlexInfoCont>\r\n                  </FlexInfoCont>\r\n                </FlexColumnCont>\r\n\r\n                <FlexContBottomGrey\r\n                  width=\"95%\"\r\n                  height=\"1%\"\r\n                ></FlexContBottomGrey>\r\n\r\n                <hr></hr>\r\n\r\n                <FlexRowContFlexStartMobileColumn>\r\n                  <WideFlexInfoCont>\r\n                    <SmallTitleBoldWithWidth>\r\n                      Project Area:\r\n                    </SmallTitleBoldWithWidth>\r\n                    <RegularTextSmallWithWidth>\r\n                      {projectAreaString}\r\n                    </RegularTextSmallWithWidth>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <br></br>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <SmallTitleBoldWithWidth>\r\n                      Project Scope:\r\n                    </SmallTitleBoldWithWidth>\r\n                    <RegularTextSmallWithWidth>\r\n                      {projectScopeString}\r\n                    </RegularTextSmallWithWidth>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <br></br>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <SmallTitleBoldWithWidth>\r\n                      Project Type:\r\n                    </SmallTitleBoldWithWidth>\r\n                    <RegularTextSmallWithWidth>\r\n                      {ProjectTypeString}\r\n                    </RegularTextSmallWithWidth>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <br></br>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <SmallTitleBoldWithWidth>\r\n                      Project Style:\r\n                    </SmallTitleBoldWithWidth>\r\n                    <RegularTextSmallWithWidth>\r\n                      {ProjectStyleString === \"N/\"\r\n                        ? \"Not Selected\"\r\n                        : ProjectStyleString}\r\n                    </RegularTextSmallWithWidth>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <br></br>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <SmallTitleBoldWithWidth>\r\n                      Project Budget:\r\n                    </SmallTitleBoldWithWidth>\r\n                    <RegularTextSmallWithWidth>\r\n                      {ProjectBudgetString}\r\n                    </RegularTextSmallWithWidth>\r\n                  </WideFlexInfoCont>\r\n                </FlexRowContFlexStartMobileColumn>\r\n\r\n                <FlexContBottomGrey\r\n                  width=\"95%\"\r\n                  height=\"1%\"\r\n                ></FlexContBottomGrey>\r\n\r\n                <FlexColumnCont\r\n                  alignitems=\"left\"\r\n                  height=\"auto\"\r\n                  margintop=\"2%\"\r\n                  margin=\"0\"\r\n                  width=\"100%\"\r\n                >\r\n                  <SmallHeader paddingbottom=\"1.5%\">\r\n                    Project Description:\r\n                  </SmallHeader>\r\n                  <LandscapePara\r\n                    readonly\r\n                    disabled\r\n                    defaultValue={projectDescriptionString}\r\n                  ></LandscapePara>\r\n                </FlexColumnCont>\r\n\r\n                <br></br>\r\n\r\n                <SmallHeaderLeagueSpartan>\r\n                  Uploaded Photos\r\n                </SmallHeaderLeagueSpartan>\r\n\r\n                <FlexContFullWidthJustifyCenter>\r\n                  <GridContainer2Wide>\r\n                    {projectPhotos.map((o, i) => (\r\n                      <FlexDivFlexStartCenter key={i}>\r\n                        <FlexRowCont300x200>\r\n                          <Image300x200GreenBorder\r\n                            src={window.$IMGURL + o.File}\r\n                            alt={\"File:\" + o.File}\r\n                          ></Image300x200GreenBorder>\r\n                        </FlexRowCont300x200>\r\n                        <SmallTextPadding>{o.Caption}</SmallTextPadding>\r\n                      </FlexDivFlexStartCenter>\r\n                    ))}\r\n\r\n                    {PDFMap.map((o, i) => (\r\n                      <FlexDivFlexStartCenter key={i}>\r\n                        <FlexRowCont300x200>\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href={window.$IMGURL + o.File}\r\n                            target=\"_blank\"\r\n                          >\r\n                            <PhotoContExtra key={i}>\r\n                              <FlexColumnCont height=\"auto\">\r\n                                <Image80x100px\r\n                                  src={\"/pdficon.png\"}\r\n                                  alt={\"File:\" + o.File}\r\n                                ></Image80x100px>\r\n                                <LargeResponsiveButton>\r\n                                  View PDF\r\n                                </LargeResponsiveButton>\r\n                              </FlexColumnCont>\r\n                            </PhotoContExtra>\r\n                          </a>\r\n                        </FlexRowCont300x200>\r\n                        <SmallTextPadding>{o.Caption}</SmallTextPadding>\r\n                      </FlexDivFlexStartCenter>\r\n                    ))}\r\n                  </GridContainer2Wide>\r\n                </FlexContFullWidthJustifyCenter>\r\n                <RegularResponsiveButton\r\n                  width=\"200px\"\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  onClick={() => {\r\n                    setDeleteProjectWindowDisplay(true);\r\n                  }}\r\n                  display={deleteProjectDisplay}\r\n                >\r\n                  <Icon20x20 src=\"/Garbage_Icon.svg\"></Icon20x20>\r\n                  Delete Project\r\n                </RegularResponsiveButton>\r\n\r\n                <RegularResponsiveButton\r\n                  width=\"250px\"\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  onClick={() => {\r\n                    setRequestCancelWindowDisplay(true);\r\n                  }}\r\n                  display={requestCancelDisplay}\r\n                >\r\n                  <Icon20x20 src=\"/Garbage_Icon.svg\"></Icon20x20>\r\n                  Request Cancellation\r\n                </RegularResponsiveButton>\r\n\r\n                <DeleteProjectWindow\r\n                  projectId={projectObj.Id}\r\n                  deleteOpen={deleteProjectWindowDisplay}\r\n                  CloseWindow={() => {\r\n                    setDeleteProjectWindowDisplay(false);\r\n                  }}\r\n                ></DeleteProjectWindow>\r\n                <RequestProjectCancelWindow\r\n                  projectId={projectObj.Id}\r\n                  deleteOpen={requestCancelWindowDisplay}\r\n                  CloseWindow={() => {\r\n                    setRequestCancelWindowDisplay(false);\r\n                  }}\r\n                ></RequestProjectCancelWindow>\r\n              </FlexColumnFullWidth>\r\n            </WhiteTopRoundedDivAutoHeight>\r\n\r\n            {/* Project Proposals --------------------------------------------------------------- */}\r\n\r\n            <WhiteTopRoundedDivAutoHeight display={proposalVisible}>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <Icon30x30\r\n                  display={backProposalArrowDisplay}\r\n                  src=\"/leftarrow.svg\"\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/CasesPersonal/\" + params.Id + \"/\" + params.storeId\r\n                    );\r\n                  }}\r\n                ></Icon30x30>\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"3%\">\r\n                  Estimates\r\n                </SmallHeaderLeagueSpartan>\r\n                <Icon30x30\r\n                  onClick={() => {\r\n                    DisplayProjectProposals(projectProposalArrow);\r\n                  }}\r\n                  src={projectProposalArrow}\r\n                ></Icon30x30>\r\n              </FlexColumnCont>\r\n              <FlexColumnFullWidth margin=\"0\" display={projectProposalsDisplay}>\r\n                <FlexColumnCont\r\n                  justifycontent=\"flex-start\"\r\n                  width=\"73vw\"\r\n                  height=\"auto\"\r\n                  margin=\"0\"\r\n                >\r\n                  <FlexColumnCont alignitems=\"left\" width=\"70vw\" margin=\"0\">\r\n                    <FlexColumnCont\r\n                      justifycontent=\"flex-start\"\r\n                      margin=\"0\"\r\n                      margintop=\"1%\"\r\n                      borderbottom={\r\n                        \"4px solid \" + ColorPalette.PrimaryButtonBlue\r\n                      }\r\n                      height=\"50%\"\r\n                      width=\"99%\"\r\n                      flexdirection=\"row\"\r\n                    >\r\n                      <FlexColumnPropWidth width=\"auto\">\r\n                        <SmallHeaderLeagueSpartan>\r\n                          Package Name\r\n                        </SmallHeaderLeagueSpartan>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"49%\"></FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"20%\">\r\n                        <SmallHeaderLeagueSpartan>\r\n                          Date\r\n                        </SmallHeaderLeagueSpartan>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"auto\">\r\n                        <SmallHeaderLeagueSpartan>\r\n                          Status\r\n                        </SmallHeaderLeagueSpartan>\r\n                      </FlexColumnPropWidth>\r\n                    </FlexColumnCont>\r\n                  </FlexColumnCont>\r\n\r\n                  <FlexColumnCont\r\n                    margin=\"0\"\r\n                    alignitems=\"left\"\r\n                    width=\"70vw\"\r\n                    height=\"auto\"\r\n                  >\r\n                    <br></br>\r\n                    {projectProposals\r\n                      .filter((o) => o.QuoteStatus !== QuoteStatus.Expired)\r\n                      .map((o, i) => (\r\n                        <div key={i}>\r\n                          <ProposalCardUser\r\n                            key={i}\r\n                            proposallist={projectProposals}\r\n                            quoteid={o.Id}\r\n                            proposalObj={o}\r\n                            numberOfQuotes={projectProposals.length}\r\n                          ></ProposalCardUser>\r\n                        </div>\r\n                      ))}\r\n\r\n                    <br></br>\r\n                  </FlexColumnCont>\r\n                </FlexColumnCont>\r\n              </FlexColumnFullWidth>\r\n            </WhiteTopRoundedDivAutoHeight>\r\n\r\n            <WhiteTopRoundedDivAutoHeight display={expiredProposalVisible}>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <Icon30x30\r\n                  display={backProposalArrowDisplay}\r\n                  src=\"/leftarrow.svg\"\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/CasesPersonal/\" + params.Id + \"/\" + params.storeId\r\n                    );\r\n                  }}\r\n                ></Icon30x30>\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"3%\">\r\n                  Archived Estimates\r\n                </SmallHeaderLeagueSpartan>\r\n                <Icon30x30\r\n                  onClick={() => {\r\n                    DisplayProjectProposals(\r\n                      expiredProjectProposalArrow,\r\n                      \"expired\"\r\n                    );\r\n                  }}\r\n                  src={expiredProjectProposalArrow}\r\n                ></Icon30x30>\r\n              </FlexColumnCont>\r\n              <FlexColumnFullWidth\r\n                margin=\"0\"\r\n                display={expiredProjectProposalsDisplay}\r\n              >\r\n                <FlexColumnCont\r\n                  justifycontent=\"flex-start\"\r\n                  width=\"73vw\"\r\n                  height=\"auto\"\r\n                  margin=\"0\"\r\n                >\r\n                  <FlexColumnCont alignitems=\"left\" width=\"70vw\" margin=\"0\">\r\n                    <FlexColumnCont\r\n                      justifycontent=\"flex-start\"\r\n                      margin=\"0\"\r\n                      margintop=\"1%\"\r\n                      borderbottom={\r\n                        \"4px solid \" + ColorPalette.PrimaryButtonBlue\r\n                      }\r\n                      height=\"50%\"\r\n                      width=\"99%\"\r\n                      flexdirection=\"row\"\r\n                    >\r\n                      <FlexColumnPropWidth width=\"auto\">\r\n                        <SmallHeaderLeagueSpartan>\r\n                          Package Name\r\n                        </SmallHeaderLeagueSpartan>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"49%\"></FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"20%\">\r\n                        <SmallHeaderLeagueSpartan>\r\n                          Date\r\n                        </SmallHeaderLeagueSpartan>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"auto\">\r\n                        <SmallHeaderLeagueSpartan>\r\n                          Status\r\n                        </SmallHeaderLeagueSpartan>\r\n                      </FlexColumnPropWidth>\r\n                    </FlexColumnCont>\r\n                  </FlexColumnCont>\r\n\r\n                  <FlexColumnCont\r\n                    margin=\"0\"\r\n                    alignitems=\"left\"\r\n                    width=\"70vw\"\r\n                    height=\"auto\"\r\n                  >\r\n                    <br></br>\r\n                    {projectProposals\r\n                      .filter((o) => o.QuoteStatus === QuoteStatus.Expired)\r\n                      .map((o, i) => (\r\n                        <div key={i}>\r\n                          <ProposalCardUser\r\n                            key={i}\r\n                            proposallist={projectProposals}\r\n                            quoteid={o.Id}\r\n                            proposalObj={o}\r\n                            numberOfQuotes={projectProposals.length}\r\n                          ></ProposalCardUser>\r\n                        </div>\r\n                      ))}\r\n\r\n                    <br></br>\r\n                  </FlexColumnCont>\r\n                </FlexColumnCont>\r\n              </FlexColumnFullWidth>\r\n            </WhiteTopRoundedDivAutoHeight>\r\n\r\n            {/* Project Invoices --------------------------------------------------------------- */}\r\n\r\n            {/* <WhiteTopRoundedDivAutoHeight\r\n              mobilepaddingbottom=\"15vh\"\r\n              display={invoiceVisible}\r\n            >\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"3%\">\r\n                  Invoices\r\n                </SmallHeaderLeagueSpartan>\r\n\r\n                <Icon30x30\r\n                  onClick={() => {\r\n                    DisplayProjectInvoices(projectInvoiceArrow);\r\n                  }}\r\n                  src={projectInvoiceArrow}\r\n                ></Icon30x30>\r\n              </FlexColumnCont>\r\n              <FlexColumnFullWidth display={projectInvoicesDisplay}>\r\n                <FlexColumnCont\r\n                  justifycontent=\"flex-start\"\r\n                  width=\"73vw\"\r\n                  height=\"95%\"\r\n                  margin=\"0\"\r\n                >\r\n                  <FlexColumnCont\r\n                    alignitems=\"left\"\r\n                    width=\"70vw\"\r\n                    margin=\"0\"\r\n                    height=\"auto\"\r\n                  >\r\n                    <FlexColumnCont\r\n                      bgcolor={ColorPalette.DarkGrey}\r\n                      padding=\".75%\"\r\n                      justifycontent=\"flex-start\"\r\n                      margin=\"0\"\r\n                      margintop=\"1%\"\r\n                      height=\"30px\"\r\n                      width=\"99%\"\r\n                      flexdirection=\"row\"\r\n                    >\r\n                      <FlexColumnPropWidth width=\"45%\">\r\n                        <MediumHeader100PercentWidthWhiteText>\r\n                          Date\r\n                        </MediumHeader100PercentWidthWhiteText>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"55%\"></FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"16%\" height=\"100%\">\r\n                        <MediumHeader100PercentWidthWhiteText>\r\n                          View Invoice\r\n                        </MediumHeader100PercentWidthWhiteText>\r\n                      </FlexColumnPropWidth>\r\n                    </FlexColumnCont>\r\n                  </FlexColumnCont>\r\n\r\n                  {projectInvoices.map((o, i) => (\r\n                    <FlexColumnCont\r\n                      key={i}\r\n                      margin=\"0\"\r\n                      alignitems=\"left\"\r\n                      width=\"70vw\"\r\n                      height=\"auto\"\r\n                    >\r\n                      <FlexColumnCont\r\n                        mobilewidth=\"90vw\"\r\n                        justifycontent=\"flex-start\"\r\n                        mobilejustifycontent=\"space-between\"\r\n                        margin=\"0\"\r\n                        margintop=\"0%\"\r\n                        borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n                        height=\"auto\"\r\n                        width=\"99%\"\r\n                        flexdirection=\"row\"\r\n                      >\r\n                        <FlexColumnPropWidth width=\"30%\" mobiledisplay=\"flex\">\r\n                          <MediumHeader100PercentWidth>\r\n                            {o.Upload_Time.substring(0, 10)}\r\n                          </MediumHeader100PercentWidth>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth width=\"55%\"></FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth\r\n                          width=\"15%\"\r\n                          height=\"100%\"\r\n                          mobiledisplay=\"flex\"\r\n                        >\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href={window.$IMGURL + o.File}\r\n                            target=\"_blank\"\r\n                          >\r\n                            <Icon45x45 src=\"/Eye_Icon.svg\"></Icon45x45>\r\n                          </a>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth\r\n                          width=\"100px\"\r\n                          margin=\"0\"\r\n                          mobiledisplay={o.IsPaid === true ? \"none\" : \"flex\"}\r\n                        >\r\n                          <RegularResponsiveButton\r\n                            onClick={() => {\r\n                              PushToPayment(\r\n                                o.Total,\r\n                                o.Case_Id,\r\n                                o.Quote_Id,\r\n                                o.Id\r\n                              );\r\n                            }}\r\n                          >\r\n                            Pay Invoice\r\n                          </RegularResponsiveButton>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth\r\n                          width=\"100px\"\r\n                          margin=\"0\"\r\n                          mobiledisplay={o.IsPaid === true ? \"flex\" : \"none\"}\r\n                        >\r\n                          <SmallGreenLeagueText fontsize=\"18px\">\r\n                            PAID\r\n                          </SmallGreenLeagueText>\r\n                        </FlexColumnPropWidth>\r\n                      </FlexColumnCont>\r\n                    </FlexColumnCont>\r\n                  ))}\r\n                </FlexColumnCont>\r\n              </FlexColumnFullWidth>\r\n            </WhiteTopRoundedDivAutoHeight> */}\r\n          </FlexColumn81vwLightGrey>\r\n        </Cont>\r\n      );\r\n      /* Loading Screen --------------------------------------------------------------- */\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  } else {\r\n    //Desktop View\r\n\r\n    if (roleNum !== UserRole.Loading) {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <FlexColumn81vwLightGrey>\r\n            <ActionMenu\r\n              mobilePageProp={projectName}\r\n              pageProp={\"Projects - \" + projectName}\r\n              projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n            ></ActionMenu>\r\n\r\n            {/* Project Drafted --------------------------------------------------------------- */}\r\n\r\n            <ContentCont77vw display={draftCaseVisible}>\r\n              <FlexCont90PercentAutoHeight>\r\n                <SmallHeaderLeagueSpartan>\r\n                  Ready to Submit?\r\n                </SmallHeaderLeagueSpartan>\r\n                <FlexColumnContCenterAlign>\r\n                  <SmallText>\r\n                    Review all of your information and confirm the details. Once\r\n                    you press Submit Project, our team will be alerted and get\r\n                    started right away. You will receive a confirmation email,\r\n                    as well as a project proposal within 1-2 days*\r\n                  </SmallText>\r\n                </FlexColumnContCenterAlign>\r\n                <br></br>\r\n                <RegularResponsiveButton\r\n                  display={submitButtonDisplay}\r\n                  onClick={() => {\r\n                    ChangeProjectStatusToSubmit(projectObj.Id);\r\n                  }}\r\n                >\r\n                  Submit Project\r\n                </RegularResponsiveButton>\r\n              </FlexCont90PercentAutoHeight>\r\n            </ContentCont77vw>\r\n\r\n            {/* Project Information --------------------------------------------------------------- */}\r\n\r\n            <ContentCont77vw>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <Icon30x30\r\n                  display={backProjectArrowDisplay}\r\n                  src=\"/leftarrow.svg\"\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/CasesPersonal/\" + params.Id + \"/\" + params.storeId\r\n                    );\r\n                  }}\r\n                ></Icon30x30>\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"1.25%\">\r\n                  Project Information\r\n                </SmallHeaderLeagueSpartan>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/updatecase/\" +\r\n                        params.Id +\r\n                        \"/\" +\r\n                        params.storeId +\r\n                        \"/\" +\r\n                        params.caseId\r\n                    );\r\n                  }}\r\n                >\r\n                  Edit\r\n                </RegularResponsiveButton>\r\n                <Icon30x30\r\n                  src={projectInfoArrow}\r\n                  onClick={() => {\r\n                    DisplayProjectInfo(projectInfoArrow);\r\n                  }}\r\n                ></Icon30x30>\r\n              </FlexColumnCont>\r\n\r\n              <FlexColumnFullWidth display={projectInfoDisplay}>\r\n                <FlexColumnCont\r\n                  flexdirection=\"row\"\r\n                  justifycontent=\"flex-start\"\r\n                  height=\"auto\"\r\n                  width=\"80%\"\r\n                  margin=\"0\"\r\n                  mobileflexdirection=\"column\"\r\n                  mobilewidth=\"90vw\"\r\n                  tabletflexdirection=\"column\"\r\n                  tabletalignitems=\"baseline\"\r\n                >\r\n                  <FlexInfoCont mobilewidth=\"100%\">\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>Full Name:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n                      <SmallHeader>{projectObj.Name}</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>Phone Number:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n                      <SmallHeader>{projectObj.Phone}</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>Email Address:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n                      <SmallHeader>{projectObj.Email}</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                  </FlexInfoCont>\r\n\r\n                  <FlexInfoCont mobilewidth=\"100%\">\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>Address:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n                      <SmallHeader>{projectObj.Street}</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>City:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n\r\n                      <SmallHeader>{projectObj.City}</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>Region:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n\r\n                      <SmallHeader>{projectObj.Metro}</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                  </FlexInfoCont>\r\n                </FlexColumnCont>\r\n\r\n                <FlexContBottomGrey\r\n                  width=\"95%\"\r\n                  height=\"1%\"\r\n                ></FlexContBottomGrey>\r\n\r\n                <br></br>\r\n\r\n                <FlexColumnCont\r\n                  flexdirection=\"row\"\r\n                  justifycontent=\"flex-start\"\r\n                  height=\"auto\"\r\n                  width=\"80%\"\r\n                  margin=\"0\"\r\n                  mobileflexdirection=\"column\"\r\n                  mobilewidth=\"90vw\"\r\n                  tabletflexdirection=\"column\"\r\n                  tabletalignitems=\"baseline\"\r\n                >\r\n                  <FlexInfoCont mobilewidth=\"100%\">\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>Project Area:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n                      <SmallHeader>{projectAreaString}</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>Project Scope:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n                      <SmallHeader>{projectScopeString}</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>Project Type:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n                      <SmallHeader>{ProjectTypeString}</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                  </FlexInfoCont>\r\n\r\n                  <FlexInfoCont mobilewidth=\"100%\">\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>Project Style:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n                      <SmallHeader>\r\n                        {ProjectStyleString === \"N/\"\r\n                          ? \"Not Selected\"\r\n                          : ProjectStyleString}\r\n                      </SmallHeader>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <WideFlexInfoCont>\r\n                      <WideFlexInfoCont width=\"175px\">\r\n                        <SmallHeader>Project Budget:</SmallHeader>\r\n                      </WideFlexInfoCont>\r\n\r\n                      <SmallHeader>{ProjectBudgetString}</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                  </FlexInfoCont>\r\n                </FlexColumnCont>\r\n\r\n                <FlexContBottomGrey\r\n                  width=\"95%\"\r\n                  height=\"1%\"\r\n                ></FlexContBottomGrey>\r\n\r\n                <FlexColumnCont\r\n                  alignitems=\"left\"\r\n                  height=\"auto\"\r\n                  margintop=\"2%\"\r\n                  margin=\"0\"\r\n                  width=\"100%\"\r\n                >\r\n                  <SmallHeader paddingbottom=\"1.5%\">\r\n                    Project Description:\r\n                  </SmallHeader>\r\n                  <LandscapePara\r\n                    readonly\r\n                    disabled\r\n                    defaultValue={projectDescriptionString}\r\n                  ></LandscapePara>\r\n                </FlexColumnCont>\r\n\r\n                <br></br>\r\n\r\n                <SmallHeaderLeagueSpartan>\r\n                  Uploaded Photos\r\n                </SmallHeaderLeagueSpartan>\r\n\r\n                <FlexContFullWidthJustifyCenter>\r\n                  <GridContainer2Wide>\r\n                    {projectPhotos.map((o, i) => (\r\n                      <FlexDivFlexStartCenter key={i}>\r\n                        <FlexRowCont300x200>\r\n                          <Image300x200GreenBorder\r\n                            src={window.$IMGURL + o.File}\r\n                            alt={\"File:\" + o.File}\r\n                          ></Image300x200GreenBorder>\r\n                        </FlexRowCont300x200>\r\n                        <SmallTextPadding>{o.Caption}</SmallTextPadding>\r\n                      </FlexDivFlexStartCenter>\r\n                    ))}\r\n\r\n                    {PDFMap.map((o, i) => (\r\n                      <FlexDivFlexStartCenter key={i}>\r\n                        <FlexRowCont300x200>\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href={window.$IMGURL + o.File}\r\n                            target=\"_blank\"\r\n                          >\r\n                            <PhotoContExtra key={i}>\r\n                              <FlexColumnCont height=\"auto\">\r\n                                <Image80x100px\r\n                                  src={\"/pdficon.png\"}\r\n                                  alt={\"File:\" + o.File}\r\n                                ></Image80x100px>\r\n                                <LargeResponsiveButton>\r\n                                  View PDF\r\n                                </LargeResponsiveButton>\r\n                              </FlexColumnCont>\r\n                            </PhotoContExtra>\r\n                          </a>\r\n                        </FlexRowCont300x200>\r\n                        <SmallTextPadding>{o.Caption}</SmallTextPadding>\r\n                      </FlexDivFlexStartCenter>\r\n                    ))}\r\n                  </GridContainer2Wide>\r\n                </FlexContFullWidthJustifyCenter>\r\n                <RegularResponsiveButton\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  onClick={() => {\r\n                    setDeleteProjectWindowDisplay(true);\r\n                  }}\r\n                  display={deleteProjectDisplay}\r\n                  border={deleteProjectBorder}\r\n                  width=\"200px\"\r\n                >\r\n                  <Icon20x20 src=\"/Garbage_Icon.svg\"></Icon20x20>\r\n                  Delete Project\r\n                </RegularResponsiveButton>\r\n\r\n                <RegularResponsiveButton\r\n                  width=\"250px\"\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  onClick={() => {\r\n                    setRequestCancelWindowDisplay(true);\r\n                  }}\r\n                  display={requestCancelDisplay}\r\n                  border={requestCancelProjectBorder}\r\n                >\r\n                  <Icon20x20 src=\"/Garbage_Icon.svg\"></Icon20x20>\r\n                  Request Cancellation\r\n                </RegularResponsiveButton>\r\n\r\n                <DeleteProjectWindow\r\n                  projectId={projectObj.Id}\r\n                  deleteOpen={deleteProjectWindowDisplay}\r\n                  CloseWindow={() => {\r\n                    setDeleteProjectWindowDisplay(false);\r\n                  }}\r\n                ></DeleteProjectWindow>\r\n                <RequestProjectCancelWindow\r\n                  projectId={projectObj.Id}\r\n                  deleteOpen={requestCancelWindowDisplay}\r\n                  CloseWindow={() => {\r\n                    setRequestCancelWindowDisplay(false);\r\n                  }}\r\n                ></RequestProjectCancelWindow>\r\n              </FlexColumnFullWidth>\r\n            </ContentCont77vw>\r\n\r\n            {/* Project Proposals --------------------------------------------------------------- */}\r\n\r\n            <ContentCont77vw display={proposalVisible}>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <Icon30x30\r\n                  display={backProposalArrowDisplay}\r\n                  src=\"/leftarrow.svg\"\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/CasesPersonal/\" + params.Id + \"/\" + params.storeId\r\n                    );\r\n                  }}\r\n                ></Icon30x30>\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"3%\">\r\n                  Estimates\r\n                </SmallHeaderLeagueSpartan>\r\n                <Icon30x30\r\n                  onClick={() => {\r\n                    DisplayProjectProposals(projectProposalArrow);\r\n                  }}\r\n                  src={projectProposalArrow}\r\n                ></Icon30x30>\r\n              </FlexColumnCont>\r\n              <FlexColumnFullWidth margin=\"0\" display={projectProposalsDisplay}>\r\n                <FlexColumnCont\r\n                  justifycontent=\"flex-start\"\r\n                  width=\"100%\"\r\n                  height=\"auto\"\r\n                  margin=\"0\"\r\n                >\r\n                  <FlexColumnCont alignitems=\"left\" width=\"75vw\" margin=\"0\">\r\n                    <FlexColumnCont\r\n                      justifycontent=\"flex-start\"\r\n                      margin=\"0\"\r\n                      margintop=\"1%\"\r\n                      borderbottom={\r\n                        \"4px solid \" + ColorPalette.PrimaryButtonBlue\r\n                      }\r\n                      height=\"50%\"\r\n                      width=\"99%\"\r\n                      flexdirection=\"row\"\r\n                    >\r\n                      <SmallHeaderLeagueSpartan minwidth=\"73%\" maxwidth=\"73%\">\r\n                        Package Name\r\n                      </SmallHeaderLeagueSpartan>\r\n\r\n                      <SmallHeaderLeagueSpartan minwidth=\"17.5%\" maxwidth=\"20%\">\r\n                        Date\r\n                      </SmallHeaderLeagueSpartan>\r\n\r\n                      <SmallHeaderLeagueSpartan maxwidth=\"auto\">\r\n                        Status\r\n                      </SmallHeaderLeagueSpartan>\r\n                    </FlexColumnCont>\r\n                  </FlexColumnCont>\r\n                  <br></br>\r\n                  <FlexColumnCont\r\n                    margin=\"0\"\r\n                    alignitems=\"left\"\r\n                    width=\"75vw\"\r\n                    height=\"auto\"\r\n                  >\r\n                    {projectProposals\r\n                      .filter((o) => o.QuoteStatus !== QuoteStatus.Expired)\r\n                      .map((o, i) => (\r\n                        <div key={i}>\r\n                          <ProposalCardUser\r\n                            key={i}\r\n                            proposallist={projectProposals}\r\n                            quoteid={o.Id}\r\n                            proposalObj={o}\r\n                            numberOfQuotes={projectProposals.length}\r\n                          ></ProposalCardUser>\r\n                        </div>\r\n                      ))}\r\n\r\n                    <br></br>\r\n                  </FlexColumnCont>\r\n                </FlexColumnCont>\r\n              </FlexColumnFullWidth>\r\n            </ContentCont77vw>\r\n\r\n            <ContentCont77vw display={expiredProposalVisible}>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <Icon30x30\r\n                  display={backProposalArrowDisplay}\r\n                  src=\"/leftarrow.svg\"\r\n                  onClick={() => {\r\n                    history.push(\r\n                      \"/CasesPersonal/\" + params.Id + \"/\" + params.storeId\r\n                    );\r\n                  }}\r\n                ></Icon30x30>\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"3%\">\r\n                  Archived Estimates\r\n                </SmallHeaderLeagueSpartan>\r\n                <Icon30x30\r\n                  onClick={() => {\r\n                    DisplayProjectProposals(\r\n                      expiredProjectProposalArrow,\r\n                      \"expired\"\r\n                    );\r\n                  }}\r\n                  src={expiredProjectProposalArrow}\r\n                ></Icon30x30>\r\n              </FlexColumnCont>\r\n              <FlexColumnFullWidth\r\n                margin=\"0\"\r\n                display={expiredProjectProposalsDisplay}\r\n              >\r\n                <FlexColumnCont\r\n                  justifycontent=\"flex-start\"\r\n                  width=\"100%\"\r\n                  height=\"auto\"\r\n                  margin=\"0\"\r\n                >\r\n                  <FlexColumnCont alignitems=\"left\" width=\"75vw\" margin=\"0\">\r\n                    <FlexColumnCont\r\n                      justifycontent=\"flex-start\"\r\n                      margin=\"0\"\r\n                      margintop=\"1%\"\r\n                      borderbottom={\r\n                        \"4px solid \" + ColorPalette.PrimaryButtonBlue\r\n                      }\r\n                      height=\"50%\"\r\n                      width=\"99%\"\r\n                      flexdirection=\"row\"\r\n                    >\r\n                      <SmallHeaderLeagueSpartan minwidth=\"73%\" maxwidth=\"73%\">\r\n                        Package Name\r\n                      </SmallHeaderLeagueSpartan>\r\n\r\n                      <SmallHeaderLeagueSpartan minwidth=\"17.5%\" maxwidth=\"20%\">\r\n                        Date\r\n                      </SmallHeaderLeagueSpartan>\r\n\r\n                      <SmallHeaderLeagueSpartan maxwidth=\"auto\">\r\n                        Status\r\n                      </SmallHeaderLeagueSpartan>\r\n                    </FlexColumnCont>\r\n                  </FlexColumnCont>\r\n                  <br></br>\r\n                  <FlexColumnCont\r\n                    margin=\"0\"\r\n                    alignitems=\"left\"\r\n                    width=\"75vw\"\r\n                    height=\"auto\"\r\n                  >\r\n                    {projectProposals\r\n                      .filter((o) => o.QuoteStatus === QuoteStatus.Expired)\r\n                      .map((o, i) => (\r\n                        <div key={i}>\r\n                          <ProposalCardUser\r\n                            key={i}\r\n                            proposallist={projectProposals}\r\n                            quoteid={o.Id}\r\n                            proposalObj={o}\r\n                            numberOfQuotes={projectProposals.length}\r\n                          ></ProposalCardUser>\r\n                        </div>\r\n                      ))}\r\n\r\n                    <br></br>\r\n                  </FlexColumnCont>\r\n                </FlexColumnCont>\r\n              </FlexColumnFullWidth>\r\n            </ContentCont77vw>\r\n\r\n            {/* Project Invoices --------------------------------------------------------------- */}\r\n\r\n            <ContentCont77vw\r\n              mobilepaddingbottom=\"15vh\"\r\n              display={invoiceVisible}\r\n            >\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"3%\">\r\n                  Invoices\r\n                </SmallHeaderLeagueSpartan>\r\n\r\n                <Icon30x30\r\n                  onClick={() => {\r\n                    DisplayProjectInvoices(projectInvoiceArrow);\r\n                  }}\r\n                  src={projectInvoiceArrow}\r\n                ></Icon30x30>\r\n              </FlexColumnCont>\r\n              <FlexColumnFullWidth display={projectInvoicesDisplay}>\r\n                <FlexColumnCont\r\n                  justifycontent=\"flex-start\"\r\n                  width=\"73vw\"\r\n                  height=\"95%\"\r\n                  margin=\"0\"\r\n                >\r\n                  <FlexColumnCont\r\n                    alignitems=\"left\"\r\n                    width=\"70vw\"\r\n                    margin=\"0\"\r\n                    height=\"auto\"\r\n                  >\r\n                    <FlexColumnCont\r\n                      bgcolor={ColorPalette.DarkGrey}\r\n                      padding=\".75%\"\r\n                      paddingleft=\"1%\"\r\n                      paddingright=\"2%\"\r\n                      justifycontent=\"space-between\"\r\n                      margin=\"0\"\r\n                      margintop=\"1%\"\r\n                      height=\"30px\"\r\n                      width=\"97%\"\r\n                      flexdirection=\"row\"\r\n                    >\r\n                      <FlexColumnPropWidth width=\"200px\" margin=\"0\">\r\n                        <MediumHeader100PercentWidthWhiteText>\r\n                          Date\r\n                        </MediumHeader100PercentWidthWhiteText>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"100px\" margin=\"0\">\r\n                        <MediumHeader100PercentWidthWhiteText>\r\n                          Invoice #\r\n                        </MediumHeader100PercentWidthWhiteText>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"200px\" margin=\"0\">\r\n                        <MediumHeader100PercentWidthWhiteText>\r\n                          Amount ($)\r\n                        </MediumHeader100PercentWidthWhiteText>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"400px\" margin=\"0\">\r\n                        <MediumHeader100PercentWidthWhiteText>\r\n                          Address\r\n                        </MediumHeader100PercentWidthWhiteText>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth\r\n                        width=\"125px\"\r\n                        height=\"100%\"\r\n                        margin=\"0\"\r\n                        alignitems=\"center\"\r\n                      >\r\n                        <MediumHeader100PercentWidthWhiteText>\r\n                          View Invoice\r\n                        </MediumHeader100PercentWidthWhiteText>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"100px\" margin=\"0\">\r\n                        <MediumHeader100PercentWidthWhiteText></MediumHeader100PercentWidthWhiteText>\r\n                      </FlexColumnPropWidth>\r\n                    </FlexColumnCont>\r\n                  </FlexColumnCont>\r\n\r\n                  {projectInvoices.map((o, i) => (\r\n                    <FlexColumnCont\r\n                      key={i}\r\n                      margin=\"0\"\r\n                      alignitems=\"left\"\r\n                      width=\"70vw\"\r\n                      height=\"auto\"\r\n                    >\r\n                      <FlexColumnCont\r\n                        mobilewidth=\"90vw\"\r\n                        justifycontent=\"space-between\"\r\n                        mobilejustifycontent=\"space-between\"\r\n                        margin=\"0\"\r\n                        margintop=\"0%\"\r\n                        borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n                        height=\"auto\"\r\n                        paddingleft=\"1%\"\r\n                        width=\"97%\"\r\n                        flexdirection=\"row\"\r\n                      >\r\n                        <FlexColumnPropWidth\r\n                          width=\"200px\"\r\n                          mobiledisplay=\"flex\"\r\n                          margin=\"0\"\r\n                        >\r\n                          <MediumHeader100PercentWidth>\r\n                            {o.Upload_Time.substring(0, 10)}\r\n                          </MediumHeader100PercentWidth>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth width=\"100px\" margin=\"0\">\r\n                          <MediumHeader100PercentWidth>\r\n                            #{o.Number}\r\n                          </MediumHeader100PercentWidth>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth width=\"200px\" margin=\"0\">\r\n                          <MediumHeader100PercentWidth>\r\n                            $\r\n                            {o.Total?.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            )}\r\n                          </MediumHeader100PercentWidth>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth width=\"400px\" margin=\"0\">\r\n                          <MediumHeader100PercentWidth>\r\n                            {o.Address}\r\n                          </MediumHeader100PercentWidth>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth\r\n                          width=\"125px\"\r\n                          height=\"100%\"\r\n                          margin=\"0\"\r\n                          mobiledisplay=\"flex\"\r\n                        >\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href={window.$IMGURL + o.File}\r\n                            target=\"_blank\"\r\n                          >\r\n                            <Icon45x45 src=\"/Eye_Icon.svg\"></Icon45x45>\r\n                          </a>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth\r\n                          width=\"100px\"\r\n                          margin=\"0\"\r\n                          display={o.IsPaid === true ? \"none\" : \"flex\"}\r\n                        >\r\n                          <RegularResponsiveButton\r\n                            onClick={() => {\r\n                              PushToPayment(\r\n                                o.Total,\r\n                                o.Case_Id,\r\n                                o.Quote_Id,\r\n                                o.Id\r\n                              );\r\n                            }}\r\n                          >\r\n                            Pay Invoice\r\n                          </RegularResponsiveButton>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth\r\n                          width=\"100px\"\r\n                          margin=\"0\"\r\n                          display={o.IsPaid === true ? \"flex\" : \"none\"}\r\n                        >\r\n                          <SmallGreenLeagueText fontsize=\"18px\">\r\n                            PAID\r\n                          </SmallGreenLeagueText>\r\n                        </FlexColumnPropWidth>\r\n                      </FlexColumnCont>\r\n                    </FlexColumnCont>\r\n                  ))}\r\n                </FlexColumnCont>\r\n              </FlexColumnFullWidth>\r\n            </ContentCont77vw>\r\n          </FlexColumn81vwLightGrey>\r\n        </Cont>\r\n      );\r\n      /* Loading Screen --------------------------------------------------------------- */\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  }\r\n};\r\n\r\nViewProjectUserView.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default ViewProjectUserView;\r\n","import React, { useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\n\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnContGreenBorderTopRounded,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { SmallTextPadding } from \"../../../StylesheetComps/Titles\";\r\nimport { GetCaseById } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { AddQuoteRevision } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { GetCurrentTime } from \"../../../API_Functions/Utility_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { CategoryTypes } from \"../../../StylesheetComps/CategoryTypes\";\r\n\r\nconst DuplicateProposalWindow = ({ open, onClose, quoteObj }) => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n  const [savingRevision, setSavingRevision] = useState(false);\r\n\r\n  const AddProposal = async (quoteobj) => {\r\n    try {\r\n      await AddQuoteRevision(quoteobj);\r\n    } catch (error) {\r\n      console.error('Error while adding quote revision:', error);\r\n    } finally {\r\n      history.push(\r\n        \"/viewcase/\" + params.Id + \"/\" + params.storeId + \"/\" + quoteobj.Case_Id\r\n      );\r\n    }\r\n  };\r\n  \r\n  const CloneProposal = async (quoteobj) => {\r\n    var data = await GetCaseById(quoteobj.Case_Id);\r\n    if (data != null) {\r\n      var quotes = data.Case.Quotes;\r\n      var proposal = 0;\r\n      quotes.forEach((q) => {\r\n        if (q.Proposal > proposal) {\r\n          proposal = q.Proposal;\r\n        }\r\n      });\r\n      quoteobj.Proposal = proposal + 1;\r\n      quoteobj.Revision = 0;\r\n      quoteobj.AddTime = await GetCurrentTime();\r\n\r\n      setSavingRevision(true);\r\n      await AddProposal(quoteobj);\r\n    }\r\n  };\r\n  if (!open) return null;\r\n  if (savingRevision === true) {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  } else {\r\n    return (\r\n      <FixedOverlay200vh>\r\n        <FlexColumnContGreenBorderTopRounded>\r\n          <SmallHeaderLeagueSpartan>\r\n            You're about to duplicate this quote.\r\n          </SmallHeaderLeagueSpartan>\r\n          <SmallTextPadding>\r\n            Are you sure you want to duplicate this quote?\r\n          </SmallTextPadding>\r\n          <FlexRowCont>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryGrey}\r\n              onClick={onClose}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n              onClick={() => {\r\n                CloneProposal(quoteObj);\r\n              }}\r\n            >\r\n              Duplicate Quote\r\n            </RegularResponsiveButton>\r\n          </FlexRowCont>\r\n        </FlexColumnContGreenBorderTopRounded>\r\n      </FixedOverlay200vh>\r\n    );\r\n  }\r\n};\r\n\r\nDuplicateProposalWindow.defaultProps = {\r\n  CloseWindow: () => {},\r\n  onClose: () => {},\r\n  newCreatedRevision: () => {},\r\n};\r\n\r\nexport default DuplicateProposalWindow;\r\n","import { useEffect, useState } from \"react\";\r\nimport { AddToHomeScreen } from \"react-pwa-add-to-homescreen\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\nimport { useParams } from \"react-router-dom\";\r\nimport { GetCaseById } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { TopDivWhite } from \"../../../MobileComponents/Divs\";\r\nimport {\r\n  MobileLogo30x30px,\r\n  MobileLogo50x50px,\r\n} from \"../../../MobileComponents/Images\";\r\nimport { MenuHeader } from \"../../../MobileComponents/Text\";\r\nimport { Header, SmallTextInput } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  Cont82vw21vh,\r\n  FlexDiv,\r\n  RelativeFlexContAutoWidth13vh,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FlexDivCenter, FlexDivSpaceBetween, MenuMainCont, MobileMainCont } from \"../../../StylesheetComps/Div\";\r\nimport { Image60x50Percent } from \"../../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  FlexColumnCont,\r\n  Icon,\r\n  StickyTopMenuCont,\r\n  TopMenuContAutoHeightSticky\r\n} from \"../../../StylesheetComps/Menu\";\r\nimport Dropdown from \"../../DropdownMenu\";\r\nimport MobileSlideMenu from \"../../MobileSlideMenu\";\r\nimport { UserRole } from \"../../../StylesheetComps/UserRoles\";\r\nimport DuplicateProposalWindow from \"../../Windows/SaveRevisionGuide\";\r\nimport LoadingIndicator from \"../../InteractiveLoadingBar\";\r\nimport { Icon30px30pxPointer } from \"../../../StylesheetComps/Quote\";\r\n\r\nconst TopMentProposalView = ({\r\n  pageProp,\r\n  estimateName,\r\n  onBack,\r\n  homeownerName,\r\n  scrollinfo,\r\n  scrollsupply,\r\n  scrollinstall,\r\n  scrolldesigns,\r\n  scrollcomments,\r\n  mobilePageProp,\r\n  currentPage,\r\n  quoteObj,\r\n  scrollconfirmation,\r\n  saveAndSend,\r\n  saveEstimate,\r\n  handleLockInEstimate,\r\n  handleDeleteLockedEstimate,\r\n  downloadPDF,\r\n  CreateSharableLink,\r\n  OpenEstimateEmail,\r\n  duplicateEstimate\r\n}) => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n  const [moreToggle, setMoreToggle] = useState(false);\r\n\r\n  const [cityName, setCityName] = useState(\"\");\r\n  <Icon\r\n    width=\"2%\"\r\n    height=\"100%\"\r\n    margintop=\"4px\"\r\n    src=\"/LocationIcon.svg\"\r\n  ></Icon>;\r\n\r\n  const [sharableLink, setSharableLink] = useState(\"\");\r\n  const [sharableLinkInputDisplay, setSharableLinkInputDisplay] = useState(\"none\");\r\n  const iconmargin = '10px'\r\n  const userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n\r\n  const [cloneProposalButtonDisplay, setCloneProposalButtonDisplay] =\r\n  useState(\"none\");\r\nconst [cloneProposalWindowDisplay, setCloneProposalWindowDisplay] =\r\n  useState(false);\r\n\r\n  const [menuSRC, setMenuSRC] = useState(\"/hamburger.svg\");\r\n\r\n  const ChangeIcon = async () => {\r\n    if (menuSRC === \"/hamburger.svg\") {\r\n      setMenuSRC(\"/CloseMobile.svg\");\r\n    } else {\r\n      setMenuSRC(\"/hamburger.svg\");\r\n    }\r\n  };\r\n\r\n  const SetHeaderUI = async (case_id) => {\r\n    if (case_id !== undefined && case_id !== 0) {\r\n      var data = await GetCaseById(case_id);\r\n      if (data !== null) {\r\n        setCityName(data.Case.City);\r\n      }\r\n    }\r\n\r\n    let userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    if (\r\n      userinfo?.Role === UserRole.Manager ||\r\n      userinfo?.Role === UserRole.Estimator\r\n    ) {\r\n      setCloneProposalButtonDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderUI(params.caseId);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n  if (window.$ISMOBILE === true && (userinfo?.Role === UserRole.Manager || userinfo?.Role === UserRole.Estimator)) {\r\n    return (\r\n      <StickyTopMenuCont>\r\n        <TopDivWhite>\r\n          <MobileLogo50x50px\r\n            onClick={() => {\r\n              history.push(\"/home\");\r\n            }}\r\n            src=\"/NRCLogoRegularBlack.png\"\r\n          ></MobileLogo50x50px>\r\n          <MenuHeader>{mobilePageProp}</MenuHeader>\r\n          <MobileLogo30x30px\r\n            onClick={() => {\r\n              setMoreToggle(!moreToggle);\r\n              ChangeIcon(menuSRC);\r\n            }}\r\n            src={menuSRC}\r\n          ></MobileLogo30x30px>\r\n        </TopDivWhite>\r\n        <MobileSlideMenu\r\n          open={moreToggle}\r\n          onCloseMenu={() => {\r\n            setMoreToggle(false);\r\n          }}\r\n        ></MobileSlideMenu>\r\n        {currentPage === 'estimatorView' ? (\r\n          <FlexDivSpaceBetween bgcolor='white' margintop='0' paddingbottom='10px'>\r\n            <RegularResponsiveButton onClick={()=>{history.push(`/create-form/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}`)}} bgcolor={'#51C159'}>Create FRS</RegularResponsiveButton>\r\n            <Icon30px30pxPointer\r\n              title=\"Duplicate Estimate\"\r\n              margin={iconmargin}\r\n              src=\"/duplicateestimate_icon.svg\"\r\n              onClick={() => {\r\n                duplicateEstimate();\r\n              }}\r\n            ></Icon30px30pxPointer>\r\n            <Icon30px30pxPointer\r\n              title=\"Lock Estimate\"\r\n              margin={iconmargin}\r\n              src=\"/lock_icon.svg\"\r\n              onClick={handleLockInEstimate}\r\n            ></Icon30px30pxPointer>\r\n            <Icon30px30pxPointer\r\n              title=\"Unlock Estimate\"\r\n              margin={iconmargin}\r\n              src=\"/unlock_icon.svg\"\r\n              onClick={handleDeleteLockedEstimate}\r\n            ></Icon30px30pxPointer>\r\n            <Icon30px30pxPointer\r\n              title=\"Send Estimate via Email\"\r\n              margin={iconmargin}\r\n              src=\"/grey_email.svg\"\r\n              onClick={async () => {\r\n                OpenEstimateEmail();\r\n              }}\r\n            ></Icon30px30pxPointer>\r\n            <SmallTextInput\r\n              width=\"0px\"\r\n              value={sharableLink}\r\n              type=\"text\"\r\n              id=\"linkText\"\r\n              inputdisplay={\"none\"}\r\n            ></SmallTextInput>\r\n            <Icon30px30pxPointer\r\n              title=\"Download PDF\"\r\n              margin={iconmargin}\r\n              src=\"/pdf_icon.svg\"\r\n              onClick={downloadPDF}\r\n            ></Icon30px30pxPointer>\r\n            <Icon30px30pxPointer\r\n              title=\"Generate Sharable Link\"\r\n              src=\"/share_icon.svg\"\r\n              onMouseOver={() => {\r\n                setSharableLinkInputDisplay(\"block\");\r\n              }}\r\n              onClick={async () => {\r\n                CreateSharableLink();\r\n              }}\r\n            ></Icon30px30pxPointer>\r\n            <Dropdown\r\n              currentPage={currentPage}\r\n              saveAndSend={() => {\r\n                saveAndSend();\r\n              }}\r\n              saveEstimate={() => {\r\n                saveEstimate();\r\n              }}\r\n            ></Dropdown>\r\n          </FlexDivSpaceBetween>\r\n        ) : null}\r\n      </StickyTopMenuCont>\r\n    );    \r\n  } else \r\n  if (window.$ISMOBILE === true) {\r\n    return (\r\n      <div>\r\n        <TopDivWhite>\r\n          <MobileLogo50x50px\r\n            onClick={() => {\r\n              history.push(\"/home\");\r\n            }}\r\n            src=\"/NRCLogoRegularBlack.png\"\r\n          ></MobileLogo50x50px>\r\n          <MenuHeader>{mobilePageProp}</MenuHeader>\r\n          <MobileLogo30x30px\r\n            onClick={() => {\r\n              setMoreToggle(!moreToggle);\r\n              ChangeIcon(menuSRC);\r\n            }}\r\n            src={menuSRC}\r\n          ></MobileLogo30x30px>\r\n        </TopDivWhite>\r\n        <MobileSlideMenu\r\n          open={moreToggle}\r\n          onCloseMenu={() => {\r\n            setMoreToggle(false);\r\n          }}\r\n        ></MobileSlideMenu>\r\n      </div>\r\n    );\r\n  } else if (params.viewonly) {\r\n    return (\r\n      <StickyTopMenuCont id='exclude-from-pdf'>\r\n      <Cont82vw21vh width=\"100.5vw\">\r\n        <MobileMainCont>\r\n          <RelativeFlexContAutoWidth13vh>\r\n            <Image60x50Percent\r\n              src={\"/mobileprofile.svg\"}\r\n              onClick={() => {\r\n                history.push(\"/profile\");\r\n              }}\r\n            ></Image60x50Percent>\r\n\r\n            <AddToHomeScreen />\r\n          </RelativeFlexContAutoWidth13vh>\r\n        </MobileMainCont>\r\n      </Cont82vw21vh>\r\n\r\n      <MenuMainCont></MenuMainCont>\r\n      <TopMenuContAutoHeightSticky mobiledisplay=\"none\" width='100vw'>\r\n        <FlexColumnCont\r\n          marginbottom=\"0%\"\r\n          margin=\"0\"\r\n          width=\"95%\"\r\n          height=\"0vh\"\r\n          mobileheight=\"8vh\"\r\n        ></FlexColumnCont>\r\n        <FlexColumnCont\r\n        width=\"94%\"\r\n        height=\"50px\"\r\n        padding=\"10px\"\r\n        alignitems=\"baseline\"\r\n        >\r\n        <FlexColumnCont\r\n          margin=\"0px\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"space-between\"\r\n          width=\"100%\"\r\n          height=\"auto\"\r\n          alignitems=\"left\"\r\n        >\r\n          <FlexDivCenter>\r\n          <Header\r\n            fontsize=\"160%\"\r\n            margintop=\"0%\"\r\n            marginbottom=\"0%\"\r\n          >\r\n           {estimateName}\r\n          </Header>\r\n          </FlexDivCenter>\r\n          <FlexDiv>\r\n          </FlexDiv>\r\n        </FlexColumnCont>\r\n        </FlexColumnCont>\r\n\r\n        <FlexColumnCont\r\n          margin=\"0\"\r\n          width=\"100%\"\r\n          height=\"20%\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"flex-start\"\r\n          alignitems=\"left\"\r\n          borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n        >\r\n          <FlexColumnCont\r\n            height=\"100%\"\r\n            margin=\"0\"\r\n            justifycontent=\"flex-start\"\r\n            alignitems=\"left\"\r\n            flexdirection=\"row\"\r\n            marginleft=\"2%\"\r\n          >\r\n          </FlexColumnCont>\r\n        </FlexColumnCont>\r\n      </TopMenuContAutoHeightSticky>\r\n    </StickyTopMenuCont>\r\n    )\r\n  } else {\r\n    return (\r\n      <StickyTopMenuCont id='exclude-from-pdf'>\r\n        <Cont82vw21vh>\r\n          <MobileMainCont>\r\n            <RelativeFlexContAutoWidth13vh>\r\n              <Image60x50Percent\r\n                src={\"/mobileprofile.svg\"}\r\n                onClick={() => {\r\n                  history.push(\"/profile\");\r\n                }}\r\n              ></Image60x50Percent>\r\n\r\n              <AddToHomeScreen />\r\n            </RelativeFlexContAutoWidth13vh>\r\n          </MobileMainCont>\r\n        </Cont82vw21vh>\r\n\r\n        <MenuMainCont></MenuMainCont>\r\n        <TopMenuContAutoHeightSticky mobiledisplay=\"none\">\r\n          <FlexColumnCont\r\n            marginbottom=\"0%\"\r\n            margin=\"0\"\r\n            width=\"95%\"\r\n            height=\"0vh\"\r\n            mobileheight=\"8vh\"\r\n          ></FlexColumnCont>\r\n          <FlexColumnCont\r\n          width=\"94%\"\r\n          height=\"50px\"\r\n          padding=\"10px\"\r\n          alignitems=\"baseline\"\r\n          >\r\n          <FlexColumnCont\r\n            margin=\"0px\"\r\n            flexdirection=\"row\"\r\n            justifycontent=\"space-between\"\r\n            width=\"100%\"\r\n            height=\"auto\"\r\n            alignitems=\"left\"\r\n          >\r\n            <FlexDivCenter>\r\n            <RegularResponsiveButton onClick={() => {\r\n                    onBack();\r\n                  }} width=\"5px\" minwidth=\"60px\" marginright=\"10px\" height=\"18px\" lineheight=\"22px\" bgcolor={ColorPalette.DarkGrey}>\r\n                   {`←`} {` `} Back</RegularResponsiveButton> \r\n            <Header\r\n              fontsize=\"160%\"\r\n              margintop=\"0%\"\r\n              marginbottom=\"0%\"\r\n            >\r\n             {estimateName}\r\n            </Header>\r\n            </FlexDivCenter>\r\n            <FlexDiv>\r\n  \r\n                   {/* <RegularResponsiveButton\r\n                   marginright=\"15px\"\r\n                      display={cloneProposalButtonDisplay}\r\n                      onClick={() => {\r\n                        setCloneProposalWindowDisplay(true);\r\n                      }}\r\n                    >\r\n                      Duplicate\r\n                    </RegularResponsiveButton>\r\n                    <DuplicateProposalWindow\r\n              quoteObj={quoteObj}\r\n              onClose={() => {\r\n                setCloneProposalWindowDisplay(false);\r\n              }}\r\n              open={cloneProposalWindowDisplay}\r\n            ></DuplicateProposalWindow> */}\r\n            {currentPage==='estimatorView' ?\r\n            <FlexDivSpaceBetween>\r\n                          <RegularResponsiveButton onClick={()=>{history.push(`/create-form/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}`)}} bgcolor={'#51C159'}>Create FRS</RegularResponsiveButton>\r\n                   <Icon30px30pxPointer title=\"Duplicate Estimate\" margin={iconmargin} src='/duplicateestimate_icon.svg' onClick={()=>{duplicateEstimate()}}></Icon30px30pxPointer>\r\n            <Icon30px30pxPointer title=\"Lock Estimate\" margin={iconmargin} src='/lock_icon.svg' onClick={handleLockInEstimate}></Icon30px30pxPointer>\r\n\r\n<Icon30px30pxPointer title=\"Unlock Estimate\" margin={iconmargin} src='/unlock_icon.svg'  onClick={handleDeleteLockedEstimate}></Icon30px30pxPointer>\r\n\r\n            <Icon30px30pxPointer title=\"Send Estimate via Email\" margin={iconmargin} src='/grey_email.svg' onClick={ async()=>{\r\nOpenEstimateEmail()\r\n}} ></Icon30px30pxPointer>\r\n  \r\n<SmallTextInput width='0px'  value={sharableLink} type=\"text\" id='linkText' inputdisplay={'none'}></SmallTextInput>\r\n           \r\n<Icon30px30pxPointer title=\"Download PDF\" margin={iconmargin} src='/pdf_icon.svg'   onClick={downloadPDF}></Icon30px30pxPointer>\r\n<Icon30px30pxPointer title=\"Generate Sharable Link\" src='/share_icon.svg' onMouseOver={()=>{setSharableLinkInputDisplay('block'); }} onClick={ async()=>{\r\nCreateSharableLink()\r\n}} ></Icon30px30pxPointer>\r\n\r\n            <Dropdown currentPage={currentPage} saveAndSend={()=>{saveAndSend()}} saveEstimate={()=>{saveEstimate()}} ></Dropdown>\r\n            </FlexDivSpaceBetween>\r\n            : null}\r\n            </FlexDiv>\r\n          </FlexColumnCont>\r\n          </FlexColumnCont>\r\n\r\n          <FlexColumnCont\r\n            margin=\"0\"\r\n            width=\"100%\"\r\n            height=\"20%\"\r\n            flexdirection=\"row\"\r\n            justifycontent=\"flex-start\"\r\n            alignitems=\"left\"\r\n            borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n          >\r\n            <FlexColumnCont\r\n              height=\"100%\"\r\n              margin=\"0\"\r\n              justifycontent=\"flex-start\"\r\n              alignitems=\"left\"\r\n              flexdirection=\"row\"\r\n              marginleft=\"2%\"\r\n            >\r\n            </FlexColumnCont>\r\n          </FlexColumnCont>\r\n        </TopMenuContAutoHeightSticky>\r\n      </StickyTopMenuCont>\r\n    );\r\n  }\r\n};\r\n\r\nTopMentProposalView.defaultProps = {\r\n  pageProp: \"\",\r\n  estimateName: \"\",\r\n  homeownerName:\"\",\r\n  currentPage:\"homeownerView\",\r\n  scrollinfo: () => {},\r\n  scrollsupply: () => {},\r\n  scrollinstall: () => {},\r\n  scrolldesigns: () => {},\r\n  scrollcomments: () => {},\r\n  scrollconfirmation: () => {},\r\n  saveAndSend: () => {},\r\n  saveEstimate: () => {},\r\n  onBack: ()=>{},\r\n  handleLockInEstimate:()=>{},\r\n  handleDeleteLockedEstimate:()=>{},\r\n  downloadPDF:()=>{},\r\n  CreateSharableLink:()=>{},\r\n  OpenEstimateEmail:()=>{},\r\n  duplicateEstimate:()=>{}\r\n};\r\n\r\nexport default TopMentProposalView;\r\n","import { Backdrop, CircularProgress } from '@material-ui/core';\r\nimport React, { useEffect, useState, useRef } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport styled, { keyframes } from 'styled-components';\r\nimport { GetQuoteById, UpdateQuoteItem, UpdateQuoteTool } from '../../../API_Functions/CaseQuote_Functions';\r\nimport { decimalHoursToTimeString } from '../../../API_Functions/Utility_Functions';\r\nimport { CategoryTypes } from '../../../StylesheetComps/CategoryTypes';\r\nimport { FlexContCenterAlign } from '../../../StylesheetComps/Cont';\r\nimport { FlexColumnDiv } from '../../../StylesheetComps/Div';\r\nimport { DatalistOption, SelectField, TextAreaAutoResize } from '../../../StylesheetComps/LandscapeForm';\r\n\r\n// const SpeechBubbleContainer = styled.div`\r\n//   display: ${(props) => (props.display ? props.display : \"block\")};\r\n//   align-items: center;\r\n//   @media (max-width: 768px) {\r\n//     width: 100vw; /* or whatever percentage suits your design */\r\n//     left: 0;\r\n//     right: 0;\r\n//     margin-left: auto;\r\n//     margin-right: auto;\r\n//   }\r\n// `;\r\n\r\n// const SpeechBubble = styled.div`\r\n//   position: relative;\r\n//   margin-top:20px;\r\n//   margin-bottom:-20px;\r\n//   width: 300px;\r\n//   height: auto;\r\n//   background-color: #f9f9f9;\r\n//   border: 1px solid #ddd;\r\n//   border-radius: 5px;\r\n//   padding: 10px;\r\n//   box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);\r\n//   display: flex;\r\n//   &:before {\r\n//     content: '';\r\n//     position: absolute;\r\n//     top: 100%;\r\n//     left: 50%;\r\n//     margin-left: -10px;\r\n//     border-width: 10px;\r\n//     border-style: solid;\r\n//     border-color: rgba(0, 0, 0, 0.1) transparent transparent transparent;\r\n//     transform: translate(0, 1px);\r\n//   }\r\n\r\n//   &:after {\r\n//     content: '';\r\n//     position: absolute;\r\n//     top: 100%;\r\n//     left: 50%;\r\n//     margin-left: -10px;\r\n//     border-width: 10px;\r\n//     border-style: solid;\r\n//     border-color: #f9f9f9 transparent transparent transparent;\r\n//   }\r\n\r\n//   @media (max-width: 768px) {\r\n//     width: 60vw; /* or whatever percentage suits your design */\r\n//     left: 0;\r\n//     right: 0;\r\n//     margin-left: auto;\r\n//     margin-right: auto;\r\n//   }\r\n// `;\r\n\r\n// const InputBox = styled.input`\r\n// width: 100%;\r\n//   border: none;\r\n//   border-bottom: 2px solid #ddd;\r\n//   border-radius: 5px;\r\n//   padding:10px;\r\n//   outline: none;\r\n//   font-size: 18px; // Increase size\r\n//   margin-right: 10px;\r\n//   font-family: Avenir;\r\n// `;\r\n\r\n// const ImageContainer = styled.div`\r\n// display: flex;\r\n// flex-direction:column;\r\n// justify-content: space-evenly;\r\n// width: auto;\r\n// margin-left:20px;\r\n// @media (max-width: 768px) {\r\n//   margin-left: auto;\r\n// }\r\n// `;\r\n\r\n// const ImageButton = styled.img`\r\n//   width: 24px;\r\n//   height: 24px;\r\n//   margin:5px;\r\n//   cursor: pointer;\r\n// `;\r\n\r\n/* \r\n  A simple \"springy\" fade-in-up animation, reminiscent of Apple’s smooth transitions \r\n*/\r\nconst fadeInUp = keyframes`\r\n  0% {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n  100% {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n`;\r\n\r\nconst fadeOutDown = keyframes`\r\n  0% {\r\n    opacity: 1;\r\n    transform: translateY(0);\r\n  }\r\n  100% {\r\n    opacity: 0;\r\n    transform: translateY(10px);\r\n  }\r\n`;\r\n\r\n\r\n/* \r\n  Container that holds the speech bubble. We're centering it and giving it a \r\n  subtle animation.\r\n*/\r\nexport const SpeechBubbleContainer = styled.div`\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  align-items: center;\r\n  animation: ${({ isClosing }) => (isClosing ? fadeOutDown : fadeInUp)} 0.4s ease forwards;\r\n\r\n  @media (max-width: 768px) {\r\n    width: 100vw;\r\n    left: 0;\r\n    right: 0;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n  }\r\n`;\r\n\r\n/* \r\n  The speech bubble itself. \r\n  - Uses a soft background and subtle border to mimic Apple’s clean UI style. \r\n  - Rounded corners and a box-shadow for a floating look.\r\n  - A small hover scale effect to add polish.\r\n*/\r\nexport const SpeechBubble = styled.div`\r\n  position: relative;\r\n  margin-top: 20px;\r\n  margin-bottom: -20px;\r\n  width: 300px;\r\n  height: auto;\r\n  background-color: #ffffff;\r\n  border: 1px solid #dadada;\r\n  border-radius: 16px;\r\n  padding: 16px;\r\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);\r\n  display: flex;\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\r\n  transition: transform 0.2s ease, box-shadow 0.2s ease;\r\n\r\n  &:hover {\r\n    transform: scale(1.02);\r\n    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.08);\r\n  }\r\n\r\n  /* The \"tail\" of the speech bubble */\r\n  &:before {\r\n    content: '';\r\n    position: absolute;\r\n    top: 100%;\r\n    left: 50%;\r\n    margin-left: -10px;\r\n    border-width: 10px;\r\n    border-style: solid;\r\n    border-color: rgba(218, 218, 218, 0.7) transparent transparent transparent;\r\n    transform: translateY(1px);\r\n  }\r\n\r\n  &:after {\r\n    content: '';\r\n    position: absolute;\r\n    top: 100%;\r\n    left: 50%;\r\n    margin-left: -10px;\r\n    border-width: 10px;\r\n    border-style: solid;\r\n    border-color: #ffffff transparent transparent transparent;\r\n  }\r\n\r\n  @media (max-width: 768px) {\r\n    width: 80vw;\r\n    left: 2.5vw;\r\n    right: 0;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n  }\r\n`;\r\n\r\n/* \r\n  A more Apple-like input:\r\n  - System font\r\n  - Subtle bottom border that highlights on focus\r\n  - Smooth transition \r\n*/\r\nexport const InputBox = styled.input`\r\n  width: 100%;\r\n  height: 40px;\r\n  border: none;\r\n  border-bottom: 2px solid #ddd;\r\n  border-radius: 0; /* Keep it flat on the sides for a sleek look */\r\n  padding: 12px;\r\n  outline: none;\r\n  font-size: 16px;\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\r\n  transition: border-bottom-color 0.3s ease;\r\n  \r\n  &::placeholder {\r\n    color: #aaa;\r\n    font-style: italic;\r\n  }\r\n\r\n  &:focus {\r\n    border-bottom-color: #007aff; /* Apple's classic blue highlight */\r\n  }\r\n`;\r\n\r\n/*\r\n  Container for images or buttons next to the input or bubble. \r\n  We keep it fairly minimal; \r\n  a column layout and some spacing. \r\n*/\r\nexport const ImageContainer = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: space-evenly;\r\n  width: auto;\r\n  margin-left: 20px;\r\n\r\n  @media (max-width: 768px) {\r\n    margin-left: auto;\r\n  }\r\n`;\r\n\r\n/*\r\n  Simple image button with a hover effect.\r\n*/\r\nexport const ImageButton = styled.img`\r\n  width: 24px;\r\n  height: 24px;\r\n  margin: 5px;\r\n  cursor: pointer;\r\n  transition: transform 0.2s ease;\r\n\r\n  &:hover {\r\n    transform: scale(1.1);\r\n  }\r\n`;\r\n\r\n\r\nconst SpeechBubbleComponent = ({ saveItemInfo, cancelItemChange, itemObj, display, fieldType, RefreshComponentState, onCloseBubble }) => {\r\n\r\n  const [inputValue, setInputValue] = useState({ installTime: '', wheelbarrowTime: '' });\r\n  const [inputInteracted, setInputInteracted] = useState(false);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n  const [taglist, setTaglist] = useState([]);\r\n  const [isClosing, setIsClosing] = useState(false);\r\n  const containerRef = useRef(null);\r\n\r\n  const GetQuoteTaglist = async (quote_id) => {\r\n    if (quote_id !== 0 && quote_id !== undefined) {\r\n      try {\r\n        const data = await GetQuoteById(quote_id);\r\n        if (data && data.quote) {\r\n          setTaglist(data.quote.Tags);\r\n        }\r\n      } catch (error) {\r\n        console.error(error);\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    function handleClickOutside(event) {\r\n      if (containerRef.current && !containerRef.current.contains(event.target)) {\r\n        // 3. If the click is outside, close the component\r\n        cancelItemChange(); // Assuming cancelItemChange is the method to close it\r\n      }\r\n    }\r\n\r\n    // Add click event listener\r\n    document.addEventListener(\"mousedown\", handleClickOutside);\r\n    return () => {\r\n      // Remove event listener on cleanup\r\n      document.removeEventListener(\"mousedown\", handleClickOutside);\r\n    };\r\n  }, [containerRef]); // Empty dependency array means this effect runs once on mount and unmount\r\n\r\n\r\n  const params = useParams()\r\n\r\n  const determineLeftMargin = () => {\r\n    if (window.innerWidth <= 768) {\r\n      return '0px'; // Center it on mobile\r\n    }  \r\n    switch (fieldType) {\r\n      case 'Quantity':\r\n        return '-20vw';\r\n      case 'Name':\r\n        return '-20vw';\r\n      case 'Notes':\r\n          return '-20vw';\r\n      case 'Install':\r\n        return '39vw';\r\n      case 'Rental Hours':\r\n          return '39.5vw';\r\n      case 'Tag':\r\n          return '54vw';\r\n      default:\r\n        return '50px'; // You can set a default value\r\n    }\r\n  };\r\n\r\n  const updateItemOnEstimate = async () => {\r\n    setIsLoading(true)\r\n    switch(fieldType) {\r\n      case 'Quantity':\r\n        itemObj.Quant = inputValue; \r\n        if(!itemObj.Tool_Id) {\r\n        await UpdateQuoteItem(itemObj); \r\n        } else {\r\n        await UpdateQuoteTool(itemObj);   \r\n        }\r\n        break;\r\n  \r\n      case 'Name':\r\n        itemObj.Name = inputValue; \r\n        var finalValue = itemObj.Quant;\r\n        var denominator = itemObj.Denominator;\r\n        var allowance = itemObj.Allowance;\r\n\r\n        var intermediateValue;\r\n        if (allowance === 0) {\r\n            intermediateValue = finalValue; // No adjustment needed if allowance is 0\r\n        } else {\r\n            intermediateValue = finalValue / (1 + (allowance / 100));\r\n        }\r\n\r\n        var originalQuant = intermediateValue * denominator;\r\n     \r\n        // Assign the result back to the object or use it as needed\r\n        itemObj.Quant = originalQuant;\r\n        await UpdateQuoteItem(itemObj);\r\n        break;\r\n\r\n        case 'Notes':\r\n        itemObj.Notes = inputValue; \r\n        \r\n        var finalValue = itemObj.Quant;\r\n        var denominator = itemObj.Denominator;\r\n        var allowance = itemObj.Allowance;\r\n\r\n        var intermediateValue;\r\n        if (allowance === 0) {\r\n            intermediateValue = finalValue; // No adjustment needed if allowance is 0\r\n        } else {\r\n            intermediateValue = finalValue / (1 + (allowance / 100));\r\n        }\r\n\r\n        var originalQuant = intermediateValue * denominator;\r\n     \r\n        // Assign the result back to the object or use it as needed\r\n        itemObj.Quant = originalQuant;\r\n        if(!itemObj.Tool_Id) {  \r\n        await UpdateQuoteItem(itemObj);\r\n        } else {\r\n        await UpdateQuoteTool(itemObj);\r\n        }\r\n        break;\r\n\r\n        case 'Rental Hours':\r\n        itemObj.RentalLength = inputValue; \r\n        await UpdateQuoteTool(itemObj);\r\n        break;\r\n\r\n        case 'Tag':\r\n          itemObj.Tag_Id = inputValue; \r\n\r\n          var finalValue = itemObj.Quant;\r\n          var denominator = itemObj.Denominator;\r\n          var allowance = itemObj.Allowance;\r\n\r\n          var intermediateValue;\r\n          if (allowance === 0) {\r\n              intermediateValue = finalValue; // No adjustment needed if allowance is 0\r\n          } else {\r\n              intermediateValue = finalValue / (1 + (allowance / 100));\r\n          }\r\n\r\n          var originalQuant = intermediateValue * denominator;\r\n       \r\n          // Assign the result back to the object or use it as needed\r\n          itemObj.Quant = originalQuant;\r\n          await UpdateQuoteItem(itemObj);\r\n          break;\r\n  \r\n      case 'Install':\r\n        const { installTime, wheelbarrowTime, installItem, wheelbarrowItem } = inputValue;\r\n        if (installTime && installItem) {\r\n          installItem.Quant = installTime; \r\n          await UpdateQuoteItem(installItem); \r\n        }\r\n  \r\n        if (wheelbarrowTime && wheelbarrowItem) {\r\n          wheelbarrowItem.Quant = wheelbarrowTime; \r\n          await UpdateQuoteItem(wheelbarrowItem); \r\n        }\r\n        break;\r\n\r\n        case 'Removal Quantity':\r\n          const { removalTime, removalWheelbarrowTime, removalItem, removalWheelbarrowItem } = inputValue;\r\n          if (removalTime && removalItem) {\r\n            removalItem.Quant = removalTime; \r\n            await UpdateQuoteItem(removalItem); \r\n          }\r\n    \r\n          if (removalWheelbarrowTime && removalWheelbarrowItem) {\r\n            removalWheelbarrowItem.Quant = removalWheelbarrowTime; \r\n            await UpdateQuoteItem(removalWheelbarrowItem); \r\n          }\r\n          break;\r\n        default:\r\n        break;\r\n    }\r\n    setIsLoading(false)\r\n    RefreshComponentState();\r\n  };\r\n  \r\n  \r\n  const handleCloseClick = () => {\r\n    // Trigger fade-out\r\n    setIsClosing(true);\r\n  \r\n    // Wait for 0.4s (matching our animation duration), \r\n    // then run the parent's close logic or unmount\r\n    setTimeout(() => {\r\n      setInputInteracted(false);\r\n      cancelItemChange();    // or onCloseBubble(), or both\r\n      setIsClosing(false);\r\n      onCloseBubble();       // if you want the parent to unmount this component\r\n    }, 400);\r\n\r\n  };\r\n  \r\n  \r\n\r\n\r\n  const handleChange = (key, value) => {\r\n    // Convert the input to a number\r\n    const parsedValue = parseFloat(value);\r\n    // Ensure that the value is 0 or more\r\n    const positiveValue = Math.max(0, parsedValue);\r\n    setInputValue({...inputValue, [key]: positiveValue.toString() || ''});\r\n  };\r\n\r\n  const renderInputs = () => {\r\n    switch (fieldType) {\r\n      case 'Quantity':\r\n        return (\r\n          <div>\r\n            <label>Quantity, <i> Input Unit: </i> {`(${itemObj?.Unit !== undefined ? itemObj?.Unit : 'N/A'})`}</label>\r\n            <InputBox\r\n            type={window.$ISMOBILE === true ? 'text' : 'type'}\r\n              value={inputValue}\r\n              onChange={(e) => setInputValue(e.target.value)}\r\n            />\r\n          </div>\r\n        );\r\n      case 'Name':\r\n        return (\r\n          <div>\r\n            <label>Name</label>\r\n            <InputBox\r\n              value={inputValue}\r\n              style={{ fontSize: '14px' }}\r\n              onChange={(e) => setInputValue(e.target.value)}\r\n            />\r\n          </div>\r\n        );\r\n        case 'Notes':\r\n          return (\r\n            <FlexColumnDiv>\r\n              <label>Notes</label>\r\n              <TextAreaAutoResize\r\n                mobilewidth='70vw'\r\n                mobileheight='100px'\r\n                value={inputValue}\r\n                style={{ fontSize: '14px' }}\r\n                onChange={(e) => setInputValue(e.target.value)}\r\n              />\r\n            </FlexColumnDiv>\r\n          );\r\n          case 'Rental Hours':\r\n            return (\r\n              <div>\r\n                <label>Rental Hours</label>\r\n                <InputBox\r\n            type={window.$ISMOBILE === true ? 'text' : 'type'}\r\n            value={inputValue}\r\n                  style={{ fontSize: '14px' }}\r\n                  onChange={(e) => setInputValue(e.target.value)}\r\n                />\r\n              </div>\r\n            );\r\n            case 'Tag':\r\n              return (\r\n                <FlexContCenterAlign>\r\n                  <FlexColumnDiv>\r\n                  <label>Tag</label>\r\n                  <SelectField\r\n                    value={inputValue}\r\n                    onChange={(e) => setInputValue(e.target.value)}\r\n                  >\r\n                     <DatalistOption value={0}>General Materials</DatalistOption>\r\n                    {taglist.map((o, i) => (\r\n                      <DatalistOption value={o.Id} key={i}>\r\n                        {o.TagName}\r\n                      </DatalistOption>\r\n                    ))}\r\n                  </SelectField>\r\n                  </FlexColumnDiv>\r\n                </FlexContCenterAlign>\r\n              );\r\n      case 'Install':\r\n        const { installTime, wheelbarrowTime, installItem, wheelbarrowItem } = inputValue;\r\n        \r\n        // If both installTime and wheelbarrowTime are missing, return null to not render anything\r\n        if ((installTime === undefined || installTime === null || installTime === '') &&\r\n        (wheelbarrowTime === undefined || wheelbarrowTime === null || wheelbarrowTime === '')) {\r\n        return null;\r\n    }\r\n            \r\n        return (\r\n            <div>\r\n            {(inputInteracted || installTime === 0 || installTime) && (\r\n              <div>\r\n                <label>Install Time \"{decimalHoursToTimeString(installTime || '')}\"</label>\r\n                <InputBox\r\n                  type={window.$ISMOBILE === true ? 'text' : 'text'}\r\n                  step='0.01'\r\n                  min='0' \r\n                  defaultValue={(installTime || '')}\r\n                  onChange={(e) => {if(e.target.value !== ''){ handleChange('installTime', e.target.value)} else {handleChange('installTime', 0.01)}}}\r\n                />\r\n              </div>\r\n            )}\r\n            {(inputInteracted || wheelbarrowTime === 0 || wheelbarrowTime) && (\r\n              <div>\r\n                <label>{wheelbarrowItem.Notes} \"{decimalHoursToTimeString(wheelbarrowTime || '')}\"</label>\r\n                <InputBox\r\n                  type={window.$ISMOBILE === true ? 'text' : 'text'}\r\n                  step='0.01'\r\n                  min='0' \r\n                  defaultValue={(wheelbarrowTime || '')}\r\n                  onChange={(e) => {if(e.target.value !== ''){ handleChange('wheelbarrowTime', e.target.value)} else {handleChange('wheelbarrowTime', 0.01)}}}\r\n                />\r\n              </div>\r\n            )}\r\n          </div>\r\n          );\r\n          \r\n          case 'Removal Quantity':\r\n        const { removalTime, removalWheelbarrowTime, removalItem, removalWheelbarrowItem } = inputValue;\r\n        \r\n        // If both installTime and wheelbarrowTime are missing, return null to not render anything\r\n        if ((removalTime === undefined || removalTime === null || removalTime === '') &&\r\n        (removalWheelbarrowTime === undefined || removalWheelbarrowTime === null || removalWheelbarrowTime === '')) {\r\n        return null;\r\n    }\r\n            \r\n        return (\r\n            <div>\r\n            {(inputInteracted || removalTime === 0 || removalTime) && (\r\n              <div>\r\n                <label>Removal Time \"{decimalHoursToTimeString(removalTime || '')}\"</label>\r\n                <InputBox\r\n                  type='type'\r\n                  step='0.01'\r\n                  min='0' \r\n                  defaultValue={(removalTime || '')}\r\n                  onChange={(e) => {if(e.target.value !== ''){ handleChange('removalTime', e.target.value)} else {handleChange('removalTime', 0.01)}}}\r\n                />\r\n              </div>\r\n            )}\r\n            {(inputInteracted || removalWheelbarrowTime === 0 || removalWheelbarrowTime) && (\r\n              <div>\r\n                <label>{removalWheelbarrowItem.Notes} \"{decimalHoursToTimeString(removalWheelbarrowTime || '')}\"</label>\r\n                <InputBox\r\n                  type='type'\r\n                  step='0.01'\r\n                  min='0' \r\n                  defaultValue={(removalWheelbarrowTime || '')}\r\n                  onChange={(e) => {if(e.target.value !== ''){ handleChange('removalWheelbarrowTime', e.target.value)} else {handleChange('removalWheelbarrowTime', 0.01)}}}\r\n                />\r\n              </div>\r\n            )}\r\n          </div>\r\n          );\r\n\r\n      default:\r\n        return null;\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    switch (fieldType) {\r\n      case 'Quantity':\r\n          setInputValue(itemObj?.Quant || 0);\r\n        break;\r\n      case 'Name':\r\n          setInputValue(itemObj?.Name);\r\n        break;\r\n      case 'Notes':\r\n          setInputValue(itemObj?.Notes);\r\n        break;\r\n      case 'Rental Hours':\r\n          setInputValue(itemObj?.RentalLength);\r\n        break;\r\n        case 'Tag':\r\n          GetQuoteTaglist(params.quoteId)\r\n          setInputValue(itemObj?.Tag_Id);\r\n          break;\r\n        case 'Install':\r\n            let installTime = '';\r\n            let wheelbarrowTime = '';\r\n            let installItem = null;\r\n            let wheelbarrowItem = null;\r\n      \r\n            itemObj?.RelatedItems?.forEach(item => {\r\n              if (item.CateType === CategoryTypes.Labor) {\r\n                if (item.Notes.startsWith('Install')) {\r\n                  installTime = item.Quant;\r\n                  installItem = item;\r\n                } else if (item.Notes.startsWith('Needed to operate')) {\r\n                  wheelbarrowTime = item.Quant;\r\n                  wheelbarrowItem = item;\r\n                }\r\n              }\r\n            });\r\n      \r\n            setInputValue({ installTime, wheelbarrowTime, installItem, wheelbarrowItem });\r\n            break;\r\n        case 'Removal Quantity':\r\n          let removalTime = '';\r\n          let removalWheelbarrowTime = '';\r\n          let removalItem = null;\r\n          let removalWheelbarrowItem = null;\r\n    \r\n          itemObj?.RelatedItems?.forEach(item => {\r\n            if (item.CateType === CategoryTypes.Labor) {\r\n              if (item.Notes.startsWith('Install')) {\r\n                removalTime = item.Quant;\r\n                removalItem = item;\r\n              } else if (item.Notes.startsWith('Needed to operate')) {\r\n                removalWheelbarrowTime = item.Quant;\r\n                removalWheelbarrowItem = item;\r\n              }\r\n            }\r\n          });\r\n    \r\n          setInputValue({ removalTime, removalWheelbarrowTime, removalItem, removalWheelbarrowItem });\r\n      default:\r\n        break;\r\n    }\r\n  }, [fieldType, itemObj]);  \r\n\r\n  return (\r\n    // isLoading === true ? (\r\n    //   <Backdrop style={{ zIndex: 1000 }} open>\r\n    //   <CircularProgress color=\"inherit\" />\r\n    // </Backdrop>\r\n    // ) :\r\n    <SpeechBubbleContainer ref={containerRef} isClosing={isClosing}\r\n    display={display}>\r\n    {renderInputs() ? (\r\n      <SpeechBubble style={{ marginLeft: determineLeftMargin() }}>\r\n        {renderInputs()}\r\n        <ImageContainer>\r\n          <ImageButton src='/Check Mark.svg' onClick={() => { setInputInteracted(false); updateItemOnEstimate(); onCloseBubble(); }} alt='Save' />\r\n          <ImageButton src='/Close.svg' onClick={() => { handleCloseClick(); }} alt='Cancel' />\r\n        </ImageContainer>\r\n      </SpeechBubble>\r\n    ) : null}\r\n  </SpeechBubbleContainer>\r\n  );  \r\n};\r\n\r\nSpeechBubbleComponent.defaultProps = {\r\n    updateItemOnEstimate: () => {},\r\n    cancelItemChange: () => {},\r\n    RefreshComponentState: () => {},\r\n    onCloseBubble: () => {},\r\n}\r\n\r\nexport default SpeechBubbleComponent;\r\n","/* eslint-disable */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { decimalHoursToTimeString } from \"../../API_Functions/Utility_Functions\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n  QuoteItemCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexibleEstimateDiv15Percent,\r\n  FlexibleEstimateDiv35Percent,\r\n  FlexibleEstimateDiv5Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Icon20x20,\r\n  Icon30x40pxPointerNoMargin,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { Icon30px20pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  GreyTinyTextItalics,\r\n  SmallGreenLeagueText,\r\n  TinyHeaderDarkGrey,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport Dropdown from \"../DropdownMenu\";\r\nimport SpeechBubbleComponent from \"../Windows/UpdateBubble\";\r\nconst QuoteItemEstimator = ({\r\n  onClick,\r\n  header1,\r\n  header2,\r\n  subheader2notes,\r\n  subheader2,\r\n  header3,\r\n  header4,\r\n  header5,\r\n  header6,\r\n  header7,\r\n  header8,\r\n  header9,\r\n  header10,\r\n  quoteItemObj,\r\n  inputheaderposition,\r\n  noChange,\r\n  OutputValue,\r\n  RemoveItemFromLocalQuoteObject,\r\n  parentid,\r\n  itemLink,\r\n  bgColor,\r\n  isHeader,\r\n  showRelatedItems,\r\n  constructionView,\r\n  hideBidQuoteHeaders,\r\n  onToggleDisplay,\r\n  hourlyRate,\r\n  CategoryType,\r\n  ShowItemSelection,\r\n  EditTag,\r\n  DeleteTag,\r\n  DeliveryItems,\r\n  RemovalItems,\r\n  showAddOnsSelection,\r\n  deleteItemFromEstimate,\r\n  RefreshComponentState,\r\n  isAccountant,\r\n  weightedRate,\r\n}) => {\r\n  const [header1Display, setHeader1Display] = useState(\"none\");\r\n  const [header2Display, setHeader2Display] = useState(\"flex\");\r\n  const [subheader2Display] = useState(\"flex\");\r\n  const [header3Display, setHeader3Display] = useState(\"flex\");\r\n  const [header4Display, setHeader4Display] = useState(\"flex\");\r\n  const [header5Display, setHeader5Display] = useState(\"flex\");\r\n  const [header6Display, setHeader6Display] = useState(\"flex\");\r\n\r\n  const [header1InputDisplay, setHeader1InputDisplay] = useState(\"none\");\r\n  const [header2InputDisplay, setHeader2InputDisplay] = useState(\"none\");\r\n  const [header3InputDisplay, setHeader3InputDisplay] = useState(\"none\");\r\n  // const [header4InputDisplay, setHeader4InputDisplay] = useState(\"none\")\r\n  const [header5InputDisplay, setHeader5InputDisplay] = useState(\"none\");\r\n  const [header6InputDisplay, setHeader6InputDisplay] = useState(\"none\");\r\n\r\n  const [header1DefaultValue, setHeader1DefaultValue] = useState(header1);\r\n  const [header2DefaultValue, setHeader2DefaultValue] = useState(header2);\r\n  const [header3DefaultValue, setHeader3DefaultValue] = useState(header3);\r\n  const [header4DefaultValue, setHeader4DefaultValue] = useState(header4);\r\n  const [header5DefaultValue, setHeader5DefaultValue] = useState(header5);\r\n  const [header6DefaultValue, setHeader6DefaultValue] = useState(header6);\r\n\r\n  const [linkHeaderDisplay, setLinkHeaderDisplay] = useState(\"none\");\r\n  const [pointerEvent, setPointerEvent] = useState(\"none\");\r\n  const [youtubeLinkProp, setYoutubeLinkProp] = useState(\"\");\r\n\r\n  const [descriptionOverflow, setDescriptionOverflow] = useState(\"hidden\");\r\n  const [descriptionWhiteSpace, setDescriptionWhiteSpace] = useState(\"nowrap\");\r\n\r\n  const [deleteIconSrc, setDeleteIconSrc] = useState(\"\");\r\n\r\n  const [relatedItemToggleSRC, setRelatedItemToggleSRC] =\r\n    useState(\"/downarrow.svg\");\r\n\r\n  const [FontSize, setFontSize] = useState(\"14px\");\r\n  const [FontWeight, setFontWeight] = useState(\"regular\");\r\n  const [relatedItemsDisplay, setRelatedItemsDisplay] = useState(\"none\");\r\n\r\n  const DetermineInputHeaderLogic = async () => {\r\n    if (parentid === 0) {\r\n      if (noChange === false) {\r\n        setDeleteIconSrc(\"/close.svg\");\r\n        InitializeSetup();\r\n        switch (inputheaderposition) {\r\n          case 1:\r\n            setHeader1Display(\"none\");\r\n            setHeader1DefaultValue(header1);\r\n            setHeader1InputDisplay(\"flex\");\r\n            break;\r\n          case 2:\r\n            setHeader2Display(\"none\");\r\n            setHeader2DefaultValue(header2);\r\n            setHeader2InputDisplay(\"flex\");\r\n            break;\r\n          case 3:\r\n            setHeader3Display(\"none\");\r\n            setHeader3DefaultValue(quoteItemObj?.Quant?.toFixed(2));\r\n            setHeader3InputDisplay(\"flex\");\r\n            break;\r\n          case 4:\r\n            setHeader4Display(\"none\");\r\n            setHeader4DefaultValue(header4);\r\n            // setHeader4InputDisplay(\"flex\")\r\n\r\n            break;\r\n          case 5:\r\n            setHeader5Display(\"none\");\r\n            setHeader5DefaultValue(header5);\r\n            setHeader5InputDisplay(\"flex\");\r\n            break;\r\n          case 6:\r\n            setHeader6Display(\"none\");\r\n            setHeader6DefaultValue(header6);\r\n            setHeader6InputDisplay(\"flex\");\r\n            break;\r\n          default:\r\n            break;\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const InitializeSetup = async () => {\r\n    setHeader1Display(\"none\");\r\n    setHeader2Display(\"flex\");\r\n    setHeader3Display(\"flex\");\r\n    setHeader4Display(\"flex\");\r\n    setHeader5Display(\"flex\");\r\n    setHeader6Display(\"flex\");\r\n    setDeleteIconSrc(\"\");\r\n\r\n    setHeader1DefaultValue(header1);\r\n    setHeader2DefaultValue(header2);\r\n    setHeader3DefaultValue(header3);\r\n    setHeader4DefaultValue(header4);\r\n    setHeader5DefaultValue(header5);\r\n    setHeader6DefaultValue(header6);\r\n\r\n    setHeader1InputDisplay(\"none\");\r\n    setHeader2InputDisplay(\"none\");\r\n    setHeader3InputDisplay(\"none\");\r\n    // setHeader4InputDisplay(\"none\")\r\n    setHeader5InputDisplay(\"none\");\r\n    setHeader6InputDisplay(\"none\");\r\n\r\n    if (isHeader == true) {\r\n      setFontSize(\"16px\");\r\n      setFontWeight(\"bold\");\r\n    }\r\n  };\r\n\r\n  const shouldDisplayPencil =\r\n    isHeader === true &&\r\n    header2 !== \"Subtotal\" &&\r\n    header2 !== \"General Materials\" &&\r\n    header2 !== \"Delivery\" &&\r\n    header2 !== \"Removals\" &&\r\n    header2 !== \"Access Area\" &&\r\n    header2 !== \"Tools/Machines\" &&\r\n    header2 !== \"Labour Breakdown\";\r\n\r\n  const shouldDisplayGreenButton =\r\n    header2 === \"General Materials\" ||\r\n    header2 === \"Delivery\" ||\r\n    header2 === \"Removals\" ||\r\n    header2 === \"Access Area\" ||\r\n    header2 === \"Tools/Machines\" ||\r\n    header2 === \"Labour Breakdown\";\r\n\r\n  let iconSrc = \"\";\r\n\r\n  if (shouldDisplayPencil) {\r\n    iconSrc = \"/Pencil.svg\";\r\n  } else if (shouldDisplayGreenButton) {\r\n    iconSrc = \"/Green Button.svg\";\r\n  }\r\n\r\n  const itemIconSRC = isHeader\r\n    ? null // Don't display anything when isHeader is true\r\n    : CategoryType === CategoryTypes.Material\r\n    ? \"/Material_EstimateIcon.svg\"\r\n    : CategoryType === \"Delivery\"\r\n    ? \"/Delivery_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Removal\r\n    ? \"/Removal_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Access\r\n    ? \"/AccessArea_EstimateIcon.svg\"\r\n    : CategoryType === \"Tool\"\r\n    ? \"/Tools_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Labor\r\n    ? \"/Labour_EstimateIcon.svg\"\r\n    : \"\"; // Set default to an empty string\r\n\r\n  useEffect(() => {\r\n    DetermineInputHeaderLogic(inputheaderposition);\r\n  }, [inputheaderposition]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const CheckIfValidLink = async (link) => {\r\n    if (link !== null && link !== undefined && link !== \"\") {\r\n      var p =\r\n        /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\r\n      if (link.match(p)) {\r\n        setYoutubeLinkProp(link);\r\n        setLinkHeaderDisplay(\"underline\");\r\n        setPointerEvent(\"auto\");\r\n      } else {\r\n        setLinkHeaderDisplay(\"none\");\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (showRelatedItems === true) {\r\n      setRelatedItemsDisplay(\"flex\");\r\n      setRelatedItemToggleSRC(\"/uparrow.svg\");\r\n      CheckIfValidLink(itemLink);\r\n    } else {\r\n      setRelatedItemsDisplay(\"none\");\r\n      setRelatedItemToggleSRC(\"/downarrow.svg\");\r\n    }\r\n  }, [showRelatedItems]);\r\n\r\n  const determineIconDisplayValue = () => {\r\n    if (hideBidQuoteHeaders === true) return \"none\";\r\n\r\n    const relatedItemsExist =\r\n      quoteItemObj?.RelatedItems?.filter(\r\n        (o) => o.CateType !== CategoryTypes.Labor\r\n      ).length > 0;\r\n\r\n    if (relatedItemsExist && quoteItemObj.Parent_Id === 0) return \"block\";\r\n\r\n    if (DeliveryItems.length > 0 || RemovalItems.length > 0) return \"block\";\r\n\r\n    return \"none\";\r\n  };\r\n\r\n  const determineDivDisplayValue = () => {\r\n    if (hideBidQuoteHeaders === true) return \"none\";\r\n\r\n    if (DeliveryItems.length > 0 || RemovalItems.length > 0) return \"none\";\r\n\r\n    const nonLaborRelatedItemsExist =\r\n      quoteItemObj?.RelatedItems?.filter(\r\n        (o) => o.CateType !== CategoryTypes.Labor\r\n      ).length > 0;\r\n\r\n    if (quoteItemObj?.Parent_Id === 0 && nonLaborRelatedItemsExist) {\r\n      return \"block\";\r\n    }\r\n\r\n    if (quoteItemObj?.Parent_Id === 0) {\r\n      return \"block\";\r\n    }\r\n\r\n    if (quoteItemObj?.Parent_Id !== 0 && isHeader === false) {\r\n      return \"block\";\r\n    }\r\n\r\n    if (CategoryType === CategoryTypes.Removal) {\r\n      return \"block\";\r\n    }\r\n\r\n    if (\r\n      quoteItemObj?.Parent_Id !== 0 &&\r\n      CategoryType === CategoryTypes.Material\r\n    ) {\r\n      return \"block\";\r\n    }\r\n\r\n    return \"none\";\r\n  };\r\n\r\n  const [selectedItem, setSelectedItem] = useState(null);\r\n\r\n  const handleItemClick = (item, field) => {\r\n    setSelectedItem({ item, field });\r\n  };\r\n\r\n  const determineSpeechBubbleDisplayValue = () => {\r\n    if (selectedItem) return \"block\";\r\n    return \"none\";\r\n  };\r\n\r\n  return (\r\n    <FlexColumnCont100xAutoPercent margin=\"0\" onClick={onClick}>\r\n      <SpeechBubbleComponent\r\n        onCloseBubble={() => {\r\n          setSelectedItem(null);\r\n        }}\r\n        itemObj={selectedItem?.item}\r\n        display={determineSpeechBubbleDisplayValue()}\r\n        RefreshComponentState={() => {\r\n          RefreshComponentState();\r\n        }}\r\n        cancelItemChange={() => {\r\n          setSelectedItem(null);\r\n        }}\r\n        fieldType={selectedItem?.field}\r\n      />\r\n      <QuoteItemCont\r\n        height=\"100%\"\r\n        alignitems=\"stretch\"\r\n        borderbottom={\r\n          relatedItemsDisplay === \"block\"\r\n            ? `1px dashed ${ColorPalette.PrimaryButtonBlue}`\r\n            : `1px solid ${ColorPalette.PrimaryGrey}`\r\n        }\r\n      >\r\n        {/* Column 1 */}\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          // display={header1Display}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <Icon20x20\r\n            onClick={() => {\r\n              // RemoveItemFromLocalQuoteObject();\r\n            }}\r\n            src={itemIconSRC}\r\n          ></Icon20x20>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          display={header1InputDisplay}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header1DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        {/* Column 2 */}\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          width={isHeader === true && header2 !== \"Subtotal\" ? \"220%\" : \"35%\"}\r\n          height={descriptionOverflow === \"hidden\" ? \"95px\" : \"auto\"}\r\n          display={header2Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={isHeader === true ? \"bold\" : \"\"}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexDiv\r\n            width={isHeader === true && header2 !== \"Subtotal\" ? \"220%\" : \"\"}\r\n          >\r\n            <FlexColumnCont\r\n              onClick={() => {\r\n                handleItemClick(quoteItemObj, \"Notes\");\r\n              }}\r\n              // onClick={() => {handleItemClick(quoteItemObj, 'Name'); }}\r\n              //August 23rd, 2023 - API doesn't currently support updating name of estimate item after item is added to the estimate.\r\n              mobilewidth=\"100%\"\r\n              width=\"auto\"\r\n              height=\"auto\"\r\n              margin=\"0%\"\r\n              justifycontent=\"center\"\r\n              alignitems=\"left\"\r\n            >\r\n              <SmallGreenLeagueText\r\n                display={bgColor === ColorPalette.LightGreen ? \"block\" : \"none\"}\r\n              ></SmallGreenLeagueText>\r\n              {youtubeLinkProp !== \"\" ? (\r\n                <a\r\n                  rel=\"noreferrer\"\r\n                  href={youtubeLinkProp}\r\n                  target=\"_blank\"\r\n                  style={{\r\n                    textDecoration: linkHeaderDisplay,\r\n                    pointerEvents: pointerEvent,\r\n                  }}\r\n                >\r\n                  {header2}\r\n                </a>\r\n              ) : (\r\n                header2\r\n              )}\r\n\r\n              <TinyHeaderDarkGrey\r\n                width=\"15vw\"\r\n                margin=\"4px\"\r\n                display={isHeader !== true ? subheader2Display : \"none\"}\r\n                mobiledisplay=\"block\"\r\n                overflow={showRelatedItems === true ? \"visible\" : \"hidden\"}\r\n                whitespace={showRelatedItems === true ? \"normal\" : \"nowrap\"}\r\n              >\r\n                {subheader2notes}\r\n              </TinyHeaderDarkGrey>\r\n              {/* \r\n            <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              display={isHeader !== true ? \"\" : \"none\"}\r\n              margin=\"4px\"\r\n              overflow={showRelatedItems === true ? \"visible\" : \"hidden\"}\r\n              whitespace={showRelatedItems === true ? \"normal\" : \"nowrap\"}\r\n            >\r\n              {subheader2}\r\n            </TinyHeaderDarkGrey> */}\r\n            </FlexColumnCont>\r\n            {shouldDisplayPencil ? (\r\n              <>\r\n                <Icon30px20pxPointer\r\n                  display=\"block\"\r\n                  src=\"/Green Button.svg\"\r\n                  onClick={() => {\r\n                    ShowItemSelection();\r\n                  }}\r\n                ></Icon30px20pxPointer>\r\n\r\n                <Icon30px20pxPointer\r\n                  display=\"block\"\r\n                  src=\"/Pencil.svg\"\r\n                  onClick={() => {\r\n                    EditTag();\r\n                  }}\r\n                ></Icon30px20pxPointer>\r\n              </>\r\n            ) : (\r\n              shouldDisplayGreenButton && (\r\n                <Icon30px20pxPointer\r\n                  display=\"block\"\r\n                  src=\"/Green Button.svg\"\r\n                  onClick={() => {\r\n                    ShowItemSelection();\r\n                  }}\r\n                ></Icon30px20pxPointer>\r\n              )\r\n            )}\r\n            {/* <Icon30px20pxPointer   display={shouldDisplayPencil || shouldDisplayGreenButton ? 'block' : 'none'}\r\n  src={iconSrc}\r\n  onClick={()=>{shouldDisplayPencil === true ? EditTag() : ShowItemSelection();}}\r\n></Icon30px20pxPointer> */}\r\n          </FlexDiv>\r\n\r\n          <Icon30px20pxPointer\r\n            display={\r\n              isHeader === true &&\r\n              header2 !== \"General Materials\" &&\r\n              header2 !== \"Delivery\" &&\r\n              header2 !== \"Removals\" &&\r\n              header2 !== \"Access Area\" &&\r\n              header2 !== \"Tools/Machines\" &&\r\n              header2 !== \"Labour Breakdown\" &&\r\n              header2 !== \"Subtotal\"\r\n                ? \"block\"\r\n                : \"none\"\r\n            }\r\n            src=\"/Garbage_Icon.svg\"\r\n            onClick={() => {\r\n              DeleteTag();\r\n            }}\r\n          ></Icon30px20pxPointer>\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          display={isHeader !== true ? header2InputDisplay : \"none\"}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"text\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header2DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        {/* Column 3 */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={\r\n            isHeader === true && header2 !== \"Subtotal\" ? \"none\" : \"flex\"\r\n          }\r\n          mobiledisplay={header3Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnContCenterAlign\r\n            onClick={() => {\r\n              handleItemClick(quoteItemObj, \"Quantity\");\r\n            }}\r\n          >\r\n            <GreyTinyTextItalics\r\n              display={\r\n                isHeader === true ||\r\n                header3 === \"\" ||\r\n                header3 === null ||\r\n                header3 === undefined\r\n                  ? \"none\"\r\n                  : \"block\"\r\n              }\r\n            >\r\n              Quantity\r\n            </GreyTinyTextItalics>\r\n            <u>{header3}</u>\r\n          </FlexColumnContCenterAlign>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          mobiledisplay={header3InputDisplay}\r\n          display={header3InputDisplay}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            inputwidth=\"60px\"\r\n            type=\"number\"\r\n            id=\"quantvalue\"\r\n            key={header3DefaultValue}\r\n            onBlur={(e) => {\r\n              OutputValue(e.target.valueAsNumber);\r\n            }}\r\n            defaultValue={header3DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 4 */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={\r\n            isHeader === true && header2 !== \"Subtotal\" ? \"none\" : \"flex\"\r\n          }\r\n          mobiledisplay={header4Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnContCenterAlign>\r\n            <GreyTinyTextItalics\r\n              display={\r\n                isHeader === true ||\r\n                header4 === \"\" ||\r\n                header4 === null ||\r\n                header4 === undefined\r\n                  ? \"none\"\r\n                  : \"block\"\r\n              }\r\n            >\r\n              {CategoryType === \"Tool\" ? \"Rental Rate\" : \"Material Rate\"}\r\n            </GreyTinyTextItalics>\r\n            {header4}\r\n          </FlexColumnContCenterAlign>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display=\"none\"\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            width=\"50px\"\r\n            type=\"number\"\r\n            defaultValue={header4DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 5 */}\r\n        {isAccountant === true\r\n          ? // <FlexibleEstimateDiv15Percent\r\n            //   width=\"0%\"\r\n            //   minwidth='0%'\r\n            //   display={hideBidQuoteHeaders === true ? 'none' : header5Display}\r\n            //   mobiledisplay=\"none\"\r\n            //   bgcolor={bgColor}\r\n            //   fontsize={FontSize}\r\n            //   fontweight={FontWeight}\r\n            //   fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n            // >\r\n            //   <FlexColumnContCenterAlign>\r\n            //   <GreyTinyTextItalics display={isHeader === true && header5 !== null ? \"none \" : \"block\"}>Material Cost</GreyTinyTextItalics>\r\n            //   {header5}\r\n            //   </FlexColumnContCenterAlign>\r\n            // </FlexibleEstimateDiv15Percent>\r\n            null\r\n          : null}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={header5InputDisplay}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            type=\"text\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header5DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 6 */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={\r\n            isHeader === true && header2 !== \"Subtotal\" ? \"none\" : \"flex\"\r\n          }\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnContCenterAlign>\r\n            <GreyTinyTextItalics\r\n              display={\r\n                isHeader === true ||\r\n                header6 === \"\" ||\r\n                header6 === null ||\r\n                header6 === undefined\r\n                  ? \"none\"\r\n                  : \"block\"\r\n              }\r\n            >\r\n              {CategoryType === CategoryTypes.Removal\r\n                ? \"Removal Rate\"\r\n                : CategoryType === \"Tool\"\r\n                ? \"Move Cost Per Machine\"\r\n                : CategoryType === \"Delivery\"\r\n                ? \"Delivery Rate\"\r\n                : CategoryType === CategoryTypes.Access\r\n                ? \"Access Cost\"\r\n                : \"Install Rate\"}\r\n            </GreyTinyTextItalics>\r\n\r\n            {header6}\r\n          </FlexColumnContCenterAlign>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={header6InputDisplay}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header6DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 7 */}\r\n        {isAccountant === true\r\n          ? //   <FlexibleEstimateDiv15Percent\r\n            //   display={header6Display}\r\n            //   bgcolor={bgColor}\r\n            //   fontsize={FontSize}\r\n            //   fontweight={FontWeight}\r\n            //   fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n            // >\r\n            //   {\" \"}\r\n            //   <FlexColumnContCenterAlign>\r\n            //   <GreyTinyTextItalics display={isHeader === true && header7 !== null ? \"none \" : \"block\"}>Install Total</GreyTinyTextItalics>\r\n            //   {header7}\r\n            //   </FlexColumnContCenterAlign>\r\n            // </FlexibleEstimateDiv15Percent>\r\n            null\r\n          : null}\r\n\r\n        {/* WEIGHTED RATE */}\r\n        {isAccountant === true ? (\r\n          <FlexibleEstimateDiv15Percent\r\n            display={header6Display}\r\n            bgcolor={bgColor}\r\n            fontsize={FontSize}\r\n            fontweight={FontWeight}\r\n            fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n          >\r\n            {\" \"}\r\n            <FlexColumnContCenterAlign>\r\n              <GreyTinyTextItalics\r\n                display={\r\n                  isHeader === true && header7 !== null ? \"none \" : \"block\"\r\n                }\r\n              >\r\n                Weighted Rate\r\n              </GreyTinyTextItalics>\r\n              ${weightedRate}\r\n            </FlexColumnContCenterAlign>\r\n          </FlexibleEstimateDiv15Percent>\r\n        ) : null}\r\n\r\n        {/* Column 8 */}\r\n        <FlexibleEstimateDiv15Percent\r\n          borderright={\r\n            isHeader === false ? `1px solid ${ColorPalette.TertiaryGrey}` : \"\"\r\n          }\r\n          display={\r\n            isHeader === true && header2 !== \"Subtotal\" ? \"none\" : \"flex\"\r\n          }\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {\" \"}\r\n          <FlexColumnContCenterAlign\r\n            onClick={() => {\r\n              if (!quoteItemObj?.ToolName) {\r\n                handleItemClick(quoteItemObj, \"Install\");\r\n              } else {\r\n                handleItemClick(quoteItemObj, \"Rental Hours\");\r\n              }\r\n            }}\r\n          >\r\n            <GreyTinyTextItalics\r\n              display={\r\n                isHeader === true ||\r\n                header9 === \"\" ||\r\n                header9 === null ||\r\n                header9 === undefined\r\n                  ? \"none\"\r\n                  : \"block\"\r\n              }\r\n            >\r\n              {CategoryType === CategoryTypes.Removal\r\n                ? \"Removal Time\"\r\n                : CategoryType === \"Tool\"\r\n                ? \"Rental Hours\"\r\n                : \"Install Time\"}\r\n            </GreyTinyTextItalics>\r\n            {isHeader === true ? header9 : <u>{header9}</u>}\r\n          </FlexColumnContCenterAlign>\r\n        </FlexibleEstimateDiv15Percent>\r\n        {/* Column 10 */}\r\n        <FlexibleEstimateDiv15Percent\r\n          display={\r\n            isHeader === true && header2 !== \"Subtotal\" ? \"none\" : \"flex\"\r\n          }\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <b>{header10}</b>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <Icon30x40pxPointerNoMargin\r\n            display={determineIconDisplayValue()}\r\n            src={relatedItemToggleSRC}\r\n            onClick={onToggleDisplay}\r\n          ></Icon30x40pxPointerNoMargin>\r\n        </FlexibleEstimateDiv5Percent>\r\n        <FlexibleEstimateDiv5Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <div style={{ display: determineDivDisplayValue() }}>\r\n            <Dropdown\r\n              currentPage={\"itemCard\"}\r\n              addOns={() => {\r\n                showAddOnsSelection();\r\n              }}\r\n              deleteItem={() => {\r\n                deleteItemFromEstimate();\r\n              }}\r\n              changeTag={() => {\r\n                handleItemClick(quoteItemObj, \"Tag\");\r\n              }}\r\n            ></Dropdown>\r\n          </div>\r\n        </FlexibleEstimateDiv5Percent>\r\n      </QuoteItemCont>\r\n\r\n      {DeliveryItems.map((o, i) => {\r\n        return (\r\n          <FlexColumnFullWidth\r\n            margin=\"0\"\r\n            key={i}\r\n            display={showRelatedItems ? \"block\" : \"none\"}\r\n          >\r\n            <QuoteItemEstimator\r\n              header1=\"Delete\"\r\n              key={i}\r\n              RefreshComponentState={() => {\r\n                RefreshComponentState();\r\n              }}\r\n              deleteItemFromEstimate={() => {\r\n                deleteItemFromEstimate(o.Id);\r\n              }}\r\n              quoteItemObj={o}\r\n              CategoryType={\"Delivery\"}\r\n              header2={`${o?.Notes}`}\r\n              header3={o?.Quant + \" Load(s)\"}\r\n              header4={`$${o?.BasePrice?.toFixed(2).replace(\r\n                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                \",\"\r\n              )}`}\r\n              header10={\r\n                \"$\" + o?.Price.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n              }\r\n            ></QuoteItemEstimator>\r\n          </FlexColumnFullWidth>\r\n        );\r\n      })}\r\n\r\n      {RemovalItems.map((o, i) => {\r\n        return (\r\n          <FlexColumnFullWidth\r\n            margin=\"0\"\r\n            key={i}\r\n            display={showRelatedItems ? \"block\" : \"none\"}\r\n          >\r\n            <QuoteItemEstimator\r\n              header1=\"Delete\"\r\n              subheader2notes={o.Notes}\r\n              quoteItemObj={o}\r\n              RefreshComponentState={() => {\r\n                RefreshComponentState();\r\n              }}\r\n              CategoryType={CategoryTypes.Removal}\r\n              deleteItemFromEstimate={() => {\r\n                deleteItemFromEstimate(o.Id);\r\n              }}\r\n              header2={o.Name}\r\n              header3={\r\n                typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                  ? o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                    \" \" +\r\n                    o.DisplayUnit\r\n                  : \"0.00 \" + o.DisplayUnit\r\n              }\r\n              header5=\"\"\r\n              header4=\"\"\r\n              header6={\r\n                \"$\" + ((o.Price + o.LaborSubtotal) / o?.Quant).toFixed(4)\r\n              }\r\n              header7={\r\n                \"$\" +\r\n                (o.Price + o.LaborSubtotal)\r\n                  .toFixed(2)\r\n                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n              }\r\n              // header9={o.removalTime}\r\n              header9={\r\n                (() => {\r\n                  return o?.RelatedItems.reduce((acc, item) => {\r\n                    if (item.CateType === CategoryTypes.Labor) {\r\n                      if (item.Notes.startsWith(\"Install\")) {\r\n                        acc += item.Quant;\r\n                      } else if (item.Notes.startsWith(\"Needed to operate\")) {\r\n                        acc += item.Quant;\r\n                      }\r\n                    }\r\n                    return decimalHoursToTimeString(acc);\r\n                  }, 0);\r\n                })() // IIFE - Immediately Invoked Function Expression\r\n              }\r\n              header10={\r\n                \"$\" +\r\n                (o.Price + o.LaborSubtotal)\r\n                  .toFixed(2)\r\n                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n              }\r\n            ></QuoteItemEstimator>\r\n          </FlexColumnFullWidth>\r\n        );\r\n      })}\r\n\r\n      {quoteItemObj?.RelatedItems?.map((o, i) => {\r\n        if (o.CateType !== CategoryTypes.Labor && constructionView === false) {\r\n          return (\r\n            <FlexColumnFullWidth\r\n              margin=\"0\"\r\n              key={i}\r\n              display={showRelatedItems ? \"block\" : \"none\"}\r\n            >\r\n              <QuoteItemEstimator\r\n                hideBidQuoteHeaders={hideBidQuoteHeaders}\r\n                showRelatedItems={showRelatedItems}\r\n                RefreshComponentState={() => {\r\n                  RefreshComponentState();\r\n                }}\r\n                deleteItemFromEstimate={() => {\r\n                  deleteItemFromEstimate(o.Id);\r\n                }}\r\n                quoteItemObj={o}\r\n                key={i}\r\n                hourlyRate={154}\r\n                parentid={o.Parent_Id}\r\n                noChange={o.NoChange}\r\n                header2={`${o.Name}`}\r\n                isAccountant={isAccountant}\r\n                subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                subheader2={o.Description == null ? \"\" : o.Description}\r\n                header3={\r\n                  typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                    ? o.Quant.toFixed(2) + \" \" + o.DisplayUnit\r\n                    : \"\"\r\n                }\r\n                header4={\r\n                  \"$\" +\r\n                  o.UnitPrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                header5={\r\n                  \"$\" + o.Price.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                header6={\r\n                  o.Quant === 0\r\n                    ? \"$0.00\"\r\n                    : \"$\" +\r\n                      (o.LaborSubtotal / o.Quant)\r\n                        .toFixed(2)\r\n                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                weightedRate={\r\n                  o?.Quant !== 0\r\n                    ? (o.UnitPrice + o.LaborSubtotal / o.Quant)\r\n                        .toFixed(2)\r\n                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                    : \"N/A\"\r\n                }\r\n                header7={\r\n                  \"$\" +\r\n                  o.LaborSubtotal.toFixed(2).replace(\r\n                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                    \",\"\r\n                  )\r\n                }\r\n                header9={\r\n                  o.Quant === 0\r\n                    ? \"Included\"\r\n                    : hourlyRate === 0\r\n                    ? \"Included\"\r\n                    : decimalHoursToTimeString(o.LaborSubtotal / hourlyRate)\r\n                }\r\n                header10={\r\n                  \"$\" +\r\n                  (\r\n                    parseFloat(o.Price.toFixed(2)) +\r\n                    parseFloat(o.LaborSubtotal.toFixed(2))\r\n                  )\r\n                    .toFixed(2)\r\n                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                bgColor={ColorPalette.LightGreen}\r\n              ></QuoteItemEstimator>\r\n            </FlexColumnFullWidth>\r\n          );\r\n        } else if (\r\n          o.CateType !== CategoryTypes.Labor &&\r\n          constructionView === true\r\n        ) {\r\n          return (\r\n            <FlexColumnFullWidth\r\n              margin=\"0\"\r\n              key={i}\r\n              display={showRelatedItems ? \"block\" : \"none\"}\r\n            >\r\n              <QuoteItemEstimator\r\n                hideBidQuoteHeaders={hideBidQuoteHeaders}\r\n                showRelatedItems={showRelatedItems}\r\n                quoteItemObj={o}\r\n                key={i}\r\n                parentid={o.Parent_Id}\r\n                noChange={o.NoChange}\r\n                header2={o.Name}\r\n                subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                subheader2={o.Description == null ? \"\" : o.Description}\r\n                header3={\r\n                  typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                    ? o.Quant.toFixed(2) + \" \" + o.DisplayUnit\r\n                    : \"\"\r\n                }\r\n                header7={\"\"}\r\n                header10={\"$\" + o.LaborSubtotal.toFixed(2)}\r\n                bgColor={ColorPalette.LightGreen}\r\n              ></QuoteItemEstimator>\r\n            </FlexColumnFullWidth>\r\n          );\r\n        } else {\r\n          return null;\r\n        }\r\n      })}\r\n    </FlexColumnCont100xAutoPercent>\r\n  );\r\n};\r\n\r\nQuoteItemEstimator.defaultProps = {\r\n  header1: \"\",\r\n  header2: \"\",\r\n  subheader2: \"\",\r\n  header3: \"\",\r\n  header4: \"\",\r\n  header4input: \"\",\r\n  header5: \"\",\r\n  header6: \"\",\r\n  header7: \"\",\r\n  header8: \"\",\r\n  inputheaderposition: 0,\r\n  OutputValue: () => {},\r\n  RemoveItemFromLocalQuoteObject: () => {},\r\n  onToggleDisplay: () => {},\r\n  ShowItemSelection: () => {},\r\n  EditTag: () => {},\r\n  DeleteTag: () => {},\r\n  showAddOnsSelection: () => {},\r\n  deleteItemFromEstimate: () => {},\r\n  RefreshComponentState: () => {},\r\n  bgColor: \"\",\r\n  isHeader: false,\r\n  showRelatedItems: false,\r\n  hideBidQuoteHeaders: false,\r\n  constructionView: false,\r\n  hourlyRate: 0,\r\n  weightedRate: \"N/A\",\r\n  CategoryType: CategoryTypes.Material,\r\n  DeliveryItems: [],\r\n  RemovalItems: [],\r\n  isAccountant: false,\r\n};\r\n\r\nexport default QuoteItemEstimator;\r\n","/* eslint-disable */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnFullWidth,\r\n  QuoteItemCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexibleEstimateDiv15Percent,\r\n  FlexibleEstimateDiv35Percent,\r\n  FlexibleEstimateDiv5Percent,\r\n  GreyFlexibleEstimateDiv15Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Icon20x20,\r\n  Icon30x40pxPointerNoMargin,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  GreyTinyTextItalics,\r\n  SmallGreenLeagueText,\r\n  TinyHeaderDarkGrey,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport QuoteItemEstimator from \"../QuoteItemEstimator\";\r\nconst QuoteItem = ({\r\n  onClick,\r\n  header1,\r\n  header2,\r\n  subheader2notes,\r\n  subheader2,\r\n  header3,\r\n  header4,\r\n  header5,\r\n  header6,\r\n  header7,\r\n  header8,\r\n  quoteItemObj,\r\n  inputheaderposition,\r\n  noChange,\r\n  OutputValue,\r\n  RemoveItemFromLocalQuoteObject,\r\n  parentid,\r\n  itemLink,\r\n  bgColor,\r\n  isHeader,\r\n  showRelatedItems,\r\n  constructionView,\r\n  hideBidQuoteHeaders,\r\n  onToggleDisplay,\r\n  CategoryType,\r\n  RemovalItems,\r\n}) => {\r\n  const [header1Display, setHeader1Display] = useState(\"none\");\r\n  const [header2Display, setHeader2Display] = useState(\"flex\");\r\n  const [subheader2Display] = useState(\"flex\");\r\n  const [header3Display, setHeader3Display] = useState(\"flex\");\r\n  const [header4Display, setHeader4Display] = useState(\"flex\");\r\n  const [header5Display, setHeader5Display] = useState(\"flex\");\r\n  const [header6Display, setHeader6Display] = useState(\"flex\");\r\n\r\n  const [header1InputDisplay, setHeader1InputDisplay] = useState(\"none\");\r\n  const [header2InputDisplay, setHeader2InputDisplay] = useState(\"none\");\r\n  const [header3InputDisplay, setHeader3InputDisplay] = useState(\"none\");\r\n  // const [header4InputDisplay, setHeader4InputDisplay] = useState(\"none\")\r\n  const [header5InputDisplay, setHeader5InputDisplay] = useState(\"none\");\r\n  const [header6InputDisplay, setHeader6InputDisplay] = useState(\"none\");\r\n\r\n  const [header1DefaultValue, setHeader1DefaultValue] = useState(header1);\r\n  const [header2DefaultValue, setHeader2DefaultValue] = useState(header2);\r\n  const [header3DefaultValue, setHeader3DefaultValue] = useState(header3);\r\n  const [header4DefaultValue, setHeader4DefaultValue] = useState(header4);\r\n  const [header5DefaultValue, setHeader5DefaultValue] = useState(header5);\r\n  const [header6DefaultValue, setHeader6DefaultValue] = useState(header6);\r\n\r\n  const [linkHeaderDisplay, setLinkHeaderDisplay] = useState(\"none\");\r\n  const [pointerEvent, setPointerEvent] = useState(\"none\");\r\n  const [youtubeLinkProp, setYoutubeLinkProp] = useState(\"\");\r\n\r\n  const [descriptionOverflow, setDescriptionOverflow] = useState(\"hidden\");\r\n  const [descriptionWhiteSpace, setDescriptionWhiteSpace] = useState(\"nowrap\");\r\n\r\n  const [deleteIconSrc, setDeleteIconSrc] = useState(\"\");\r\n\r\n  const [relatedItemToggleSRC, setRelatedItemToggleSRC] =\r\n    useState(\"/downarrow.svg\");\r\n\r\n  const [FontSize, setFontSize] = useState(\"14px\");\r\n  const [FontWeight, setFontWeight] = useState(\"regular\");\r\n  const [relatedItemsDisplay, setRelatedItemsDisplay] = useState(\"none\");\r\n\r\n  const DetermineInputHeaderLogic = async () => {\r\n    if (parentid === 0) {\r\n      if (noChange === false) {\r\n        setDeleteIconSrc(\"/close.svg\");\r\n        InitializeSetup();\r\n        switch (inputheaderposition) {\r\n          case 1:\r\n            setHeader1Display(\"none\");\r\n            setHeader1DefaultValue(header1);\r\n            setHeader1InputDisplay(\"flex\");\r\n            break;\r\n          case 2:\r\n            setHeader2Display(\"none\");\r\n            setHeader2DefaultValue(header2);\r\n            setHeader2InputDisplay(\"flex\");\r\n            break;\r\n          case 3:\r\n            setHeader3Display(\"none\");\r\n            setHeader3DefaultValue(quoteItemObj?.Quant?.toFixed(2));\r\n            setHeader3InputDisplay(\"flex\");\r\n            break;\r\n          case 4:\r\n            setHeader4Display(\"none\");\r\n            setHeader4DefaultValue(header4);\r\n            // setHeader4InputDisplay(\"flex\")\r\n\r\n            break;\r\n          case 5:\r\n            setHeader5Display(\"none\");\r\n            setHeader5DefaultValue(header5);\r\n            setHeader5InputDisplay(\"flex\");\r\n            break;\r\n          case 6:\r\n            setHeader6Display(\"none\");\r\n            setHeader6DefaultValue(header6);\r\n            setHeader6InputDisplay(\"flex\");\r\n            break;\r\n          default:\r\n            break;\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const InitializeSetup = async () => {\r\n    setHeader1Display(\"none\");\r\n    setHeader2Display(\"flex\");\r\n    setHeader3Display(\"flex\");\r\n    setHeader4Display(\"flex\");\r\n    setHeader5Display(\"flex\");\r\n    setHeader6Display(\"flex\");\r\n    setDeleteIconSrc(\"\");\r\n\r\n    setHeader1DefaultValue(header1);\r\n    setHeader2DefaultValue(header2);\r\n    setHeader3DefaultValue(header3);\r\n    setHeader4DefaultValue(header4);\r\n    setHeader5DefaultValue(header5);\r\n    setHeader6DefaultValue(header6);\r\n\r\n    setHeader1InputDisplay(\"none\");\r\n    setHeader2InputDisplay(\"none\");\r\n    setHeader3InputDisplay(\"none\");\r\n    // setHeader4InputDisplay(\"none\")\r\n    setHeader5InputDisplay(\"none\");\r\n    setHeader6InputDisplay(\"none\");\r\n\r\n    if (isHeader == true) {\r\n      setFontSize(\"16px\");\r\n      setFontWeight(\"bold\");\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    DetermineInputHeaderLogic(inputheaderposition);\r\n  }, [inputheaderposition]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const CheckIfValidLink = async (link) => {\r\n    if (link !== null && link !== undefined && link !== \"\") {\r\n      var p =\r\n        /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\r\n      if (link.match(p)) {\r\n        setYoutubeLinkProp(link);\r\n        setLinkHeaderDisplay(\"underline\");\r\n        setPointerEvent(\"auto\");\r\n      } else {\r\n        setLinkHeaderDisplay(\"none\");\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (showRelatedItems === true) {\r\n      setRelatedItemsDisplay(\"flex\");\r\n      setRelatedItemToggleSRC(\"/uparrow.svg\");\r\n      CheckIfValidLink(itemLink);\r\n    } else {\r\n      setRelatedItemsDisplay(\"none\");\r\n      setRelatedItemToggleSRC(\"/downarrow.svg\");\r\n    }\r\n  }, [showRelatedItems]);\r\n\r\n  const itemIconSRC = isHeader\r\n    ? null // Don't display anything when isHeader is true\r\n    : CategoryType === CategoryTypes.Material\r\n    ? \"/Material_EstimateIcon.svg\"\r\n    : CategoryType === \"Delivery\"\r\n    ? \"/Delivery_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Removal\r\n    ? \"/Removal_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Access\r\n    ? \"/AccessArea_EstimateIcon.svg\"\r\n    : CategoryType === \"Tool\"\r\n    ? \"/Tools_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Labor\r\n    ? \"/Labour_EstimateIcon.svg\"\r\n    : \"\"; // Set default to an empty string\r\n\r\n  return (\r\n    <FlexColumnCont100xAutoPercent margin=\"0\" onClick={onClick}>\r\n      <QuoteItemCont\r\n        height=\"100%\"\r\n        alignitems=\"stretch\"\r\n        borderbottom={\r\n          relatedItemsDisplay === \"block\"\r\n            ? `1px dashed ${ColorPalette.PrimaryButtonBlue}`\r\n            : `1px solid ${ColorPalette.PrimaryGrey}`\r\n        }\r\n      >\r\n        {/* Column 1 */}\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          mobiledisplay=\"none\"\r\n          fontsize={isHeader === false ? FontSize : \"24px\"}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <Icon20x20 src={itemIconSRC}></Icon20x20>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          display={header1InputDisplay}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header1DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        {/* Column 2 */}\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          height={descriptionOverflow === \"hidden\" ? \"110px\" : \"auto\"}\r\n          display={header2Display}\r\n          bgcolor={bgColor}\r\n          fontsize={isHeader === false ? FontSize : \"18px\"}\r\n          fontweight={isHeader === true ? \"bold\" : \"\"}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnCont\r\n            mobilewidth=\"100%\"\r\n            width=\"auto\"\r\n            height=\"auto\"\r\n            margin=\"0%\"\r\n            justifycontent=\"center\"\r\n            alignitems=\"left\"\r\n          >\r\n            {/* <SmallGreenLeagueText\r\n              display={bgColor === ColorPalette.LightGreen ? \"block\" : \"none\"}\r\n            >\r\n              {\"[REQUIRED PRODUCTS:]\"}\r\n            </SmallGreenLeagueText> */}\r\n            {youtubeLinkProp !== \"\" ? (\r\n              <a\r\n                rel=\"noreferrer\"\r\n                href={youtubeLinkProp}\r\n                target=\"_blank\"\r\n                style={{\r\n                  textDecoration: linkHeaderDisplay,\r\n                  pointerEvents: pointerEvent,\r\n                }}\r\n              >\r\n                {header2}\r\n              </a>\r\n            ) : (\r\n              header2\r\n            )}\r\n\r\n            <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              margin=\"4px\"\r\n              display={isHeader !== true ? subheader2Display : \"none\"}\r\n              mobiledisplay=\"block\"\r\n              overflow={\"visible\"}\r\n              whitespace={\"normal\"}\r\n              // overflow={showRelatedItems === true ? \"visible\" : \"hidden\"}\r\n              // whitespace={showRelatedItems === true ? \"normal\" : \"nowrap\"}\r\n            >\r\n              {subheader2notes}\r\n            </TinyHeaderDarkGrey>\r\n\r\n            {/* <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              display={isHeader !== true ? \"\" : \"none\"}\r\n              margin=\"4px\"\r\n              overflow={showRelatedItems === true ? \"visible\" : \"hidden\"}\r\n              whitespace={showRelatedItems === true ? \"normal\" : \"nowrap\"}\r\n            >\r\n              {subheader2}\r\n            </TinyHeaderDarkGrey> */}\r\n          </FlexColumnCont>\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          display={isHeader !== true ? header2InputDisplay : \"none\"}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"text\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header2DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        {/* Column 3 */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={header3Display}\r\n          mobiledisplay={header3Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnContCenterAlign>\r\n            <GreyTinyTextItalics\r\n              display={\r\n                isHeader === true ||\r\n                header3 === \"\" ||\r\n                header3 === null ||\r\n                header3 === undefined\r\n                  ? \"none\"\r\n                  : \"block\"\r\n              }\r\n            >\r\n              Quantity\r\n            </GreyTinyTextItalics>\r\n            {header3}\r\n          </FlexColumnContCenterAlign>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          mobiledisplay={header3InputDisplay}\r\n          display={header3InputDisplay}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            inputwidth=\"60px\"\r\n            type=\"number\"\r\n            id=\"quantvalue\"\r\n            key={header3DefaultValue}\r\n            onBlur={(e) => {\r\n              OutputValue(e.target.valueAsNumber);\r\n            }}\r\n            defaultValue={header3DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 4 */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={hideBidQuoteHeaders === true ? \"none\" : header4Display}\r\n          mobiledisplay={header4Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnContCenterAlign>\r\n            <GreyTinyTextItalics\r\n              display={\r\n                isHeader === true ||\r\n                header4 === \"\" ||\r\n                header4 === null ||\r\n                header4 === undefined\r\n                  ? \"none\"\r\n                  : \"block\"\r\n              }\r\n            >\r\n              {CategoryType === \"Tool\"\r\n                ? \"Rental Rate\"\r\n                : CategoryType === CategoryTypes.Removal\r\n                ? \"Removal Rate\"\r\n                : \"Material Rate\"}\r\n            </GreyTinyTextItalics>\r\n            {header4}\r\n          </FlexColumnContCenterAlign>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display=\"none\"\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            width=\"50px\"\r\n            type=\"number\"\r\n            defaultValue={header4DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 5 */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={hideBidQuoteHeaders === true ? \"none\" : header5Display}\r\n          mobiledisplay=\"none\"\r\n          bgcolor={\r\n            bgColor === \"\"\r\n              ? ColorPalette.White\r\n              : bgColor !== ColorPalette.LightGreen\r\n              ? bgColor\r\n              : ColorPalette.GreyGreen\r\n          }\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnContCenterAlign>\r\n            <GreyTinyTextItalics\r\n              display={\r\n                isHeader === true ||\r\n                header5 === \"\" ||\r\n                header5 === null ||\r\n                header5 === undefined\r\n                  ? \"none\"\r\n                  : \"block\"\r\n              }\r\n            >\r\n              {CategoryType === \"Tool\"\r\n                ? \"Rental Length\"\r\n                : CategoryType === \"Delivery\"\r\n                ? \"Delivery Rate\"\r\n                : CategoryType === CategoryTypes.Access\r\n                ? \"Access Cost\"\r\n                : \"Material Subtotal\"}\r\n            </GreyTinyTextItalics>\r\n\r\n            {header5}\r\n          </FlexColumnContCenterAlign>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={header5InputDisplay}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            type=\"text\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header5DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 6 */}\r\n\r\n        {/* <FlexibleEstimateDiv15Percent\r\n          display={header6Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header6}\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={header6InputDisplay}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header6DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent> */}\r\n\r\n        {/* Column 7 */}\r\n        <FlexibleEstimateDiv15Percent\r\n          borderright={\r\n            isHeader === false ? `1px solid ${ColorPalette.DarkGrey}` : \"\"\r\n          }\r\n          display={header6Display}\r\n          bgcolor={\r\n            bgColor === \"\"\r\n              ? ColorPalette.White\r\n              : bgColor !== ColorPalette.LightGreen\r\n              ? bgColor\r\n              : ColorPalette.GreyGreen\r\n          }\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {\" \"}\r\n          <FlexColumnContCenterAlign>\r\n            <GreyTinyTextItalics\r\n              display={\r\n                isHeader === true ||\r\n                header7 === \"\" ||\r\n                header7 === null ||\r\n                header7 === undefined\r\n                  ? \"none\"\r\n                  : \"block\"\r\n              }\r\n            >\r\n              {CategoryType === CategoryTypes.Removal\r\n                ? \"Removal Rate\"\r\n                : CategoryType === \"Tool\"\r\n                ? \"Move Cost Per Machine\"\r\n                : CategoryType === \"Delivery\"\r\n                ? \"Delivery Rate\"\r\n                : CategoryType === CategoryTypes.Access\r\n                ? \"Access Cost\"\r\n                : \"Install Subtotal\"}\r\n            </GreyTinyTextItalics>\r\n\r\n            {header7}\r\n          </FlexColumnContCenterAlign>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 8 */}\r\n        <FlexibleEstimateDiv15Percent\r\n          display={hideBidQuoteHeaders === true ? \"none\" : header6Display}\r\n          bgcolor={bgColor}\r\n          fontsize={isHeader === false ? FontSize : \"18px\"}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <b>{header8}</b>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <Icon30x40pxPointerNoMargin\r\n            display={\r\n              hideBidQuoteHeaders === true\r\n                ? \"none\"\r\n                : (quoteItemObj?.RelatedItems?.filter(function (o) {\r\n                    return o.CateType !== CategoryTypes.Labor;\r\n                  }).length > 0 &&\r\n                    quoteItemObj.Parent_Id === 0) ||\r\n                  (RemovalItems && RemovalItems.length > 0)\r\n                ? \"block\"\r\n                : \"none\"\r\n            }\r\n            src={relatedItemToggleSRC}\r\n            onClick={() => {\r\n              onToggleDisplay();\r\n            }}\r\n          ></Icon30x40pxPointerNoMargin>\r\n        </FlexibleEstimateDiv5Percent>\r\n      </QuoteItemCont>\r\n\r\n      {RemovalItems.map((o, i) => {\r\n        return (\r\n          <FlexColumnFullWidth\r\n            margin=\"0\"\r\n            key={i}\r\n            display={showRelatedItems ? \"block\" : \"none\"}\r\n          >\r\n            <QuoteItem\r\n              header1=\"Delete\"\r\n              quoteItemObj={o}\r\n              CategoryType={CategoryTypes.Removal}\r\n              header2={o.Name}\r\n              header3={\r\n                typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                  ? o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                    \" \" +\r\n                    o.DisplayUnit\r\n                  : \"0.00 \" + o.DisplayUnit\r\n              }\r\n              header5=\"\"\r\n              header4={\r\n                \"$\" + ((o.Price + o.LaborSubtotal) / o?.Quant).toFixed(4)\r\n              }\r\n              // header4={\r\n              //   \"$\" +\r\n              //   (o.Price + o.LaborSubtotal)\r\n              //     .toFixed(2)\r\n              //     .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n              // }\r\n              header9={o.removalTime}\r\n              header8={\r\n                \"$\" +\r\n                (o.Price + o.LaborSubtotal)\r\n                  .toFixed(2)\r\n                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n              }\r\n            ></QuoteItem>\r\n          </FlexColumnFullWidth>\r\n        );\r\n      })}\r\n\r\n      {quoteItemObj?.RelatedItems?.map((o, i) => {\r\n        if (o.CateType !== CategoryTypes.Labor && constructionView === false) {\r\n          return (\r\n            <FlexColumnFullWidth\r\n              margin=\"0\"\r\n              key={i}\r\n              display={showRelatedItems ? \"block\" : \"none\"}\r\n            >\r\n              <QuoteItem\r\n                hideBidQuoteHeaders={hideBidQuoteHeaders}\r\n                showRelatedItems={showRelatedItems}\r\n                quoteItemObj={o}\r\n                key={i}\r\n                parentid={o.Parent_Id}\r\n                noChange={o.NoChange}\r\n                header2={o.Name}\r\n                subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                subheader2={o.Description == null ? \"\" : o.Description}\r\n                header3={o.Quant.toFixed(2) + \" \" + o.DisplayUnit}\r\n                header4={\r\n                  \"$\" +\r\n                  o.UnitPrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                header5={\r\n                  \"$\" + o.Price.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                header6={\r\n                  \"$\" +\r\n                  (o.LaborSubtotal / o.Quant)\r\n                    .toFixed(2)\r\n                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                header7={\r\n                  \"$\" +\r\n                  o.LaborSubtotal.toFixed(2).replace(\r\n                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                    \",\"\r\n                  )\r\n                }\r\n                header8={\r\n                  \"$\" +\r\n                  (\r\n                    parseFloat(o.Price.toFixed(2)) +\r\n                    parseFloat(o.LaborSubtotal.toFixed(2))\r\n                  )\r\n                    .toFixed(2)\r\n                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                bgColor={ColorPalette.LightGreen}\r\n              ></QuoteItem>\r\n            </FlexColumnFullWidth>\r\n          );\r\n        } else if (\r\n          o.CateType !== CategoryTypes.Labor &&\r\n          constructionView === true\r\n        ) {\r\n          return (\r\n            <FlexColumnFullWidth\r\n              margin=\"0\"\r\n              key={i}\r\n              display={showRelatedItems ? \"block\" : \"none\"}\r\n            >\r\n              <QuoteItem\r\n                hideBidQuoteHeaders={hideBidQuoteHeaders}\r\n                showRelatedItems={showRelatedItems}\r\n                quoteItemObj={o}\r\n                key={i}\r\n                parentid={o.Parent_Id}\r\n                noChange={o.NoChange}\r\n                header2={o.Name}\r\n                subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                subheader2={o.Description == null ? \"\" : o.Description}\r\n                header3={o.Quant.toFixed(2) + \" \" + o.DisplayUnit}\r\n                header7={\"\"}\r\n                header8={\"$\" + o.LaborSubtotal.toFixed(2)}\r\n                bgColor={ColorPalette.LightGreen}\r\n              ></QuoteItem>\r\n            </FlexColumnFullWidth>\r\n          );\r\n        } else {\r\n          return null;\r\n        }\r\n      })}\r\n    </FlexColumnCont100xAutoPercent>\r\n  );\r\n};\r\n\r\nQuoteItem.defaultProps = {\r\n  header1: \"\",\r\n  header2: \"\",\r\n  subheader2: \"\",\r\n  header3: \"\",\r\n  header4: \"\",\r\n  header4input: \"\",\r\n  header5: \"\",\r\n  header6: \"\",\r\n  header7: \"\",\r\n  header8: \"\",\r\n  inputheaderposition: 0,\r\n  OutputValue: () => {},\r\n  RemoveItemFromLocalQuoteObject: () => {},\r\n  onToggleDisplay: () => {},\r\n  bgColor: \"\",\r\n  RemovalItems: [],\r\n  isHeader: false,\r\n  showRelatedItems: false,\r\n  hideBidQuoteHeaders: false,\r\n  constructionView: false,\r\n  CategoryType: CategoryTypes.Material,\r\n};\r\n\r\nexport default QuoteItem;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { AbsoluteCont, ImageContGallery } from \"../../../StylesheetComps/Cont\";\r\nimport { Icon60x60 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { ImageFullWidth } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay1000vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { MediumHeader100PercentWidthWhiteText } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst ImageViewWindow = ({ open, imgurl, onClose }) => {\r\n  const [imageSource, setImageSource] = useState(\"\");\r\n\r\n  useEffect(() => {\r\n    if (imgurl !== null && imgurl !== undefined && imgurl !== \"\") {\r\n      setImageSource(imgurl);\r\n    }\r\n  }, [imgurl]);\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      {\" \"}\r\n      <FixedOverlay1000vh onClick={onClose}>\r\n        <AbsoluteCont>\r\n          <ImageContGallery>\r\n            <ImageFullWidth src={window.$IMGURL + imageSource}></ImageFullWidth>\r\n            <MediumHeader100PercentWidthWhiteText\r\n              display=\"none\"\r\n              mobiledisplay=\"block\"\r\n            >\r\n              Click anywhere to close\r\n            </MediumHeader100PercentWidthWhiteText>\r\n            <Icon60x60\r\n              zindex=\"1000\"\r\n              mobiledisplay=\"none\"\r\n              src=\"/Close2.svg\"\r\n            ></Icon60x60>\r\n          </ImageContGallery>\r\n        </AbsoluteCont>\r\n      </FixedOverlay1000vh>{\" \"}\r\n    </>\r\n  );\r\n};\r\n\r\nImageViewWindow.defaultProps = {\r\n  onClose: () => {},\r\n};\r\n\r\nexport default ImageViewWindow;\r\n","import React from \"react\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexColumnContGreenBorderTopRounded550pxHeight,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport {\r\n  RegularTextWithMargins,\r\n  SmallHeaderLeagueSpartanWidth100Percent,\r\n} from \"../../../StylesheetComps/Titles\";\r\nimport { Icon45x45 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { FlexDivFlexEnd } from \"../../../StylesheetComps/Div\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\nconst RevisionInstructionsWindow = ({ open, CloseWindow, StartRevising }) => {\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContGreenBorderTopRounded550pxHeight>\r\n        <FlexColumnCont100xAutoPercent>\r\n          <SmallHeaderLeagueSpartan>\r\n            How to Make Project Revisions\r\n          </SmallHeaderLeagueSpartan>\r\n          <RegularTextWithMargins>\r\n            All revisions will be sent to your New Rhodes Construction Guide for approval\r\n            before the work is confirmed. Once the revisions are confirmed, a\r\n            new revision of the project will be created for your approval.\r\n          </RegularTextWithMargins>\r\n        </FlexColumnCont100xAutoPercent>\r\n\r\n        <FlexRowCont>\r\n          <Icon45x45 src=\"/number1.svg\"></Icon45x45>\r\n          <SmallHeaderLeagueSpartanWidth100Percent>\r\n            Click the \"Start Revisions\" button.\r\n          </SmallHeaderLeagueSpartanWidth100Percent>\r\n        </FlexRowCont>\r\n\r\n        <FlexRowCont>\r\n          <Icon45x45 src=\"/number2.svg\"></Icon45x45>\r\n          <SmallHeaderLeagueSpartanWidth100Percent>\r\n            Adjust the quantity of the materials.\r\n          </SmallHeaderLeagueSpartanWidth100Percent>\r\n        </FlexRowCont>\r\n\r\n        <FlexRowCont>\r\n          <Icon45x45 src=\"/number3.svg\"></Icon45x45>\r\n          <SmallHeaderLeagueSpartanWidth100Percent>\r\n            Click \"Save\" and your changes will be sent.\r\n          </SmallHeaderLeagueSpartanWidth100Percent>\r\n        </FlexRowCont>\r\n\r\n        <FlexDivFlexEnd>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={CloseWindow}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton onClick={StartRevising}>\r\n            Start Revisions\r\n          </RegularResponsiveButton>\r\n        </FlexDivFlexEnd>\r\n      </FlexColumnContGreenBorderTopRounded550pxHeight>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nRevisionInstructionsWindow.defaultProps = {\r\n  CloseWindow: () => {},\r\n  ContinueRevising: () => {},\r\n  StartRevising: () => {},\r\n  RefreshProjectUI: () => {},\r\n};\r\n\r\nexport default RevisionInstructionsWindow;\r\n","/* eslint-disable */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport {\r\n  BackgroundColorDiv,\r\n  FixedItemPropertyDiv,\r\n} from \"../../MobileComponents/Divs\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  FlexRowCont100PercentSpaceBetween,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  LeagueSpartanTiny,\r\n  SmallGreenLeagueText,\r\n  StyledHRPropColour,\r\n  TinyHeaderDarkGrey,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nconst MobileQuoteItem = ({\r\n  header1,\r\n  header2,\r\n  subheader2notes,\r\n  subheader2,\r\n  header3,\r\n  header3title,\r\n  header4,\r\n  header4title,\r\n  header5,\r\n  header5title,\r\n  header6,\r\n  header6title,\r\n  header7,\r\n  header7title,\r\n  header8,\r\n  quoteItemObj,\r\n  inputheaderposition,\r\n  noChange,\r\n  OutputValue,\r\n  RemoveItemFromLocalQuoteObject,\r\n  parentid,\r\n  itemLink,\r\n  bgColor,\r\n}) => {\r\n  const [itemPropertyDisplay, setItemPropertyDisplay] = useState(\"none\");\r\n  const [itemHRDisplay, setItemHRDisplay] = useState(\"none\");\r\n  const [itemPropertyToggle, setItemProperyToggle] = useState(false);\r\n\r\n  const [subheader2Display] = useState(\"flex\");\r\n  const [header3Display, setHeader3Display] = useState(\"block\");\r\n\r\n  const [header3InputDisplay, setHeader3InputDisplay] = useState(\"none\");\r\n\r\n  const [descriptionOverflow, setDescriptionOverflow] = useState(\"hidden\");\r\n  const [descriptionWhiteSpace, setDescriptionWhiteSpace] = useState(\"nowrap\");\r\n\r\n  const UpdateDescriptionUI = async (overflow) => {\r\n    if (overflow === \"hidden\") {\r\n      setDescriptionOverflow(\"visible\");\r\n      setDescriptionWhiteSpace(\"normal\");\r\n    } else {\r\n      setDescriptionOverflow(\"hidden\");\r\n      setDescriptionWhiteSpace(\"nowrap\");\r\n    }\r\n  };\r\n\r\n  const DetermineInputHeaderLogic = async () => {\r\n    if (parentid === 0) {\r\n      if (noChange === false) {\r\n        InitializeSetup();\r\n        switch (inputheaderposition) {\r\n          case 1:\r\n            break;\r\n          case 2:\r\n            break;\r\n          case 3:\r\n            setHeader3Display(\"none\");\r\n            UpdateItemPropertyView(false);\r\n            setHeader3InputDisplay(\"flex\");\r\n            break;\r\n          case 5:\r\n            break;\r\n          case 6:\r\n            break;\r\n          default:\r\n            break;\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const InitializeSetup = async () => {\r\n    setHeader3Display(\"block\");\r\n\r\n    setHeader3InputDisplay(\"none\");\r\n  };\r\n\r\n  useEffect(() => {\r\n    DetermineInputHeaderLogic(inputheaderposition);\r\n  }, [inputheaderposition]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const CheckIfValidLink = async (link) => {\r\n    if (link !== null && link !== undefined && link !== \"\") {\r\n      var p =\r\n        /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\r\n      if (link.match(p)) {\r\n        setYoutubeLinkProp(link);\r\n        setLinkHeaderDisplay(\"underline\");\r\n        setPointerEvent(\"auto\");\r\n      } else {\r\n        setLinkHeaderDisplay(\"none\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const UpdateItemPropertyView = async (itemtoggle) => {\r\n    UpdateDescriptionUI(descriptionOverflow, descriptionWhiteSpace);\r\n    if (itemtoggle === false) {\r\n      setItemPropertyDisplay(\"flex\");\r\n      setItemHRDisplay(\"block\");\r\n      setItemProperyToggle(true);\r\n    } else {\r\n      setItemPropertyDisplay(\"none\");\r\n      setItemHRDisplay(\"none\");\r\n      setItemProperyToggle(false);\r\n    }\r\n  };\r\n\r\n  // const calculateImmediateSum = (quoteItem) => {\r\n  //   console.log(quoteItem)\r\n  //   let sum = parseFloat(quoteItem?.Price.toFixed(2)) + parseFloat(quoteItem?.LaborSubtotal.toFixed(2)); // Start with the quote item's own value\r\n  //   if (quoteItem?.RelatedItems) {\r\n  //     sum += quoteItem?.RelatedItems.reduce((acc, item) => {\r\n  //       if (item?.CateType !== CategoryTypes.Labor) {\r\n  //         return acc + (parseFloat(item?.Price.toFixed(2)) + parseFloat(item?.LaborSubtotal.toFixed(2)));\r\n  //       }\r\n  //       return acc;\r\n  //     }, 0);\r\n  //   }\r\n  //   return sum.toFixed(2);\r\n  // };\r\n\r\n  const calculateImmediateSum = (quoteItem) => {\r\n    const sumItem = (item) => {\r\n      // Base sum for the current item\r\n      let sum =\r\n        parseFloat(item?.Price?.toFixed(2) || 0) +\r\n        parseFloat(item?.LaborSubtotal?.toFixed(2) || 0);\r\n  \r\n      // Recursively calculate sum for related items (non-labor)\r\n      if (item?.RelatedItems) {\r\n        sum += item.RelatedItems.reduce((acc, relatedItem) => {\r\n          if (relatedItem?.CateType !== CategoryTypes.Labor) {\r\n            return acc + sumItem(relatedItem); // Recur here\r\n          }\r\n          return acc;\r\n        }, 0);\r\n      }\r\n  \r\n      return sum;\r\n    };\r\n  \r\n    return sumItem(quoteItem).toFixed(2); // Start with the base quoteItem\r\n  };\r\n  \r\n\r\n  // Decide which header8 value to display based on itemPropertyToggle\r\n  const header8Value = itemPropertyToggle\r\n    ? header8 // If itemPropertyToggle is true, use the item's own header8\r\n    : `$${calculateImmediateSum(quoteItemObj)}`; // If false, calculate the sum including related non-labor items\r\n\r\n  useEffect(() => {\r\n    CheckIfValidLink(itemLink);\r\n  }, [itemLink]);\r\n\r\n  return (\r\n    <div>\r\n      <StyledHRPropColour\r\n        margin=\"0\"\r\n        border={\r\n          parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n            ? `0.25px solid ${ColorPalette.PrimaryButtonBlue}`\r\n            : `0.25px solid white`\r\n        }\r\n      ></StyledHRPropColour>\r\n      <BackgroundColorDiv\r\n        padding=\"10px\"\r\n        bgcolor={\r\n          parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n            ? ColorPalette.LightGreen\r\n            : ColorPalette.White\r\n        }\r\n      >\r\n        {/* <SmallGreenLeagueText\r\n          display={\r\n            parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n              ? \"block\"\r\n              : \"none\"\r\n          }\r\n          margin=\"0px\"\r\n          padding=\"5px\"\r\n        >\r\n          [REQUIRED PRODUCT]\r\n        </SmallGreenLeagueText> */}\r\n        <StyledHRPropColour\r\n          border=\"0.5px solid white\"\r\n          mobiledisplay={\r\n            parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n              ? \"none\"\r\n              : itemHRDisplay\r\n          }\r\n        ></StyledHRPropColour>\r\n        <FlexRowCont100PercentSpaceBetween\r\n          mobilewidth=\"98%\"\r\n          onClick={() => {\r\n            UpdateItemPropertyView(itemPropertyToggle);\r\n          }}\r\n        >\r\n          <LeagueSpartanTiny>{header2}</LeagueSpartanTiny>\r\n\r\n          {/* <LeagueSpartanTiny>{header2}</LeagueSpartanTiny> */}\r\n          <LeagueSpartanTiny\r\n            onClick={() => UpdateItemPropertyView(itemPropertyToggle)}\r\n          >\r\n            {quoteItemObj?.RelatedItems?.length >= 1\r\n              ? header8Value?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n              : header8}\r\n          </LeagueSpartanTiny>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n        <FlexRowCont100PercentSpaceBetween>\r\n          <TinyTextItalics marginleft=\"-2px\" margintop=\"6px\">\r\n            {subheader2notes}\r\n          </TinyTextItalics>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n        <FlexRowCont100PercentSpaceBetween\r\n          onClick={() => {\r\n            UpdateItemPropertyView(itemPropertyToggle);\r\n          }}\r\n        >\r\n          <TinyHeaderDarkGrey\r\n            display={subheader2Display}\r\n            mobiledisplay=\"block\"\r\n            overflow={descriptionOverflow}\r\n            whitespace={descriptionWhiteSpace}\r\n          >\r\n            {subheader2}\r\n          </TinyHeaderDarkGrey>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n\r\n        <StyledHRPropColour\r\n          display={itemHRDisplay}\r\n          mobiledisplay={itemHRDisplay}\r\n          border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n        ></StyledHRPropColour>\r\n        <StyledHRPropColour\r\n          display={itemHRDisplay}\r\n          mobiledisplay={itemHRDisplay}\r\n          border={\r\n            parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n              ? `0.25px solid ${ColorPalette.LightGreen}`\r\n              : `0.25px solid white`\r\n          }\r\n        ></StyledHRPropColour>\r\n        <FlexRowCont100PercentSpaceBetween display={itemPropertyDisplay}>\r\n          <FixedItemPropertyDiv>\r\n            <TinyHeaderDarkGrey>{header3title}</TinyHeaderDarkGrey>\r\n            <TinyHeaderDarkGrey mobiledisplay={header3Display}>\r\n              {header3}\r\n            </TinyHeaderDarkGrey>\r\n            <TextInputProp\r\n              inputmargintop=\"5px\"\r\n              mobilewidth=\"18.5vw\"\r\n              mobiledisplay={header3InputDisplay}\r\n              type=\"number\"\r\n              onBlur={(e) => {\r\n                OutputValue(e.target.valueAsNumber);\r\n              }}\r\n              defaultValue={quoteItemObj?.Quant}\r\n            ></TextInputProp>\r\n          </FixedItemPropertyDiv>\r\n\r\n          <FixedItemPropertyDiv>\r\n            <TinyHeaderDarkGrey>{header4title}</TinyHeaderDarkGrey>\r\n            <TinyHeaderDarkGrey>{header4}</TinyHeaderDarkGrey>\r\n          </FixedItemPropertyDiv>\r\n\r\n          <FixedItemPropertyDiv>\r\n            <TinyHeaderDarkGrey>{header5title}</TinyHeaderDarkGrey>\r\n            <TinyHeaderDarkGrey>{header5}</TinyHeaderDarkGrey>\r\n          </FixedItemPropertyDiv>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n\r\n        <StyledHRPropColour\r\n          display={itemHRDisplay}\r\n          mobiledisplay={itemHRDisplay}\r\n          border={\r\n            parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n              ? `0.25px solid ${ColorPalette.LightGreen}`\r\n              : `0.25px solid white`\r\n          }\r\n        ></StyledHRPropColour>\r\n\r\n        <FlexRowCont100PercentSpaceBetween display={itemPropertyDisplay}>\r\n          <FixedItemPropertyDiv>\r\n            <TinyHeaderDarkGrey></TinyHeaderDarkGrey>\r\n          </FixedItemPropertyDiv>\r\n\r\n          <FixedItemPropertyDiv>\r\n            <TinyHeaderDarkGrey>{header6title}</TinyHeaderDarkGrey>\r\n            <TinyHeaderDarkGrey>{header6}</TinyHeaderDarkGrey>\r\n          </FixedItemPropertyDiv>\r\n\r\n          <FixedItemPropertyDiv>\r\n            <TinyHeaderDarkGrey>{header7title}</TinyHeaderDarkGrey>\r\n            <TinyHeaderDarkGrey>{header7}</TinyHeaderDarkGrey>\r\n          </FixedItemPropertyDiv>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n      </BackgroundColorDiv>\r\n\r\n      <StyledHRPropColour\r\n        border={`0.5px solid ${ColorPalette.White}`}\r\n        mobiledisplay={\r\n          parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n            ? \"none\"\r\n            : \"block\"\r\n        }\r\n      ></StyledHRPropColour>\r\n\r\n      {/* {quoteItemObj?.RelatedItems?.map((o, i) => {\r\n        if (o.CateType !== CategoryTypes.Labor) {\r\n          return (\r\n            <FlexColumnFullWidth\r\n              margin=\"0\"\r\n              display={\r\n                parentid !== 0 &&\r\n                quoteItemObj?.CateType === CategoryTypes.Material\r\n                  ? \"block\"\r\n                  : itemPropertyDisplay\r\n              }\r\n            >\r\n              <MobileQuoteItem\r\n                quoteItemObj={o}\r\n                key={i}\r\n                parentid={o.Parent_Id}\r\n                noChange={o.NoChange}\r\n                header2={o.Name}\r\n                subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                subheader2={o.Description == null ? \"\" : o.Description}\r\n                header3={o.Quant.toFixed(2)}\r\n                header4={\"$\" + o.UnitPrice.toFixed(2)}\r\n                header5={\"$\" + o.Price.toFixed(2)}\r\n                header6={\"$\" + (o.LaborSubtotal / o.Quant).toFixed(2)}\r\n                header7={\"$\" + o.LaborSubtotal.toFixed(2)}\r\n                header8={\r\n                  \"$\" +\r\n                  (\r\n                    parseFloat(o.Price.toFixed(2)) +\r\n                    parseFloat(o.LaborSubtotal.toFixed(2))\r\n                  ).toFixed(2)\r\n                }\r\n                header3title=\"Quantity\"\r\n                header4title=\"Unit Rate\"\r\n                header5title=\"Material Subtotal\"\r\n                header6title=\"Install Rate\"\r\n                header7title=\"Install Subtotal\"\r\n              ></MobileQuoteItem>\r\n            </FlexColumnFullWidth>\r\n          );\r\n        } else {\r\n          return null;\r\n        }\r\n      })} */}\r\n      {\r\n        itemPropertyToggle // Check if itemPropertyToggle is true\r\n          ? quoteItemObj?.RelatedItems?.map((o, i) => {\r\n              if (o.CateType !== CategoryTypes.Labor) {\r\n                return (\r\n                  <FlexColumnFullWidth\r\n                    margin=\"0\"\r\n                    display={\r\n                      parentid !== 0 &&\r\n                      quoteItemObj?.CateType === CategoryTypes.Material\r\n                        ? \"block\"\r\n                        : itemPropertyDisplay\r\n                    }\r\n                  >\r\n                    <MobileQuoteItem\r\n                      quoteItemObj={o}\r\n                      key={i}\r\n                      parentid={o.Parent_Id}\r\n                      noChange={o.NoChange}\r\n                      header2={o.Name}\r\n                      subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                      subheader2={o.Description == null ? \"\" : o.Description}\r\n                      header3={o.Quant.toFixed(2)}\r\n                      header4={\"$\" + o.UnitPrice.toFixed(2)}\r\n                      header5={\"$\" + o.Price.toFixed(2)}\r\n                      header6={\"$\" + (o.LaborSubtotal / o.Quant).toFixed(2)}\r\n                      header7={\"$\" + o.LaborSubtotal.toFixed(2)}\r\n                      header8={\r\n                        \"$\" +\r\n                        (\r\n                          parseFloat(o.Price.toFixed(2)) +\r\n                          parseFloat(o.LaborSubtotal.toFixed(2))\r\n                        ).toFixed(2)\r\n                      }\r\n                      header3title=\"Quantity\"\r\n                      header4title=\"Unit Rate\"\r\n                      header5title=\"Material Subtotal\"\r\n                      header6title=\"Install Rate\"\r\n                      header7title=\"Install Subtotal\"\r\n                    ></MobileQuoteItem>\r\n                  </FlexColumnFullWidth>\r\n                );\r\n              } else {\r\n                return null;\r\n              }\r\n            })\r\n          : null // If itemPropertyToggle is false, render nothing\r\n      }\r\n    </div>\r\n  );\r\n};\r\n\r\nMobileQuoteItem.defaultProps = {\r\n  header1: \"\",\r\n  header2: \"\",\r\n  subheader2: \"\",\r\n  header3: \"\",\r\n  header3title: \"\",\r\n  header4: \"\",\r\n  header4title: \"\",\r\n  header4input: \"\",\r\n  header5: \"\",\r\n  header5title: \"\",\r\n  header6: \"\",\r\n  header6title: \"\",\r\n  header7: \"\",\r\n  header7title: \"\",\r\n  header8: \"\",\r\n  bgColor: ColorPalette.White,\r\n  inputheaderposition: 0,\r\n  OutputValue: () => {},\r\n  RemoveItemFromLocalQuoteObject: () => {},\r\n};\r\n\r\nexport default MobileQuoteItem;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { ColorPalette } from '../../StylesheetComps/Colors';\r\nimport { RegularResponsiveButton } from '../../StylesheetComps/Components';\r\n\r\nconst SecondButtonContainer = styled.div`\r\nposition: fixed;\r\n  bottom: 0%;\r\n  padding:10px;\r\n  border-radius: 0px 5px 5px 0px;\r\n  justify-content:flex-end;\r\n  display:flex;\r\n  left: 50%;\r\n  transform: translateX(-50%);\r\n  transition: transform 0.3s ease-in-out, opacity 0.2s ease-in-out;\r\n  z-index: 999;\r\n  background-color: ${ColorPalette.GreyGreen};\r\n  width:99vw;\r\n  opacity: ${({ show }) => (show ? 0 : 1)};\r\n\r\n`;\r\n\r\nconst EstimateFooter = ({ buttonRef, depositAmount, depositCallback }) => {\r\n  const [isButtonInView, setIsButtonInView] = React.useState(true);\r\n\r\n  const handleScroll = () => {\r\n    const buttonRect = buttonRef.current.getBoundingClientRect();\r\n    const windowHeight = window.innerHeight;\r\n    const isButtonOutOfView = buttonRect.top > windowHeight || buttonRect.bottom < 0;\r\n    setIsButtonInView(!isButtonOutOfView);\r\n  };\r\n\r\n  React.useEffect(() => {\r\n    window.addEventListener('scroll', handleScroll);\r\n    return () => window.removeEventListener('scroll', handleScroll);\r\n  }, [buttonRef]);\r\n\r\n  return (\r\n    <SecondButtonContainer show={isButtonInView}>\r\n      <RegularResponsiveButton onClick={()=>{depositCallback()}} width=\"auto\">Pay Deposit ${depositAmount.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )}</RegularResponsiveButton>\r\n    </SecondButtonContainer>\r\n  );\r\n};\r\n\r\nEstimateFooter.defaultProps = {\r\ndepositAmount:0,\r\ndepositCallback:()=>{}\r\n}\r\n\r\nexport default EstimateFooter;\r\n","/* eslint-disable */\r\n\r\n//  React Imports ---------------------------------------\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport html2canvas from \"html2canvas\";\r\nimport jsPDF from \"jspdf\";\r\nimport axios from \"axios\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCaseById,\r\n  GetQuoteByIdForUserDisplay,\r\n  QuoteStatus,\r\n  ReverseQuant_QuoteItem,\r\n  SetQuoteTo_Buy,\r\n  SetQuoteTo_Buy_Install,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  GetCurrentTime,\r\n  MakeStripePay,\r\n  SetHeaderAuthorization,\r\n} from \"../../API_Functions/Utility_Functions\";\r\n//  Imported Components ---------------------------------\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport TopMentProposalView from \"../../comps/MenuComps/TopMenuProposalView\";\r\nimport QuoteItem from \"../../comps/QuoteItem\";\r\nimport ImageViewWindow from \"../../comps/Windows/ImageEnlargementWindow\";\r\nimport RevisionInstructionsWindow from \"../../comps/Windows/RevisionInstructions\";\r\nimport DuplicateProposalWindow from \"../../comps/Windows/SaveRevisionGuide\";\r\nimport MobileQuoteItem from \"../../MobileComponents/MobileQuoteItem\";\r\nimport { Stored_Values } from \"../../Stored_Values\";\r\nimport { CaseStatus } from \"../../StylesheetComps/CaseStatus\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FixedIconToTop,\r\n  RegularResponsiveButton,\r\n} from \"../../StylesheetComps/Components\";\r\n// Imported Styled Components ---------------------------\r\nimport { GetTaxesForMetro } from \"../../API_Functions/Store_Functions\";\r\nimport EstimateFooter from \"../../comps/EstimateFooter\";\r\nimport {\r\n  AutoSizeOverflowY,\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnFullWidth,\r\n  FlexColumnFullWidthMargins,\r\n  FlexContFullWidthHeightJustifyCenter,\r\n  FlexRowCont,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont60PercentSpaceEvenly,\r\n  FlexRowContAutox100PercentMobileColumn,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFlexStartMobileColumn,\r\n  FlexRowContFullWidth,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexContainerItem,\r\n  FlexContainerPhotos,\r\n  GridContainer3Wide,\r\n  SummaryContainer,\r\n  SummaryContainerItems,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon200x200 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  OverrideEmbedDiv,\r\n  OverrideEmbedImage,\r\n} from \"../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  Image375px,\r\n  TextAreaAutoResizeNoBorder,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  Cont,\r\n  ContentCont44Percent,\r\n  ContentCont77vw,\r\n  ContentContQuote,\r\n} from \"../../StylesheetComps/Projects\";\r\nimport {\r\n  LargeText,\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanLarge,\r\n  LeagueSpartanRegular,\r\n  MediumHeader,\r\n  StyledHRGreenBreak,\r\n  StyledHRGreenBreakThick,\r\n  StyledHRPropColour,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport Dropdown from \"../../comps/DropdownMenu\";\r\n\r\nconst ViewProposalUserView = () => {\r\n  // React-router variables\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  // Data variables\r\n  const [Quote, setProposal] = useState({});\r\n  const [Case, setCase] = useState({});\r\n  const [curTime, setCurTime] = useState(\"\");\r\n  var MaterialSum = 0;\r\n  var InstallSum = 0;\r\n  var TotalSum = 0;\r\n  var materialSub = 0;\r\n  var installSub = 0;\r\n\r\n  // Totals\r\n  const [supplyTotal, setSupplyTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n  const [installTotal, setInstallTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n  const [projectSubtotal, setProjectSubtotal] = useState(0);\r\n  const [deposit, setDeposit] = useState(0);\r\n  const [projectGrandTotal, setProjectGrandTotal] = useState(0);\r\n  const [deliveryTotal, setDeliveryTotal] = useState(0);\r\n  const [accessTotal, setAccessTotal] = useState(0);\r\n\r\n  // Display control for headers\r\n  const [toolsmachinesHeader, setToolsMachinesHeader] = useState(\"none\");\r\n  const [removalHeader, setRemovalHeader] = useState(\"none\");\r\n  const [accessDisplay, setAccessDisplay] = useState(\"none\");\r\n  const [generalMaterialsHeader, setGeneralMaterialsHeader] = useState(\"none\");\r\n  const [deliveryHeader, setDeliveryHeader] = useState(\"none\");\r\n\r\n  // Display control for various elements\r\n  const [installEstimateDisplay, setInstallEstimateDisplay] = useState(\"flex\");\r\n  const [laborDetailView, setLaborDetailView] = useState(\"none\");\r\n  const [showGenerateInovice, setShowGenerateInvoice] = useState(\"none\");\r\n  const [laborDetailToggleView, setLaborDetailToggleView] = useState(\"none\");\r\n  const [laborDetailArrow, setLaborDetailArrow] = useState(\"/downarrow.svg\");\r\n  const [discardButtonDisplay, setDiscardButtonDisplay] = useState(\"none\");\r\n  const [makeRevisionsButtonDisplay, setMakeRevisionsButtonDisplay] =\r\n    useState(\"block\");\r\n  const [saveRevisionsButtonDisplay, setSaveRevisionsButtonDisplay] =\r\n    useState(\"none\");\r\n  const [cloneProposalButtonDisplay, setCloneProposalButtonDisplay] =\r\n    useState(\"none\");\r\n  const [showDepositButton, setShowDepositButton] = useState(\"block\");\r\n  const [labourBreakdownDisplay, setShowLabourBreakdown] = useState(\"none\");\r\n  const [showRelated, setShowRelated] = useState(false);\r\n  const [laborDetailToggle, setLaborDetailToggle] = useState(false);\r\n\r\n  // UI controls for image preview\r\n  const [imagePreviewUrl, setImagePreviewUrl] = useState(\"\");\r\n  const [imageGalleryDisplay, setImageGalleryDisplay] = useState(false);\r\n  const [cloneProposalWindowDisplay, setCloneProposalWindowDisplay] =\r\n    useState(false);\r\n\r\n  // Revision instruction window\r\n  const [revisionInstructionDisplay, setRevisionInstructionDisplay] =\r\n    useState(false);\r\n  const [revisionAcceptDisplay, setRevisionAcceptDisplay] = useState(\"none\");\r\n  const [revisionDeclineDisplay, setRevisionDeclineDisplay] = useState(\"none\");\r\n\r\n  // Deletion state\r\n  const [deleteState, setDeleteState] = useState(false);\r\n\r\n  // Header input state\r\n  const [headerInputShown, setHeaderInputShown] = useState(0);\r\n\r\n  // Opacity control\r\n  const [supplyTotalOpacity, setSupplyTotalOpacity] = useState(\"100%\");\r\n  const [installTotalOpacity, setInstallTotalOpacity] = useState(\"100%\");\r\n\r\n  // Naming\r\n  const [projectName, setProjectName] = useState(\"\");\r\n  const [estimateName, setEstimateName] = useState(\"\");\r\n  const [homeownerName, setHomeownerName] = useState(\"\");\r\n  const [projectCaseNumber, setProjectCaseNumber] = useState(0);\r\n\r\n  // File naming\r\n  const [invoicefileMaterial, setInvoicefileMaterial] = useState(\r\n    \"invoice_material.pdf\"\r\n  );\r\n  const [invoicefileInstall, setInvoicefileInstall] = useState(\r\n    \"invoice_install.pdf\"\r\n  );\r\n\r\n  // Totals for untagged items\r\n  const [untaggedMaterialSubtotal, setUntaggedMaterialSubtotal] = useState(0);\r\n  const [untaggedInstallSubtotal, setUntaggedInstallSubtotal] = useState(0);\r\n  const [untaggedTotalSubtotal, setUntaggedTotalSubtotal] = useState(0);\r\n\r\n  // Error handling\r\n  const [errorAgreementText, setErrorAgreementText] = useState(\"\");\r\n\r\n  // Supply control\r\n  const [supplyOnlySelected, setSupplyOnlySelected] = useState(false);\r\n\r\n  // Taxation\r\n  const [storeTaxes, setStoreTaxes] = useState(false);\r\n\r\n  // Scrolling control\r\n  const scrollToOverview = document.getElementById(\"overview\");\r\n  const scrollToSupply = document.getElementById(\"supply\");\r\n  const scrollToInstall = document.getElementById(\"install\");\r\n  const scrollToDesigns = document.getElementById(\"designs\");\r\n  const scrollToComments = document.getElementById(\"comments\");\r\n  const scrollToConfirm = document.getElementById(\"confirmation\");\r\n\r\n  // Case status\r\n  const [caseStatus, setCaseStatus] = useState(0);\r\n\r\n  // Button reference\r\n  const buttonRef = React.useRef(null);\r\n  const [displayStatus, setDisplayStatus] = useState({});\r\n\r\n  let removalsHeader7Subtotal = 0;\r\n  let [removalsHeader8Subtotal, setRemovalsHeader8Subtotal] = useState(0);\r\n  let toolsHeader7Subtotal = 0;\r\n  let toolsHeader8Subtotal = 0;\r\n  const [projectInstallSubtotal, setProjectInstallSubtotal] = useState(0);\r\n\r\n  const formattedDateTime = async () => {\r\n    const now = new Date();\r\n    const day = now.getDate();\r\n    const month = now.toLocaleString(\"default\", { month: \"short\" });\r\n    const year = now.getFullYear();\r\n    let hour = now.getHours();\r\n    const ampm = hour >= 12 ? \"PM\" : \"AM\";\r\n    hour = hour % 12;\r\n    hour = hour ? hour : 12;\r\n    const minute = now.getMinutes().toString().padStart(2, \"0\");\r\n    return `${day} ${month} ${year}, ${hour}:${minute} ${ampm}`;\r\n  };\r\n\r\n  function formatDate(isoString) {\r\n    const date = new Date(isoString);\r\n    const options = {\r\n      year: \"numeric\",\r\n      month: \"long\",\r\n      day: \"numeric\",\r\n      hour: \"2-digit\",\r\n      minute: \"2-digit\",\r\n      hour12: true,\r\n    };\r\n    return date.toLocaleString(\"en-US\", options);\r\n  }\r\n\r\n  const downloadPDF = async () => {\r\n    const timestamp = await formattedDateTime();\r\n    const input = document.getElementById(\"estimate\");\r\n\r\n    const includeElement = document.getElementById(\"include-on-pdf\");\r\n    const originalDisplayStyle = includeElement.style.display;\r\n    includeElement.style.display = \"flex\";\r\n\r\n    html2canvas(input, {\r\n      useCss: true,\r\n      scale: 1, // Reduce the size of the canvas\r\n      ignoreElements: (element) => {\r\n        return element.id === \"exclude-from-pdf\";\r\n      },\r\n    }).then((canvas) => {\r\n      includeElement.style.display = originalDisplayStyle;\r\n\r\n      const imgData = canvas.toDataURL(\"image/jpeg\", 1); // Use JPEG with 50% quality\r\n      const pdf = new jsPDF(\"p\", \"mm\", \"a4\"); // set the PDF to A4 size\r\n      const pageWidth = pdf.internal.pageSize.getWidth();\r\n      const pageHeight = pdf.internal.pageSize.getHeight();\r\n      const imgProps = pdf.getImageProperties(imgData);\r\n      const pdfWidth = pageWidth;\r\n      const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;\r\n      let pdfPages = Math.ceil(pdfHeight / pageHeight);\r\n\r\n      for (let i = 0; i < pdfPages; i++) {\r\n        if (i !== 0) {\r\n          pdf.addPage();\r\n        }\r\n        pdf.addImage(imgData, \"PNG\", 0, -(i * pageHeight), pdfWidth, pdfHeight);\r\n      }\r\n\r\n      pdf.save(`${timestamp} ${Case?.Street}.pdf`);\r\n    });\r\n  };\r\n\r\n  const DisplayImageInGallery = async (url) => {\r\n    if (!url) return;\r\n\r\n    setImagePreviewUrl(url);\r\n    setImageGalleryDisplay(true);\r\n    document.body.style.overflow = \"hidden\";\r\n  };\r\n\r\n  const DisplayLaborBreakdown = async (toggle) => {\r\n    if (toggle) {\r\n      setLaborDetailArrow(\"/downarrow.svg\");\r\n      setLaborDetailToggleView(\"none\");\r\n      setLaborDetailToggle(false);\r\n    } else {\r\n      setLaborDetailToggle(true);\r\n      setLaborDetailArrow(\"/uparrow.svg\");\r\n      setLaborDetailToggleView(\"flex\");\r\n    }\r\n  };\r\n\r\n  const toggleDisplay = (id) => {\r\n    setDisplayStatus((prevStatus) => ({\r\n      ...prevStatus,\r\n      [id]: !prevStatus[id],\r\n    }));\r\n  };\r\n\r\n  const GetProjectInformation = async (caseId) => {\r\n    const data = await GetCaseById(caseId);\r\n    const { Case } = data || {};\r\n\r\n    if (!Case) return;\r\n\r\n    const { Name, Tittle, CaseNumber, Street, City, CaseStatus } = Case;\r\n\r\n    setCase(Case);\r\n\r\n    if (Name) setHomeownerName(Name);\r\n    if (Tittle) setProjectName(Tittle);\r\n    if (CaseNumber) setProjectCaseNumber(CaseNumber);\r\n\r\n    if (Street && City) {\r\n      const ext = `${Street}-${City}`;\r\n      setInvoicefileInstall(`invoice_install_${ext}.pdf`);\r\n      setInvoicefileMaterial(`invoice_material_${ext}.pdf`);\r\n    }\r\n\r\n    if (\r\n      [\r\n        CaseStatus.Closed,\r\n        CaseStatus.Canceled,\r\n        CaseStatus.CancelRequested,\r\n        CaseStatus.Drafted,\r\n      ].includes(CaseStatus)\r\n    ) {\r\n      setMakeRevisionsButtonDisplay(\"none\");\r\n    }\r\n\r\n    setCaseStatus(CaseStatus);\r\n  };\r\n\r\n  const toggleRemovalDisplay = (id) => {\r\n    setRemovalDisplayStatus((prevStatus) => ({\r\n      ...prevStatus,\r\n      [id]: !prevStatus[id],\r\n    }));\r\n  };\r\n\r\n  const DisplayDepositButton = async () => {\r\n    if (caseStatus === CaseStatus.Construction) {\r\n      setShowDepositButton(\"none\");\r\n    } else setShowDepositButton(\"block\");\r\n  };\r\n\r\n  const [estimateGST, setEstimateGST] = useState(0);\r\n  // const [estimatePST, setEstimatePST] = useState(0)\r\n\r\n  const GetProposalInformation = async (quoteid) => {\r\n    const headers = {\r\n      apikey: window.$POLYGONAPIKEY,\r\n      authorization: window.$POLYGONAUTHKEY,\r\n    };\r\n\r\n    let quote; // Declare quote here for broader scope access\r\n\r\n    try {\r\n      const checkResponse = await axios.get(\r\n        `${window.$LOCKINURL}?estimateId=eq.${quoteid}`,\r\n        { headers }\r\n      );\r\n\r\n      if (Array.isArray(checkResponse.data) && checkResponse.data.length > 0) {\r\n        console.log(\"Estimate already there!\");\r\n        // If the API returns the quote directly or as part of an object, adjust accordingly\r\n        // Assuming the quote is directly within the data array\r\n        quote = checkResponse.data[0].quote; // Adjust this based on the actual structure\r\n      } else {\r\n        const data = await GetQuoteByIdForUserDisplay(quoteid);\r\n        if (!data || !data.quote) return;\r\n        quote = data.quote; // Set quote from this block for use outside\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error fetching proposal information:\", error);\r\n      return; // Exit if there's an error\r\n    }\r\n\r\n    if (!quote) return; // If quote hasn't been set, exit the function\r\n\r\n    let removalsHeader7Subtotal = 0;\r\n    let removalsHeader8Subtotal = 0;\r\n\r\n    quote?.Removal?.Items.forEach((o) => {\r\n      removalsHeader7Subtotal += Number((o.Price + o.LaborSubtotal).toFixed(2));\r\n      removalsHeader8Subtotal += Number((o.Price + o.LaborSubtotal).toFixed(2));\r\n    });\r\n\r\n    let projectInstallSubtotal = 0;\r\n\r\n    quote?.Tags?.forEach((t) => {\r\n      const primaryItems = quote?.Material?.Items.filter(\r\n        (item) => item.Tag_Id === t.Id && item.Parent_Id === 0\r\n      );\r\n\r\n      primaryItems.forEach((o) => {\r\n        const installSub =\r\n          showRelated === true\r\n            ? o.LaborSubtotal\r\n            : o.LaborSubtotalWithRelatedItems;\r\n        projectInstallSubtotal += installSub;\r\n      });\r\n    });\r\n\r\n    quote?.Material?.Items.forEach((o) => {\r\n      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n        const installSub =\r\n          showRelated === true\r\n            ? o.LaborSubtotal\r\n            : o.LaborSubtotalWithRelatedItems;\r\n        projectInstallSubtotal += installSub;\r\n      }\r\n    });\r\n\r\n    setProjectInstallSubtotal(projectInstallSubtotal);\r\n    setProposal(quote);\r\n    setDeliveryTotal(\r\n      quote?.Delivery?.Tools?.reduce(\r\n        (accumulator, tool) => accumulator + tool.Price,\r\n        0\r\n      ) || 0\r\n    );\r\n    setAccessTotal(\r\n      quote?.AccessArea?.Items?.reduce(\r\n        (accumulator, items) => accumulator + items.Price,\r\n        0\r\n      ) || 0\r\n    );\r\n    UpdateUIBasedOnStatus(quote);\r\n\r\n    const materialSubtotal = quote?.Material?.Total?.Subtotal || 0;\r\n    const deliverySubtotal = quote?.Delivery?.Total?.Subtotal || 0;\r\n    const toolSubtotal = quote?.Tool?.Total?.Subtotal || 0;\r\n    const accessAreaSubtotal = quote?.AccessArea?.Total?.Subtotal || 0;\r\n    const installSubtotal =\r\n      Number(projectInstallSubtotal) > Stored_Values.MIN_LABOR\r\n        ? Number(projectInstallSubtotal)\r\n        : Stored_Values?.MIN_LABOR;\r\n\r\n    supplyTotal.Subtotal = (materialSubtotal + deliverySubtotal).toFixed(2);\r\n    installTotal.Subtotal = (\r\n      installSubtotal +\r\n      toolSubtotal +\r\n      removalsHeader7Subtotal +\r\n      accessAreaSubtotal\r\n    ).toFixed(2);\r\n\r\n    const subtotal =\r\n      Number(supplyTotal.Subtotal) + Number(installTotal.Subtotal);\r\n    setProjectSubtotal(\r\n      subtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n    );\r\n\r\n    if (quote.Tittle) {\r\n      setEstimateName(quote.Tittle);\r\n    }\r\n\r\n    const storeTaxArray = await GetTaxesForMetro(params.Id);\r\n    setStoreTaxes(storeTaxArray);\r\n\r\n    let gstTax = 0;\r\n    // let pstTax = 0;\r\n\r\n    const taxitems = [\r\n      { type: \"Material\", subtotal: materialSubtotal },\r\n      { type: \"Delivery\", subtotal: deliverySubtotal },\r\n      { type: \"Labor\", subtotal: installSubtotal },\r\n      { type: \"Removal\", subtotal: removalsHeader7Subtotal },\r\n      { type: \"AccessArea\", subtotal: accessAreaSubtotal },\r\n      { type: \"Tool\", subtotal: toolSubtotal },\r\n    ];\r\n\r\n    const gst = storeTaxArray.find((tax) => tax.TaxCode === \"Gst\");\r\n    // const pst = storeTaxArray.find(tax => tax.TaxCode === 'PST');\r\n\r\n    if (gst) {\r\n      taxitems.forEach((item) => {\r\n        const { type, subtotal } = item;\r\n\r\n        if (type === \"Material\") {\r\n          gstTax += (gst.Rate / 100) * subtotal;\r\n          // pstTax += (pst.Rate / 100) * subtotal;\r\n        } else {\r\n          gstTax += (gst.Rate / 100) * subtotal;\r\n        }\r\n      });\r\n    }\r\n\r\n    gstTax = gstTax.toFixed(2);\r\n    // pstTax = pstTax.toFixed(2);\r\n\r\n    // setEstimatePST(pstTax);\r\n    setEstimateGST(gstTax);\r\n\r\n    const grandTotal = Number(gstTax) + Number(subtotal.toFixed(2));\r\n    setProjectGrandTotal(grandTotal);\r\n    setDeposit(grandTotal * 0.1);\r\n  };\r\n\r\n  const UpdateUIBasedOnStatus = async (quoteobj) => {\r\n    const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n    if (userInfo.Role === UserRole.Manager) {\r\n      if (quoteobj.QuoteStatus === QuoteStatus.RevisionRequested) {\r\n        setRevisionDeclineDisplay(\"block\");\r\n        setRevisionAcceptDisplay(\"block\");\r\n      }\r\n      setCloneProposalButtonDisplay(\"block\");\r\n    } else if (userInfo.Role === UserRole.Estimator) {\r\n      setCloneProposalButtonDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const ChangeUIToMakeRevisions = async () => {\r\n    setHeaderInputShown(3);\r\n    setMakeRevisionsButtonDisplay(\"none\");\r\n    setDiscardButtonDisplay(\"block\");\r\n    setSaveRevisionsButtonDisplay(\"block\");\r\n  };\r\n\r\n  const UpdateQuoteItemQuantity = async (itemid, itemquantity) => {\r\n    var reverseQuantity = await ReverseQuant_QuoteItem(itemid, itemquantity);\r\n    Quote.Material.Items.find(function (o, i) {\r\n      if (o.Id === itemid) {\r\n        o.Quant = itemquantity;\r\n        o.Price = reverseQuantity * o.UnitPrice;\r\n        setSupplyTotalOpacity(\"40%\");\r\n        setInstallTotalOpacity(\"40%\");\r\n      }\r\n      return null;\r\n    });\r\n    //Change Delete State to force a rerender in React\r\n    setDeleteState(!deleteState);\r\n  };\r\n\r\n  const ValidateAgreement = async (supplyonly, caseid, quoteid) => {\r\n    // if (supplyonly === true) {\r\n    // var databuy = await SetQuoteTo_Buy(quoteid);\r\n    // if (databuy !== null) {\r\n    // PushToPayment(deposit.toFixed(2), caseid, quoteid);\r\n    // } else setErrorAgreementText(\"Please try again!\");\r\n    // } else {\r\n    // var databuyinstall = await SetQuoteTo_Buy_Install(quoteid);\r\n    // if (databuyinstall !== null) {\r\n    var depositSelect =\r\n      deposit < Stored_Values.MIN_DEPOSIT ? Stored_Values.MIN_DEPOSIT : deposit;\r\n    PushToPayment(depositSelect.toFixed(2), caseid, quoteid);\r\n    // } else setErrorAgreementText(\"Please try again!\");\r\n    // }\r\n  };\r\n\r\n  const PushToPayment = async (amount, caseid, quoteid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data !== null) {\r\n      if (data.Case !== null) {\r\n        var token = axios.defaults.headers.common[\"Authorization\"];\r\n        if (token) {\r\n          var tokenRef = token.substring(6);\r\n        } else {\r\n          tokenRef = \"am9zaHRlc3QxMDU6QWExMjM0NTY3OCQ=\";\r\n        }\r\n        var name =\r\n          data.Case.Name +\r\n          \", \" +\r\n          data.Case.Street +\r\n          \",\" +\r\n          data.Case.City +\r\n          \" on Project # \" +\r\n          data.Case.CaseNumber;\r\n        var transactionid = data.Case.CaseNumber;\r\n        var paymenturl = await MakeStripePay(\r\n          amount,\r\n          \"CAD\",\r\n          name,\r\n          transactionid,\r\n          quoteid,\r\n          data.Case.Store_Id,\r\n          tokenRef,\r\n          0\r\n        );\r\n        if (paymenturl !== null) {\r\n          window.open(paymenturl, \"_blank\");\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const SetCurrentTime = async () => {\r\n    var curtime = await GetCurrentTime();\r\n    setCurTime(curtime);\r\n  };\r\n\r\n  const ref = React.createRef();\r\n  const ref2 = React.createRef();\r\n  const options = {\r\n    orientation: \"portrait\",\r\n    unit: \"in\",\r\n    format: [12, 40],\r\n  };\r\n\r\n  var userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n  const SetQuoteDisplay = async (quote) => {\r\n    if (!quote) return;\r\n\r\n    const { Role } = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n    if (\r\n      Role === UserRole.Installer ||\r\n      Role === UserRole.Manager ||\r\n      Role === UserRole.Estimator\r\n    ) {\r\n      setLaborDetailView(\"block\");\r\n    }\r\n\r\n    if (\r\n      Role === UserRole.Manager ||\r\n      Role === UserRole.Estimator ||\r\n      Role === UserRole.Accountant\r\n    ) {\r\n      setShowGenerateInvoice(\"block\");\r\n      setShowLabourBreakdown(\"flex\");\r\n    }\r\n\r\n    if (\r\n      quote.Material?.Items.some(\r\n        (item) => item.Parent_Id === 0 && item.Tag_Id === 0\r\n      )\r\n    )\r\n      setGeneralMaterialsHeader(\"flex\");\r\n\r\n    if (quote.Delivery?.Tools?.length > 0) setDeliveryHeader(\"flex\");\r\n\r\n    if (quote.Tool?.Tools?.length > 0) setToolsMachinesHeader(\"flex\");\r\n\r\n    if (quote.Removal?.Items?.length > 0) setRemovalHeader(\"flex\");\r\n\r\n    if (quote.AccessArea?.Items?.length > 0) setAccessDisplay(\"flex\");\r\n  };\r\n\r\n  const RouteToPrevious = async (role) => {\r\n    if (role == UserRole.User || role == UserRole.VIP) {\r\n      history.push(\r\n        \"/viewcaseuser/\" +\r\n          params.Id +\r\n          \"/\" +\r\n          params.storeId +\r\n          \"/\" +\r\n          params.caseId\r\n      );\r\n    } else if (params.lastrevision == 0) {\r\n      history.push(\r\n        \"/viewcase/\" + params.Id + \"/\" + params.storeId + \"/\" + params.caseId\r\n      );\r\n    } else {\r\n      history.push(\r\n        \"/viewcaseuser/\" +\r\n          params.Id +\r\n          \"/\" +\r\n          params.storeId +\r\n          \"/\" +\r\n          params.caseId\r\n      );\r\n    }\r\n  };\r\n\r\n  //Project Comment Files\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n\r\n  const inputFile = useRef(null);\r\n\r\n  const [totalRemovalsByItem, setTotalRemovalsByItem] = useState({});\r\n\r\n  function computeRemovalsTotal(removalsArray, labourArray) {\r\n    const totalRemovalsByItem = {};\r\n    const assignedLabours = new Set();\r\n\r\n    removalsArray.forEach((removal, removalIndex) => {\r\n      let totalRemovals = 0;\r\n\r\n      labourArray.forEach((labour) => {\r\n        if (assignedLabours.has(labour.Id)) return; // Skip already assigned labours\r\n\r\n        const removalMatch = removalsArray.reduce((closest, r) => {\r\n          if (\r\n            labour.Notes.includes(\"Removals\") &&\r\n            labour.Notes.split(\"-\").some((part) => r.Name.includes(part.trim()))\r\n          ) {\r\n            const currentDiff = Math.abs(\r\n              r.Price + r.LaborSubtotal - labour.Price\r\n            );\r\n            const closestDiff = closest\r\n              ? Math.abs(closest.Price + closest.LaborSubtotal - labour.Price)\r\n              : Infinity;\r\n\r\n            return currentDiff < closestDiff ? r : closest;\r\n          }\r\n          return closest;\r\n        }, null);\r\n\r\n        if (\r\n          removalMatch &&\r\n          (removalMatch.Id === removal.Id ||\r\n            removalMatch.Parent_Id === removal.Id)\r\n        ) {\r\n          totalRemovals += labour.Quant;\r\n          assignedLabours.add(labour.Id); // Mark the labour as assigned\r\n        }\r\n      });\r\n\r\n      totalRemovalsByItem[`${removal.Name}_${removalIndex}`] = totalRemovals;\r\n    });\r\n\r\n    setTotalRemovalsByItem(totalRemovalsByItem);\r\n  }\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetProposalInformation(params.quoteId);\r\n    GetProjectInformation(params.caseId);\r\n    DisplayDepositButton();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    let header7Subtotal = 0;\r\n    let header8Subtotal = 0;\r\n\r\n    Quote?.Removal?.Items.forEach((o) => {\r\n      header7Subtotal += o.Price + o.LaborSubtotal;\r\n      header8Subtotal += o.Price + o.LaborSubtotal;\r\n    });\r\n\r\n    setRemovalsHeader8Subtotal(header8Subtotal);\r\n  }, [Quote?.Removal?.Items]);\r\n\r\n  useEffect(() => {\r\n    if (params.numberofquotes === 0) {\r\n      setMakeRevisionsButtonDisplay(\"none\");\r\n      setHideProjectConfirmationDisplay(\"none\");\r\n    }\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    let newUntaggedMaterialSubtotal = 0;\r\n    let newUntaggedInstallSubtotal = 0;\r\n    let newUntaggedTotalSubtotal = 0;\r\n\r\n    Quote?.Material?.Items.forEach((o) => {\r\n      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n        const materialSub = o.SubtotalWithRelatedItems;\r\n        const installSub = o.LaborSubtotalWithRelatedItems;\r\n\r\n        newUntaggedMaterialSubtotal += materialSub;\r\n        newUntaggedInstallSubtotal += installSub;\r\n        newUntaggedTotalSubtotal += materialSub + installSub;\r\n      }\r\n    });\r\n\r\n    setUntaggedMaterialSubtotal(newUntaggedMaterialSubtotal);\r\n    setUntaggedInstallSubtotal(newUntaggedInstallSubtotal);\r\n    setUntaggedTotalSubtotal(newUntaggedTotalSubtotal);\r\n  }, [Quote?.Material?.Items]);\r\n\r\n  useEffect(() => {\r\n    SetCurrentTime();\r\n    SetQuoteDisplay(Quote);\r\n  }, [Quote]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  var observe;\r\n  if (window.attachEvent) {\r\n    observe = function (element, event, handler) {\r\n      element?.attachEvent(\"on\" + event, handler);\r\n    };\r\n  } else {\r\n    observe = function (element, event, handler) {\r\n      element?.addEventListener(event, handler, false);\r\n    };\r\n  }\r\n  function init() {\r\n    var text = document.getElementById(\"text\");\r\n    if (text !== null) {\r\n      function resize() {\r\n        text.style.height = \"auto\";\r\n        text.style.height = text.scrollHeight + \"px\";\r\n      }\r\n      /* 0-timeout to get the already changed text */\r\n      function delayedResize() {\r\n        window.setTimeout(resize, 0);\r\n      }\r\n      observe(text, \"change\", resize);\r\n      observe(text, \"cut\", delayedResize);\r\n      observe(text, \"paste\", delayedResize);\r\n      observe(text, \"drop\", delayedResize);\r\n      observe(text, \"keydown\", delayedResize);\r\n\r\n      resize();\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    init();\r\n  }, [Quote.Notes]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const [deliveryDisplayStatus, setDeliveryDisplayStatus] = useState(false);\r\n  const [removalDisplayStatus, setRemovalDisplayStatus] = useState(false);\r\n\r\n  const RemovalItemsNoTag =\r\n    Quote?.Removal?.Items?.filter(\r\n      (removalItem) => removalItem.Tag_Id === 0\r\n    ).map((item) => {\r\n      const originalRemovalIndex = Quote.Removal.Items.findIndex(\r\n        (removal) => removal.Id === item.Id\r\n      );\r\n      return {\r\n        ...item,\r\n      };\r\n    }) || []; // Default to an empty array if undefined\r\n\r\n  const totalRemovalCost = RemovalItemsNoTag.reduce(\r\n    (sum, item) => sum + item.Price + item.LaborSubtotal,\r\n    0\r\n  );\r\n  const totalRemovalQuantity = RemovalItemsNoTag.reduce(\r\n    (sum, item) => sum + item.Quant,\r\n    0\r\n  );\r\n\r\n  // let totalAggregatedDeliveryCost = 0;\r\n\r\n  // Quote?.Material?.Items.forEach(o => {\r\n  //   if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n  //     // Check deliveries for the untagged item itself\r\n  //     Quote.Delivery.Tools.forEach(tool => {\r\n  //       if (o.Id === tool.Item_Id) {\r\n  //         totalAggregatedDeliveryCost += tool.Price;\r\n  //       }\r\n  //     });\r\n\r\n  //     // Check deliveries for the related items of the untagged item\r\n\r\n  //   }\r\n  //   if (o.RelatedItems) {\r\n  //     o.RelatedItems.forEach(relatedItem => {\r\n  //       Quote.Delivery.Tools.forEach(tool => {\r\n  //         if (relatedItem.Id === tool.Item_Id) {\r\n  //           totalAggregatedDeliveryCost += tool.Price;\r\n  //         }\r\n  //       });\r\n  //     });\r\n  //   }\r\n  // });\r\n\r\n  let totalAggregatedDeliveryCost = 0;\r\n\r\n  Quote?.Material?.Items.forEach((o) => {\r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      // Check deliveries for the untagged item itself\r\n      Quote.Delivery.Tools.forEach((tool) => {\r\n        if (o.Id === tool.Item_Id) {\r\n          totalAggregatedDeliveryCost += tool.Price;\r\n        }\r\n      });\r\n\r\n      // Check deliveries for the related items of the untagged item\r\n      if (o.RelatedItems && o.RelatedItems.length > 0) {\r\n        addRelatedItemsDeliveryCost(o.RelatedItems, Quote.Delivery.Tools);\r\n      }\r\n    }\r\n\r\n    // For items that aren't untagged but have related items\r\n    if (o.RelatedItems && o.Parent_Id !== 0) {\r\n      addRelatedItemsDeliveryCost(o.RelatedItems, Quote.Delivery.Tools);\r\n    }\r\n  });\r\n\r\n  function addRelatedItemsDeliveryCost(relatedItems, tools) {\r\n    relatedItems.forEach((relatedItem) => {\r\n      tools.forEach((tool) => {\r\n        if (relatedItem.Id === tool.Item_Id) {\r\n          totalAggregatedDeliveryCost += tool.Price;\r\n        }\r\n      });\r\n\r\n      // Check for sub-related items\r\n      if (relatedItem.RelatedItems && relatedItem.RelatedItems.length > 0) {\r\n        addRelatedItemsDeliveryCost(relatedItem.RelatedItems, tools);\r\n      }\r\n    });\r\n  }\r\n\r\n  console.log(\"Total Aggregated Delivery Cost:\", totalAggregatedDeliveryCost);\r\n\r\n  let DeliveryItemsNoTag = [];\r\n\r\n  Quote?.Material?.Items.forEach((o) => {\r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      Quote.Delivery.Tools.forEach((tool) => {\r\n        if (o.Id === tool.Item_Id) {\r\n          DeliveryItemsNoTag.push(tool);\r\n        }\r\n      });\r\n    }\r\n    if (o.RelatedItems && o.RelatedItems.length > 0) {\r\n      o.RelatedItems.forEach((relatedItem) => {\r\n        Quote.Delivery.Tools.forEach((tool) => {\r\n          if (relatedItem.Id === tool.Item_Id) {\r\n            DeliveryItemsNoTag.push(tool);\r\n          }\r\n        });\r\n      });\r\n    }\r\n  });\r\n\r\n  // function convertHoursToTimeString(businessHours) {\r\n  //   const HOURS_IN_DAY = 8; // Business hours in a day\r\n  //   const DAYS_IN_WEEK = 5; // Business days in a week\r\n  //   const HOURS_IN_WEEK = HOURS_IN_DAY * DAYS_IN_WEEK; // Business hours in a week\r\n\r\n  //   if (businessHours < HOURS_IN_DAY) {\r\n  //     return \"1 day\";\r\n  //   } else if (businessHours < HOURS_IN_DAY * 4) {\r\n  //     let days = Math.floor(businessHours / HOURS_IN_DAY);\r\n  //     return `${days}-${days + 1} days`;\r\n  //   } else if (businessHours <= HOURS_IN_WEEK) {\r\n  //     return \"1-2 weeks\";\r\n  //   } else {\r\n  //     let weeks = Math.floor(businessHours / HOURS_IN_WEEK);\r\n  //     let remainingHours = businessHours % HOURS_IN_WEEK;\r\n\r\n  //     let lowerWeekBound = weeks;\r\n  //     let upperWeekBound = weeks + 1;\r\n\r\n  //     if (remainingHours > 0 && remainingHours <= HOURS_IN_DAY * 4) {\r\n  //       upperWeekBound = weeks + 1; // Changed this line to ensure no more than a 1-week range\r\n  //     }\r\n\r\n  //     if (weeks < 5) {\r\n  //       return `${lowerWeekBound}-${upperWeekBound} weeks`;\r\n  //     } else {\r\n  //       let lowerMonthBound = Math.floor(weeks / 4); // Approximating 4 weeks per month\r\n  //       let upperMonthBound = lowerMonthBound + 1;\r\n  //       return `${lowerMonthBound}-${upperMonthBound} months`;\r\n  //     }\r\n  //   }\r\n  // }\r\n\r\n  function convertHoursToTimeString(businessHours) {\r\n    const HOURS_IN_DAY = 8; // Business hours in a day\r\n\r\n    if (businessHours < HOURS_IN_DAY) {\r\n      return \"Less than 1 Business Day\";\r\n    } else {\r\n      // Calculate the lower and upper bounds for business days\r\n      let lowerDayBound = Math.floor(businessHours / HOURS_IN_DAY);\r\n      let upperDayBound = Math.ceil(businessHours / HOURS_IN_DAY);\r\n\r\n      // If the upper and lower bounds are the same, it means it's exactly that many days\r\n      if (lowerDayBound === upperDayBound) {\r\n        return `${lowerDayBound} Business Day(s)`;\r\n      } else {\r\n        // Provide a range of days\r\n        return `${lowerDayBound}-${upperDayBound} Business Days`;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (Quote !== null && Quote !== undefined) {\r\n    if (Quote.Material !== null && Quote.Material !== undefined) {\r\n      if (window.$ISMOBILE === true) {\r\n        return (\r\n          <Cont>\r\n            <LeftCont>\r\n              <Menu> </Menu>\r\n            </LeftCont>\r\n            <FlexColumn81vwLightGrey>\r\n              <TopMentProposalView\r\n                mobilePageProp={estimateName}\r\n                pageProp={projectName}\r\n                estimateName={estimateName}\r\n                homeownerName={homeownerName}\r\n                projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n                scrollinfo={() => {\r\n                  scrollToOverview.scrollIntoView();\r\n                }}\r\n                scrollsupply={() => {\r\n                  scrollToSupply.scrollIntoView();\r\n                }}\r\n                scrollinstall={() => {\r\n                  scrollToInstall.scrollIntoView();\r\n                }}\r\n                scrolldesigns={() => {\r\n                  scrollToDesigns.scrollIntoView();\r\n                }}\r\n                scrollcomments={() => {\r\n                  scrollToComments.scrollIntoView();\r\n                }}\r\n                scrollconfirmation={() => {\r\n                  scrollToConfirm.scrollIntoView();\r\n                }}\r\n              ></TopMentProposalView>\r\n\r\n              <FlexRowContFlexStartMobileColumn\r\n                height=\"auto\"\r\n                display={\r\n                  Quote.QuoteStatus === QuoteStatus.RevisionRequested\r\n                    ? \"none\"\r\n                    : \"flex\"\r\n                }\r\n              ></FlexRowContFlexStartMobileColumn>\r\n\r\n              {/* Proposal Overview --------------------------------------------------------------- */}\r\n              <RevisionInstructionsWindow\r\n                open={revisionInstructionDisplay}\r\n                CloseWindow={() => {\r\n                  setRevisionInstructionDisplay(false);\r\n                }}\r\n                StartRevising={() => {\r\n                  ChangeUIToMakeRevisions();\r\n                  setRevisionInstructionDisplay(false);\r\n                }}\r\n              ></RevisionInstructionsWindow>\r\n\r\n              <DuplicateProposalWindow\r\n                quoteObj={Quote}\r\n                onClose={() => {\r\n                  setCloneProposalWindowDisplay(false);\r\n                }}\r\n                open={cloneProposalWindowDisplay}\r\n              ></DuplicateProposalWindow>\r\n              <ImageViewWindow\r\n                open={imageGalleryDisplay}\r\n                imgurl={imagePreviewUrl}\r\n                onClose={() => {\r\n                  setImageGalleryDisplay(false);\r\n                  document.body.style.overflow = \"unset\";\r\n                }}\r\n              ></ImageViewWindow>\r\n\r\n              <ContentCont77vw height=\"auto\" width=\"75vw\">\r\n                <FlexColumnFullWidthMargins>\r\n                  <br></br>\r\n                  <FlexRowContFlexStart height=\"auto\">\r\n                    <LeagueSpartanLarge>Estimate Details</LeagueSpartanLarge>\r\n\r\n                    {userinfo.Role !== UserRole.Manager &&\r\n                    Role !== UserRole.Estimator ? null : (\r\n                      <Dropdown currentPage={\"homeownerView\"} />\r\n                    )}\r\n                  </FlexRowContFlexStart>\r\n                  <br></br>\r\n                  <TextAreaAutoResizeNoBorder\r\n                    id=\"text\"\r\n                    value={Quote.Notes}\r\n                  ></TextAreaAutoResizeNoBorder>\r\n                </FlexColumnFullWidthMargins>\r\n              </ContentCont77vw>\r\n\r\n              <ContentCont44Percent height=\"auto\" justifycontent=\"space-around\">\r\n                <FlexColumnFullWidthMargins height=\"100%\">\r\n                  <br></br>\r\n                  <FlexRowContFlexStart height=\"auto\">\r\n                    <LeagueSpartanLarge>Summary</LeagueSpartanLarge>\r\n                  </FlexRowContFlexStart>\r\n                  <br></br>\r\n                  <SummaryContainer height=\"100%\" justifycontent=\"space-around\">\r\n                    {/* <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    > */}\r\n                    {/* <LeagueSpartanHeaderSmall>Material Supply</LeagueSpartanHeaderSmall> */}\r\n                    {/* </SummaryContainerItems> */}\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Materials:</MediumHeader>\r\n                      <MediumHeader>\r\n                        {\" \"}\r\n                        $\r\n                        {Quote?.Material?.Total?.Subtotal?.toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Delivery?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Delivery:</MediumHeader>\r\n                      <MediumHeader>\r\n                        {\" \"}\r\n                        $\r\n                        {Quote?.Delivery?.Total?.Subtotal?.toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    {/* <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    > */}\r\n                    {/* <LeagueSpartanHeaderSmall>Installation</LeagueSpartanHeaderSmall> */}\r\n                    {/* </SummaryContainerItems> */}\r\n\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Number(projectInstallSubtotal).toFixed(2) >\r\n                        Stored_Values.MIN_LABOR\r\n                          ? \"flex\"\r\n                          : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Labour:</MediumHeader>\r\n                      <MediumHeader>\r\n                        $\r\n                        {Number(\r\n                          projectInstallSubtotal + removalsHeader8Subtotal\r\n                        )\r\n                          .toFixed(2)\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Number(projectInstallSubtotal).toFixed(2) >\r\n                        Stored_Values.MIN_LABOR\r\n                          ? \"none\"\r\n                          : \"flex\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Minimum Labour Fee:</MediumHeader>\r\n                      <MediumHeader>\r\n                        ${Stored_Values?.MIN_LABOR?.toFixed(2)}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems>\r\n                      <MediumHeader>\r\n                        Machines, Disposals, Site Access\r\n                      </MediumHeader>\r\n\r\n                      <MediumHeader>\r\n                        ${\" \"}\r\n                        {(\r\n                          parseFloat(\r\n                            Quote?.Tool?.Total?.Subtotal?.toFixed(2).replace(\r\n                              /,/g,\r\n                              \"\"\r\n                            )\r\n                          ) +\r\n                          parseFloat(\r\n                            Quote?.AccessArea?.Total?.Subtotal?.toFixed(\r\n                              2\r\n                            ).replace(/,/g, \"\")\r\n                          )\r\n                        )\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    {/* <SummaryContainerItems\r\n                      display={\r\n                        'flex'\r\n                      }\r\n                    >\r\n                      <MediumHeader>Removals:</MediumHeader>\r\n                      <MediumHeader>\r\n                        ${\" \"}\r\n                        {((removalsHeader8Subtotal))\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n\r\n                    <StyledHRPropColour\r\n                      border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                    ></StyledHRPropColour>\r\n                    <SummaryContainerItems>\r\n                      <LeagueSpartanHeaderSmall>\r\n                        Project Subtotal:\r\n                      </LeagueSpartanHeaderSmall>\r\n                      <MediumHeader>\r\n                        $\r\n                        {\r\n                          projectSubtotal\r\n                          // .toFixed(2)\r\n                          // .toString()\r\n                          // .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    <SummaryContainerItems>\r\n                      <MediumHeader>\r\n                        {storeTaxes[0]?.TaxCode} ({storeTaxes[0]?.Rate}%)\r\n                      </MediumHeader>\r\n                      <MediumHeader>\r\n                        $\r\n                        {estimateGST\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    {/* <SummaryContainerItems>\r\n                  <MediumHeader>\r\n                      {storeTaxes[1]?.TaxCode} ({storeTaxes[1]?.Rate}%)\r\n                    </MediumHeader>\r\n                    <MediumHeader>\r\n                      ${estimatePST.toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                    </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n\r\n                    <StyledHRGreenBreak></StyledHRGreenBreak>\r\n                    <SummaryContainerItems>\r\n                      <LeagueSpartanRegular>\r\n                        Project Total:\r\n                      </LeagueSpartanRegular>\r\n                      <LeagueSpartanRegular>\r\n                        {\" \"}\r\n                        $\r\n                        {projectGrandTotal\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </LeagueSpartanRegular>\r\n                    </SummaryContainerItems>\r\n                    <FlexColumnContCenterAlign>\r\n                      <RegularResponsiveButton\r\n                        fontsize=\"14px\"\r\n                        lineheight=\"30px\"\r\n                        width=\"95%\"\r\n                        height=\"30px\"\r\n                        display={showDepositButton}\r\n                        onClick={() => {\r\n                          ValidateAgreement(\r\n                            supplyOnlySelected,\r\n                            params.caseId,\r\n                            params.quoteId\r\n                          );\r\n                        }}\r\n                      >\r\n                        Pay Deposit $\r\n                        {deposit < Stored_Values.MIN_DEPOSIT\r\n                          ? Stored_Values.MIN_DEPOSIT.toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          : deposit\r\n                              .toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}{\" \"}\r\n                      </RegularResponsiveButton>\r\n                      {/* <RegularResponsiveButton\r\n                        display={\r\n                          userinfo.Role === UserRole.Manager ? \"block\" : \"none\"\r\n                        }\r\n                        onClick={() => {\r\n                          history.push(\r\n                            `/quoteappointment/${params.Id}/${params.storeId}/${params.quoteId}`\r\n                          );\r\n                        }}\r\n                      >\r\n                        Make Appointment\r\n                      </RegularResponsiveButton> */}\r\n                      <TinyTextItalics color={ColorPalette.DarkGrey}>\r\n                        Project deposit is non-refundable. By paying the\r\n                        deposit, you have agreed that you have read and\r\n                        understood our{\" \"}\r\n                        <span>\r\n                          {\" \"}\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href=\"https://newrhodesconstruction.com/rl-terms-of-service/\"\r\n                            target=\"_blank\"\r\n                          >\r\n                            {\" \"}\r\n                            Terms of Service{\" \"}\r\n                          </a>{\" \"}\r\n                        </span>{\" \"}\r\n                      </TinyTextItalics>\r\n                    </FlexColumnContCenterAlign>\r\n                  </SummaryContainer>\r\n                </FlexColumnFullWidthMargins>\r\n              </ContentCont44Percent>\r\n\r\n              <ContentCont77vw\r\n                display={Quote.Photos.length > 0 ? \"block\" : \"none\"}\r\n              >\r\n                <FlexColumnFullWidth>\r\n                  <FlexRowContFlexStart>\r\n                    <LeagueSpartanLarge>Construction Plans</LeagueSpartanLarge>\r\n                  </FlexRowContFlexStart>\r\n\r\n                  <br></br>\r\n                  <GridContainer3Wide>\r\n                    {Quote.Photos.map((o, i) => {\r\n                      return o.File?.includes(\".pdf\") ||\r\n                        o.File?.includes(\".PDF\") ? (\r\n                        <FlexContainerPhotos key={i}>\r\n                          <a\r\n                            id={i}\r\n                            rel=\"noreferrer\"\r\n                            href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                            target={\"_blank\"}\r\n                            style={{ textDecoration: \"none\", color: \"black\" }}\r\n                          >\r\n                            <embed\r\n                              target={\"_blank\"}\r\n                              src={\"/pdficon.png\"}\r\n                              width={\"150px\"}\r\n                              style={{ backgroundColor: \"white\" }}\r\n                              height={\"200px\"}\r\n                            ></embed>\r\n                            <FlexContFullWidthHeightJustifyCenter>\r\n                              <LargeText>{o.Caption}</LargeText>\r\n                            </FlexContFullWidthHeightJustifyCenter>\r\n                          </a>\r\n                        </FlexContainerPhotos>\r\n                      ) : (\r\n                        <FlexContainerPhotos key={i}>\r\n                          <Image375px\r\n                            onClick={() => {\r\n                              DisplayImageInGallery(o.File);\r\n                            }}\r\n                            src={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                          ></Image375px>\r\n                          <FlexContFullWidthHeightJustifyCenter>\r\n                            <LargeText>{o.Caption}</LargeText>\r\n                          </FlexContFullWidthHeightJustifyCenter>\r\n                        </FlexContainerPhotos>\r\n                      );\r\n                    })}\r\n                  </GridContainer3Wide>\r\n                </FlexColumnFullWidth>\r\n              </ContentCont77vw>\r\n\r\n              <FlexRowContAutox100PercentMobileColumn\r\n                alignitems=\"baseline\"\r\n                margin=\"0\"\r\n              >\r\n                <ContentContQuote id=\"install\">\r\n                  <FlexColumnFullWidth>\r\n                    <FlexRowCont100PercentSpaceBetween mobileflexdirection=\"column\">\r\n                      <FlexColumnFullWidth mobilewidth=\"90vw\">\r\n                        <FlexRowContFlexStart>\r\n                          <LeagueSpartanLarge>\r\n                            Project Estimate\r\n                          </LeagueSpartanLarge>\r\n                        </FlexRowContFlexStart>\r\n                      </FlexColumnFullWidth>\r\n                    </FlexRowCont100PercentSpaceBetween>\r\n                  </FlexColumnFullWidth>\r\n\r\n                  <FlexColumnFullWidth\r\n                    display={installEstimateDisplay}\r\n                    height=\"auto\"\r\n                    ref={ref2}\r\n                  >\r\n                    <AutoSizeOverflowY>\r\n                      <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n\r\n                      {Quote.Tags.map(\r\n                        (t, j) => (\r\n                          (MaterialSum = 0),\r\n                          (InstallSum = 0),\r\n                          (TotalSum = 0),\r\n                          (\r\n                            <div>\r\n                              <div>\r\n                                <br></br>\r\n\r\n                                <FlexRowCont100PercentSpaceBetween>\r\n                                  <LeagueSpartanRegular>\r\n                                    {t.TagName}\r\n                                  </LeagueSpartanRegular>\r\n                                </FlexRowCont100PercentSpaceBetween>\r\n\r\n                                <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n\r\n                                {Quote.Material.Items.filter(\r\n                                  (item) =>\r\n                                    item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                                ).map((o, i) => (\r\n                                  <MobileQuoteItem\r\n                                    noChange={o.NoChange}\r\n                                    key={i}\r\n                                    inputheaderposition={headerInputShown}\r\n                                    OutputValue={(value) => {\r\n                                      UpdateQuoteItemQuantity(o.Id, value);\r\n                                    }}\r\n                                    quoteItemObj={o}\r\n                                    parentid={o.Parent_Id}\r\n                                    header1=\"Delete\"\r\n                                    header2={o.Name}\r\n                                    subheader2notes={\r\n                                      o.Notes == null ? \"\" : o.Notes + \"\"\r\n                                    }\r\n                                    subheader2={\r\n                                      o.Description === null\r\n                                        ? \"\"\r\n                                        : o.Description\r\n                                    }\r\n                                    header3={\r\n                                      o.Quant.toFixed(2).replace(\r\n                                        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                        \",\"\r\n                                      ) +\r\n                                      \" \" +\r\n                                      o.DisplayUnit\r\n                                    }\r\n                                    header4={\r\n                                      \"$\" +\r\n                                      o.UnitPrice.toFixed(2).replace(\r\n                                        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                        \",\"\r\n                                      )\r\n                                    }\r\n                                    header5={\r\n                                      \"$\" +\r\n                                      o.Price.toFixed(2).replace(\r\n                                        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                        \",\"\r\n                                      )\r\n                                    }\r\n                                    header6={\r\n                                      \"$\" +\r\n                                      (o.LaborSubtotal / o.Quant).toFixed(4)\r\n                                    }\r\n                                    header7={\r\n                                      \"$\" +\r\n                                      o.LaborSubtotal.toFixed(2).replace(\r\n                                        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                        \",\"\r\n                                      )\r\n                                    }\r\n                                    header8={\r\n                                      \"$\" +\r\n                                      (\r\n                                        parseFloat(o.Price.toFixed(2)) +\r\n                                        parseFloat(o.LaborSubtotal.toFixed(2))\r\n                                      )\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                    }\r\n                                    header3title=\"Quantity\"\r\n                                    header4title=\"Unit Rate\"\r\n                                    header5title=\"Material Subtotal\"\r\n                                    header6title=\"Install Rate\"\r\n                                    header7title=\"Install Subtotal\"\r\n                                  ></MobileQuoteItem>\r\n                                ))}\r\n                              </div>\r\n                            </div>\r\n                          )\r\n                        )\r\n                      )}\r\n\r\n                      <div>\r\n                        <br></br>\r\n\r\n                        <FlexRowCont100PercentSpaceBetween>\r\n                          <LeagueSpartanRegular\r\n                            display={generalMaterialsHeader}\r\n                          >\r\n                            General Materials\r\n                          </LeagueSpartanRegular>\r\n                        </FlexRowCont100PercentSpaceBetween>\r\n\r\n                        <StyledHRGreenBreakThick\r\n                          display={generalMaterialsHeader}\r\n                        ></StyledHRGreenBreakThick>\r\n\r\n                        {Quote.Material.Items.map((o, i) => {\r\n                          return o.Parent_Id === 0 && o.Tag_Id === 0 ? (\r\n                            <MobileQuoteItem\r\n                              key={i}\r\n                              quoteItemObj={o}\r\n                              inputheaderposition={headerInputShown}\r\n                              OutputValue={(value) => {\r\n                                UpdateQuoteItemQuantity(o.Id, value);\r\n                              }}\r\n                              noChange={o.NoChange}\r\n                              parentid={o.Parent_Id}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2={\r\n                                o.Description === null ? \"\" : o.Description\r\n                              }\r\n                              subheader2notes={\r\n                                o.Notes == null ? \"\" : o.Notes + \"\"\r\n                              }\r\n                              header3={o.Quant.toFixed(2) + \" \" + o.DisplayUnit}\r\n                              header4={\r\n                                \"$\" +\r\n                                o.UnitPrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header5={\r\n                                \"$\" +\r\n                                o.Price.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header6={\r\n                                \"$\" + (o.LaborSubtotal / o.Quant).toFixed(4)\r\n                              }\r\n                              header7={\r\n                                \"$\" +\r\n                                o.LaborSubtotal.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header8={\r\n                                \"$\" +\r\n                                (\r\n                                  parseFloat(o.Price.toFixed(2)) +\r\n                                  parseFloat(o.LaborSubtotal.toFixed(2))\r\n                                )\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              }\r\n                              header3title=\"Quantity\"\r\n                              header4title=\"Unit Rate\"\r\n                              header5title=\"Material Subtotal\"\r\n                              header6title=\"Install Rate\"\r\n                              header7title=\"Install Subtotal\"\r\n                            ></MobileQuoteItem>\r\n                          ) : null;\r\n                        })}\r\n                      </div>\r\n\r\n                      <LeagueSpartanRegular display={deliveryHeader}>\r\n                        Delivery\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        display={deliveryHeader}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      {/* {Quote.Delivery.Tools.map((o, i) => ( */}\r\n                      <MobileQuoteItem\r\n                        // key={i}\r\n                        // header1=\" \"\r\n                        header2={\"Delivery Cost\"}\r\n                        header8={\r\n                          \"$\" +\r\n                          deliveryTotal\r\n                            ?.toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      ></MobileQuoteItem>\r\n                      {/* ))} */}\r\n\r\n                      <LeagueSpartanRegular display={removalHeader}>\r\n                        Removals\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        mobiledisplay={removalHeader}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      {Quote.Removal.Items.map((o, i) => (\r\n                        <MobileQuoteItem\r\n                          key={i}\r\n                          header1=\"Delete\"\r\n                          header2={o.Name}\r\n                          subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                          header3={\r\n                            o.Quant.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            ) +\r\n                            \" \" +\r\n                            o.DisplayUnit\r\n                          }\r\n                          header4={\r\n                            \"$\" +\r\n                            ((o.Price + o.LaborSubtotal) / o.Quant)\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          }\r\n                          header5={\r\n                            \"$\" +\r\n                            (o.Price + o.LaborSubtotal)\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          }\r\n                          header8={\r\n                            \"$\" +\r\n                            (o.Price + o.LaborSubtotal)\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          }\r\n                          header3title=\"Quantity\"\r\n                          header4title=\"Removal Rate\"\r\n                          header5title=\"Removal Subtotal\"\r\n                        ></MobileQuoteItem>\r\n                      ))}\r\n\r\n                      {/* <LeagueSpartanRegular display={accessDisplay}>\r\n                        Access Area\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        display={accessDisplay}\r\n                      ></StyledHRGreenBreakThick> */}\r\n\r\n                      {/* {Quote.AccessArea.Items.map((o, i) => ( */}\r\n\r\n                      {/* ))} */}\r\n\r\n                      <LeagueSpartanRegular display={toolsmachinesHeader}>\r\n                        Machines, Disposal, Access\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        mobiledisplay={toolsmachinesHeader}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      {Quote.Tool.Tools.map((o, i) => {\r\n                        return o?.ToolName.includes(\"Wheelbarrow\") ||\r\n                          o?.ToolName.includes(\"Suggested\") ? null : (\r\n                          <MobileQuoteItem\r\n                            key={i}\r\n                            header1=\"Delete\"\r\n                            header2={o.ToolName}\r\n                            subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                            itemLink={o.VideoUrl}\r\n                            header3={\r\n                              // o.RentalLength > 0\r\n                              //   ? o.RentalLength.toFixed(2).replace(\r\n                              //       /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              //       \",\"\r\n                              //     ) + \" hr\"\r\n                              //   :\r\n                              o.Quant.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                            header4={\r\n                              o.RentalRate > 0\r\n                                ? \"$\" +\r\n                                  (o.RentalRate * o.RentalLength)\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                : \"$\" +\r\n                                  o.BasePrice.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                            }\r\n                            header5={\r\n                              o.RentalRate > 0 && o.BasePrice > 0\r\n                                ? \"$\" +\r\n                                  o.BasePrice.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                : \"\"\r\n                            }\r\n                            header8={\r\n                              \"$\" +\r\n                              o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                            header3title=\"Quantity\"\r\n                            header4title=\"Rental Rate\"\r\n                            header5title={\r\n                              o.RentalRate > 0 && o.BasePrice > 0\r\n                                ? \"Move Cost Per Machine\"\r\n                                : \"\"\r\n                            }\r\n                          ></MobileQuoteItem>\r\n                        );\r\n                      })}\r\n                      {accessTotal > 0 ? (\r\n                        <MobileQuoteItem\r\n                          // key={i}\r\n                          // header1=\"Delete\"\r\n                          header2={\"Access Area Cost\"}\r\n                          header8={\r\n                            \"$\" +\r\n                            accessTotal\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          }\r\n                          // subheader2={o.Notes}\r\n                          // header3={\r\n                          //   o.Quant.toFixed(2).replace(\r\n                          //     /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                          //     \",\"\r\n                          //   ) +\r\n                          //   \" \" +\r\n                          //   o.DisplayUnit\r\n                          // }\r\n                          // header4={\r\n                          //   \"$\" +\r\n                          //   o.UnitPrice.toFixed(2).replace(\r\n                          //     /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                          //     \",\"\r\n                          //   ) +\r\n                          //   \"\" +\r\n                          //   o.DisplayUnit\r\n                          // }\r\n                          // header5={\r\n                          //   \"$\" +\r\n                          //   o.Price.toFixed(2).replace(\r\n                          //     /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                          //     \",\"\r\n                          //   )\r\n                          // }\r\n\r\n                          // header3title=\"Quantity\"\r\n                          // header4title=\"Access Rate\"\r\n                          // header5title=\"Access Subtotal\"\r\n                        ></MobileQuoteItem>\r\n                      ) : null}\r\n\r\n                      <LeagueSpartanRegular display={laborDetailToggleView}>\r\n                        Labour Breakdown (Staff Only)\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        mobiledisplay={laborDetailToggleView}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n\r\n                      {laborDetailToggleView === \"flex\"\r\n                        ? Quote.Labor.Items.map((o, i) => (\r\n                            <MobileQuoteItem\r\n                              key={i}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2={o.Notes}\r\n                              header6={\r\n                                o.Quant.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                ) + \" hr\"\r\n                              }\r\n                              header7={\r\n                                \"$\" +\r\n                                o.UnitPrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header8={\r\n                                \"$\" +\r\n                                o.Price.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                            ></MobileQuoteItem>\r\n                          ))\r\n                        : null}\r\n\r\n                      <br></br>\r\n                    </AutoSizeOverflowY>\r\n                  </FlexColumnFullWidth>\r\n                </ContentContQuote>\r\n              </FlexRowContAutox100PercentMobileColumn>\r\n            </FlexColumn81vwLightGrey>\r\n\r\n            <FixedIconToTop\r\n              src=\"/BackToTopArrowAlt.svg\"\r\n              onClick={() => {\r\n                window.scrollTo(0, 0);\r\n              }}\r\n            ></FixedIconToTop>\r\n          </Cont>\r\n        );\r\n      }\r\n      /////////////////////////// MOBILE ->>>>>>>>>>>>>\r\n\r\n      /////////////////////////// DESKTOP ->>>>>>>>>>>>>\r\n\r\n      return (\r\n        <Cont>\r\n          <LeftCont id=\"exclude-from-pdf\">\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <FlexColumn81vwLightGrey\r\n            minheight=\"auto\"\r\n            height=\"fit-content\"\r\n            id=\"estimate\"\r\n          >\r\n            {/* <div id='exclude-from-pdf' style={{height: \"100%\", position: \"relative\"}}> */}\r\n            <TopMentProposalView\r\n              id=\"exclude-from-pdf\"\r\n              quoteObj={Quote}\r\n              mobilePageProp={estimateName}\r\n              pageProp={projectName}\r\n              estimateName={estimateName}\r\n              homeownerName={homeownerName}\r\n              projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n              onBack={() => {\r\n                RouteToPrevious(userinfo.Role);\r\n              }}\r\n              scrollinfo={() => {\r\n                scrollToOverview.scrollIntoView();\r\n              }}\r\n              scrollsupply={() => {\r\n                scrollToSupply.scrollIntoView();\r\n              }}\r\n              scrollinstall={() => {\r\n                scrollToInstall.scrollIntoView();\r\n              }}\r\n              scrolldesigns={() => {\r\n                scrollToDesigns.scrollIntoView();\r\n              }}\r\n              scrollcomments={() => {\r\n                scrollToComments.scrollIntoView();\r\n              }}\r\n              scrollconfirmation={() => {\r\n                scrollToConfirm.scrollIntoView();\r\n              }}\r\n            ></TopMentProposalView>\r\n            {/* </div> */}\r\n            {/* Approval --------------------------------------------------------------- */}\r\n\r\n            <FlexRowContFlexStartMobileColumn\r\n              height=\"auto\"\r\n              display={\r\n                Quote.QuoteStatus === QuoteStatus.RevisionRequested\r\n                  ? \"none\"\r\n                  : \"flex\"\r\n              }\r\n            >\r\n              <FlexRowCont alignitems=\"stretch\" height=\"auto\" width=\"100%\">\r\n                <ContentCont77vw\r\n                  height=\"auto\"\r\n                  width=\"75vw\"\r\n                  id=\"exclude-from-pdf\"\r\n                >\r\n                  <FlexColumnFullWidthMargins>\r\n                    <br></br>\r\n                    <FlexRowContFlexStart height=\"auto\">\r\n                      <LeagueSpartanLarge>Estimate Details</LeagueSpartanLarge>\r\n                    </FlexRowContFlexStart>\r\n\r\n                    <br></br>\r\n                    <TextAreaAutoResizeNoBorder\r\n                      id=\"text\"\r\n                      value={Quote.Notes}\r\n                    ></TextAreaAutoResizeNoBorder>\r\n                  </FlexColumnFullWidthMargins>\r\n                </ContentCont77vw>\r\n                <ContentCont77vw\r\n                  display=\"none\"\r\n                  id=\"include-on-pdf\"\r\n                  width=\"75vw\"\r\n                  height=\"auto\"\r\n                  justifycontent=\"space-between\"\r\n                >\r\n                  <FlexColumnFullWidthMargins\r\n                    height=\"auto\"\r\n                    justifycontent=\"flex-start\"\r\n                  >\r\n                    <Icon200x200 src=\"/NRCLogoRegularBlack.png\"></Icon200x200>\r\n                    <div>\r\n                      <SmallHeader>New Rhodes Construction</SmallHeader>\r\n                      <SmallHeader>\r\n                        12306 McTavish Road Pitt Meadows BC V3Y1Z1\r\n                      </SmallHeader>\r\n                      <SmallHeader>+1 (778-657-5944)</SmallHeader>\r\n                      <SmallHeader>ar@newrhodesconstruction.com</SmallHeader>\r\n                      <SmallHeader>www.newrhodesconstruction.com</SmallHeader>\r\n                      <SmallHeader>\r\n                        GST/HST Registration No. 781153283RT0001\r\n                      </SmallHeader>\r\n                    </div>\r\n                  </FlexColumnFullWidthMargins>\r\n\r\n                  <FlexColumnFullWidthMargins\r\n                    height=\"auto\"\r\n                    justifycontent=\"flex-start\"\r\n                  >\r\n                    <div>\r\n                      <SmallHeader>\r\n                        <b> BILL TO: </b> {Case?.Name}\r\n                      </SmallHeader>\r\n                      <SmallHeader>{Case?.Email}</SmallHeader>\r\n                      <SmallHeader>\r\n                        {Case?.Street} {\", \"}\r\n                        {Case?.City}\r\n                      </SmallHeader>\r\n                      <SmallHeader>{Case?.Phone}</SmallHeader>\r\n                      <SmallHeader>\r\n                        Date: {formatDate(Quote?.EditTime)}\r\n                      </SmallHeader>\r\n                      <br></br>\r\n                      <TinyTextItalics color={ColorPalette.DarkGrey}>\r\n                        Project deposit is non-refundable. By paying the\r\n                        deposit, you have agreed that you have read and\r\n                        understood our{\" \"}\r\n                        <span>\r\n                          {\" \"}\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href=\"https://newrhodesconstruction.com/rl-terms-of-service/\"\r\n                            target=\"_blank\"\r\n                          >\r\n                            {\" \"}\r\n                            Terms of Service{\" \"}\r\n                          </a>{\" \"}\r\n                        </span>{\" \"}\r\n                      </TinyTextItalics>\r\n                    </div>\r\n                  </FlexColumnFullWidthMargins>\r\n                </ContentCont77vw>\r\n                <ContentCont77vw\r\n                  width=\"75vw\"\r\n                  height=\"auto\"\r\n                  justifycontent=\"space-around\"\r\n                >\r\n                  <FlexColumnFullWidthMargins height=\"100%\">\r\n                    <br></br>\r\n                    <FlexRowContFlexStart height=\"auto\">\r\n                      <LeagueSpartanLarge>Summary</LeagueSpartanLarge>\r\n                      <RegularResponsiveButton\r\n                        id=\"exclude-from-pdf\"\r\n                        display={labourBreakdownDisplay}\r\n                        onClick={downloadPDF}\r\n                      >\r\n                        Download PDF\r\n                      </RegularResponsiveButton>\r\n                    </FlexRowContFlexStart>\r\n                    <SummaryContainer\r\n                      height=\"100%\"\r\n                      justifycontent=\"space-around\"\r\n                    >\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        {/* <LeagueSpartanHeaderSmall>Material Supply</LeagueSpartanHeaderSmall> */}\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Materials:</MediumHeader>\r\n                        <MediumHeader>\r\n                          {\" \"}\r\n                          $\r\n                          {Quote?.Material?.Total?.Subtotal?.toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Delivery?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Deliveries:</MediumHeader>\r\n                        <MediumHeader>\r\n                          {\" \"}\r\n                          $\r\n                          {Quote?.Delivery?.Total?.Subtotal?.toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n\r\n                      {/* <br></br> */}\r\n\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Number(projectInstallSubtotal).toFixed(2) >\r\n                          Stored_Values.MIN_LABOR\r\n                            ? \"flex\"\r\n                            : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Labour:</MediumHeader>\r\n                        <MediumHeader key={removalsHeader8Subtotal}>\r\n                          $\r\n                          {Number(\r\n                            projectInstallSubtotal + removalsHeader8Subtotal\r\n                          )\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Number(projectInstallSubtotal).toFixed(2) >\r\n                          Stored_Values.MIN_LABOR\r\n                            ? \"none\"\r\n                            : \"flex\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Minimum Labour Fee:</MediumHeader>\r\n                        <MediumHeader>\r\n                          ${Stored_Values?.MIN_LABOR?.toFixed(2)}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems>\r\n                        <MediumHeader>\r\n                          Machines, Disposals, Site Access\r\n                        </MediumHeader>\r\n\r\n                        <MediumHeader>\r\n                          ${\" \"}\r\n                          {(\r\n                            parseFloat(\r\n                              Quote?.Tool?.Total?.Subtotal?.toFixed(2).replace(\r\n                                /,/g,\r\n                                \"\"\r\n                              )\r\n                            ) +\r\n                            parseFloat(\r\n                              Quote?.AccessArea?.Total?.Subtotal?.toFixed(\r\n                                2\r\n                              ).replace(/,/g, \"\")\r\n                            )\r\n                          )\r\n                            .toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      {/* <SummaryContainerItems\r\n                    >\r\n                      <MediumHeader>Removals:</MediumHeader>\r\n                      <MediumHeader>\r\n                        ${\" \"}\r\n                        {((removalsHeader8Subtotal).toFixed(2))\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n\r\n                      <StyledHRPropColour\r\n                        border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                      ></StyledHRPropColour>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanHeaderSmall>\r\n                          Project Subtotal:\r\n                        </LeagueSpartanHeaderSmall>\r\n                        <MediumHeader>${projectSubtotal}</MediumHeader>\r\n                      </SummaryContainerItems>\r\n\r\n                      <SummaryContainerItems>\r\n                        <MediumHeader>\r\n                          {storeTaxes[0]?.TaxCode} ({storeTaxes[0]?.Rate}%)\r\n                        </MediumHeader>\r\n                        <MediumHeader>\r\n                          $\r\n                          {estimateGST\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      {/* <SummaryContainerItems>\r\n                  <MediumHeader>\r\n                      {storeTaxes[1]?.TaxCode} ({storeTaxes[1]?.Rate}%)\r\n                    </MediumHeader>\r\n                    <MediumHeader>\r\n                      ${estimatePST.toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                    </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n                      <StyledHRGreenBreak></StyledHRGreenBreak>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanRegular>\r\n                          Project Total:\r\n                        </LeagueSpartanRegular>\r\n                        <LeagueSpartanRegular>\r\n                          {\" \"}\r\n                          $\r\n                          {projectGrandTotal\r\n                            .toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </LeagueSpartanRegular>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanRegular>\r\n                          Projected Project Length:\r\n                        </LeagueSpartanRegular>\r\n                        <LeagueSpartanRegular>\r\n                          {convertHoursToTimeString(\r\n                            Quote.Labor.Items.reduce(\r\n                              (total, o) => total + o?.Quant,\r\n                              0\r\n                            )\r\n                          )}\r\n                        </LeagueSpartanRegular>\r\n                      </SummaryContainerItems>\r\n                      <FlexColumnContCenterAlign id=\"exclude-from-pdf\">\r\n                        <RegularResponsiveButton\r\n                          fontsize=\"14px\"\r\n                          lineheight=\"30px\"\r\n                          width=\"95%\"\r\n                          height=\"30px\"\r\n                          display={showDepositButton}\r\n                          ref={buttonRef}\r\n                          onClick={() => {\r\n                            ValidateAgreement(\r\n                              supplyOnlySelected,\r\n                              params.caseId,\r\n                              params.quoteId\r\n                            );\r\n                          }}\r\n                        >\r\n                          Pay Deposit $\r\n                          {deposit < Stored_Values.MIN_DEPOSIT\r\n                            ? Stored_Values.MIN_DEPOSIT.toFixed(2)\r\n                                .toString()\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            : deposit\r\n                                .toFixed(2)\r\n                                .toString()\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}{\" \"}\r\n                        </RegularResponsiveButton>\r\n\r\n                        <TinyTextItalics color={ColorPalette.DarkGrey}>\r\n                          Project deposit is non-refundable. By paying the\r\n                          deposit, you have agreed that you have read and\r\n                          understood our{\" \"}\r\n                          <span>\r\n                            {\" \"}\r\n                            <a\r\n                              rel=\"noreferrer\"\r\n                              href=\"https://newrhodesconstruction.com/rl-terms-of-service/\"\r\n                              target=\"_blank\"\r\n                            >\r\n                              {\" \"}\r\n                              Terms of Service{\" \"}\r\n                            </a>{\" \"}\r\n                          </span>{\" \"}\r\n                        </TinyTextItalics>\r\n                      </FlexColumnContCenterAlign>\r\n                    </SummaryContainer>\r\n                  </FlexColumnFullWidthMargins>\r\n                </ContentCont77vw>\r\n              </FlexRowCont>\r\n            </FlexRowContFlexStartMobileColumn>\r\n\r\n            {/* Proposal Overview --------------------------------------------------------------- */}\r\n            <RevisionInstructionsWindow\r\n              open={revisionInstructionDisplay}\r\n              CloseWindow={() => {\r\n                setRevisionInstructionDisplay(false);\r\n              }}\r\n              StartRevising={() => {\r\n                ChangeUIToMakeRevisions();\r\n                setRevisionInstructionDisplay(false);\r\n              }}\r\n            ></RevisionInstructionsWindow>\r\n\r\n            <ImageViewWindow\r\n              open={imageGalleryDisplay}\r\n              imgurl={imagePreviewUrl}\r\n              onClose={() => {\r\n                setImageGalleryDisplay(false);\r\n                document.body.style.overflow = \"unset\";\r\n              }}\r\n            ></ImageViewWindow>\r\n            <DuplicateProposalWindow\r\n              quoteObj={Quote}\r\n              onClose={() => {\r\n                setCloneProposalWindowDisplay(false);\r\n              }}\r\n              open={cloneProposalWindowDisplay}\r\n            ></DuplicateProposalWindow>\r\n\r\n            <ContentCont77vw\r\n              display={Quote.Photos.length > 0 ? \"block\" : \"none\"}\r\n              id=\"exclude-from-pdf\"\r\n            >\r\n              <FlexColumnFullWidth>\r\n                <FlexRowContFlexStart>\r\n                  <LeagueSpartanLarge>Construction Plans</LeagueSpartanLarge>\r\n                </FlexRowContFlexStart>\r\n\r\n                <br></br>\r\n                <FlexRowCont60PercentSpaceEvenly\r\n                  alignitems=\"baseline\"\r\n                  width=\"100%\"\r\n                  flexwrap=\"wrap\"\r\n                >\r\n                  {Quote.Photos.map((o, i) => {\r\n                    return o.File?.includes(\".pdf\") ||\r\n                      o.File?.includes(\".PDF\") ? (\r\n                      <FlexContainerItem key={i}>\r\n                        <a\r\n                          id={i}\r\n                          rel=\"noreferrer\"\r\n                          href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                          target={\"_blank\"}\r\n                          style={{\r\n                            textDecoration: \"none\",\r\n                            color: \"black\",\r\n                          }}\r\n                        >\r\n                          <embed\r\n                            target={\"_blank\"}\r\n                            href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                            src={\r\n                              o.File !== \"\"\r\n                                ? window.$IMGURL +\r\n                                  o.File +\r\n                                  \"#toolbar=0&navpanes=0&scrollbar=0\"\r\n                                : \"\"\r\n                            }\r\n                            width={\"350px\"}\r\n                            style={{ backgroundColor: \"white\" }}\r\n                            height={\"200px\"}\r\n                          ></embed>\r\n                          <OverrideEmbedDiv>\r\n                            <OverrideEmbedImage></OverrideEmbedImage>\r\n                          </OverrideEmbedDiv>\r\n                          <FlexContFullWidthHeightJustifyCenter>\r\n                            <LargeText>{o.Caption}</LargeText>\r\n                          </FlexContFullWidthHeightJustifyCenter>\r\n                        </a>\r\n                      </FlexContainerItem>\r\n                    ) : (\r\n                      <FlexContainerItem key={i}>\r\n                        <Image375px\r\n                          onClick={() => {\r\n                            DisplayImageInGallery(o.File);\r\n                          }}\r\n                          src={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                        ></Image375px>\r\n                        <FlexContFullWidthHeightJustifyCenter>\r\n                          <LargeText>{o.Caption}</LargeText>\r\n                        </FlexContFullWidthHeightJustifyCenter>\r\n                      </FlexContainerItem>\r\n                    );\r\n                  })}\r\n                </FlexRowCont60PercentSpaceEvenly>\r\n              </FlexColumnFullWidth>\r\n            </ContentCont77vw>\r\n\r\n            <FlexRowContAutox100PercentMobileColumn\r\n              alignitems=\"baseline\"\r\n              margin=\"0\"\r\n            >\r\n              <ContentContQuote id=\"install\">\r\n                <FlexColumnFullWidth>\r\n                  <FlexRowCont100PercentSpaceBetween mobileflexdirection=\"column\">\r\n                    <FlexColumnFullWidth>\r\n                      <FlexRowContFlexStart>\r\n                        <LeagueSpartanLarge>\r\n                          Project Estimate\r\n                        </LeagueSpartanLarge>\r\n                      </FlexRowContFlexStart>\r\n                    </FlexColumnFullWidth>\r\n                  </FlexRowCont100PercentSpaceBetween>\r\n                </FlexColumnFullWidth>\r\n\r\n                <FlexColumnFullWidth\r\n                  display={installEstimateDisplay}\r\n                  height=\"auto\"\r\n                  ref={ref2}\r\n                >\r\n                  <AutoSizeOverflowY>\r\n                    {Quote.Tags.map((t, j) => {\r\n                      let MaterialSum = 0;\r\n                      let InstallSum = 0;\r\n                      let TotalSum = 0;\r\n\r\n                      const RemovalItemsWithTag = Quote.Removal.Items.filter(\r\n                        (removalItem) => removalItem.Tag_Id === t.Id\r\n                      ).map((item) => {\r\n                        const originalRemovalIndex =\r\n                          Quote.Removal.Items.findIndex(\r\n                            (removal) => removal.Id === item.Id\r\n                          );\r\n                        return {\r\n                          ...item,\r\n                        };\r\n                      });\r\n\r\n                      const totalRemovalCost = RemovalItemsWithTag.reduce(\r\n                        (sum, item) => sum + item.Price + item.LaborSubtotal,\r\n                        0\r\n                      );\r\n                      const totalRemovalTime = RemovalItemsWithTag.reduce(\r\n                        (sum, item) => {\r\n                          const originalRemovalIndex =\r\n                            Quote.Removal.Items.findIndex(\r\n                              (removal) => removal.Id === item.Id\r\n                            );\r\n                          return (\r\n                            sum +\r\n                            (totalRemovalsByItem[\r\n                              `${item.Name}_${originalRemovalIndex}`\r\n                            ] || 0)\r\n                          );\r\n                        },\r\n                        0\r\n                      );\r\n\r\n                      const primaryItems = Quote.Material.Items.filter(\r\n                        (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                      );\r\n\r\n                      const matchedDeliveries = [];\r\n\r\n                      function checkDeliveries(item) {\r\n                        // Check for deliveries related to the item itself\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (item.Id === tool.Item_Id) {\r\n                            matchedDeliveries.push({\r\n                              ...tool,\r\n                              Tag_Id: item.Tag_Id,\r\n                            });\r\n                          }\r\n                        });\r\n\r\n                        // If the item has related items, check for deliveries related to those as well\r\n                        if (item.RelatedItems && item.RelatedItems.length > 0) {\r\n                          item.RelatedItems.forEach((relatedItem) => {\r\n                            checkDeliveries(relatedItem); // Recursive call for nested related items\r\n                          });\r\n                        }\r\n                      }\r\n\r\n                      primaryItems.forEach((primaryItem) => {\r\n                        checkDeliveries(primaryItem);\r\n                      });\r\n\r\n                      let totalAggregatedDeliveryCostWithTagId = 0;\r\n\r\n                      function aggregateDeliveryCost(item) {\r\n                        // Check deliveries for the item itself\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (item.Id === tool.Item_Id) {\r\n                            totalAggregatedDeliveryCostWithTagId += tool.Price;\r\n                          }\r\n                        });\r\n\r\n                        // If the item has related items, check deliveries for those as well\r\n                        if (item.RelatedItems && item.RelatedItems.length > 0) {\r\n                          item.RelatedItems.forEach((relatedItem) => {\r\n                            aggregateDeliveryCost(relatedItem); // Recursive call for nested related items\r\n                          });\r\n                        }\r\n                      }\r\n\r\n                      primaryItems.forEach((primaryItem) => {\r\n                        aggregateDeliveryCost(primaryItem);\r\n                      });\r\n\r\n                      primaryItems.forEach((o) => {\r\n                        const materialSub = o.SubtotalWithRelatedItems;\r\n                        const installSub = o.LaborSubtotalWithRelatedItems;\r\n\r\n                        // Quote.Removal.Items.filter(removalItem => removalItem.Tag_Id === t.Id).forEach((o) => {\r\n                        //   const removalTotal = o.Price + o.LaborSubtotal;\r\n                        //   MaterialSum += removalTotal;  // Assuming removals are treated as material costs\r\n                        //   TotalSum += removalTotal;\r\n                        // });\r\n\r\n                        MaterialSum += materialSub;\r\n                        InstallSum += installSub;\r\n                        TotalSum += materialSub + installSub;\r\n                      });\r\n\r\n                      Quote.Removal.Items.filter(\r\n                        (removalItem) => removalItem.Tag_Id === t.Id\r\n                      ).forEach((o) => {\r\n                        const removalTotal = o.Price + o.LaborSubtotal;\r\n                        // MaterialSum += removalTotal;  // Assuming removals are treated as material costs\r\n                        TotalSum += removalTotal;\r\n                      });\r\n\r\n                      MaterialSum += totalAggregatedDeliveryCostWithTagId;\r\n                      TotalSum += totalAggregatedDeliveryCostWithTagId;\r\n\r\n                      return (\r\n                        <div key={j}>\r\n                          <div>\r\n                            <br></br>\r\n                            {primaryItems.length > 0 ||\r\n                            RemovalItemsWithTag.length > 0 ? (\r\n                              <QuoteItem\r\n                                isHeader={true}\r\n                                header2={t.TagName}\r\n                                // header3=\"Quantity\"\r\n                                // header4=\"Unit Rate\"\r\n                                // header5=\"Material Subtotal\"\r\n                                // header6=\"Install Rate\"\r\n                                // header7=\"Install Subtotal\"\r\n                                // header8=\"Line Subtotal\"\r\n                                bgColor={ColorPalette.White}\r\n                              ></QuoteItem>\r\n                            ) : null}\r\n\r\n                            {primaryItems.length > 0 ||\r\n                            RemovalItemsWithTag.length > 0 ? (\r\n                              <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n                            ) : null}\r\n\r\n                            {primaryItems.map((o, i) => {\r\n                              const materialSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.Price\r\n                                  : o.SubtotalWithRelatedItems;\r\n                              const installSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.LaborSubtotal\r\n                                  : o.LaborSubtotalWithRelatedItems;\r\n\r\n                              return (\r\n                                <QuoteItem\r\n                                  CategoryType={CategoryTypes.Material}\r\n                                  noChange={o.NoChange}\r\n                                  key={i}\r\n                                  showRelatedItems={displayStatus[o.Id]}\r\n                                  onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                                  inputheaderposition={headerInputShown}\r\n                                  OutputValue={(value) => {\r\n                                    UpdateQuoteItemQuantity(o.Id, value);\r\n                                  }}\r\n                                  quoteItemObj={o}\r\n                                  parentid={o.Parent_Id}\r\n                                  header1=\"Delete\"\r\n                                  header2={o.Name}\r\n                                  subheader2notes={\r\n                                    o.Notes == null ? \"\" : o.Notes + \"\"\r\n                                  }\r\n                                  subheader2={\r\n                                    o.Description === null ? \"\" : o.Description\r\n                                  }\r\n                                  header3={\r\n                                    o.Quant.toFixed(2).replace(\r\n                                      /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                      \",\"\r\n                                    ) +\r\n                                    \" \" +\r\n                                    o.DisplayUnit\r\n                                  }\r\n                                  header4={\r\n                                    \"$\" + (materialSub / o.Quant).toFixed(4)\r\n                                  }\r\n                                  header5={\r\n                                    \"$\" +\r\n                                    materialSub\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header6={\r\n                                    \"$\" + (installSub / o.Quant).toFixed(4)\r\n                                  }\r\n                                  header7={\r\n                                    \"$\" +\r\n                                    installSub\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header8={\r\n                                    \"$\" +\r\n                                    (\r\n                                      parseFloat(materialSub.toFixed(2)) +\r\n                                      parseFloat(installSub.toFixed(2))\r\n                                    )\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                ></QuoteItem>\r\n                              );\r\n                            })}\r\n\r\n                            {RemovalItemsWithTag.length > 0 ? (\r\n                              <div key={`removal-tag`}>\r\n                                <QuoteItem\r\n                                  CategoryType={CategoryTypes.Removal}\r\n                                  header1=\"Delete\"\r\n                                  header2=\"Removal\"\r\n                                  header3={`${\r\n                                    parseFloat(\r\n                                      RemovalItemsWithTag.reduce(\r\n                                        (accumulator, item) =>\r\n                                          accumulator + item.Quant,\r\n                                        0\r\n                                      )\r\n                                    ).toFixed(2) || \"0.00\"\r\n                                  } ${RemovalItemsWithTag[0].DisplayUnit}`}\r\n                                  RemovalItems={RemovalItemsWithTag}\r\n                                  showRelatedItems={removalDisplayStatus[t.Id]}\r\n                                  RefreshComponentState={() => {\r\n                                    GetProposalInformation(params.quoteId);\r\n                                  }}\r\n                                  deleteItemFromEstimate={(itemId) => {\r\n                                    if (itemId) {\r\n                                      setDeleteItemId(itemId);\r\n                                    } else {\r\n                                      console.log(\"no item passed\");\r\n                                    }\r\n                                    setDeleteItemConfirmDisplay(true);\r\n                                  }}\r\n                                  onToggleDisplay={() =>\r\n                                    toggleRemovalDisplay(t.Id)\r\n                                  }\r\n                                  // header4={\r\n                                  //   removalDisplayStatus === false\r\n                                  //   ? (\r\n                                  //     (() => {\r\n                                  //       const totalQuantity = parseFloat(RemovalItemsNoTag.reduce((accumulator, item) => accumulator + item.Quant, 0));\r\n                                  //       const divisionResult = totalRemovalCost / totalQuantity;\r\n                                  //       return `$${divisionResult.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`;\r\n                                  //     })()\r\n                                  //   )\r\n                                  //   : ''\r\n                                  // }\r\n                                  // header9={removalDisplayStatus[t.Id] === true ? '' :  decimalHoursToTimeString(totalRemovalTime)}\r\n                                  header8={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : \"$\" +\r\n                                        totalRemovalCost\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                ></QuoteItem>\r\n                              </div>\r\n                            ) : null}\r\n\r\n                            {totalAggregatedDeliveryCostWithTagId > 0 ? (\r\n                              <QuoteItem\r\n                                key={`tagged-aggregated-delivery`}\r\n                                quoteItemObj={{\r\n                                  Price: totalAggregatedDeliveryCostWithTagId,\r\n                                }}\r\n                                showRelatedItems={displayStatus[t.Id]}\r\n                                RefreshComponentState={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                deleteItemFromEstimate={async (item_id) => {\r\n                                  setIsLoading(true);\r\n                                  await DeleteQuoteTool(item_id);\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }}\r\n                                CategoryType={\"Delivery\"}\r\n                                onToggleDisplay={() => toggleDisplay(t.Id)}\r\n                                DeliveryItems={matchedDeliveries}\r\n                                header1=\"Delete\"\r\n                                header2=\"Deliveries\"\r\n                                header3=\"\"\r\n                                header4=\"\"\r\n                                header8={\r\n                                  displayStatus[t.Id] === true\r\n                                    ? \"\"\r\n                                    : \"$\" +\r\n                                      totalAggregatedDeliveryCostWithTagId\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                }\r\n                              ></QuoteItem>\r\n                            ) : null}\r\n\r\n                            {primaryItems.length > 0 ||\r\n                            RemovalItemsWithTag.length > 0 ? (\r\n                              <QuoteItem\r\n                                isHeader={true}\r\n                                header2=\"Subtotal\"\r\n                                // header5={\"$\" + MaterialSum.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                                // header7={\"$\" + InstallSum.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                                header8={\r\n                                  \"$\" +\r\n                                  TotalSum.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                }\r\n                                bgColor={ColorPalette.White}\r\n                              ></QuoteItem>\r\n                            ) : null}\r\n                          </div>\r\n                        </div>\r\n                      );\r\n                    })}\r\n\r\n                    {generalMaterialsHeader === \"flex\" ? <br></br> : null}\r\n\r\n                    {generalMaterialsHeader === \"flex\" ? (\r\n                      <QuoteItem\r\n                        isHeader={true}\r\n                        header2=\"General Materials\"\r\n                        // header3=\"Quantity\"\r\n                        // header4=\"Unit Rate\"\r\n                        // header5=\"Material Subtotal\"\r\n                        // header6=\"Install Rate\"\r\n                        // header7=\"Install Subtotal\"\r\n                        // header8=\"Line Subtotal\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItem>\r\n                    ) : null}\r\n\r\n                    <StyledHRGreenBreakThick\r\n                      display={generalMaterialsHeader}\r\n                    ></StyledHRGreenBreakThick>\r\n\r\n                    {Quote?.Material?.Items.map((o, i) => {\r\n                      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n                        const materialSub =\r\n                          displayStatus[o.Id] === true\r\n                            ? o.Price\r\n                            : o.SubtotalWithRelatedItems;\r\n                        const installSub =\r\n                          displayStatus[o.Id] === true\r\n                            ? o.LaborSubtotal\r\n                            : o.LaborSubtotalWithRelatedItems;\r\n\r\n                        return (\r\n                          <QuoteItem\r\n                            CategoryType={CategoryTypes.Material}\r\n                            showRelatedItems={displayStatus[o.Id]}\r\n                            onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                            key={i}\r\n                            quoteItemObj={o}\r\n                            inputheaderposition={headerInputShown}\r\n                            OutputValue={(value) => {\r\n                              UpdateQuoteItemQuantity(o.Id, value);\r\n                            }}\r\n                            noChange={o.NoChange}\r\n                            parentid={o.Parent_Id}\r\n                            header1=\"Delete\"\r\n                            header2={o.Name}\r\n                            subheader2={\r\n                              o.Description === null ? \"\" : o.Description\r\n                            }\r\n                            subheader2notes={\r\n                              o.Notes == null ? \"\" : o.Notes + \"\"\r\n                            }\r\n                            header3={\r\n                              o.Quant.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              ) +\r\n                              \" \" +\r\n                              o.DisplayUnit\r\n                            }\r\n                            header4={\"$\" + (materialSub / o.Quant).toFixed(4)}\r\n                            header5={\r\n                              \"$\" +\r\n                              materialSub\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                            header6={\"$\" + (installSub / o.Quant).toFixed(4)}\r\n                            header7={\r\n                              \"$\" +\r\n                              installSub\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                            header8={\r\n                              \"$\" +\r\n                              (\r\n                                parseFloat(materialSub.toFixed(2)) +\r\n                                parseFloat(installSub.toFixed(2))\r\n                              )\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                          ></QuoteItem>\r\n                        );\r\n                      }\r\n                      return null;\r\n                    }).concat(\r\n                      RemovalItemsNoTag.length > 0 ? (\r\n                        <div key={`removal-no-tag`}>\r\n                          <QuoteItem\r\n                            CategoryType={CategoryTypes.Removal}\r\n                            deleteItemFromEstimate={(itemId) => {\r\n                              if (itemId) {\r\n                                setDeleteItemId(itemId);\r\n                              } else {\r\n                                setDeleteItemId(o.Id);\r\n                              }\r\n                              setDeleteItemConfirmDisplay(true);\r\n                            }}\r\n                            RefreshComponentState={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            header1=\"Delete\"\r\n                            header2=\"Removal\"\r\n                            header3={`${\r\n                              parseFloat(\r\n                                RemovalItemsNoTag.reduce(\r\n                                  (accumulator, item) =>\r\n                                    accumulator + item.Quant,\r\n                                  0\r\n                                )\r\n                              ).toFixed(2) || \"0.00\"\r\n                            } ${\r\n                              RemovalItemsNoTag.length > 0\r\n                                ? RemovalItemsNoTag[0].DisplayUnit\r\n                                : \"\"\r\n                            }`}\r\n                            RemovalItems={RemovalItemsNoTag}\r\n                            showRelatedItems={removalDisplayStatus}\r\n                            onToggleDisplay={() => {\r\n                              setRemovalDisplayStatus(!removalDisplayStatus);\r\n                            }}\r\n                            header4={\r\n                              removalDisplayStatus === false\r\n                                ? (() => {\r\n                                    const totalQuantity = parseFloat(\r\n                                      RemovalItemsNoTag.reduce(\r\n                                        (accumulator, item) =>\r\n                                          accumulator + item.Quant,\r\n                                        0\r\n                                      )\r\n                                    );\r\n                                    const divisionResult =\r\n                                      totalRemovalCost / totalQuantity;\r\n                                    return `$${divisionResult\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`;\r\n                                  })()\r\n                                : \"\"\r\n                            }\r\n                            header8={\r\n                              removalDisplayStatus === false\r\n                                ? \"$\" +\r\n                                  totalRemovalCost\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                : \"\"\r\n                            }\r\n                          ></QuoteItem>\r\n                        </div>\r\n                      ) : null,\r\n                      totalAggregatedDeliveryCost > 0 ? (\r\n                        <QuoteItem\r\n                          key={`total-aggregated-delivery`}\r\n                          quoteItemObj={{ Price: totalAggregatedDeliveryCost }}\r\n                          DeliveryItems={DeliveryItemsNoTag}\r\n                          CategoryType={\"Delivery\"}\r\n                          RefreshComponentState={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          showRelatedItems={deliveryDisplayStatus}\r\n                          onToggleDisplay={() => {\r\n                            setDeliveryDisplayStatus(!deliveryDisplayStatus);\r\n                          }}\r\n                          header1=\"Delete\"\r\n                          header2=\"Deliveries\"\r\n                          header3=\"\"\r\n                          header4=\"\"\r\n                          header8={\r\n                            deliveryDisplayStatus === false\r\n                              ? \"$\" +\r\n                                totalAggregatedDeliveryCost\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              : \"\"\r\n                          }\r\n                        ></QuoteItem>\r\n                      ) : null,\r\n                      generalMaterialsHeader === \"flex\" ? (\r\n                        <QuoteItem\r\n                          isHeader={true}\r\n                          key={\"untagged_subtotals\"}\r\n                          header2={\"Subtotal\"}\r\n                          bgColor={\"White\"}\r\n                          // header5={`$${untaggedMaterialSubtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          // header7={`$${untaggedInstallSubtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          header8={`$${(\r\n                            untaggedTotalSubtotal +\r\n                            totalRemovalCost +\r\n                            totalAggregatedDeliveryCost\r\n                          )\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                        />\r\n                      ) : null\r\n                    )}\r\n\r\n                    {toolsmachinesHeader === \"flex\" ? (\r\n                      <QuoteItem\r\n                        isHeader={true}\r\n                        header2=\"Machines, Disposal, Access\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItem>\r\n                    ) : null}\r\n                    <StyledHRGreenBreakThick\r\n                      display={toolsmachinesHeader}\r\n                    ></StyledHRGreenBreakThick>\r\n                    {Quote.Tool.Tools.sort((a, b) =>\r\n                      a.ToolName.localeCompare(b.ToolName)\r\n                    ).map((o, i) => {\r\n                      if (!o?.ToolName.includes(\"Wheelbarrow\")) {\r\n                        if (o.RentalRate > 0 && o.BasePrice > 0) {\r\n                          toolsHeader7Subtotal += o.BasePrice;\r\n                        }\r\n                        toolsHeader8Subtotal += o.Price;\r\n                      }\r\n\r\n                      return o?.ToolName.includes(\"Wheelbarrow\") ||\r\n                        o?.ToolName.includes(\"Suggested\") ? null : (\r\n                        // <QuoteItem\r\n                        //   CategoryType={'Tool'}\r\n                        //   key={i}\r\n                        //   header1=\"Delete\"\r\n                        //   header2={o.ToolName}\r\n                        //   subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                        //   // header6={\r\n                        //   //   o.RentalRate > 0\r\n                        //   //     ? \"$\" +\r\n                        //   //       (o.RentalRate * o.RentalLength).toFixed(2).replace(\r\n                        //   //         /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                        //   //         \",\"\r\n                        //   //       )\r\n                        //   //     : \"$\" +\r\n                        //   //       o.BasePrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        //   // }\r\n                        //   itemLink={o.VideoUrl}\r\n                        //   header7={\r\n                        //     o.RentalRate > 0 && o.BasePrice > 0\r\n                        //       ? \"$\" +\r\n                        //         o.BasePrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        //       : \"\"\r\n                        //   }\r\n                        //   header5={\r\n                        //     `${o.RentalLength} hours`\r\n\r\n                        //   }\r\n                        //   header3={\r\n                        //     o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        //   }\r\n                        //   header8={\r\n                        //     \"$\" +\r\n                        //     o.Price.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        //   }\r\n                        // ></QuoteItem>\r\n                        <QuoteItem\r\n                          CategoryType={\"Tool\"}\r\n                          key={i}\r\n                          header1=\"Delete\"\r\n                          header2={o.ToolName}\r\n                          subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                          header4={\r\n                            o.RentalRate > 0\r\n                              ? `$${o.RentalRate.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`\r\n                              : null\r\n                          }\r\n                          header6={\r\n                            o.BasePrice > 0\r\n                              ? `$${o.BasePrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`\r\n                              : null\r\n                          }\r\n                          header7={\r\n                            o.RentalRate > 0 && o.BasePrice > 0\r\n                              ? `$${o.BasePrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`\r\n                              : \"\"\r\n                          }\r\n                          header3={\r\n                            o.RentalLength > 0\r\n                              ? `${o.RentalLength} hours`\r\n                              : typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                              ? o.Quant.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              : \"\"\r\n                          }\r\n                          header9={o.RentalLength > 0 ? o.RentalLength : null}\r\n                          // header3={o?.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          // header8={o.RentalRate > 0 && o.BasePrice > 0 ? `$${o.BasePrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}` : \"\"}\r\n                          header8={`$${o.Price.toFixed(2).replace(\r\n                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                            \",\"\r\n                          )}`}\r\n                          itemLink={o.VideoUrl}\r\n                        ></QuoteItem>\r\n                      );\r\n                    })}\r\n                    {accessTotal > 0 ? (\r\n                      <div>\r\n                        <QuoteItem\r\n                          CategoryType={CategoryTypes.Access}\r\n                          header2={\"Access Area Cost\"}\r\n                          header8={\r\n                            \"$\" +\r\n                            accessTotal\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          }\r\n                        ></QuoteItem>\r\n                      </div>\r\n                    ) : null}\r\n\r\n                    {(toolsHeader7Subtotal > 0 || toolsHeader8Subtotal > 0) && (\r\n                      <QuoteItem\r\n                        isHeader={true}\r\n                        bgColor={ColorPalette.White}\r\n                        header2={`Subtotal`}\r\n                        // header7={\"$\" + toolsHeader7Subtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        header8={\r\n                          \"$\" +\r\n                          (toolsHeader8Subtotal + accessTotal)\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      ></QuoteItem>\r\n                    )}\r\n                    {toolsmachinesHeader === \"flex\" ? (\r\n                      <div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n                    ) : null}\r\n                    <FlexRowContFullWidth\r\n                      id=\"exclude-from-pdf\"\r\n                      onClick={() => {\r\n                        DisplayLaborBreakdown(laborDetailToggle);\r\n                      }}\r\n                    ></FlexRowContFullWidth>\r\n                    <StyledHRGreenBreakThick\r\n                      display={laborDetailToggleView}\r\n                    ></StyledHRGreenBreakThick>\r\n                    <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n                  </AutoSizeOverflowY>\r\n                </FlexColumnFullWidth>\r\n              </ContentContQuote>\r\n            </FlexRowContAutox100PercentMobileColumn>\r\n\r\n            {/* Comments  --------------------------------------------------------------- */}\r\n          </FlexColumn81vwLightGrey>\r\n\r\n          <FixedIconToTop\r\n            src=\"/BackToTopArrowAlt.svg\"\r\n            onClick={() => {\r\n              window.scrollTo(0, 0);\r\n            }}\r\n          ></FixedIconToTop>\r\n          <EstimateFooter\r\n            depositAmount={\r\n              deposit < Stored_Values.MIN_DEPOSIT\r\n                ? Stored_Values.MIN_DEPOSIT\r\n                : deposit\r\n            }\r\n            buttonRef={buttonRef}\r\n            depositCallback={() => {\r\n              ValidateAgreement(\r\n                supplyOnlySelected,\r\n                params.caseId,\r\n                params.quoteId\r\n              );\r\n            }}\r\n          ></EstimateFooter>\r\n        </Cont>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nViewProposalUserView.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default ViewProposalUserView;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport { DivWithDisplay, FlexColumnContGreenBorderTopRounded } from \"../../../StylesheetComps/Cont\";\r\nimport { TextInputReusable } from \"../../../StylesheetComps/LandscapeForm\";\r\n\r\nimport { ExtraLargeTextMobileRegular } from \"../../../StylesheetComps/Titles\";\r\n\r\nconst ChangeBidAmountWindow = ({ Open, onClose, inValue, OutValue}) => {\r\n\r\n    const [hours, setHours]  = useState(0);\r\n    const[rate, setRate]  = useState(0);\r\n    const [subtotal, setSubtotal]  = useState(inValue);\r\n    const Initialize = async() =>{\r\n        setHours(0);\r\n        setRate(0);\r\n        setSubtotal(inValue);\r\n    }\r\n\r\n  useEffect(()=>{\r\n      setSubtotal(hours* rate); \r\n  }, [rate, hours])\r\n\r\n  useEffect(()=>{\r\n    Initialize(); \r\n  }, [ inValue])\r\n\r\n  if (!Open) return null;\r\n  return (\r\n    <FlexColumnContGreenBorderTopRounded>\r\n      <DivWithDisplay>\r\n        <ExtraLargeTextMobileRegular>\r\n          Enter your time and rate to recalculate your labor subtotal, or change subtotal directly:\r\n        </ExtraLargeTextMobileRegular>\r\n        <DivWithDisplay flexdirection=\"row\">\r\n            <DivWithDisplay width=\"200px\">Enter Hours: </DivWithDisplay>\r\n            <DivWithDisplay width=\"200px\">\r\n                <TextInputReusable width=\"200px\"  defaultValue={0}\r\n                     onChange={(e) => {\r\n                        if (e.target.value !== \"\") {\r\n                          setHours(e.target.value); \r\n                          setSubtotal(hours* rate);                                        \r\n                        }\r\n                      }}></TextInputReusable>\r\n            </DivWithDisplay>                      \r\n        </DivWithDisplay>\r\n        <DivWithDisplay flexdirection=\"row\">\r\n            <DivWithDisplay width=\"200px\">Hourly Rate($/hr): </DivWithDisplay>\r\n            <DivWithDisplay width=\"200px\">\r\n                <TextInputReusable width=\"200px\" defaultValue={0}\r\n                    onChange={(e) => {\r\n                        if (e.target.value !== \"\") {\r\n                          setRate(e.target.value);   \r\n                          setSubtotal(hours* rate);                  \r\n                        }\r\n                      }}></TextInputReusable>\r\n            </DivWithDisplay>        \r\n        </DivWithDisplay>\r\n        <DivWithDisplay flexdirection=\"row\">\r\n            <DivWithDisplay width=\"200px\">Subtotal($): </DivWithDisplay>\r\n            <DivWithDisplay width=\"200px\">\r\n            <TextInputReusable width=\"200px\" value={subtotal} \r\n                    onChange={(e) => {\r\n                        if (e.target.value !== \"\") {\r\n                            setSubtotal(e.target.value);                                             \r\n                        }\r\n                      }}></TextInputReusable>\r\n            </DivWithDisplay>        \r\n        </DivWithDisplay>\r\n        <DivWithDisplay flexdirection=\"row\">         \r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryButtonBlue}\r\n            onClick={() => {\r\n                OutValue(subtotal);\r\n                Initialize();    \r\n                onClose();            \r\n            }}\r\n          >\r\n            Confirm\r\n          </RegularResponsiveButton>\r\n          <DivWithDisplay width=\"100px\"></DivWithDisplay>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={() => {  \r\n                Initialize();      \r\n                onClose();               \r\n            }}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n        </DivWithDisplay>\r\n      </DivWithDisplay>\r\n    </FlexColumnContGreenBorderTopRounded>\r\n  );\r\n};\r\n\r\nChangeBidAmountWindow.defaultProps = {\r\n    Open: false,\r\n    inValue: 0,\r\n    OutValue: () => {}, \r\n};\r\n\r\nexport default ChangeBidAmountWindow;\r\n","/* eslint-disable */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n    DivWithDisplay,\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexColumnFullWidth,\r\n  QuoteItemCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexibleEstimateDiv35Percent,\r\n  FlexibleEstimateDiv5Percent,\r\n  GreyFlexibleEstimateDiv15Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Icon20x20,\r\n  Icon30x40pxPointerNoMargin,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { TextInputReusable } from \"../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { SmallGreenLeagueText } from \"../../StylesheetComps/Titles\";\r\nimport ChangeBidAmountWindow from \"../Windows/ChangeBidAmount\";\r\nconst BidItem = ({\r\n  onClick,\r\n  header1,\r\n  header2,\r\n  subheader2notes,\r\n  subheader2,\r\n  header3,\r\n  header4,\r\n  header5,\r\n  header6,\r\n  header7,\r\n  header8,\r\n  quoteItemObj,\r\n  noChange,\r\n  OutputValue,\r\n  RemoveItemFromLocalQuoteObject,\r\n  parentid,\r\n  itemLink,\r\n  bgColor,\r\n  isHeader,\r\n  showRelatedItems,\r\n  createBid,\r\n}) => {\r\n  // const [containerPadding, setContainerPadding] = useState(\"\");\r\n\r\n  const [header1Display, setHeader1Display] = useState(\"none\");\r\n  const [header2Display, setHeader2Display] = useState(\"flex\");\r\n  const [subheader2Display] = useState(\"flex\");\r\n  const [header3Display, setHeader3Display] = useState(\"flex\");\r\n  \r\n  const [header5Display, setHeader5Display] = useState(\"flex\");\r\n  const [header6Display, setHeader6Display] = useState(\"flex\");\r\n  const [header8Display, setHeader8Display] = useState(\"flex\");\r\n\r\n  const [header1InputDisplay, setHeader1InputDisplay] = useState(\"none\");\r\n  const [header2InputDisplay, setHeader2InputDisplay] = useState(\"none\");\r\n  const [header3InputDisplay, setHeader3InputDisplay] = useState(\"none\");\r\n  const [header5InputDisplay, setHeader5InputDisplay] = useState(\"none\");\r\n  const [header6InputDisplay, setHeader6InputDisplay] = useState(\"none\");\r\n  const [header8InputDisplay, setHeader8InputDisplay] = useState(\"none\");\r\n\r\n  const [header1DefaultValue, setHeader1DefaultValue] = useState(header1);\r\n  const [header2DefaultValue, setHeader2DefaultValue] = useState(header2);\r\n  const [header3DefaultValue, setHeader3DefaultValue] = useState(\r\n    quoteItemObj?.Notes\r\n  );\r\n  const [header4DefaultValue, setHeader4DefaultValue] = useState(header4);\r\n  const [header5DefaultValue, setHeader5DefaultValue] = useState(0);\r\n  const [header6DefaultValue, setHeader6DefaultValue] = useState(\r\n    (quoteItemObj?.LaborSubtotal / quoteItemObj?.Quant).toFixed(\r\n      4\r\n    )\r\n  );\r\n\r\n  const [Header8, setHeader8] = useState(header8);\r\n\r\n  const [linkHeaderDisplay, setLinkHeaderDisplay] = useState(\"none\");\r\n  const [pointerEvent, setPointerEvent] = useState(\"none\");\r\n  const [youtubeLinkProp, setYoutubeLinkProp] = useState(\"\");\r\n\r\n  const [descriptionOverflow, setDescriptionOverflow] = useState(\"hidden\");\r\n  const [descriptionWhiteSpace, setDescriptionWhiteSpace] = useState(\"nowrap\");\r\n\r\n  const [deleteIconSrc, setDeleteIconSrc] = useState(\"\");\r\n\r\n  const [relatedItemToggleSRC, setRelatedItemToggleSRC] =\r\n    useState(\"/downarrow.svg\");\r\n  const [relatedItemsDisplay, setRelatedItemsDisplay] = useState(\"none\");\r\n\r\n  const [FontSize, setFontSize] = useState(\"14px\");\r\n  const [FontWeight, setFontWeight] = useState(\"regular\");\r\n  const [Rate, setItemRate] = useState(\r\n    quoteItemObj?.SubtotalWithRelatedItems / quoteItemObj?.Quant\r\n  );\r\n  const [installRate, setItemInstallRate] = useState(\r\n    quoteItemObj?.LaborSubtotal / quoteItemObj?.Quant\r\n  );\r\n  const [openChangeBidAmount, setOpenChangeBidAmount] = useState(false);\r\n\r\n  const DetermineInputHeaderLogic = async () => {\r\n    InitializeSetup();\r\n\r\n    if (createBid === true) {\r\n       \r\n        setHeader8Display(\"none\");\r\n        setHeader8InputDisplay(\"flex\");\r\n      \r\n      OutputValue(quoteItemObj);\r\n    }\r\n  };\r\n\r\n  const InitializeSetup = async () => {\r\n    setHeader1Display(\"none\");\r\n    setHeader2Display(\"flex\");\r\n    setHeader3Display(\"flex\");\r\n    //setHeader4Display(\"flex\");\r\n    setHeader5Display(\"flex\");\r\n    setHeader6Display(\"flex\");\r\n    setHeader8Display(\"flex\");\r\n    setDeleteIconSrc(\"\");\r\n\r\n    setHeader1InputDisplay(\"none\");\r\n    setHeader2InputDisplay(\"none\");\r\n    setHeader3InputDisplay(\"none\");\r\n    // setHeader4InputDisplay(\"none\")\r\n    setHeader5InputDisplay(\"none\");\r\n    setHeader6InputDisplay(\"none\");\r\n    setHeader8InputDisplay(\"none\");\r\n\r\n    if (isHeader == true) {\r\n      setFontSize(\"16px\");\r\n      setFontWeight(\"bold\");\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (quoteItemObj !== null && quoteItemObj != undefined)\r\n        InitializeSetup(); \r\n  }, [ createBid]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    InitializeSetup(); \r\n  }, [Header8]);  \r\n\r\n  return (\r\n    <FlexColumnCont100xAutoPercent margin=\"0\" onClick={onClick}>\r\n      <QuoteItemCont\r\n        borderbottom={\r\n          relatedItemsDisplay === \"block\"\r\n            ? `1px dashed ${ColorPalette.PrimaryButtonBlue}`\r\n            : `1px solid ${ColorPalette.PrimaryGrey}`\r\n        }\r\n      >\r\n        {/* Column 1 */}\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          display={header1Display}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <Icon20x20\r\n            onClick={() => {\r\n              RemoveItemFromLocalQuoteObject();\r\n            }}\r\n            src={deleteIconSrc}\r\n          ></Icon20x20>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          display={header1InputDisplay}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header1DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        {/* Column 2 */}\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          height={descriptionOverflow === \"hidden\" ? \"110px\" : \"auto\"}\r\n          width=\"500px\"\r\n          display={header2Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={isHeader === true ? \"bold\" : \"\"}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnCont\r\n            mobilewidth=\"100%\"\r\n            width=\"auto\"\r\n            height=\"auto\"\r\n            margin=\"0%\"\r\n            justifycontent=\"center\"\r\n            alignitems=\"left\"\r\n          >\r\n            <SmallGreenLeagueText\r\n              display={bgColor === ColorPalette.LightGreen ? \"block\" : \"none\"}\r\n            >\r\n              {\"[REQUIRED PRODUCTS:]\"}\r\n            </SmallGreenLeagueText>\r\n            {youtubeLinkProp !== \"\" ? (\r\n              <a\r\n                rel=\"noreferrer\"\r\n                href={youtubeLinkProp}\r\n                target=\"_blank\"\r\n                style={{\r\n                  textDecoration: linkHeaderDisplay,\r\n                  pointerEvents: pointerEvent,\r\n                }}\r\n              >\r\n                {header2}\r\n              </a>\r\n            ) : (\r\n              header2\r\n            )}\r\n\r\n            {/* <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              margin=\"4px\"\r\n              display={isHeader !== true ? subheader2Display : \"none\"}\r\n              mobiledisplay=\"block\"\r\n              overflow={showRelatedItems === true ? 'visible' : 'hidden'}\r\n              whitespace={showRelatedItems === true ? 'normal' : 'nowrap'}\r\n            >\r\n              {subheader2notes}\r\n            </TinyHeaderDarkGrey>\r\n\r\n            <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              display={isHeader !== true ? \"\" : \"none\"}\r\n              margin=\"4px\"\r\n              overflow={showRelatedItems === true ? 'visible' : 'hidden'}\r\n              whitespace={showRelatedItems === true ? 'normal' : 'nowrap'}\r\n            >\r\n              {subheader2}\r\n            </TinyHeaderDarkGrey> */}\r\n          </FlexColumnCont>\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        <DivWithDisplay width=\"17%\"  alignitems=\"center\"\r\n          display={isHeader !== true ? header2InputDisplay : \"none\"}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"text\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header2DefaultValue}\r\n          ></TextInputProp>\r\n        </DivWithDisplay>\r\n\r\n        {/* Column 3 */}\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          justifycontent=\"center\"\r\n          textalign=\"center\"\r\n          display={header3Display}\r\n          mobiledisplay={header3Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header3}\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          mobiledisplay={header3InputDisplay}\r\n          display={header3InputDisplay}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            inputwidth=\"180px\"\r\n            onChange={(e) => {\r\n              quoteItemObj.Notes = e.target.value;\r\n              OutputValue(quoteItemObj);\r\n            }}\r\n            defaultValue={header3DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        {/* Column 4 */}\r\n\r\n        <DivWithDisplay width=\"17%\"  alignitems=\"center\"\r\n          \r\n          //display={header4Display}\r\n          //mobiledisplay={header4Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header4}\r\n        </DivWithDisplay>\r\n\r\n        <DivWithDisplay width=\"17%\"  alignitems=\"center\"\r\n          display=\"none\"\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            width=\"40px\"\r\n            type=\"number\"\r\n            defaultValue={header4DefaultValue}\r\n          ></TextInputProp>\r\n        </DivWithDisplay>\r\n\r\n        {/* Column 5 */}\r\n\r\n        <GreyFlexibleEstimateDiv15Percent\r\n          display={header5Display}\r\n          mobiledisplay={header5Display}\r\n          bgcolor={\r\n            bgColor === \"\"\r\n              ? ColorPalette.TertiaryGrey\r\n              : bgColor !== ColorPalette.LightGreen\r\n              ? bgColor\r\n              : ColorPalette.GreyGreen\r\n          }\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header5}\r\n        </GreyFlexibleEstimateDiv15Percent>\r\n\r\n        <DivWithDisplay width=\"17%\"  alignitems=\"center\"\r\n          display={header5InputDisplay}\r\n          mobiledisplay={header5InputDisplay}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            inputwidth=\"60px\"\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            onChange={(e) => {\r\n              \r\n            }}\r\n            defaultValue={header5DefaultValue}\r\n          ></TextInputProp>\r\n        </DivWithDisplay>\r\n\r\n        {/* Column 6 */}\r\n\r\n        <DivWithDisplay width=\"17%\"  alignitems=\"center\"\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          display={header6Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header6}\r\n        </DivWithDisplay>\r\n\r\n        <DivWithDisplay width=\"17%\"  alignitems=\"center\"\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          display={header6InputDisplay}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            type=\"number\"\r\n            inputwidth=\"100px\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header6DefaultValue}\r\n            onChange={(e) => {\r\n              \r\n            }}\r\n          ></TextInputProp>\r\n        </DivWithDisplay>\r\n\r\n        {/* Column 7 */}\r\n        {/* <GreyFlexibleEstimateDiv15Percent\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          \r\n          display={header6Display}\r\n          bgcolor={\r\n            bgColor === \"\"\r\n              ? ColorPalette.TertiaryGrey\r\n              : bgColor !== ColorPalette.LightGreen\r\n              ? bgColor\r\n              : ColorPalette.GreyGreen\r\n          }\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {\" \"}\r\n          {header7}\r\n        </GreyFlexibleEstimateDiv15Percent> */}\r\n\r\n        {/* Column 8 */}\r\n        <DivWithDisplay width=\"17%\"  alignitems=\"center\"\r\n          bgcolor={bgColor}\r\n          //display={header8Display}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <b>{Header8}</b>\r\n          <RegularResponsiveButton display={isHeader || !createBid?\"none\":\"block\"}\r\n            width=\"10px\" onClick={()=>{setOpenChangeBidAmount(true)}}\r\n          >Edit</RegularResponsiveButton>\r\n        </DivWithDisplay>\r\n\r\n        <ChangeBidAmountWindow Open={openChangeBidAmount}\r\n            onClose = {()=>{setOpenChangeBidAmount(false)}}\r\n            inValue = {Header8}\r\n            OutValue={(value) => {\r\n                setHeader8(value);\r\n                quoteItemObj.LaborSubtotal=value;\r\n              }}\r\n        ></ChangeBidAmountWindow>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        ></FlexibleEstimateDiv5Percent>\r\n      </QuoteItemCont>\r\n    </FlexColumnCont100xAutoPercent>\r\n  );\r\n};\r\n\r\nBidItem.defaultProps = {\r\n  header1: \"\",\r\n  header2: \"\",\r\n  subheader2: \"\",\r\n  header3: \"\",\r\n  header4: \"\",\r\n  header4input: \"\",\r\n  header5: \"\",\r\n  header6: \"\",\r\n  header7: \"\",\r\n  header8: \"\",\r\n  OutputValue: () => {},\r\n  RemoveItemFromLocalQuoteObject: () => {},\r\n  bgColor: \"\",\r\n  isHeader: false,\r\n  showRelatedItems: false,\r\n  createBid: false,\r\n};\r\n\r\nexport default BidItem;","/* eslint-disable */\r\n\r\n//  React Imports ---------------------------------------\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCaseById,\r\n  GetQuoteByIdForUserDisplay\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  SetHeaderAuthorization\r\n} from \"../../API_Functions/Utility_Functions\";\r\nimport BidItem from \"../../comps/BidItem\";\r\n\r\n//  Imported Components ---------------------------------\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  RegularResponsiveButton\r\n} from \"../../StylesheetComps/Components\";\r\n// Imported Styled Components ---------------------------\r\nimport {\r\n  DivWithDisplay,\r\n  FlexColumnLeftAlign,\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContFullWidth,\r\n  Grid_300Div\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexContainerPhotos } from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Image300x200,\r\n  Image375px,\r\n  TextAreaAutoResize\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { Cont, ContentContQuote } from \"../../StylesheetComps/Projects\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LargeText,\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanLarge,\r\n  LeagueSpartanRegular,\r\n  SmallText,\r\n  StyledHRGreenBreakThick,\r\n  StyledHRPropColour,\r\n  TinyTextItalics\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst BidQuotePage = () => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n  const [Quote, setProposal] = useState({});\r\n  const [Project, setProject] = useState({});\r\n  const [toolsmachinesHeader, setToolsMachinesHeader] = useState(\"none\");\r\n  const [removalHeader, setRemovalHeader] = useState(\"none\");\r\n  const [accessDisplay, setAccessDisplay] = useState(\"none\");\r\n  const [generalMaterialsHeader, setGeneralMaterialsHeader] = useState(\"none\");\r\n  const [deliveryHeader, setDeliveryHeader] = useState(\"none\");\r\n\r\n  const [createBid, setCreateBid] = useState(false);\r\n\r\n  const [showModifyInvoiceButton, setShowModifyInvoiceButton] = useState(true);\r\n  const [showGenerateInvoiceButton, setShowGenerateInvoiceButton] =\r\n    useState(true);\r\n  const [showSaveInvoiceButton, setShowSaveInvoiceButton] = useState(false);\r\n  const [showCancelButton, setShowCancelButton] = useState(false);\r\n\r\n  const [showAttachToProjectButton, setShowAttachtoProjectButton] =\r\n    useState(true);\r\n  const [showDownloadButton, setShowDownloadButton] = useState(false);\r\n  const [enterPaid, setEnterPaid] = useState(false);\r\n  const [toTal, setTotal] = useState();\r\n  const [Paid, setPaid] = useState(0.0);\r\n  const [invoiceDate, setInvoiceDate] = useState();\r\n  const [dueDate, setDueDate] = useState();\r\n  const [invoiceNumber, setInvoiceNumber] = useState(\"0000\");\r\n  const [invoicefileMaterial, setInvoicefileMaterial] = useState(\r\n    \"invoice_material.pdf\"\r\n  );\r\n  const [invoicefileInstall, setInvoicefileInstall] = useState(\r\n    \"invoice_install.pdf\"\r\n  );\r\n  const ref = React.createRef();\r\n\r\n  const [pdfOptions, setPdfOptions] = useState({\r\n    orientation: \"portrait\",\r\n    unit: \"in\",\r\n    format: [8.5, 11],\r\n    pagesplit: true,\r\n  });\r\n\r\n  var installSub = 0;\r\n  var bidItem;\r\n\r\n  const GetProjectInformation = async (caseid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data !== null) {\r\n      await setProject(data.Case);\r\n      return data.Case;\r\n    } else return null;\r\n  };\r\n\r\n  const GetProposalInformation = async (quoteid) => {\r\n    var data = await GetQuoteByIdForUserDisplay(quoteid);\r\n    if (data !== null) {\r\n      if (data.quote !== null) {\r\n        return data.quote;\r\n      }\r\n    } else return null;\r\n  };\r\n\r\n  const SetUpBidData = async ( quoteid) => {\r\n    var quote = await GetProposalInformation(quoteid);\r\n    if (quote !== null) {\r\n      setProposal(quote);\r\n      if (toTal === null || toTal === undefined)\r\n        InitializeTotal({ ...quote.Material.Total });\r\n      else InitializeTotal(toTal);\r\n      \r\n      var invoicedate = new Date();\r\n      var duedate = new Date();\r\n      duedate.setDate(duedate.getDate() + 7);\r\n      setInvoiceDate(invoicedate.toLocaleDateString());\r\n      \r\n      SetQuoteDisplay(quote);\r\n    }\r\n  };\r\n\r\n  const InitializeTotal = (total) => {\r\n    if (total !== null && total !== undefined) {\r\n      total.Subtotal = 0;\r\n      total.Total = 0;\r\n      if (total.Tax?.length > 0) {\r\n        for (let i = 0; i < total.Tax.length; i++) {\r\n          total.Tax[i].Amount = 0;\r\n        }\r\n      }\r\n      if (toTal === null || toTal === undefined) setTotal(total);\r\n    }\r\n  };\r\n  const SetQuoteDisplay = async (quote) => {\r\n    if (quote != null) {\r\n      if (quote.Material?.Items?.length > 0) setGeneralMaterialsHeader(\"flex\");\r\n\r\n      if (quote.Delivery?.Tools?.length > 0) setDeliveryHeader(\"flex\");\r\n\r\n      if (quote.Tool?.Tools?.length > 0) setToolsMachinesHeader(\"flex\");\r\n\r\n      if (quote.Removal?.Items?.length > 0) setRemovalHeader(\"flex\");\r\n\r\n      if (quote.AccessArea?.Items?.length > 0) setAccessDisplay(\"flex\");\r\n    }\r\n  };\r\n\r\n  const modifyInvoice = async () => {\r\n    setCreateBid(true);\r\n    setShowModifyInvoiceButton(false);\r\n    setShowGenerateInvoiceButton(false);\r\n    setShowCancelButton(true);\r\n    setShowSaveInvoiceButton(true);\r\n    ItemCounts = 0;\r\n  };\r\n\r\n  var ItemCounts = 0;\r\n  const AddItemToInvoiceTotal = (total, tax, subtotal) => {\r\n    if (subtotal > 0) ++ItemCounts;\r\n\r\n    if (total !== null && total !== undefined) {\r\n      total.Subtotal += subtotal;\r\n      for (let i = 0; i < tax.length; i++) {\r\n        var amt = (tax[i].Rate * subtotal) / 100;\r\n        for (let j = 0; j < total.Tax?.length; j++) {\r\n          if (total.Tax[j].Id === tax[i].Id) {\r\n            total.Tax[j].Amount += amt;\r\n            total.Total += amt;\r\n          }\r\n        }\r\n      }\r\n      total.Total += subtotal;\r\n    }\r\n  };\r\n\r\n  const Save = async () => {\r\n    InitializeTotal(toTal);\r\n    setCreateBid(false);\r\n    setShowCancelButton(false);\r\n    setShowSaveInvoiceButton(false);\r\n    setShowModifyInvoiceButton(true); //Modify button should be used only once to avoid errors.\r\n    setShowGenerateInvoiceButton(true);\r\n    setShowDownloadButton(false);\r\n  };\r\n\r\n  const Cancel = async () => {\r\n    InitializeTotal(toTal);\r\n    setCreateBid(false);\r\n    setShowCancelButton(false);\r\n    setShowSaveInvoiceButton(false);\r\n    //setShowModifyInvoiceButton(true);\r\n    setShowGenerateInvoiceButton(true);\r\n  };\r\n\r\n  const InitialSetup = async (casid) => {\r\n    var project = await GetProjectInformation(casid);\r\n    await SetUpBidData(project.Id);\r\n  };\r\n\r\n  const GenerateBidInfo = async (filename, project, tittle, quoteid) => {\r\n    \r\n  };\r\n  const UploadBidInfo = async (invoice) => {\r\n    //await AddInvoice(invoice);\r\n  };\r\n\r\n  const CreateBidRecord = async (filename, project, tittle, quoteid) => {\r\n    var invoice = await GenerateBidInfo(filename, project, tittle, quoteid);\r\n    await UploadBidInfo(invoice);\r\n  };\r\n\r\n  const AttachBidToProject = async (event) => {\r\n    const file = event.target.files[0];\r\n    var tittle = file.name;\r\n    //var filename = await UploadFileToCloud(file);\r\n    //await CreateInvoiceRecord(filename, Project, tittle, params.quoteId);\r\n  };\r\n  const hiddenFileInput = React.useRef(null);\r\n\r\n  const AttachToProject = (event) => {\r\n    hiddenFileInput.current.click();\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetUpBidData( params.quoteId);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(async () => {\r\n    SetHeaderAuthorization();\r\n    await InitialSetup(params.caseId);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n  if (Quote !== null && Quote !== undefined) {\r\n    if (Quote.Material !== null && Quote.Material !== undefined) {\r\n      InitializeTotal(toTal);\r\n      return (\r\n        <DivWithDisplay>\r\n          <DivWithDisplay>\r\n            <DivWithDisplay alignitems=\"baseline\" margin=\"0\">\r\n              <ContentContQuote id=\"install\">\r\n                <DivWithDisplay height=\"auto\">\r\n                  {/* Top section: back arrow, title, buttons */}\r\n                  <DivWithDisplay  >\r\n                    <DivWithDisplay flexdirection=\"row\">\r\n                      <DivWithDisplay alignitems=\"left\" >\r\n                        <Icon30px30pxPointer\r\n                          src=\"/leftarrow.svg\"\r\n                          onClick={() => {\r\n                            history.push(\r\n                              `/projectbidlist/${params.metroId}/${params.storeId}`\r\n                            );\r\n                          }}\r\n                        ></Icon30px30pxPointer>\r\n                      </DivWithDisplay>\r\n                      <DivWithDisplay>\r\n                        <LeagueSpartanRegular>\r\n                          Bid Generator\r\n                        </LeagueSpartanRegular>\r\n                      </DivWithDisplay>\r\n                      <DivWithDisplay></DivWithDisplay>\r\n                    </DivWithDisplay>\r\n                    <DivWithDisplay flexdirection=\"row\" justifycontent=\"center\">                 \r\n                                \r\n                      <input\r\n                        type=\"file\"\r\n                        ref={hiddenFileInput}\r\n                        onChange={AttachBidToProject}\r\n                        style={{ display: \"none\" }}\r\n                      />\r\n                    </DivWithDisplay>\r\n                    <br></br>\r\n                    <StyledHRPropColour\r\n                      border={`0.5px solid ${ColorPalette.PrimaryGrey}`}\r\n                    ></StyledHRPropColour>\r\n                    <br></br>\r\n                  </DivWithDisplay>\r\n\r\n                  <DivWithDisplay height=\"auto\" ref={ref} flexdirection=\"row\">\r\n                    <DivWithDisplay width=\"25px\"> </DivWithDisplay>\r\n                    <DivWithDisplay>\r\n                      <br></br> <br></br>\r\n                      <DivWithDisplay >\r\n                        {/* Start of the bid Section. Bidding instructions and logos*/}\r\n                        <DivWithDisplay flexdirection=\"row\">\r\n                          {<DivWithDisplay alignitems=\"left\">\r\n                            <LeagueSpartanHeaderSmall>\r\n                              Bidding Instructions:\r\n                            </LeagueSpartanHeaderSmall>\r\n                            <SmallText>1. Click Modify Bid if you want to change the subtotals of each item.</SmallText>\r\n                            <SmallText>2. Click Edit button under the subtotal amount to change.</SmallText>\r\n                            <SmallText>3. Click Save Bid after you change. Clieck Submit Bid to complete your bidding.</SmallText>\r\n                            <SmallText>If you have questions, please contact us:</SmallText>\r\n                            <SmallText>+1 778-700-3598</SmallText>\r\n                            <SmallText>ar@newrhodesconstruction.com</SmallText>\r\n                            <SmallText>www.newrhodesconstruction.com</SmallText>\r\n                            \r\n                          </DivWithDisplay> }\r\n                          <Image300x200\r\n                            height=\"auto\"\r\n                            src=\"/YHLogoTinyPNG.png\"\r\n                          ></Image300x200>\r\n                        </DivWithDisplay>\r\n                        <br></br>\r\n                       \r\n                        <br></br>\r\n                        <br></br>\r\n                        {/* Date */}\r\n                        <FlexRowCont100PercentSpaceBetween>\r\n                          \r\n                          <FlexColumnLeftAlign>\r\n                            <FlexDiv>\r\n                              <FlexColumnLeftAlign>\r\n                                \r\n\r\n                                <LeagueSpartanHeaderSmall>\r\n                                  DATE\r\n                                </LeagueSpartanHeaderSmall>\r\n                                <br></br>\r\n                               \r\n                              </FlexColumnLeftAlign>\r\n                              <DivWithDisplay\r\n                                width=\"20px\"\r\n                                heigt=\"20px\"\r\n                              ></DivWithDisplay>\r\n                              <FlexColumnLeftAlign>\r\n                                \r\n                                <SmallText>{invoiceDate}</SmallText>\r\n                                <br></br>\r\n                                \r\n                              </FlexColumnLeftAlign>\r\n                            </FlexDiv>\r\n                          </FlexColumnLeftAlign>\r\n                        </FlexRowCont100PercentSpaceBetween>\r\n                        <StyledHRPropColour\r\n                          border={`0.5px solid ${ColorPalette.LightGreen}`}\r\n                        ></StyledHRPropColour>\r\n\r\n                        {/* Guides and photos */}\r\n                        <DivWithDisplay>\r\n                          {/*Guide notes*/}\r\n                          <DivWithDisplay\r\n                            id=\"overview\"\r\n                            display={Quote.Notes !== \"\" ? \"block\" : \"none\"}\r\n                          >\r\n                            <DivWithDisplay>\r\n                              <DivWithDisplay flexdirection=\"row\">\r\n                                <LeagueSpartanLarge>Guide Notes</LeagueSpartanLarge>\r\n                              </DivWithDisplay>\r\n                              <DivWithDisplay flexdirection=\"row\"\r\n                                onClick={() => {\r\n                                  DisplayProposalOverview(overviewToggle);\r\n                                }}\r\n                              >                 \r\n                                {/* <Icon30x30 src={projectOverviewArrow}></Icon30x30>   */}\r\n                              </DivWithDisplay>\r\n\r\n                              <TextAreaAutoResize\r\n                                id=\"text\"\r\n                                value={Quote.Notes}\r\n                              ></TextAreaAutoResize>\r\n                            </DivWithDisplay>\r\n                          </DivWithDisplay>\r\n                          <DivWithDisplay height=\"40px\"></DivWithDisplay>\r\n                          <DivWithDisplay\r\n                            display={Quote.Photos.length > 0 ? \"block\" : \"none\"}\r\n                          >\r\n                            <DivWithDisplay>\r\n                              <DivWithDisplay alignitems=\"left\">\r\n                                <LeagueSpartanLarge>\r\n                                  Construction Plans\r\n                                </LeagueSpartanLarge>\r\n                              </DivWithDisplay>\r\n                               <DivWithDisplay height=\"40px\"></DivWithDisplay>\r\n                               {/*Photo display */}\r\n                              <DivWithDisplay>\r\n                                <Grid_300Div>\r\n                                  {Quote.Photos.map((o, i) => {\r\n                                    return o.File?.includes(\".pdf\") ||\r\n                                      o.File?.includes(\".PDF\") ? (\r\n                                      <FlexContainerPhotos key={i}>\r\n                                        <a\r\n                                          id={i}\r\n                                          rel=\"noreferrer\"\r\n                                          href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                                          target={\"_blank\"}\r\n                                          style={{ textDecoration: \"none\", color: \"black\" }}\r\n                                        >\r\n                                          <embed\r\n                                            target={\"_blank\"}\r\n                                            src={\"/pdficon.png\"}\r\n                                            width={\"150px\"}\r\n                                            style={{ backgroundColor: \"white\" }}\r\n                                            height={\"200px\"}\r\n                                          ></embed>\r\n                                          <DivWithDisplay>\r\n                                            <LargeText>{o.Caption}</LargeText>\r\n                                          </DivWithDisplay>\r\n                                        </a>\r\n                                      </FlexContainerPhotos>\r\n                                    ) : (\r\n                                      <FlexContainerPhotos key={i}>\r\n                                        <Image375px\r\n                                          onClick={() => {\r\n                                            DisplayImageInGallery(o.File);\r\n                                          }}\r\n                                          src={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                                        ></Image375px>\r\n                                        <DivWithDisplay>\r\n                                          <LargeText>{o.Caption}</LargeText>\r\n                                        </DivWithDisplay>\r\n                                      </FlexContainerPhotos>\r\n                                    );\r\n                                  })}\r\n                                </Grid_300Div>\r\n                              </DivWithDisplay>\r\n                            </DivWithDisplay>\r\n                          </DivWithDisplay>\r\n                        </DivWithDisplay>\r\n\r\n                        <DivWithDisplay height=\"80px\"></DivWithDisplay>\r\n                         \r\n                        {/* Modify and submit bid buttons */}\r\n                        <DivWithDisplay flexdirection=\"row\">\r\n                          <RegularResponsiveButton\r\n                            display={\r\n                              showSaveInvoiceButton === true ? \"block\" : \"none\"\r\n                            }\r\n                            width=\"125px\"\r\n                            onClick={() => {\r\n                              Save();\r\n                            }}\r\n                          >\r\n                            Save Bid\r\n                          </RegularResponsiveButton>\r\n                          <RegularResponsiveButton\r\n                          display={\r\n                            showModifyInvoiceButton === true ? \"block\" : \"none\"\r\n                          }\r\n                          width=\"125px\"\r\n                          bgcolor={ColorPalette.DarkGrey}\r\n                          onClick={() => {\r\n                            InitializeTotal(toTal);\r\n                            modifyInvoice();\r\n                          }}\r\n                        >\r\n                          Modify Bid\r\n                          </RegularResponsiveButton>\r\n                        \r\n\r\n                          <RegularResponsiveButton\r\n                            display={\r\n                              showAttachToProjectButton === true ? \"block\" : \"none\"\r\n                            }\r\n                            width=\"125px\"\r\n                            bgcolor={ColorPalette.SecondaryGreen}\r\n                            onClick={(e) => {\r\n                              AttachToProject(e);\r\n                            }}\r\n                          >\r\n                            Submit Bid \r\n                          </RegularResponsiveButton>\r\n                        </DivWithDisplay>\r\n                        {/* Start of the Invoice Items. Items below are conditionally rendered */}\r\n                        \r\n                        {\r\n                          <DivWithDisplay>\r\n                            <BidItem\r\n                              isHeader={true}\r\n                              header2=\"Item\"\r\n                              header3=\"Description\"\r\n                              header4=\"Hours\"\r\n                              header5=\"Quantity\"\r\n                              header6=\"Install Rate\"\r\n                              header7=\"\"\r\n                              header8=\"Subtotal\"\r\n                              bgColor={ColorPalette.White}\r\n                            ></BidItem>\r\n                            <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n                            {Quote.Tags.map((t, j) => (\r\n                              <DivWithDisplay>\r\n                                <DivWithDisplay>\r\n                                  {Quote.Material.Items.filter(\r\n                                    (item) =>\r\n                                      item.Tag_Id == t.Id &&\r\n                                      item.Parent_Id === 0\r\n                                  ).map(\r\n                                    (o, i) => (\r\n                                      (bidItem = o),\r\n                                      (installSub =\r\n                                        bidItem.LaborSubtotal),\r\n                                      AddItemToInvoiceTotal(\r\n                                        toTal,\r\n                                        bidItem.Tax,\r\n                                        installSub\r\n                                      ),\r\n                                      (\r\n                                        <DivWithDisplay\r\n                                          display={\r\n                                            bidItem.Quant > 0\r\n                                              ? \"flex\"\r\n                                              : \"none\"\r\n                                          }\r\n                                        >\r\n                                          <BidItem\r\n                                            showRelatedItems={true}\r\n                                            noChange={bidItem.NoChange}\r\n                                            key={i}\r\n                                            createBid={createBid}\r\n                                            quoteItemObj={bidItem}\r\n                                            bgColor={ColorPalette.White}\r\n                                            parentid={bidItem.Parent_Id}\r\n                                            OutputValue={(value) => {\r\n                                              bidItem = value;\r\n                                            }}\r\n                                            header1=\"Delete\"\r\n                                            header2={bidItem.Name}\r\n                                            header3={bidItem.Notes}\r\n                                            header4={(bidItem.Quant*bidItem.InstallSpeed).toFixed(2)}\r\n                                            header5={\r\n                                              bidItem.Quant.toFixed(\r\n                                                2\r\n                                              ).replace(\r\n                                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                \",\"\r\n                                              ) +\r\n                                              \" \" +\r\n                                              bidItem.DisplayUnit\r\n                                            }\r\n                                            header6={\r\n                                              \"$ \" +\r\n                                              (\r\n                                                installSub / bidItem.Quant\r\n                                              ).toFixed(4)\r\n                                            }\r\n                                            header7={\"\"}\r\n                                            header8={\r\n                                              \r\n                                              installSub\r\n                                                .toFixed(2)\r\n                                                \r\n                                            }\r\n                                          ></BidItem>\r\n                                        </DivWithDisplay>\r\n                                      )\r\n                                    )\r\n                                  )}\r\n                                </DivWithDisplay>\r\n                              </DivWithDisplay>\r\n                            ))}\r\n\r\n                            <DivWithDisplay>\r\n                              {/* display={generalMaterialsHeader} */}\r\n\r\n                              {Quote.Material.Items.map((o, i) => {\r\n                                return o.Parent_Id === 0 && o.Tag_Id === 0\r\n                                  ? ((bidItem = o),\r\n                                    (installSub =\r\n                                      o.LaborSubtotal),\r\n                                    AddItemToInvoiceTotal(\r\n                                      toTal,\r\n                                      bidItem.Tax,\r\n                                      installSub\r\n                                    ),\r\n                                    (\r\n                                      <DivWithDisplay\r\n                                        display={\r\n                                          bidItem.Quant > 0\r\n                                            ? \"flex\"\r\n                                            : \"none\"\r\n                                        }\r\n                                      >\r\n                                        <BidItem\r\n                                          showRelatedItems={true}\r\n                                          key={i}\r\n                                          quoteItemObj={bidItem}\r\n                                          createBid={createBid}                                      \r\n                                          OutputValue={(value) => {\r\n                                            bidItem = value;\r\n                                          }}\r\n                                          noChange={bidItem.NoChange}\r\n                                          parentid={bidItem.Parent_Id}\r\n                                          bgColor={ColorPalette.White}\r\n                                          header1=\"Delete\"\r\n                                          header2={bidItem.Name}\r\n                                          header3={bidItem.Notes}\r\n                                          header4={(bidItem.Quant*bidItem.InstallSpeed).toFixed(2)}\r\n                                          header5={\r\n                                            bidItem.Quant.toFixed(\r\n                                              2\r\n                                            ).replace(\r\n                                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                              \",\"\r\n                                            ) +\r\n                                            \" \" +\r\n                                            bidItem.DisplayUnit\r\n                                          }\r\n                                          header6={\r\n                                            \"$ \" +\r\n                                            (\r\n                                              installSub / bidItem.Quant\r\n                                            ).toFixed(4)\r\n                                          }\r\n                                          header7={\"\"}\r\n                                          header8={\r\n                                           \r\n                                            installSub\r\n                                              .toFixed(2)\r\n                                              \r\n                                          }\r\n                                        ></BidItem>\r\n                                      </DivWithDisplay>\r\n                                    ))\r\n                                  : null;\r\n                              })}\r\n                            </DivWithDisplay>\r\n\r\n                            {Quote.Delivery.Tools.map(\r\n                              (o, i) => (\r\n                                (bidItem = o),\r\n                                AddItemToInvoiceTotal(\r\n                                  toTal,\r\n                                  bidItem.Tax,\r\n                                  bidItem.Price\r\n                                ),\r\n                                (\r\n                                  <DivWithDisplay\r\n                                    display={\r\n                                      bidItem.Quant > 0 ? \"flex\" : \"none\"\r\n                                    }\r\n                                  >\r\n                                    <BidItem\r\n                                      key={i}\r\n                                      createBid={createBid}\r\n                                      quoteItemObj={bidItem}\r\n                                      OutputValue={(value) => {\r\n                                        bidItem = value;\r\n                                      }}\r\n                                      header1=\" \"\r\n                                      header2={bidItem.ToolName}\r\n                                      header3={bidItem.Notes}\r\n                                      header5={bidItem.Quant.toFixed(\r\n                                        2\r\n                                      ).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                                      header6={\r\n                                        \"$\" +\r\n                                        bidItem.BasePrice.toFixed(\r\n                                          2\r\n                                        ).replace(\r\n                                          /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                          \",\"\r\n                                        ) +\r\n                                        \"/ Load\"\r\n                                      }\r\n                                      header8={\r\n                                        \r\n                                        bidItem.Price.toFixed(2)\r\n                                      }\r\n                                      header7={\"\"}\r\n                                      bgColor={ColorPalette.White}\r\n                                    ></BidItem>\r\n                                  </DivWithDisplay>\r\n                                )\r\n                              )\r\n                            )}\r\n\r\n                            {Quote.Removal.Items.map(\r\n                              (o, i) => (\r\n                                (bidItem = o),\r\n                                (installSub =\r\n                                  bidItem.Price +\r\n                                  bidItem.LaborSubtotal),\r\n                                AddItemToInvoiceTotal(\r\n                                  toTal,\r\n                                  bidItem.Tax,\r\n                                  installSub\r\n                                ),\r\n                                (\r\n                                  <DivWithDisplay\r\n                                    display={\r\n                                      bidItem.Quant > 0 ? \"flex\" : \"none\"\r\n                                    }\r\n                                  >\r\n                                    <BidItem\r\n                                      showRelatedItems={true}\r\n                                      key={i}\r\n                                      quoteItemObj={bidItem}\r\n                                      createBid={createBid}\r\n                                      OutputValue={(value) => {\r\n                                        bidItem = value;\r\n                                      }}\r\n                                      noChange={bidItem.NoChange}\r\n                                      parentid={bidItem.Parent_Id}\r\n                                      bgColor={ColorPalette.White}\r\n                                      header1=\"Delete\"\r\n                                      header2={bidItem.Name}\r\n                                      header3={bidItem.Notes}\r\n                                      header4={\"\"}\r\n                                      header5={\r\n                                        bidItem.Quant.toFixed(2).replace(\r\n                                          /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                          \",\"\r\n                                        ) +\r\n                                        \" \" +\r\n                                        bidItem.DisplayUnit\r\n                                      }\r\n                                      header6={\r\n                                        \"$ \" +\r\n                                        (\r\n                                          installSub / bidItem.Quant\r\n                                        ).toFixed(4)\r\n                                      }\r\n                                      header7={\"\"}\r\n                                      header8={\r\n                                       \r\n                                        installSub\r\n                                          .toFixed(2)\r\n                                          \r\n                                      }\r\n                                    ></BidItem>\r\n                                  </DivWithDisplay>\r\n                                )\r\n                              )\r\n                            )}\r\n\r\n                            {Quote.AccessArea.Items.map(\r\n                              (o, i) => (\r\n                                (bidItem = o),\r\n                                (installSub =\r\n                                  bidItem.SubtotalWithRelatedItems +\r\n                                  bidItem.LaborSubtotal),\r\n                                AddItemToInvoiceTotal(\r\n                                  toTal,\r\n                                  bidItem.Tax,\r\n                                  installSub\r\n                                ),\r\n                                (\r\n                                  <DivWithDisplay\r\n                                    display={\r\n                                      bidItem.Quant > 0 ? \"flex\" : \"none\"\r\n                                    }\r\n                                  >\r\n                                    <BidItem\r\n                                      showRelatedItems={true}\r\n                                      key={i}\r\n                                      quoteItemObj={bidItem}\r\n                                      createBid={createBid}                                   \r\n                                      OutputValue={(value) => {\r\n                                        bidItem = value;\r\n                                      }}\r\n                                      noChange={bidItem.NoChange}\r\n                                      parentid={bidItem.Parent_Id}\r\n                                      bgColor={ColorPalette.White}\r\n                                      header1=\"Delete\"\r\n                                      header2={bidItem.Name}\r\n                                      header3={bidItem.Notes}\r\n                                      header4={\"\"}\r\n                                      header5={\r\n                                        bidItem.Quant.toFixed(2).replace(\r\n                                          /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                          \",\"\r\n                                        ) +\r\n                                        \" \" +\r\n                                        bidItem.DisplayUnit\r\n                                      }\r\n                                      header6={\r\n                                        \"$ \" +\r\n                                        (\r\n                                          installSub / bidItem.Quant\r\n                                        ).toFixed(4)\r\n                                      }\r\n                                      header7={\"\"}\r\n                                      header8={\r\n                                        \r\n                                        installSub\r\n                                          .toFixed(2)\r\n                                         \r\n                                      }\r\n                                    ></BidItem>\r\n                                  </DivWithDisplay>\r\n                                )\r\n                              )\r\n                            )}\r\n\r\n                            {Quote.Tool.Tools.map((o, i) =>\r\n                              o.BasePrice > 0.1 || o.RentalRate > 0.1\r\n                                ? ((bidItem = o),\r\n                                  AddItemToInvoiceTotal(\r\n                                    toTal,\r\n                                    bidItem.Tax,\r\n                                    bidItem.Price\r\n                                  ),\r\n                                  (\r\n                                    <DivWithDisplay\r\n                                      display={\r\n                                        bidItem.Quant > 0 ? \"flex\" : \"none\"\r\n                                      }\r\n                                    >\r\n                                      <BidItem\r\n                                        key={i}\r\n                                        createBid={createBid}\r\n                                        quoteItemObj={bidItem}\r\n                                        OutputValue={(value) => {\r\n                                          bidItem = value;\r\n                                        }}\r\n                                        header1=\" \"\r\n                                        header2={bidItem.ToolName}\r\n                                        subheader2={\r\n                                          bidItem.Notes !== null\r\n                                            ? bidItem.Notes\r\n                                            : \"\"\r\n                                        }\r\n                                        header3={\r\n                                          \"$ \" +\r\n                                          bidItem.BasePrice.toFixed(\r\n                                            2\r\n                                          ).replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          )\r\n                                        }\r\n                                        header5={\r\n                                          bidItem.RentalRate > 0.1\r\n                                            ? bidItem.RentalLength.toFixed(\r\n                                                2\r\n                                              ).replace(\r\n                                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                \",\"\r\n                                              ) + \" hr\"\r\n                                            : bidItem.Quant.toFixed(\r\n                                                2\r\n                                              ).replace(\r\n                                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                \",\"\r\n                                              ) + \" pc\"\r\n                                        }\r\n                                        header6={\r\n                                          \"$\" +\r\n                                          bidItem.RentalRate.toFixed(\r\n                                            2\r\n                                          ).replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          )\r\n                                        }\r\n                                        header8={\r\n                                          \r\n                                          bidItem.Price.toFixed(2)\r\n                                        }\r\n                                        header7={\"\"}\r\n                                        bgColor={ColorPalette.White}\r\n                                      ></BidItem>\r\n                                    </DivWithDisplay>\r\n                                  ))\r\n                                : null\r\n                            )}\r\n\r\n                            <br></br>\r\n                            <StyledHRPropColour\r\n                              border={`0.5px dotted ${ColorPalette.PrimaryGrey}`}\r\n                            ></StyledHRPropColour>\r\n                            <br></br>\r\n                            <br></br>\r\n                            <FlexRowContFullWidth margintop=\"100px\">\r\n                              <DivWithDisplay>\r\n                                <TinyTextItalics>\r\n                                  We appreciate your business and hope you\r\n                                  consider us for any future projects!\r\n                                </TinyTextItalics>\r\n                              </DivWithDisplay>\r\n                              <DivWithDisplay width=\"50%\" flexdirection=\"row\">\r\n                                <FlexRowCont100PercentSpaceBetween>\r\n                                  <DivWithDisplay textalign=\"left\">\r\n                                    <SmallText>SUBTOTAL</SmallText>\r\n                                    {toTal?.Tax?.map((o, i) => (\r\n                                      <SmallText>\r\n                                        {o.TaxCode} @ {o.Rate}%\r\n                                      </SmallText>\r\n                                    ))}\r\n                                    <SmallText>TOTAL</SmallText>\r\n                                     \r\n                                  </DivWithDisplay>\r\n\r\n                                  <DivWithDisplay textalign=\"right\">\r\n                                    <SmallText>\r\n                                      $\r\n                                      {toTal?.Subtotal.toFixed(2).replace(\r\n                                        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                        \",\"\r\n                                      )}\r\n                                    </SmallText>\r\n                                    {toTal?.Tax?.map((o, i) => (\r\n                                      <SmallText>\r\n                                        $\r\n                                        {o.Amount.toFixed(2).replace(\r\n                                          /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                          \",\"\r\n                                        )}\r\n                                      </SmallText>\r\n                                    ))}\r\n\r\n                                    <SmallText>\r\n                                      $\r\n                                      {toTal?.Total.toFixed(2).replace(\r\n                                        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                        \",\"\r\n                                      )}\r\n                                    </SmallText>\r\n                                     \r\n                                    \r\n                                     \r\n                                  </DivWithDisplay>\r\n                                </FlexRowCont100PercentSpaceBetween>\r\n                              </DivWithDisplay>\r\n                            </FlexRowContFullWidth>\r\n                          </DivWithDisplay>\r\n                        }\r\n                      </DivWithDisplay>\r\n                    </DivWithDisplay>\r\n                  </DivWithDisplay>\r\n                </DivWithDisplay>\r\n              </ContentContQuote>\r\n            </DivWithDisplay>\r\n          </DivWithDisplay>\r\n\r\n          {/* <FixedIconToTop\r\n            src=\"/BackToTopArrowAlt.svg\"\r\n            onClick={() => {\r\n              window.scrollTo(0, 0);\r\n            }}\r\n          ></FixedIconToTop> */}\r\n        </DivWithDisplay>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nBidQuotePage.defaultProps = {};\r\n\r\nexport default BidQuotePage;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\n\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\n\r\nimport {\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnPropWidth,\r\n  FlexRowCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { LeftCont } from \"../../StylesheetComps/Cont\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\n\r\nimport { Cont, ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { GetInvoicesByUser } from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  MediumHeader100PercentWidth,\r\n  StyledHRGreyBreak,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../StylesheetComps/LandscapeForm\";\r\nimport { MediumHeader100PercentWidthWhiteText } from \"../../StylesheetComps/Titles\";\r\nimport { Icon45x45 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { MobileWideGreenButton } from \"../../MobileComponents/Buttons\";\r\n\r\nconst BillingScreen = () => {\r\n  const [roleNum, setRoleNum] = useState(1000);\r\n  const [invoiceArray, setInvoiceArray] = useState([]);\r\n\r\n  const [noInvoicesText, setNoInvoicesText] = useState(\"\");\r\n\r\n  // Define a function to set the user invoices\r\n  const SetUserInvoices = async (userid) => {\r\n    try {\r\n      // Get the invoices by user ID\r\n      const data = await GetInvoicesByUser(userid);\r\n\r\n      // If the invoices are found, set the invoice array and the no invoices text\r\n      if (data !== null) {\r\n        setInvoiceArray(data);\r\n        if (data.length <= 0) {\r\n          setNoInvoicesText(\"No Invoices Available\");\r\n        }\r\n      }\r\n    } catch (error) {\r\n      // Handle the error\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  var userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    SetUserInvoices(userinfo.Id);\r\n    setRoleNum(userinfo.Role);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    if (roleNum !== 1000) {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <FlexColumn81vwLightGrey>\r\n            <ActionMenu\r\n              mobilePageProp=\"Billing\"\r\n              pageProp={\"Billing\"}\r\n              billingbottom={\"4px solid \" + ColorPalette.PrimaryButtonBlue}\r\n            ></ActionMenu>\r\n            <ContentCont77vw>\r\n              <FlexColumnCont\r\n                justifycontent=\"flex-start\"\r\n                width=\"73vw\"\r\n                height=\"95%\"\r\n                margin=\"0\"\r\n              >\r\n                <FlexColumnCont\r\n                  alignitems=\"left\"\r\n                  width=\"70vw\"\r\n                  margin=\"0\"\r\n                  height=\"40%\"\r\n                >\r\n                  <FlexColumnCont\r\n                    bgcolor={ColorPalette.DarkGrey}\r\n                    padding=\".75%\"\r\n                    justifycontent=\"flex-start\"\r\n                    margin=\"0\"\r\n                    margintop=\"1%\"\r\n                    height=\"30px\"\r\n                    width=\"99%\"\r\n                    flexdirection=\"row\"\r\n                  >\r\n                    <FlexColumnPropWidth width=\"14%\" alignitems=\"left\">\r\n                      <MediumHeader100PercentWidthWhiteText>\r\n                        Date\r\n                      </MediumHeader100PercentWidthWhiteText>\r\n                    </FlexColumnPropWidth>\r\n\r\n                    <FlexColumnPropWidth width=\"65%\" alignitems=\"left\">\r\n                      <MediumHeader100PercentWidthWhiteText>\r\n                        Project Name\r\n                      </MediumHeader100PercentWidthWhiteText>\r\n                    </FlexColumnPropWidth>\r\n\r\n                    <FlexColumnPropWidth\r\n                      width=\"16%\"\r\n                      height=\"100%\"\r\n                      alignitems=\"left\"\r\n                    >\r\n                      <MediumHeader100PercentWidthWhiteText>\r\n                        View Invoice\r\n                      </MediumHeader100PercentWidthWhiteText>\r\n                    </FlexColumnPropWidth>\r\n                  </FlexColumnCont>\r\n                </FlexColumnCont>\r\n\r\n                <FlexColumnCont\r\n                  margin=\"0\"\r\n                  alignitems=\"left\"\r\n                  width=\"70vw\"\r\n                  height=\"auto\"\r\n                >\r\n                  {invoiceArray.map((o, i) => (\r\n                    <FlexColumnCont\r\n                      margin=\"0\"\r\n                      alignitems=\"left\"\r\n                      width=\"70vw\"\r\n                      height=\"auto\"\r\n                    >\r\n                      <FlexColumnCont\r\n                        mobilewidth=\"90vw\"\r\n                        justifycontent=\"flex-start\"\r\n                        mobilejustifycontent=\"space-between\"\r\n                        margin=\"0\"\r\n                        margintop=\"0%\"\r\n                        borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n                        height=\"auto\"\r\n                        width=\"99%\"\r\n                        flexdirection=\"row\"\r\n                      >\r\n                        <FlexColumnPropWidth width=\"15%\" mobiledisplay=\"flex\">\r\n                          <MediumHeader100PercentWidth>\r\n                            {o.Upload_Time.substring(0, 10)}\r\n                          </MediumHeader100PercentWidth>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth width=\"62%\" alignitems=\"left\">\r\n                          <MediumHeader100PercentWidth>\r\n                            {o.Tittle}\r\n                          </MediumHeader100PercentWidth>\r\n                        </FlexColumnPropWidth>\r\n\r\n                        <FlexColumnPropWidth\r\n                          width=\"15%\"\r\n                          height=\"100%\"\r\n                          mobiledisplay=\"flex\"\r\n                        >\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href={window.$IMGURL + o.File}\r\n                            target=\"_blank\"\r\n                          >\r\n                            <Icon45x45 src=\"/Eye_Icon.svg\"></Icon45x45>\r\n                          </a>\r\n                        </FlexColumnPropWidth>\r\n                      </FlexColumnCont>\r\n                    </FlexColumnCont>\r\n                  ))}\r\n\r\n                  <br></br>\r\n\r\n                  <FlexColumnCont mobilewidth=\"100%\">\r\n                    <SmallHeaderLeagueSpartan>\r\n                      {noInvoicesText}\r\n                    </SmallHeaderLeagueSpartan>\r\n                  </FlexColumnCont>\r\n\r\n                  <br></br>\r\n                  <StyledHRGreyBreak></StyledHRGreyBreak>\r\n                  <br></br>\r\n                </FlexColumnCont>\r\n              </FlexColumnCont>\r\n\r\n              <FlexColumnContCenterAlign>\r\n                <SmallHeaderLeagueSpartan>\r\n                  Need Help With Your Billing Information?\r\n                </SmallHeaderLeagueSpartan>\r\n                <br></br>\r\n                <a\r\n                  rel=\"noreferrer\"\r\n                  href=\"https://www.newrhodesconstruction.com/contact-us/\"\r\n                  target={\"_blank\"}\r\n                  style={{ textDecoration: \"none\" }}\r\n                >\r\n                  <MobileWideGreenButton>Contact Us</MobileWideGreenButton>\r\n                </a>\r\n              </FlexColumnContCenterAlign>\r\n            </ContentCont77vw>\r\n          </FlexColumn81vwLightGrey>\r\n        </Cont>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  } else if (roleNum !== 1000) {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ActionMenu\r\n            mobilePageProp=\"Billing\"\r\n            pageProp={\"Billing\"}\r\n            billingbottom={\"4px solid \" + ColorPalette.PrimaryButtonBlue}\r\n          ></ActionMenu>\r\n          <ContentCont77vw>\r\n            <FlexColumnCont\r\n              justifycontent=\"flex-start\"\r\n              width=\"73vw\"\r\n              height=\"95%\"\r\n              margin=\"0\"\r\n            >\r\n              <FlexColumnCont\r\n                alignitems=\"left\"\r\n                width=\"70vw\"\r\n                margin=\"0\"\r\n                height=\"40%\"\r\n              >\r\n                <FlexColumnCont\r\n                  bgcolor={ColorPalette.DarkGrey}\r\n                  padding=\".75%\"\r\n                  justifycontent=\"flex-start\"\r\n                  margin=\"0\"\r\n                  margintop=\"1%\"\r\n                  height=\"30px\"\r\n                  width=\"99%\"\r\n                  flexdirection=\"row\"\r\n                >\r\n                  <FlexColumnPropWidth width=\"100px\" alignitems=\"left\">\r\n                    <MediumHeader100PercentWidthWhiteText>\r\n                      Date\r\n                    </MediumHeader100PercentWidthWhiteText>\r\n                  </FlexColumnPropWidth>\r\n\r\n                  <FlexColumnPropWidth width=\"250px\" alignitems=\"left\">\r\n                    <MediumHeader100PercentWidthWhiteText>\r\n                      Project Name\r\n                    </MediumHeader100PercentWidthWhiteText>\r\n                  </FlexColumnPropWidth>\r\n\r\n                  <FlexColumnPropWidth width=\"200px\" alignitems=\"left\">\r\n                    <MediumHeader100PercentWidthWhiteText>\r\n                      Invoice Number\r\n                    </MediumHeader100PercentWidthWhiteText>\r\n                  </FlexColumnPropWidth>\r\n\r\n                  <FlexColumnPropWidth width=\"240px\" alignitems=\"left\">\r\n                    <MediumHeader100PercentWidthWhiteText>\r\n                      Address\r\n                    </MediumHeader100PercentWidthWhiteText>\r\n                  </FlexColumnPropWidth>\r\n\r\n                  <FlexColumnPropWidth\r\n                    width=\"150px\"\r\n                    height=\"100%\"\r\n                    alignitems=\"left\"\r\n                  >\r\n                    <MediumHeader100PercentWidthWhiteText>\r\n                      View Invoice\r\n                    </MediumHeader100PercentWidthWhiteText>\r\n                  </FlexColumnPropWidth>\r\n                </FlexColumnCont>\r\n              </FlexColumnCont>\r\n\r\n              <FlexColumnCont\r\n                margin=\"0\"\r\n                alignitems=\"left\"\r\n                width=\"70vw\"\r\n                height=\"auto\"\r\n              >\r\n                {invoiceArray.map((o, i) => (\r\n                  <FlexColumnCont\r\n                    margin=\"0\"\r\n                    alignitems=\"left\"\r\n                    width=\"70vw\"\r\n                    height=\"auto\"\r\n                  >\r\n                    <FlexColumnCont\r\n                      mobilewidth=\"90vw\"\r\n                      justifycontent=\"flex-start\"\r\n                      mobilejustifycontent=\"space-between\"\r\n                      margin=\"0\"\r\n                      margintop=\"0%\"\r\n                      borderbottom={\"1px solid \" + ColorPalette.PrimaryGrey}\r\n                      height=\"auto\"\r\n                      width=\"99%\"\r\n                      flexdirection=\"row\"\r\n                    >\r\n                      <FlexColumnPropWidth width=\"110px\" mobiledisplay=\"flex\">\r\n                        <MediumHeader100PercentWidth>\r\n                          {o.Upload_Time.substring(0, 10)}\r\n                        </MediumHeader100PercentWidth>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"250px\" alignitems=\"left\">\r\n                        <MediumHeader100PercentWidth>\r\n                          {o.Tittle}\r\n                        </MediumHeader100PercentWidth>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"200px\" alignitems=\"left\">\r\n                        <MediumHeader100PercentWidth>\r\n                          #{o.Number}\r\n                        </MediumHeader100PercentWidth>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"200px\" alignitems=\"left\">\r\n                        <MediumHeader100PercentWidth>\r\n                          {o.Address}\r\n                        </MediumHeader100PercentWidth>\r\n                      </FlexColumnPropWidth>\r\n\r\n                      <FlexColumnPropWidth width=\"200px\" mobiledisplay=\"flex\">\r\n                        <a\r\n                          rel=\"noreferrer\"\r\n                          href={window.$IMGURL + o.File}\r\n                          target=\"_blank\"\r\n                        >\r\n                          <Icon45x45 src=\"/Eye_Icon.svg\"></Icon45x45>\r\n                        </a>\r\n                      </FlexColumnPropWidth>\r\n                    </FlexColumnCont>\r\n                  </FlexColumnCont>\r\n                ))}\r\n\r\n                <br></br>\r\n\r\n                <FlexColumnCont mobilewidth=\"100%\">\r\n                  <SmallHeaderLeagueSpartan>\r\n                    {noInvoicesText}\r\n                  </SmallHeaderLeagueSpartan>\r\n                </FlexColumnCont>\r\n\r\n                <br></br>\r\n                <StyledHRGreyBreak></StyledHRGreyBreak>\r\n                <br></br>\r\n              </FlexColumnCont>\r\n\r\n              <FlexRowCont\r\n                justifycontent=\"flex-start\"\r\n                alignitems=\"center\"\r\n                width=\"95%\"\r\n              >\r\n                <FlexColumnCont\r\n                  justifycontent=\"center\"\r\n                  alignitems=\"left\"\r\n                  width=\"45%\"\r\n                  height=\"auto\"\r\n                  margin=\"0\"\r\n                >\r\n                  <SmallHeaderLeagueSpartan>\r\n                    Billing Information\r\n                  </SmallHeaderLeagueSpartan>\r\n                  <MediumHeader100PercentWidth>\r\n                    Need to change your billing information?\r\n                  </MediumHeader100PercentWidth>\r\n                </FlexColumnCont>\r\n                <a\r\n                  rel=\"noreferrer\"\r\n                  href=\"https://www.newrhodesconstruction.com/contact-us/\"\r\n                  target={\"_blank\"}\r\n                  style={{ textDecoration: \"none\" }}\r\n                >\r\n                  <RegularResponsiveButton>Contact Us</RegularResponsiveButton>\r\n                </a>\r\n              </FlexRowCont>\r\n            </FlexColumnCont>\r\n          </ContentCont77vw>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nBillingScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default BillingScreen;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport moment from \"moment\";\r\nimport {\r\n  AddQuoteRevision,\r\n  BidStatus,\r\n  GetCaseById,\r\n  GetQuoteById,\r\n  QuoteStatus,\r\n  SetQuoteTo_Buy_Install,\r\n  SetQuoteTo_Created,\r\n  SetQuoteTo_Expire,\r\n  SetQuoteTo_Notify,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { MediumHeader100PercentWidth } from \"../../StylesheetComps/Titles\";\r\nimport { DivWithDisplay, FlexColumnPropWidth } from \"../../StylesheetComps/Cont\";\r\nimport { LargeResponsiveButton } from \"../../StylesheetComps/AuthSheet\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { CaseStatus } from \"../../StylesheetComps/CaseStatus\";\r\n\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport Dropdown from \"../DropdownMenu\";\r\nimport { GetCurrentTime } from \"../../API_Functions/Utility_Functions\";\r\nimport styled from \"styled-components\";\r\n\r\nconst CaseCardContainer = styled(DivWithDisplay)`\r\n  padding: 5px;\r\n  background-color: ${({ isOdd }) => (isOdd ? '#FCFDFB' : '#ffffff')};\r\n  display: flex;\r\n  justify-content: space-evenly;\r\n  transition: padding 0.2s ease, background-color 0.2s ease;\r\n\r\n  &:hover {\r\n    padding: 10px; \r\n    background-color: #F8F6F6;\r\n  }\r\n`;\r\n\r\nconst ProposalCardGuide = ({\r\n  proposalObj,\r\n  quoteid,\r\n  proposallist,\r\n  UpdateProjectUI,\r\n  DeleteProposal,\r\n}) => {\r\n  const [continueQuoteDisplay, setContinueQuoteDisplay] = useState(\"none\");\r\n  const [notifyHomeownerDisplay, setNotifyHomeownerDisplay] = useState(\"none\");\r\n  const [editQuoteDisplay, setEditQuoteDisplay] = useState(\"block\");\r\n  const [highestRevisionNumber] = useState(0);\r\n  const [savingRevision, setSavingRevision] = useState(false);\r\n  const [estimateTextWidth, setEstimateTextWidth] = useState(\"100%\");\r\n\r\n  const revisionMarginLeft = \"0px\";\r\n  const proposalBorder = \"1px solid \" + ColorPalette.PrimaryGrey;\r\n  const revisionBorder = \"1px solid \" + ColorPalette.TertiaryGrey;\r\n\r\n  const [statusText, setStatusText] = useState(\"\");\r\n  const [revisionText, setRevisionText] = useState(\"\");\r\n  const [statusColor, setStatusColor] = useState(\"\");\r\n  const [marginLeftRevision, setMarginLeftRevision] = useState(\"\");\r\n  const [revisionBorderProp, setRevisionBorderProp] = useState(proposalBorder);\r\n\r\n  const history = useHistory();\r\n  var quotetag = \"\";\r\n\r\n  // const UpdateUI_BasedOnQuoteStatus = async (status, revision) => {\r\n  //   if (status !== null && revision !== null) {\r\n  //     switch (status) {\r\n  //       case QuoteStatus.Created:\r\n  //         setStatusText(\"Created\");\r\n  //         setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n  //         setNotifyHomeownerDisplay(\"block\");\r\n  //         setEditQuoteDisplay(\"block\");\r\n  //         break;\r\n  //       case QuoteStatus.UserNotified:\r\n  //         setStatusText(\"Sent\");\r\n  //         setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n  //         setNotifyHomeownerDisplay(\"block\");\r\n  //         setEditQuoteDisplay(\"block\");\r\n  //         break;\r\n  //       case QuoteStatus.RevisionRequested:\r\n  //         setStatusText(\"Revision Pending\");\r\n  //         setStatusColor(ColorPalette.PrimaryGrey);\r\n  //         break;\r\n  //       case QuoteStatus.Approved:\r\n  //         setStatusText(\"Approved\");\r\n  //         setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n  //         setEditQuoteDisplay(\"block\");\r\n  //         break;\r\n  //       case QuoteStatus.Declined:\r\n  //         setStatusText(\"Declined\");\r\n  //         setStatusColor(ColorPalette.PrimaryRed);\r\n  //         setEditQuoteDisplay(\"block\");\r\n  //         break;\r\n  //       case QuoteStatus.Buy:\r\n  //         setStatusText(\"Supply Material\");\r\n  //         setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n  //         break;\r\n  //       case QuoteStatus.Buy_Install:\r\n  //         setStatusText(\"Accepted\");\r\n  //         setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n  //         break;\r\n  //       case QuoteStatus.Expired:\r\n  //         setStatusText(\"Expired\");\r\n  //         setStatusColor(ColorPalette.PrimaryRed);\r\n  //         break;\r\n  //       case QuoteStatus.Canceled:\r\n  //         setStatusText(\"Cancelled\");\r\n  //         setStatusColor(ColorPalette.PrimaryRed);\r\n  //         break;\r\n  //       default:\r\n  //     }\r\n  //     if (proposalObj.Tittle !== null) {\r\n  //       quotetag = \" - \" + proposalObj.Tittle;\r\n  //     } else {\r\n  //       quotetag = \" \";\r\n  //     }\r\n  //     if (proposalObj.Revision === 0) {\r\n  //       switch (proposalObj.Proposal) {\r\n  //         case 0:\r\n  //           setRevisionText(\"Proposal\" + quotetag);\r\n  //           break;\r\n  //         default:\r\n  //           setRevisionText(\"Option \" + proposalObj.Proposal + quotetag);\r\n  //       }\r\n  //     } else {\r\n  //       switch (proposalObj.Proposal) {\r\n  //         case 0:\r\n  //           setEstimateTextWidth(\"85%\");\r\n  //           setMarginLeftRevision(revisionMarginLeft);\r\n  //           setRevisionBorderProp(revisionBorder);\r\n  //           setRevisionText(\r\n  //             \"Proposal - Revision \" + proposalObj.Revision + quotetag\r\n  //           );\r\n  //           break;\r\n  //         default:\r\n  //           setEstimateTextWidth(\"85%\");\r\n  //           setRevisionBorderProp(revisionBorder);\r\n  //           setMarginLeftRevision(revisionMarginLeft);\r\n  //           setRevisionText(\r\n  //             \"Option \" +\r\n  //               proposalObj.Proposal +\r\n  //               \" Revision \" +\r\n  //               proposalObj.Revision +\r\n  //               quotetag\r\n  //           );\r\n  //       }\r\n  //     }\r\n  //   }\r\n  // };\r\n\r\n  const UpdateUI_BasedOnQuoteStatus = async (status, revision) => {\r\n    if (status !== null && revision !== null) {\r\n      switch (status) {\r\n        case QuoteStatus.Created:\r\n          setStatusText(\"Created\");\r\n          setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n          setNotifyHomeownerDisplay(\"block\");\r\n          setEditQuoteDisplay(\"block\");\r\n          break;\r\n        case QuoteStatus.UserNotified:\r\n          setStatusText(\"Sent\");\r\n          setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n          setNotifyHomeownerDisplay(\"block\");\r\n          setEditQuoteDisplay(\"block\");\r\n          break;\r\n        case QuoteStatus.RevisionRequested:\r\n          setStatusText(\"Revision Pending\");\r\n          setStatusColor(ColorPalette.PrimaryGrey);\r\n          break;\r\n        case QuoteStatus.Approved:\r\n          setStatusText(\"Approved\");\r\n          setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n          setEditQuoteDisplay(\"block\");\r\n          break;\r\n        case QuoteStatus.Declined:\r\n          setStatusText(\"Declined\");\r\n          setStatusColor(ColorPalette.PrimaryRed);\r\n          setEditQuoteDisplay(\"block\");\r\n          break;\r\n        case QuoteStatus.Buy:\r\n          setStatusText(\"Supply Material\");\r\n          setStatusColor(ColorPalette.PrimaryButtonBlue);\r\n          break;\r\n        case QuoteStatus.Buy_Install:\r\n          setStatusText(\"Deposit Paid\");\r\n          setStatusColor(ColorPalette.PrimaryGreen);\r\n          break;\r\n        case QuoteStatus.Expired:\r\n          setStatusText(\"Expired\");\r\n          setStatusColor(ColorPalette.PrimaryRed);\r\n          break;\r\n        case QuoteStatus.Canceled:\r\n          setStatusText(\"Cancelled\");\r\n          setStatusColor(ColorPalette.PrimaryRed);\r\n          break;\r\n        default:\r\n      }\r\n  \r\n      if (proposalObj.Tittle !== null) {\r\n        quotetag = proposalObj.Tittle;\r\n      } else {\r\n        quotetag = \"\";\r\n      }\r\n  \r\n      setEstimateTextWidth(\"85%\");\r\n      setMarginLeftRevision(revisionMarginLeft);\r\n      setRevisionBorderProp(revisionBorder);\r\n  \r\n      if (quotetag !== \"\") {\r\n        setRevisionText(quotetag);\r\n      }\r\n    }\r\n  };\r\n  \r\n\r\n  const UpdateUI_BasedOnCaseStatus = async (status) => {\r\n    if (status !== null) {\r\n      switch (proposalObj.CaseStatus) {\r\n        case CaseStatus.Accepted:\r\n          setContinueQuoteDisplay(\"block\");\r\n          break;\r\n\r\n        default:\r\n          setContinueQuoteDisplay(\"none\");\r\n          break;\r\n      }\r\n    }\r\n  };\r\n\r\n  const DuplicateProposal = async (proposalObj) => {\r\n    const quoteData = await GetQuoteById(proposalObj.Id)\r\n    if(quoteData !== null){\r\n      var newProposalObject = quoteData.quote\r\n      var data = await GetCaseById(newProposalObject.Case_Id);\r\n      if (data != null) {\r\n        var quotes = data.Case.Quotes;\r\n        var proposal = 0;\r\n        quotes.forEach((q) => {\r\n          if (q.Proposal > proposal) {\r\n            proposal = q.Proposal;\r\n          }\r\n        });\r\n        newProposalObject.Proposal = proposal + 1;\r\n        newProposalObject.Revision = 0;\r\n        newProposalObject.AddTime = await GetCurrentTime();\r\n  \r\n        setSavingRevision(true);\r\n        await AddProposal(newProposalObject);\r\n      }\r\n    }\r\n  \r\n  }\r\n\r\n  const AddProposal = async (proposalObj) => {\r\n    try {\r\n      await AddQuoteRevision(proposalObj);\r\n    } catch (error) {\r\n      console.error('Error while adding quote revision:', error);\r\n    } finally {\r\n      setSavingRevision(false);\r\n      UpdateProjectUI()\r\n    }\r\n  };\r\n\r\n  const MarkAsAccepted = async (quoteid) => {\r\n    const data = await SetQuoteTo_Buy_Install(quoteid)\r\n    if(data !== null) {\r\n      UpdateProjectUI()\r\n      setSavingRevision(false)\r\n    }\r\n  }\r\n\r\n  const ArchiveEstimate = async (quoteid) => {\r\n    const data = await SetQuoteTo_Expire(quoteid)\r\n    if(data !== null){\r\n      UpdateProjectUI()\r\n      setSavingRevision(false)\r\n    }\r\n  }\r\n\r\n  const MarkAsCreated = async (quoteid) => {\r\n    const data = await SetQuoteTo_Created(quoteid)\r\n    if(data !== null){\r\n      UpdateProjectUI()\r\n      setSavingRevision(false)\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    UpdateUI_BasedOnQuoteStatus(proposalObj.QuoteStatus, proposalObj.Revision);\r\n    if(proposalObj.BidFlag === BidStatus.Bidding)\r\n      setStatusText(\"Under bidding\");\r\n  }, [proposalObj.QuoteStatus]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    UpdateUI_BasedOnCaseStatus(proposalObj.CaseStatus);\r\n  }, [proposalObj.CaseStatus]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if(proposalObj.BidFlag === BidStatus.Bidding)\r\n      setStatusText(\"Under bidding\");\r\n  } ); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const NotifyHomeowner = async (quoteid) => {\r\n    if (quoteid !== 0) {\r\n      var data = await SetQuoteTo_Notify(quoteid);\r\n      if (data !== null) {\r\n        setNotifyHomeownerDisplay(\"none\");\r\n        alert(\"Notification Sent\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const GotoProposalDisplayPage = async (quotestatus, revisionnumber) => {\r\n    switch (quotestatus) {\r\n      case QuoteStatus.RevisionRequested:\r\n        history.push(\r\n          \"/viewestimatestaff/\" +\r\n            params.Id +\r\n            \"/\" +\r\n            params.storeId +\r\n            \"/\" +\r\n            params.caseId +\r\n            \"/\" +\r\n            proposalObj.Id +\r\n            \"/0\" \r\n          \r\n        );\r\n        break;\r\n\r\n      default:\r\n        // history.push('/viewquote/'+params.Id+\"/\"+params.storeId+\"/\"+params.caseId+\"/\"+proposalObj.Id+\"/\"+numberOfQuotes)\r\n        history.push(\r\n          \"/viewestimatestaff/\" +\r\n            params.Id +\r\n            \"/\" +\r\n            params.storeId +\r\n            \"/\" +\r\n            params.caseId +\r\n            \"/\" +\r\n            proposalObj.Id +\r\n            \"/0\" \r\n           \r\n            \r\n        );\r\n        break;\r\n    }\r\n  };\r\n\r\n  var numberOfQuotes = 0;\r\n  const params = useParams();\r\n  if (savingRevision === true) {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  } else {\r\n    return (\r\n      <CaseCardContainer>\r\n      <FlexColumnCont\r\n        marginleft={marginLeftRevision}\r\n        mobilewidth=\"95vw\"\r\n        justifycontent=\"space-between\"\r\n        margin=\"0\"\r\n        mobilepadding='2%'\r\n        margintop=\"0%\"\r\n        borderbottom={revisionBorderProp}\r\n        height=\"100%\"\r\n        width=\"100%\"\r\n        flexdirection=\"row\"\r\n      >\r\n        {/* <Icon30px30pxPointer\r\n          // display={\r\n          //   proposalObj?.QuoteStatus === QuoteStatus.Buy ||\r\n          //   proposalObj?.QuoteStatus === QuoteStatus.Buy_Install\r\n          //     ? \"block\"\r\n          //     : \"none\"\r\n          // }\r\n          onClick={()=>{if(proposalObj?.QuoteStatus === QuoteStatus.Buy ||\r\n            proposalObj?.QuoteStatus === QuoteStatus.Buy_Install){\r\n              MarkAsCreated(quoteid)\r\n            } else {\r\n              MarkAsAccepted(quoteid)\r\n            }\r\n            setSavingRevision(true)\r\n          }}\r\n          src={proposalObj?.QuoteStatus === QuoteStatus.Buy ||\r\n          proposalObj?.QuoteStatus === QuoteStatus.Buy_Install\r\n            ? \"/Green_Checkmark_Icon.svg\"\r\n            : \"/White.png\"}\r\n        ></Icon30px30pxPointer> */}\r\n    {\r\n  proposalObj.lockedEstimate === true ? (\r\n    <RegularResponsiveButton bgcolor={ColorPalette.PrimaryRed}>Locked-In</RegularResponsiveButton>\r\n  ) : null\r\n}\r\n\r\n        {/* Estimate Name */}\r\n\r\n        <FlexColumnPropWidth mobileheight='45px' mobiledisplay=\"flex\" width=\"500px\" mobilewidth=\"145px\">\r\n          <MediumHeader100PercentWidth\r\n            mobilefontsize='14px'\r\n            cursor=\"pointer\"\r\n            onClick={() => {\r\n              GotoProposalDisplayPage(\r\n                proposalObj.QuoteStatus,\r\n                highestRevisionNumber\r\n              );\r\n            }}\r\n            width={estimateTextWidth}\r\n          >\r\n            {revisionText}\r\n          </MediumHeader100PercentWidth>\r\n        </FlexColumnPropWidth>\r\n\r\n        {/* Date of Estimate */}\r\n\r\n        <FlexColumnPropWidth mobiledisplay=\"flex\" width=\"200px\" mobilewidth='120px'>\r\n          <MediumHeader100PercentWidth\r\n            mobilefontsize='14px'\r\n            cursor=\"pointer\"\r\n            onClick={() => {\r\n              GotoProposalDisplayPage(\r\n                proposalObj.QuoteStatus,\r\n                highestRevisionNumber\r\n              );\r\n            }}\r\n            width={estimateTextWidth}\r\n          >\r\n            {moment(proposalObj.AddTime).format('ll')}\r\n          </MediumHeader100PercentWidth>\r\n        </FlexColumnPropWidth>\r\n\r\n        {/* Status (Desktop Only) */}\r\n\r\n        <FlexColumnPropWidth\r\n          justifycontent=\"flex-start\"\r\n          flexdirection=\"row\"\r\n          width=\"20%\"\r\n          mobiledisplay='block'\r\n        >\r\n          <LargeResponsiveButton\r\n            mobilewidth='15vw'\r\n            mobileheight='2vh'\r\n            mobilelineheight='2.5vh'\r\n            bgcolor={statusColor}\r\n            onClick={() => {\r\n              GotoProposalDisplayPage(\r\n                proposalObj.QuoteStatus,\r\n                highestRevisionNumber\r\n              );\r\n            }}\r\n          >\r\n            {statusText}\r\n          </LargeResponsiveButton>\r\n        </FlexColumnPropWidth>\r\n\r\n        {/* Dropdown */}\r\n\r\n        <FlexColumnPropWidth\r\n          mobiledisplay=\"flex\"\r\n          justifycontent=\"flex-start\"\r\n          flexdirection=\"row\"\r\n          width=\"5%\"\r\n        >\r\n        <Dropdown currentPage={'proposalCardGuide'} quoteId={proposalObj.Id}\r\n        deleteProposal={()=>{DeleteProposal()}} notifyProposal={()=>{NotifyHomeowner(quoteid);}} archiveProposal={()=>{setSavingRevision(true); ArchiveEstimate(quoteid)}} unArchiveProposal={()=>{setSavingRevision(true); MarkAsCreated(quoteid)}} acceptProposal={()=>{MarkAsAccepted(quoteid)}} resetProposal={()=>{\r\n          MarkAsCreated(quoteid)\r\n        }} duplicateProposal={()=>{DuplicateProposal(proposalObj)}}\r\n        ></Dropdown>\r\n        </FlexColumnPropWidth>\r\n      </FlexColumnCont>\r\n      </CaseCardContainer>\r\n    );\r\n  }\r\n};\r\n\r\n//Color Coordination -\r\n\r\nProposalCardGuide.defaultProps = {\r\n  UpdateProjectUI: () => {},\r\n  DeleteProposal: () => {},\r\n  proposallist: [],\r\n};\r\n\r\nexport default ProposalCardGuide;\r\n","import React, { useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { AddInvoice } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  GetCurrentTime,\r\n  UploadFileToCloud,\r\n} from \"../../../API_Functions/Utility_Functions\";\r\nimport { TextInput300x50 } from \"../../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnContGreenBorderTopRounded550pxHeight,\r\n  FlexRowCont,\r\n  FlexRowCont100x50Percent,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { Cont100PercentWidth } from \"../../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanHeaderSmall,\r\n  RegularTextBoldRed,\r\n  SmallHeaderLeagueSpartanWidth100Percent,\r\n} from \"../../../StylesheetComps/Titles\";\r\n\r\nconst AddInvoiceWindow = ({\r\n  open,\r\n  CloseWindow,\r\n  RefreshProjectUI,\r\n  invoiceobj,\r\n}) => {\r\n  const params = useParams();\r\n\r\n  const [uploadText, setUploadText] = useState(\"\");\r\n  const [errorText, setErrorText] = useState(\"\");\r\n\r\n  const UploadInvoice = async (e) => {\r\n    if (e.target.files[0] !== null) {\r\n      var file = e.target.files[0];\r\n      var pic = await UploadFileToCloud(file);\r\n      if (pic !== null) {\r\n        setUploadText(\"File uploaded successfully\");\r\n        invoiceobj.File = pic;\r\n        setErrorText(\"\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const AddInvoiceToProject = async (caseid, invoiceobj) => {\r\n    if (caseid !== 0) {\r\n      invoiceobj.Case_Id = caseid;\r\n      invoiceobj.Upload_Time = await GetCurrentTime();\r\n      var data = await AddInvoice(invoiceobj);\r\n      if (data !== null) {\r\n        ResetWindow();\r\n        RefreshProjectUI();\r\n      } else {\r\n        setErrorText(\"Error Uploading your Invoice, please try later.\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const ResetWindow = async () => {\r\n    CloseWindow();\r\n    setErrorText(\"\");\r\n    setUploadText(\"\");\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContGreenBorderTopRounded550pxHeight>\r\n        <Cont100PercentWidth>\r\n          <br></br>\r\n\r\n          <FlexRowCont justifycontent=\"flex-start\">\r\n            <SmallHeaderLeagueSpartanWidth100Percent>\r\n              Add an invoice to this project:\r\n            </SmallHeaderLeagueSpartanWidth100Percent>\r\n            <TextInput300x50\r\n              type=\"file\"\r\n              onChange={(e) => {\r\n                UploadInvoice(e);\r\n              }}\r\n            ></TextInput300x50>\r\n          </FlexRowCont>\r\n\r\n          <br></br>\r\n\r\n          <FlexRowCont justifycontent=\"flex-start\">\r\n            <SmallHeaderLeagueSpartanWidth100Percent>\r\n              Invoice Number\r\n            </SmallHeaderLeagueSpartanWidth100Percent>\r\n            <TextInput300x50\r\n              placeholder=\"Invoice #\"\r\n              onChange={(e) => {\r\n                invoiceobj.Number = e.target.value;\r\n              }}\r\n              inputheight=\"1%\"\r\n              inputmargintop=\"0%\"\r\n            ></TextInput300x50>\r\n          </FlexRowCont>\r\n\r\n          <br></br>\r\n\r\n          <FlexRowCont justifycontent=\"flex-start\">\r\n            <SmallHeaderLeagueSpartanWidth100Percent>\r\n              Address\r\n            </SmallHeaderLeagueSpartanWidth100Percent>\r\n            <TextInput300x50\r\n              placeholder=\"Address\"\r\n              onChange={(e) => {\r\n                invoiceobj.Address = e.target.value;\r\n              }}\r\n              inputheight=\"1%\"\r\n              inputmargintop=\"0%\"\r\n            ></TextInput300x50>\r\n          </FlexRowCont>\r\n        </Cont100PercentWidth>\r\n\r\n        <LeagueSpartanHeaderSmall>{uploadText}</LeagueSpartanHeaderSmall>\r\n        <RegularTextBoldRed>{errorText}</RegularTextBoldRed>\r\n        <FlexRowCont100x50Percent>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              ResetWindow();\r\n            }}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            onClick={() => {\r\n              AddInvoiceToProject(params.caseId, invoiceobj);\r\n            }}\r\n          >\r\n            Save Invoice\r\n          </RegularResponsiveButton>\r\n        </FlexRowCont100x50Percent>\r\n      </FlexColumnContGreenBorderTopRounded550pxHeight>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nAddInvoiceWindow.defaultProps = {\r\n  CloseWindow: () => {},\r\n  ContinueRevising: () => {},\r\n  newCreatedRevision: () => {},\r\n  RefreshProjectUI: () => {},\r\n};\r\n\r\nexport default AddInvoiceWindow;\r\n","import React from \"react\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { SmallTextPadding } from \"../../../StylesheetComps/Titles\";\r\nimport { DeleteInvoiceById } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\nconst DeleteInvoiceWindow = ({\r\n  open,\r\n  CloseWindow,\r\n  invoiceid,\r\n  RefreshProjectUI,\r\n}) => {\r\n  const DeleteInvoiceFromProject = async (invoiceid) => {\r\n    if (invoiceid !== 0) {\r\n      var data = await DeleteInvoiceById(invoiceid);\r\n      if (data === null) {\r\n        RefreshProjectUI();\r\n      }\r\n    }\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContRedBorderTopRounded>\r\n        <SmallHeaderLeagueSpartan>\r\n          You're about to delete this invoice\r\n        </SmallHeaderLeagueSpartan>\r\n        <SmallTextPadding>\r\n          Are you sure you want to delete this invoice?\r\n        </SmallTextPadding>\r\n        <FlexRowCont>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={CloseWindow}\r\n          >\r\n            Return\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              CloseWindow();\r\n              DeleteInvoiceFromProject(invoiceid);\r\n            }}\r\n          >\r\n            Delete\r\n          </RegularResponsiveButton>\r\n        </FlexRowCont>\r\n      </FlexColumnContRedBorderTopRounded>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nDeleteInvoiceWindow.defaultProps = {\r\n  CloseWindow: () => {},\r\n  RefreshProjectUI: () => {},\r\n};\r\n\r\nexport default DeleteInvoiceWindow;\r\n","import React, { useState } from \"react\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { SmallTextPadding } from \"../../../StylesheetComps/Titles\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { DeleteQuoteById } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\nconst DeleteProposalWindow = ({ deleteOpen, CloseWindow, proposalid }) => {\r\n  const [deletingProposal, setDeletingProposal] = useState(false);\r\n\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  const DeleteProposal = async (proposalid, metro_id, store_id) => {\r\n    setDeletingProposal(true);\r\n    var data = await DeleteQuoteById(proposalid);\r\n    if (data == null) {\r\n      CloseWindow();\r\n      history.push(`/cases/${metro_id}/${store_id}`);\r\n    }\r\n  };\r\n\r\n  if (!deleteOpen) return null;\r\n  if (deletingProposal === true) {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  } else {\r\n    return (\r\n      <FixedOverlay200vh>\r\n        <FlexColumnContRedBorderTopRounded>\r\n          <SmallHeaderLeagueSpartan>\r\n            You're about to delete this proposal\r\n          </SmallHeaderLeagueSpartan>\r\n          <SmallTextPadding>\r\n            Are you sure you want to delete this proposal? This proposal will be\r\n            permanently removed and you won’t be able to see it again.\r\n          </SmallTextPadding>\r\n          <FlexRowCont>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryGrey}\r\n              onClick={CloseWindow}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                DeleteProposal(proposalid, params.Id, params.storeId);\r\n              }}\r\n            >\r\n              Delete Proposal\r\n            </RegularResponsiveButton>\r\n          </FlexRowCont>\r\n        </FlexColumnContRedBorderTopRounded>\r\n      </FixedOverlay200vh>\r\n    );\r\n  }\r\n};\r\n\r\nDeleteProposalWindow.defaultProps = {\r\n  CloseWindow: () => {},\r\n};\r\n\r\nexport default DeleteProposalWindow;\r\n","import React from \"react\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnContRedBorderTopRounded,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { SmallTextPadding } from \"../../../StylesheetComps/Titles\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { SetCaseTo_Cancel } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\n\r\nconst GuideCancelProjectWindow = ({ deleteOpen, CloseWindow, projectId }) => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  const CancelProject = async (caseid, metro_id, store_id) => {\r\n    if (caseid !== 0) {\r\n      var data = await SetCaseTo_Cancel(caseid);\r\n      if (data !== null) {\r\n        alert(\"Case Cancelled\");\r\n        history.push(\"/cases/\" + metro_id + \"/\" + store_id);\r\n      }\r\n    }\r\n  };\r\n\r\n  if (!deleteOpen) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContRedBorderTopRounded>\r\n        <SmallHeaderLeagueSpartan>\r\n          You're about to cancel this project\r\n        </SmallHeaderLeagueSpartan>\r\n        <SmallTextPadding>\r\n          Are you sure you want to cancel this project?\r\n        </SmallTextPadding>\r\n        <FlexRowCont>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryGrey}\r\n            onClick={CloseWindow}\r\n          >\r\n            Return\r\n          </RegularResponsiveButton>\r\n          <RegularResponsiveButton\r\n            bgcolor={ColorPalette.PrimaryRed}\r\n            onClick={() => {\r\n              CloseWindow();\r\n              CancelProject(projectId, params.Id, params.storeId);\r\n            }}\r\n          >\r\n            Cancel\r\n          </RegularResponsiveButton>\r\n        </FlexRowCont>\r\n      </FlexColumnContRedBorderTopRounded>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nGuideCancelProjectWindow.defaultProps = {\r\n  CloseWindow: () => {},\r\n};\r\n\r\nexport default GuideCancelProjectWindow;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont90x95Percent,\r\n  FlexColumnCont95x30Percent,\r\n  FlexColumnContGreenBorderTopRounded550pxHeight,\r\n  FlexRowCont,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  LandscapePara,\r\n  MediumStyledImage,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { AddQuotePhoto } from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { Icon20x20 } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport { LinkText } from \"../../../StylesheetComps/AuthSheet\";\r\n\r\nconst SiteMapOverlayUpload = ({\r\n  open,\r\n  CloseWindow,\r\n  CancelUpload,\r\n  previewsrc,\r\n  quoteObj,\r\n  UploadSuccessful,\r\n  UsePhotoAsOverlay\r\n}) => {\r\n  const SpinnerIcon = \"/Spinner.svg\";\r\n\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n  const [imageCaption, setImageCaption] = useState(\"\");\r\n\r\n  //Upload Boolean prevents Images from getting uploaded twice.\r\n\r\n  const [uploadBoolean, setUploadBoolean] = useState(false);\r\n\r\n  useEffect(() => {\r\n    if (previewsrc !== undefined && previewsrc !== null) {\r\n      if (previewsrc.includes(\"pdf\") || previewsrc.includes(\"PDF\")) {\r\n        setPreviewImage(\"/pdficon.png\");\r\n      } else {\r\n        setPreviewImage(window.$IMGURL + previewsrc);\r\n      }\r\n    }\r\n  }, [previewsrc]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContGreenBorderTopRounded550pxHeight>\r\n        <FlexRowCont\r\n          height=\"100%\"\r\n          justifycontent=\"flex-start\"\r\n          alignitems=\"baseline\"\r\n        >\r\n          <FlexColumnCont90x95Percent>\r\n            <SmallHeaderLeagueSpartan>Preview Photo</SmallHeaderLeagueSpartan>\r\n            <FlexRowCont width=\"40%\" height=\"40%\" marginbottom=\"5%\">\r\n              <MediumStyledImage\r\n                objfit=\"contain\"\r\n                mobileheight=\"20vh\"\r\n                mobilewidth=\"40vw\"\r\n                height=\"100%\"\r\n                src={previewImage}\r\n              ></MediumStyledImage>\r\n            </FlexRowCont>\r\n            <FlexRowCont justifycontent=\"flex-end\">\r\n              <LinkText\r\n                onClick={() => {\r\n                  CancelUpload();\r\n                }}\r\n              >\r\n                Cancel\r\n              </LinkText>\r\n              <RegularResponsiveButton width='200px'\r\n                onClick={() => {\r\n                  setPreviewImage(SpinnerIcon);\r\n                  UsePhotoAsOverlay(previewsrc)\r\n                }}\r\n              >\r\n                Use Photo As Overlay\r\n              </RegularResponsiveButton>\r\n            </FlexRowCont>\r\n          </FlexColumnCont90x95Percent>\r\n          <Icon20x20\r\n            onClick={() => {\r\n              CancelUpload();\r\n            }}\r\n            src=\"/Close.svg\"\r\n          ></Icon20x20>\r\n        </FlexRowCont>\r\n      </FlexColumnContGreenBorderTopRounded550pxHeight>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nSiteMapOverlayUpload.defaultProps = {\r\n  CloseWindow: () => {},\r\n  CancelUpload: () => {},\r\n  UploadSuccessful: () => {},\r\n  UsePhotoAsOverlay: () => {},\r\n};\r\n\r\nexport default SiteMapOverlayUpload;\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport styled, { keyframes, css } from 'styled-components';\r\nimport { AddQuote, GetCaseById, GetQuoteById, GetQuoteObject, UpdateQuote_AccessArea } from '../../API_Functions/CaseQuote_Functions';\r\nimport { AddImageToCloud, GetCurrentTime } from '../../API_Functions/Utility_Functions';\r\nimport { LeagueHeader14px } from '../../MobileComponents/Text';\r\nimport { ColorPalette } from '../../StylesheetComps/Colors';\r\nimport { RegularResponsiveButton } from '../../StylesheetComps/Components';\r\nimport { FlexContSpaceEvenly, FlexDiv } from '../../StylesheetComps/Cont';\r\nimport { FlexDivSpaceAround, FlexDivSpaceBetween } from '../../StylesheetComps/Div';\r\nimport { SmallHeader } from '../../StylesheetComps/Menu';\r\nimport { LeagueSpartanRegular, SmallTitleBold } from '../../StylesheetComps/Titles';\r\nimport { Image300x200, ImageFullWidth } from '../../StylesheetComps/LandscapeForm';\r\nimport { Image80x100px } from '../../StylesheetComps/Imgs/Images';\r\nimport QuotePhotoUploadPreviewWindow from '../../comps/Windows/QuotePhotoUpload';\r\nimport SiteMapOverlayUpload from '../../comps/Windows/SitemapOverlay';\r\nimport { Icon30px30pxPointer } from '../../StylesheetComps/Quote';\r\n\r\n// Styled Components\r\nconst PopupContainer = styled.div`\r\n  width:100vw;\r\n  height:110vh;\r\n  display: ${({visible}) => visible ? 'flex' : 'none'};\r\n  justify-content: center;\r\n  align-items: center;\r\n  position: fixed;\r\n  top: -10vh;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 5;\r\n  background-color: rgba(0, 0, 0, 0.5);\r\n  z-index: 999;\r\n`;\r\n\r\nconst PopupContent = styled.div`\r\n width:${(props) => (props.width ? props.width : \"90%\")};\r\n  max-width: 400px;\r\n  padding: 20px;\r\n  background-color: #fff;\r\n  border-radius: 4px;\r\n`;\r\n\r\nconst InfoText = styled.p`\r\n  margin-bottom: 20px;\r\n`;\r\n\r\nconst InputGroup = styled.div`\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  margin-bottom: 20px;\r\n`;\r\n\r\nconst InputLabel = styled.label`\r\n  display: block;\r\n  margin-bottom: 10px;\r\n`;\r\n\r\nconst Input = styled.input`\r\n  width: 85%;\r\n  padding: 10px;\r\n  margin-right: 30px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 4px;\r\n`;\r\n\r\nconst bounce = keyframes`\r\n  0%, 20%, 50%, 80%, 100% {\r\n    transform: translateY(0);\r\n  }\r\n  40% {\r\n    transform: translateY(-20px);\r\n  }\r\n  60% {\r\n    transform: translateY(-10px);\r\n  }\r\n`;\r\n\r\n\r\nconst MapIcon = styled.span`\r\n  display: inline-block;\r\n  width: 30px;\r\n  height: 30px;\r\n  background: url('/pinicon.svg') no-repeat center;\r\n  background-size: contain;\r\n  cursor: pointer;\r\n  ${({ isBouncing }) => isBouncing && css`\r\n    animation: ${bounce} 1s infinite;\r\n  `}\r\n`;\r\n\r\nconst Button = styled.button`\r\n  padding: 10px 20px;\r\n  border: none;\r\n  border-radius: 4px;\r\n  background-color: #007bff;\r\n  color: #fff;\r\n  cursor: pointer;\r\n`;\r\n\r\n// Popup Component\r\nconst AreaInputPopup = ({ visible, onClose, mapArea, maplength, mapwidth, FinishAccess, CloseWindow, CloseWindowNoAdd, shapes, UsePhotoAsOverlay, createRegular }) => {\r\n    const [infoAcknowledged, setInfoAcknowledged] = useState(false);\r\n    const [errorText, setErrorText] = useState(\"\");\r\n    const [length, setLength] = useState(0);\r\n    const [width, setWidth] = useState(0);\r\n    const [elevation, setElevation] = useState(0);\r\n    const [accessPopup, setAccessPopup] = useState(false); // new state variable for access popup\r\n    const [showInputForm, setShowInputForm] = useState(true);\r\n    const [obstruction, setObstruction] = useState('false');\r\n    const [updateAccess, setUpdateAccess] = useState(false);\r\n    const [uploadCustom, setUploadCustom] = useState(false);\r\n    const [showGifPopup, setShowGifPopup] = useState(false); // New state to control the GIF popup\r\n\r\n    const inputFile = useRef(null);\r\n\r\n    const handleUpload = (event) => {\r\n      setPhoto(event.target.files[0]);\r\n    };\r\n    const history = useHistory();\r\n    const params = useParams();\r\n\r\n    let formdata = new FormData();\r\n    const [photo, setPhoto] = useState(\"\");\r\n    const [previewImage, setPreviewImage] = useState(\"\");\r\n    const [previewImageWindowDisplay, setPreviewImageWindowDisplay] =\r\n    useState(false);\r\n    const handleChange = (event) => {\r\n        setObstruction(event.target.value);\r\n    };\r\n\r\n    const AddPhotoButtonClick = () => {\r\n      inputFile.current.click();\r\n    };  \r\n\r\n    const OpenUploadImageWindow = async (photo) => {\r\n      // We want to use the try-catch pattern here to handle any errors that\r\n      // may occur when making the API call to AddImageToCloud\r\n      try {\r\n        // Check if we have a photo\r\n        if (photo !== null) {\r\n          // Add the photo to the form data\r\n          formdata.append(\"Overlay Photo\", photo);\r\n  \r\n          // Make the API call and store the result in a variable\r\n          const uploadedImage = await AddImageToCloud(formdata);\r\n  \r\n          // If we have a result, set the preview image and open the window\r\n          if (uploadedImage !== null) {\r\n            setPreviewImage(uploadedImage);\r\n            setUploadCustom(true)\r\n          }\r\n        }\r\n      } catch (error) {\r\n        // Handle any errors that occurred during the API call\r\n        console.error(error);\r\n      }\r\n    };\r\n\r\n    useEffect(() => {\r\n      if (photo !== \"\") {\r\n        OpenUploadImageWindow(photo);\r\n      }\r\n    }, [photo]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n    const CreateNewEstimate = async (length, width, elevation, obstruction) => {\r\n      try {\r\n        const quoteObj = await GetQuoteObject()\r\n        if(quoteObj !== null){\r\n          quoteObj.AccessArea.Obstruct = obstruction;\r\n          quoteObj.AccessArea.Width = width;\r\n          quoteObj.AccessArea.Length = length;\r\n          quoteObj.AccessArea.Elevation = elevation;\r\n          var addtime = await GetCurrentTime();\r\n          var proposal = await GetNewQuoteProposalNumber(params.caseId);\r\n          quoteObj.Case_Id = params.caseId;\r\n          quoteObj.AddTime = addtime;\r\n          quoteObj.Proposal = proposal;\r\n          quoteObj.AccessArea.Case_Id = params.caseId;\r\n          quoteObj.Tittle = 'New Estimate:'\r\n          const data = await AddQuote(quoteObj)\r\n          if(data !== null){\r\n            history.push(\r\n              `/viewestimatestaff/${params.Id}/${params.storeId}/${params.caseId}/${data.quote.Id}/0`\r\n            );\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.log(error)\r\n      }\r\n    }\r\n\r\n    const GetNewQuoteProposalNumber = async (caseid) => {\r\n      var data = await GetCaseById(caseid);\r\n      if (data != null) {\r\n        if (data.Case?.Quotes?.length > 0) {\r\n          var proposal = 0;\r\n          data.Case.Quotes.forEach((element) => {\r\n            if (element.Proposal > proposal) proposal = element.Proposal;\r\n          });\r\n          proposal++;\r\n          return proposal;\r\n        } else return 0;\r\n      } else return 0;\r\n    };\r\n  \r\n\r\n    const UpdateAccessFunction = async (length, width, elevation, obstruction) => {\r\n      const quotedata = await GetQuoteById(params.quoteId)\r\n      if(quotedata){\r\n          var item = {\r\n        Id: quotedata?.quote?.AccessArea?.Id,\r\n        Width: width,\r\n        Length: length,\r\n        Elevation: elevation,\r\n        Obstruct: obstruction,\r\n      };\r\n      const data = await UpdateQuote_AccessArea(item)\r\n      if(data){\r\n      CloseWindowNoAdd();\r\n      }\r\n      }\r\n    \r\n    }\r\n  \r\n    const onAccessPopupOK = () => {\r\n        setAccessPopup(false); // close the access popup\r\n      onClose(); // go back to the map\r\n    };\r\n\r\n  useEffect(() => {\r\n  if(maplength){\r\n    setLength(maplength?.toFixed(2))\r\n  }\r\n  }, [maplength]);\r\n\r\n  useEffect(() => {\r\n    if(mapwidth){\r\n      setWidth(mapwidth?.toFixed(2))\r\n    }\r\n  }, [mapwidth]);\r\n\r\n  // useEffect(() => {\r\n  //   if(params.quoteId !== '0'){\r\n  //     setInfoAcknowledged(true)\r\n  //     setUpdateAccess(true)\r\n  //     setShowInputForm(true)\r\n  //   }\r\n  // }, [visible]);\r\n\r\n// return (\r\n//   <PopupContainer visible={visible}>\r\n//     <PopupContent>\r\n//       {!infoAcknowledged && !uploadCustom ? (\r\n//         <>\r\n//           <LeagueHeader14px>New Rhodes Construction SiteMapper™</LeagueHeader14px>\r\n//           <InfoText>\r\n//             Start by choosing to use the map, or uploading a custom overlay for properties with outdated satellite imagery.\r\n//             <br></br>\r\n//           </InfoText>\r\n//           <FlexDivSpaceBetween>\r\n//             <Image300x200 width=\"200px\" height=\"100px\" margin=\"0px\" src=\"/nrcmap.png\"></Image300x200>\r\n//             <Image300x200 width=\"200px\" height=\"100px\" margin=\"0px\" src=\"/siteplanoverlay.jpg\"></Image300x200>\r\n//           </FlexDivSpaceBetween>\r\n//           <br></br>\r\n//           <FlexContSpaceEvenly>\r\n//             <RegularResponsiveButton marginright=\"50px\" onClick={() => setInfoAcknowledged(true)}>Google Map</RegularResponsiveButton>\r\n//             <RegularResponsiveButton onClick={() => {                        AddPhotoButtonClick();}}>Custom Overlay</RegularResponsiveButton>\r\n//           </FlexContSpaceEvenly>\r\n//           <input\r\n//         style={{ display: \"none\" }}\r\n//         ref={inputFile}\r\n//         type=\"file\"\r\n//         onChange={handleUpload}\r\n//       />\r\n//           {/* <RegularResponsiveButton width=\"15px\" onClick={() => setInfoAcknowledged(true)}>\r\n//             OK\r\n//           </RegularResponsiveButton> */}\r\n//         </>\r\n//       ) : uploadCustom ? (\r\n//         <div>\r\n//       <SiteMapOverlayUpload\r\n//       UsePhotoAsOverlay={(previewsrc)=>{UsePhotoAsOverlay(previewsrc);\r\n//         setUploadCustom(false)\r\n//         setInfoAcknowledged(true)\r\n//       }}\r\n//       open={true}\r\n//       CancelUpload={()=>{\r\n//         setPhoto('')\r\n//         setUploadCustom(false)\r\n//       }}\r\n//       previewsrc={previewImage}\r\n//       CloseWindow={() => {\r\n//         setUploadCustom(false)\r\n//       }}\r\n//       UploadSuccessful={() => {\r\n\r\n//       }}\r\n//     ></SiteMapOverlayUpload>\r\n//     </div>\r\n//       ) : (\r\n//         <>\r\n//           {showInputForm && (\r\n//             <form>\r\n//               <LeagueSpartanRegular>{params.quoteId === undefined ? 'Create Estimate, Define Access:' : updateAccess ? 'Update Access Area:' : 'Access Area:'}</LeagueSpartanRegular>\r\n//               <InputLabel>Length</InputLabel>\r\n//               <InputGroup>\r\n//                 <Input value={length} onChange={e => setLength(e.target.value)} required />\r\n//                 {params.quoteId !== undefined && (\r\n//                   <MapIcon \r\n//                   isBouncing={width === 0 && length === 0 ? true : false}\r\n//                   onClick={() => {\r\n//                     onClose('length'); // close the popup\r\n//                   }} />\r\n//                 )}\r\n//               </InputGroup>\r\n//               <InputLabel>Width</InputLabel>\r\n//               <InputGroup>\r\n//                 <Input value={width} onChange={e => setWidth(e.target.value)} required />\r\n//                 {params.quoteId !== undefined && (\r\n//                   <MapIcon\r\n//                   isBouncing={width === 0 && length !== 0 ? true : false}\r\n//                   onClick={() => {\r\n//                     onClose('width'); // close the popup\r\n//                   }} />\r\n//                 )}\r\n//               </InputGroup>\r\n//               <InputLabel>Elevation</InputLabel>\r\n//               <InputGroup>\r\n//                 <Input value={elevation} onChange={e => setElevation(e.target.value)} required />\r\n//                 {/* <MapIcon onClick={() => {\r\n//                   mapArea('elevation');\r\n//                   onClose(); // close the popup\r\n//                 }} /> */}\r\n//               </InputGroup>\r\n//               <LeagueSpartanRegular>Any Obstructions to the Access Area?</LeagueSpartanRegular>\r\n//               <FlexDivSpaceAround>\r\n//                 <label>\r\n//                   <input\r\n//                     type=\"radio\"\r\n//                     value=\"true\"\r\n//                     checked={obstruction === 'true'}\r\n//                     onChange={handleChange}\r\n//                   />\r\n//                   YES\r\n//                 </label>\r\n//                 <label>\r\n//                   <input\r\n//                     type=\"radio\"\r\n//                     value=\"false\"\r\n//                     checked={obstruction === 'false'}\r\n//                     onChange={handleChange}\r\n//                   />\r\n//                   NO\r\n//                 </label>\r\n//               </FlexDivSpaceAround>\r\n//               <br></br>\r\n//               <SmallTitleBold color={ColorPalette.PrimaryRed}>{errorText}</SmallTitleBold>\r\n//               <FlexDiv>\r\n//                 <RegularResponsiveButton width=\"75%\" type=\"submit\" onClick={() => {\r\n//                   if (length == 0 || width == 0) {\r\n//                     setErrorText(\"Please ensure Length and Width are above 0!\");\r\n//                   } else if (shapes?.length < 2) {\r\n//                     setErrorText(\"Please draw both access length and width on the map!\");\r\n//                   } else if (params.quoteId === undefined) {\r\n//                     CreateNewEstimate(length, width, elevation, obstruction);\r\n//                   } else if (updateAccess) {\r\n//                     UpdateAccessFunction(length, width, elevation, obstruction);\r\n//                     // setShowInputForm(false); // hides the input form\r\n//                     // setAccessPopup(false); // shows the access instructions popup\r\n//                   } else {\r\n//                     FinishAccess(length, width, elevation, obstruction);\r\n//                     setShowInputForm(false); // hides the input form\r\n//                     setAccessPopup(true); // shows the access instructions popup\r\n//                   }\r\n//                 }}>\r\n//                   {params.quoteId === undefined ? 'Create Estimate' : updateAccess ? 'Update Changes:' : 'Save'}\r\n//                 </RegularResponsiveButton>\r\n//                 {(params.quoteId === undefined || updateAccess) && (\r\n//                   <RegularResponsiveButton onClick={() => { onClose() }} bgcolor={ColorPalette.PrimaryRed}>Cancel</RegularResponsiveButton>\r\n//                 )}\r\n//               </FlexDiv>\r\n//             </form>\r\n//           )}\r\n//           {accessPopup && (\r\n//             <PopupContent>\r\n//               <LeagueHeader14px>Add Access Items</LeagueHeader14px>\r\n//               <InfoText>\r\n//                 Great! After entering the length, width, and elevation, you can begin estimating on the map.\r\n//                 <br></br>\r\n//                 <br></br>\r\n//                 Start with your access items, then removals, material installation, etc.\r\n//                 <br></br>\r\n//                 <br></br>\r\n//                 Once you're done estimating, hit 'Save Estimate' and you can proceed to your estimate!\r\n//               </InfoText>\r\n//               <RegularResponsiveButton onClick={() => {\r\n//                 CloseWindow(); // close the popup\r\n//                 setAccessPopup(false); // hides the access instructions popup\r\n//               }}>\r\n//                 OK\r\n//               </RegularResponsiveButton>\r\n//             </PopupContent>\r\n//           )}\r\n//         </>\r\n//       )}\r\n//     </PopupContent>\r\n//   </PopupContainer>\r\n// )\r\n\r\nreturn (\r\n  <>\r\n    {/* Original Popup */}\r\n    <PopupContainer visible={visible}>\r\n      <PopupContent>\r\n        {!infoAcknowledged && !uploadCustom && !createRegular ? (\r\n          <>\r\n            <LeagueHeader14px>New Rhodes Construction SiteMapper™</LeagueHeader14px>\r\n            <InfoText>\r\n              Start by choosing to use the map, or uploading a custom overlay for properties with outdated satellite imagery.\r\n              <br></br>\r\n            </InfoText>\r\n            <FlexDivSpaceBetween>\r\n              <Image300x200 width=\"200px\" height=\"100px\" margin=\"0px\" src=\"/nrcmap.png\"></Image300x200>\r\n              <Image300x200 width=\"200px\" height=\"100px\" margin=\"0px\" src=\"/siteplanoverlay.jpg\"></Image300x200>\r\n            </FlexDivSpaceBetween>\r\n            <br></br>\r\n            <FlexContSpaceEvenly>\r\n              <RegularResponsiveButton marginright=\"50px\" onClick={() => setInfoAcknowledged(true)}>Google Map</RegularResponsiveButton>\r\n              <RegularResponsiveButton bgcolor={ColorPalette.PrimaryGrey} \r\n              // onClick={() => { AddPhotoButtonClick(); }}\r\n              >Custom Overlay</RegularResponsiveButton>\r\n            </FlexContSpaceEvenly>\r\n            <input\r\n              style={{ display: \"none\" }}\r\n              ref={inputFile}\r\n              type=\"file\"\r\n              onChange={handleUpload}\r\n            />\r\n          </>\r\n        ) : uploadCustom ? (\r\n          <div>\r\n            <SiteMapOverlayUpload\r\n              UsePhotoAsOverlay={(previewsrc) => {\r\n                UsePhotoAsOverlay(previewsrc);\r\n                setUploadCustom(false);\r\n                setInfoAcknowledged(true);\r\n              }}\r\n              open={true}\r\n              CancelUpload={() => {\r\n                setPhoto('');\r\n                setUploadCustom(false);\r\n              }}\r\n              previewsrc={previewImage}\r\n              CloseWindow={() => {\r\n                setUploadCustom(false);\r\n              }}\r\n              UploadSuccessful={() => {}}\r\n            />\r\n          </div>\r\n        ) : (\r\n          <>\r\n            {showInputForm && (\r\n              <form>\r\n                 {!createRegular\r\n                 ? <FlexDiv>\r\n                 <LeagueSpartanRegular>Need a quick refresh on how to use?</LeagueSpartanRegular>\r\n                 <Icon30px30pxPointer onClick={() => {\r\n                         setShowGifPopup(true); // Show GIF popup when the Length icon is clicked\r\n                       }} src='/questionmark.svg'></Icon30px30pxPointer>\r\n                 </FlexDiv>\r\n                 : null\r\n                  }\r\n                \r\n                <LeagueSpartanRegular>{params.quoteId === undefined ? 'Create Estimate, Define Access:' : updateAccess ? 'Update Access Area:' : 'Access Area:'}</LeagueSpartanRegular>\r\n                <InputLabel>Length</InputLabel>\r\n                <InputGroup>\r\n                  <Input value={length} onChange={(e) => setLength(e.target.value)} required />\r\n                  {params.quoteId !== undefined && (\r\n                    <MapIcon \r\n                      isBouncing={width === 0 && length === 0 ? true : false}\r\n                      onClick={() => {\r\n                        onClose('length'); // Show GIF popup when the Length icon is clicked\r\n                      }} />\r\n                  )}\r\n                </InputGroup>\r\n                <InputLabel>Width</InputLabel>\r\n                <InputGroup>\r\n                  <Input value={width} onChange={(e) => setWidth(e.target.value)} required />\r\n                  {params.quoteId !== undefined && (\r\n                    <MapIcon\r\n                      isBouncing={width === 0 && length !== 0 ? true : false}\r\n                      onClick={() => {\r\n                        onClose('width'); // close the popup\r\n                      }} />\r\n                  )}\r\n                </InputGroup>\r\n                <InputLabel>Elevation</InputLabel>\r\n                <InputGroup>\r\n                  <Input value={elevation} onChange={(e) => setElevation(e.target.value)} required />\r\n                </InputGroup>\r\n                <LeagueSpartanRegular>Any Obstructions to the Access Area?</LeagueSpartanRegular>\r\n                <FlexDivSpaceAround>\r\n                  <label>\r\n                    <input\r\n                      type=\"radio\"\r\n                      value=\"true\"\r\n                      checked={obstruction === 'true'}\r\n                      onChange={handleChange}\r\n                    />\r\n                    YES\r\n                  </label>\r\n                  <label>\r\n                    <input\r\n                      type=\"radio\"\r\n                      value=\"false\"\r\n                      checked={obstruction === 'false'}\r\n                      onChange={handleChange}\r\n                    />\r\n                    NO\r\n                  </label>\r\n                </FlexDivSpaceAround>\r\n                <br />\r\n                <SmallTitleBold color={ColorPalette.PrimaryRed}>{errorText}</SmallTitleBold>\r\n                <FlexDiv>\r\n                  <RegularResponsiveButton\r\n                    width=\"75%\"\r\n                    type=\"submit\"\r\n                    onClick={() => {\r\n                      if (length === 0 || width === 0) {\r\n                        setErrorText('Please ensure Length and Width are above 0!');\r\n                      } else if (shapes?.length < 2) {\r\n                        setErrorText('Please draw both access length and width on the map!');\r\n                      } else if (params.quoteId === undefined) {\r\n                        CreateNewEstimate(length, width, elevation, obstruction);\r\n                      } else if (updateAccess) {\r\n                        UpdateAccessFunction(length, width, elevation, obstruction);\r\n                      } else {\r\n                        FinishAccess(length, width, elevation, obstruction);\r\n                        setShowInputForm(false);\r\n                        setAccessPopup(true);\r\n                      }\r\n                    }}\r\n                  >\r\n                    {params.quoteId === undefined ? 'Create Estimate' : updateAccess ? 'Update Changes:' : 'Save'}\r\n                  </RegularResponsiveButton>\r\n                  {(params.quoteId === undefined || updateAccess) && (\r\n                    <RegularResponsiveButton onClick={() => onClose()} bgcolor={ColorPalette.PrimaryRed}>\r\n                      Cancel\r\n                    </RegularResponsiveButton>\r\n                  )}\r\n                </FlexDiv>\r\n              </form>\r\n            )}\r\n\r\n            {accessPopup && (\r\n              <PopupContent>\r\n                <LeagueHeader14px>Begin Estimating</LeagueHeader14px>\r\n                <InfoText>\r\n                  You can now begin estimating on the map. On the left is a toolbar of different icons that allow you\r\n                  to draw different shapes, lines, etc. and assign materials to them.\r\n                  <br></br>\r\n                  <br></br>\r\n                  Try it out!\r\n                </InfoText>\r\n                <RegularResponsiveButton onClick={() => {\r\n                  CloseWindow(); // close the popup\r\n                  setAccessPopup(false); // hides the access instructions popup\r\n                }}>\r\n                  OK\r\n                </RegularResponsiveButton>\r\n              </PopupContent>\r\n            )}\r\n          </>\r\n        )}\r\n      </PopupContent>\r\n    </PopupContainer>\r\n\r\n    {/* New GIF Popup Section */}\r\n    {showGifPopup && (\r\n      <PopupContainer visible={showGifPopup}>\r\n        <PopupContent width='63%'>\r\n          <img src=\"/tutorial2.gif\" alt=\"GIF\" style={{ width: '260px', height: 'auto' }} />\r\n          <InfoText>\r\n            Here is a quick tutorial to get going!\r\n            <br />\r\n            Once you're done, click 'OK' to close.\r\n          </InfoText>\r\n          <RegularResponsiveButton onClick={() => {\r\n            setShowGifPopup(false); // Close GIF popup on 'OK' button click\r\n          }}>\r\n            OK\r\n          </RegularResponsiveButton>\r\n        </PopupContent>\r\n      </PopupContainer>\r\n    )}\r\n  </>\r\n);\r\n};\r\n\r\nAreaInputPopup.defaultProps = {\r\n    visible:'flex',\r\n    mapArea:()=>{},\r\n    onClose:()=>{},\r\n    FinishAccess:()=>{},\r\n    CloseWindow:()=>{},\r\n    CloseWindowNoAdd:()=>{},\r\n    UsePhotoAsOverlay:()=>{},\r\n}\r\n\r\nexport default AreaInputPopup;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumnCont90x95Percent,\r\n  FlexColumnCont95x30Percent,\r\n  FlexColumnContGreenBorderTopRounded550pxHeight,\r\n  FlexRowCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  LandscapePara,\r\n  MediumStyledImage,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { FixedOverlay200vh } from \"../../StylesheetComps/OverlayCont\";\r\nimport { AddCasePhoto } from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { AddImageToCloud } from \"../../API_Functions/Utility_Functions\";\r\nimport { Icon20x20 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { LinkText } from \"../../StylesheetComps/AuthSheet\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { FlexDivCenter } from \"../../StylesheetComps/Div\";\r\n\r\nconst ProjectPhotoUploadPreviewWindow = ({\r\n  open,\r\n  CloseWindow, // The callback function to close the window\r\n  CancelUpload,\r\n  quoteObj,\r\n  UploadSuccessful,\r\n}) => {\r\n  const [selectedFiles, setSelectedFiles] = useState([]);\r\n  const [imagePreviews, setImagePreviews] = useState([]); // Store image preview URLs here\r\n  const [imageCaptions, setImageCaptions] = useState({});\r\n  const [progress, setProgress] = useState({});\r\n  const [uploadSuccess, setUploadSuccess] = useState(false);\r\n\r\n  const params = useParams();\r\n\r\n  // Handle file selection and generate image previews\r\n  const handleFileSelect = (e) => {\r\n    const files = Array.from(e.target.files);\r\n    setSelectedFiles(files);\r\n\r\n    // Generate image preview URLs once and store them in state\r\n    const previews = files.map((file) => URL.createObjectURL(file));\r\n    setImagePreviews(previews);\r\n  };\r\n\r\n  // Cleanup created object URLs when component unmounts\r\n  useEffect(() => {\r\n    return () => {\r\n      imagePreviews.forEach((url) => URL.revokeObjectURL(url));\r\n    };\r\n  }, [imagePreviews]);\r\n\r\n  // Handle caption change\r\n  const handleCaptionChange = (index, value) => {\r\n    setImageCaptions((prev) => ({ ...prev, [index]: value }));\r\n  };\r\n\r\n  // Function to reset all state variables\r\n  const resetState = () => {\r\n    setSelectedFiles([]);\r\n    setImagePreviews([]);\r\n    setImageCaptions({});\r\n    setProgress({});\r\n    setUploadSuccess(false);\r\n  };\r\n\r\n  // Function to upload photos one by one using FormData\r\n  const uploadPhotos = async () => {\r\n    setUploadSuccess(false); // Reset success state\r\n\r\n    // Iterate over selected files and upload them one by one\r\n    for (let i = 0; i < selectedFiles.length; i++) {\r\n      const file = selectedFiles[i];\r\n      const caption = imageCaptions[i] || \"\"; // Get the corresponding caption\r\n\r\n      try {\r\n        // Step 1: Create FormData to upload the image\r\n        let formData = new FormData();\r\n        formData.append(\"Overlay Photo\", file);\r\n\r\n        // Step 2: Upload image to the cloud using FormData\r\n        const cloudImageUrl = await AddImageToCloud(formData);\r\n\r\n        if (cloudImageUrl) {\r\n          // Step 3: Bind the uploaded image to the case using AddCasePhoto\r\n          const photoData = {\r\n            Caption: caption,\r\n            File: cloudImageUrl, // Cloud image URL\r\n            Case_Id: params.caseId, // Use case ID from URL params\r\n          };\r\n\r\n          await AddCasePhotoWithProgress(photoData, i);\r\n        } else {\r\n          console.error(`Failed to upload ${file.name} to cloud`);\r\n        }\r\n      } catch (error) {\r\n        console.error(`Error uploading photo ${file.name}:`, error);\r\n      }\r\n    }\r\n\r\n    setUploadSuccess(true); // Set success message when all photos are uploaded\r\n\r\n    // Reset state and close window after successful upload\r\n    resetState();\r\n    CloseWindow();\r\n  };\r\n\r\n  // Function to upload photo with progress tracking\r\n  const AddCasePhotoWithProgress = async (photoData, index) => {\r\n    return AddCasePhoto(photoData).then((resp) => {\r\n      if (resp) {\r\n        // Mocking progress to simulate upload completion for UI update\r\n        setProgress((prevProgress) => ({\r\n          ...prevProgress,\r\n          [index]: 100, // Assuming 100% upload completion\r\n        }));\r\n      }\r\n    });\r\n  };\r\n\r\n  return open ? (\r\n    <FixedOverlay200vh>\r\n      <FlexColumnContGreenBorderTopRounded550pxHeight width='70%' height=\"auto\" overflowy=\"scroll\">\r\n        <FlexRowCont height=\"100%\" justifycontent=\"flex-start\" alignitems=\"baseline\">\r\n          <FlexColumnCont90x95Percent>\r\n            <SmallHeaderLeagueSpartan>Upload Project Photos</SmallHeaderLeagueSpartan>\r\n            <br></br>\r\n            {/* File Upload Section */}\r\n            <input type=\"file\" multiple onChange={handleFileSelect} accept=\"image/*\" />\r\n            {imagePreviews.map((previewUrl, index) => (\r\n              <div key={index}>\r\n                <FlexDivCenter margin=\"16px\">\r\n                  <MediumStyledImage\r\n                    objfit=\"cover\"\r\n                    height=\"150px\"\r\n                    width=\"150px\"\r\n                    mobileheight=\"20vh\"\r\n                    mobilewidth=\"40vw\"\r\n                    src={previewUrl} // Use the preview URL from state\r\n                    alt={`preview-${index}`}\r\n                  />\r\n                  <LandscapePara\r\n                    mobilewidth=\"68vw\"\r\n                    mobileheight=\"25vh\"\r\n                    height=\"auto\"\r\n                    maxLength=\"250\"\r\n                    margin=\"8px\"\r\n                    value={imageCaptions[index] || \"\"}\r\n                    onChange={(e) => handleCaptionChange(index, e.target.value)}\r\n                    placeholder=\"Enter photo description\"\r\n                  />\r\n                </FlexDivCenter>\r\n                {/* Progress Bar */}\r\n                {progress[index] !== undefined && (\r\n                  <div>\r\n                    <progress value={progress[index]} max=\"100\" />\r\n                    <span>{progress[index]}%</span>\r\n                  </div>\r\n                )}\r\n              </div>\r\n            ))}\r\n            <br></br>\r\n            <FlexRowCont justifycontent=\"flex-end\">\r\n              <LinkText onClick={()=>{CloseWindow();}}>Cancel</LinkText>\r\n              <RegularResponsiveButton onClick={uploadPhotos}>Upload</RegularResponsiveButton>\r\n            </FlexRowCont>\r\n\r\n            {/* Success Message */}\r\n            {uploadSuccess && (\r\n              <div>\r\n                <SmallHeaderLeagueSpartan>Photos uploaded successfully!</SmallHeaderLeagueSpartan>\r\n              </div>\r\n            )}\r\n          </FlexColumnCont90x95Percent>\r\n\r\n          {/* Close Icon */}\r\n          <Icon20x20 onClick={()=>{CloseWindow();}} src=\"/Close.svg\"></Icon20x20>\r\n        </FlexRowCont>\r\n      </FlexColumnContGreenBorderTopRounded550pxHeight>\r\n    </FixedOverlay200vh>\r\n  ) : null;\r\n};\r\n\r\nProjectPhotoUploadPreviewWindow.defaultProps = {\r\n  CloseWindow: () => {}, // Default to an empty function in case it's not passed\r\n  CancelUpload: () => {},\r\n  UploadSuccessful: () => {},\r\n};\r\n\r\nexport default ProjectPhotoUploadPreviewWindow;\r\n","import React, { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { useParams } from 'react-router-dom';\r\n\r\nconst Overlay = styled.div`\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  background-color: rgba(0, 0, 0, 0.5);\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  z-index: 999;\r\n  opacity: ${({ isOpen }) => (isOpen ? 1 : 0)};\r\n  pointer-events: ${({ isOpen }) => (isOpen ? 'auto' : 'none')};\r\n  transition: opacity 0.3s ease-in-out;\r\n`;\r\n\r\nconst ModalContent = styled.div`\r\n  position: relative;\r\n  background: #fff;\r\n  border-radius: 12px;\r\n  width: 85%;\r\n  max-width: 600px;\r\n  max-height: 90%;\r\n  overflow-y: auto;\r\n  padding: 20px;\r\n  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);\r\n\r\n  @media (min-width: 768px) {\r\n    padding: 30px;\r\n  }\r\n`;\r\n\r\nconst Header = styled.h2`\r\n  margin: 0;\r\n  padding-bottom: 10px;\r\n  border-bottom: 1px solid #e0e0e0;\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\r\n`;\r\n\r\nconst EstimateGroup = styled.div`\r\n  margin-top: 20px;\r\n`;\r\n\r\nconst EstimateTitle = styled.h3`\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\r\n  color: #333;\r\n  margin-bottom: 10px;\r\n`;\r\n\r\nconst ReceiptItem = styled.div`\r\n  padding: 10px;\r\n  border-bottom: 1px solid #f0f0f0;\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\r\n  line-height: 1.4;\r\n\r\n  &:last-child {\r\n    border-bottom: none;\r\n  }\r\n`;\r\n\r\nconst InfoText = styled.p`\r\n  margin: 4px 0;\r\n  font-size: 0.9rem;\r\n  color: #555;\r\n`;\r\n\r\nconst CloseButton = styled.button`\r\n  background: none;\r\n  border: none;\r\n  font-size: 1.4rem;\r\n  position: absolute;\r\n  top: 15px;\r\n  right: 15px;\r\n  cursor: pointer;\r\n  color: #999;\r\n\r\n  &:hover {\r\n    color: #333;\r\n  }\r\n`;\r\n\r\n// The component now accepts an 'isOpen' prop and an 'onClose' callback.\r\nconst EstimateReadReceipts = ({ isOpen, onClose }) => {\r\n  const { caseId } = useParams(); // caseId is used as the project_id in your database\r\n  const [receipts, setReceipts] = useState([]);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState(null);\r\n\r\n  useEffect(() => {\r\n    // Only fetch when the modal is open\r\n    if (!isOpen) return;\r\n\r\n    const fetchReceipts = async () => {\r\n      try {\r\n        const response = await fetch(\r\n          `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/read_receipts?project_id=eq.${caseId}`,\r\n          {\r\n            headers: {\r\n              'Content-Type': 'application/json',\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n            },\r\n          }\r\n        );\r\n\r\n        if (!response.ok) {\r\n          throw new Error(`HTTP error! status: ${response.status}`);\r\n        }\r\n        const data = await response.json();\r\n        setReceipts(data);\r\n      } catch (err) {\r\n        setError(err.message);\r\n      } finally {\r\n        setLoading(false);\r\n      }\r\n    };\r\n\r\n    fetchReceipts();\r\n  }, [caseId, isOpen]);\r\n\r\n  // Group receipts by estimate_id and record the estimate_name\r\n  const groupedReceipts = receipts.reduce((acc, receipt) => {\r\n    const { estimate_id, estimate_name } = receipt;\r\n    if (!acc[estimate_id]) {\r\n      acc[estimate_id] = { estimate_name: estimate_name || 'Unnamed Estimate', receipts: [] };\r\n    }\r\n    acc[estimate_id].receipts.push(receipt);\r\n    return acc;\r\n  }, {});\r\n\r\n  return (\r\n    <Overlay isOpen={isOpen}>\r\n      <ModalContent>\r\n        <CloseButton onClick={onClose}>✕</CloseButton>\r\n        <Header>Estimate Link Views</Header>\r\n        {loading ? (\r\n          <p>Loading...</p>\r\n        ) : error ? (\r\n          <p>Error: {error}</p>\r\n        ) : Object.keys(groupedReceipts).length === 0 ? (\r\n          <p>No read receipts found for this project.</p>\r\n        ) : (\r\n          Object.entries(groupedReceipts).map(([estimateId, group]) => (\r\n            <EstimateGroup key={estimateId}>\r\n              <EstimateTitle>{group.estimate_name}</EstimateTitle>\r\n              {group.receipts.map((receipt) => (\r\n                <ReceiptItem key={receipt.id}>\r\n                  <InfoText>\r\n                    <strong>Time:</strong> {new Date(receipt.viewed_at).toLocaleString()}\r\n                  </InfoText>\r\n                  <InfoText>\r\n                    <strong>Location:</strong> {receipt.approx_location}\r\n                  </InfoText>\r\n                  <InfoText>\r\n                    <strong>User Agent:</strong> {receipt.user_agent}\r\n                  </InfoText>\r\n                </ReceiptItem>\r\n              ))}\r\n            </EstimateGroup>\r\n          ))\r\n        )}\r\n      </ModalContent>\r\n    </Overlay>\r\n  );\r\n};\r\n\r\nexport default EstimateReadReceipts;\r\n","//  React Imports ---------------------------------------\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport styled from \"styled-components\";\r\nimport axios from \"axios\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCityList,\r\n  GetMetroList,\r\n} from \"../../API_Functions/Utility_Functions\";\r\nimport {\r\n  AssignCase,\r\n  CaseStatus,\r\n  DeleteCaseById,\r\n  GetCaseById,\r\n  GetInvoiceObject,\r\n  QuoteStatus,\r\n  SetCaseTo_Accept,\r\n  SetCaseTo_Cancel,\r\n  SetCaseTo_CancelRequested,\r\n  SetCaseTo_Close,\r\n  SetCaseTo_Construction,\r\n  SetCaseTo_Processed,\r\n  SetCaseTo_Submit,\r\n  UpdateACase,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\n//  Imported Components ---------------------------------\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\nimport ProposalCardGuide from \"../../comps/ProposalCardGuide\";\r\nimport AddInvoiceWindow from \"../../comps/Windows/AddInvoice\";\r\nimport DeleteInvoiceWindow from \"../../comps/Windows/DeleteInvoice\";\r\nimport DeleteProjectWindow from \"../../comps/Windows/DeleteProject\";\r\nimport DeleteProposalWindow from \"../../comps/Windows/DeleteProposal\";\r\nimport GuideCancelProjectWindow from \"../../comps/Windows/GuideCancelProject\";\r\nimport { LargeResponsiveButton } from \"../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  EditActionButtonsRow,\r\n  EditButton,\r\n  EditFieldLabel,\r\n  EditFieldRow,\r\n  EditFormColumn,\r\n  EditFormContainer,\r\n  EditSelect,\r\n  EditTextInput,\r\n  Option16px,\r\n  RegularResponsiveButton,\r\n  Select16px,\r\n} from \"../../StylesheetComps/Components\";\r\n// Imported Styled Components ---------------------------\r\nimport {\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnFullWidth,\r\n  FlexColumnPropWidth,\r\n  FlexCont90PercentAutoHeight,\r\n  FlexContFullWidthJustifyCenter,\r\n  FlexDiv,\r\n  FlexRowCont300x200,\r\n  FlexRowContAutox100Percent,\r\n  FlexRowContFullWidth,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnDiv, FlexDivFlexEnd, GridContainer2Wide } from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Icon20x20,\r\n  Icon30x30,\r\n  Icon45x45,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { Image80x100px } from \"../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  DatalistMedium,\r\n  DatalistOption,\r\n  FlexContBottomGrey,\r\n  FlexDivFlexStartCenter,\r\n  FlexInfoCont,\r\n  Image300x200,\r\n  LandscapePara,\r\n  PhotoContExtra,\r\n  SmallHeaderLeagueSpartan,\r\n  TextInputReusable,\r\n  WideFlexInfoCont,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport { Cont, ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport {\r\n  Icon30px20pxPointer,\r\n  Icon30px30pxPointer,\r\n} from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  BlueUnderlinePointerPara,\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanRegular,\r\n  MediumHeader100PercentWidth,\r\n  MediumHeader100PercentWidthWhiteText,\r\n  MobileOnlyRegularHeader,\r\n  RegularText,\r\n  SmallTextPadding,\r\n  StyledHRGreenBreakDashed,\r\n  StyledHRPropColour,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport AreaInputPopup from \"../../sitemappercomps/accessPopup\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport ProjectPhotoUploadPreviewWindow from \"../../comps/ProjectPhotoUploadPreviewWindow\";\r\nimport IconButton from \"../../comps/IconButton\";\r\nimport EstimateReadReceipts from \"../../comps/EstimateReadReceipts\";\r\n\r\nconst FormItem = styled.div`\r\n  padding: 12px 16px;\r\n  border: 1px solid rgba(0, 0, 0, 0.1);\r\n  border-radius: 12px;\r\n  background: rgba(255, 255, 255, 0.8);\r\n  backdrop-filter: blur(10px);\r\n  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);\r\n  transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out;\r\n  cursor: pointer;\r\n\r\n  &:hover {\r\n    transform: translateY(-2px);\r\n    box-shadow: 0 6px 12px rgba(0, 0, 0, 0.08);\r\n  }\r\n`;\r\n\r\nconst FormTitle = styled.h3`\r\n  margin: 0;\r\n  font-size: 1rem;\r\n  font-weight: 600;\r\n  color: #1d1d1f; /* Apple's text color */\r\n  letter-spacing: -0.01em;\r\n`;\r\n\r\nconst FormDescription = styled.p`\r\n  margin: 4px 0 0;\r\n  font-size: 0.875rem;\r\n  color: rgba(60, 60, 67, 0.6); /* Subtle Apple-style gray */\r\n  font-weight: 400;\r\n  letter-spacing: -0.005em;\r\n`;\r\n\r\nconst ViewProjectGuideView = () => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n  const [isLoading, setIsLoading] = useState(false);\r\n\r\n  const [draftCaseVisible, setDraftCaseVisible] = useState(\"none\");\r\n  const [expiredProposalVisible, setExpiredProposalVisible] = useState(\"block\");\r\n  const [invoiceVisible] = useState(\"block\");\r\n\r\n  const [projectName, setProjectName] = useState(\"\");\r\n  const [projectAreaString, setProjectAreaString] = useState(\"\");\r\n  const [projectScopeString, setProjectScopeString] = useState(\"\");\r\n  const [ProjectTypeString, setProjectTypeString] = useState(\"\");\r\n  const [ProjectStyleString, setProjectStyleString] = useState(\"\");\r\n  const [ProjectBudgetString, setProjectBudgetString] = useState(\"\");\r\n  const [projectDescriptionString, setProjectDescriptionString] = useState(\"\");\r\n\r\n  const [projectProposalsDisplay, setProjectProposalsDisplay] =\r\n    useState(\"none\");\r\n  const [expiredProjectProposalsDisplay, setExpiredProjectProposalsDisplay] =\r\n    useState(\"none\");\r\n  const [projectInvoicesDisplay, setProjectInvoicesDisplay] = useState(\"none\");\r\n\r\n  const [projectInfoArrow, setProjectInfoArrow] = useState(\"/downarrow.svg\");\r\n  const [projectProposalArrow, setProjectProposalArrow] =\r\n    useState(\"/downarrow.svg\");\r\n  const [expiredProjectProposalArrow, setExpiredProjectProposalArrow] =\r\n    useState(\"/downarrow.svg\");\r\n  const [projectInvoiceArrow, setProjectInvoiceArrow] =\r\n    useState(\"/downarrow.svg\");\r\n\r\n  const [deleteProjectDisplay, setDeleteProjectDisplay] = useState(\"none\");\r\n  const [deleteProjectWindowDisplay, setDeleteProjectWindowDisplay] =\r\n    useState(false);\r\n\r\n  const [cancelProjectWindowDisplay, setCancelProjectWindowDisplay] =\r\n    useState(false);\r\n\r\n  const [addInvoiceWindowDisplay, setAddInvoiceWindowDisplay] = useState(false);\r\n  const [deleteInvoiceWindowDisplay, setDeleteInvoiceWindowDisplay] =\r\n    useState(false);\r\n  const [invoiceIdToDelete, setInvoiceIdToDelete] = useState(0);\r\n\r\n  const [projectObj, setProjectObj] = useState({});\r\n  const [projectInvoices, setProjectInvoices] = useState([]);\r\n  const [projectProposals, setProjectProposals] = useState([]);\r\n\r\n  const [constructionButtonDisplay, setConstructionButtonDisplay] =\r\n    useState(\"none\");\r\n  const [closeButtonDisplay, setCloseButtonDisplay] = useState(\"none\");\r\n  const [cancelButtonDisplay, setCancelButtonDisplay] = useState(\"none\");\r\n  const [createQuoteDisplay, setCreateQuoteDisplay] = useState(\"none\");\r\n  const [takeOverDisplay, setTakeOverDisplay] = useState(\"none\");\r\n  const [changeStatusContDisplay, setChangeStatusContDisplay] =\r\n    useState(\"none\");\r\n\r\n  const [statusValue, setStatusValue] = useState(0);\r\n\r\n  const [projectPhotos, setProjectPhotos] = useState([]);\r\n  const [PDFMap, setPDFMap] = useState([]);\r\n  const [userId, setUserId] = useState(0);\r\n  const [guideUserId, setGuideUserId] = useState(0);\r\n\r\n  const [listOfEstimators, setListOfEstimators] = useState([]);\r\n  const [changeEstimatorDisplay, setChangeEstimatorDisplay] = useState(\"none\");\r\n\r\n  const [deleteProposalDisplay, setDeleteProposalDisplay] = useState(false);\r\n  const [deleteProposalId, setDeleteProposalId] = useState(0);\r\n\r\n  const [invoiceObj, setInvoiceObj] = useState({});\r\n\r\n  const [editCaseInfo, setEditCaseInfo] = useState(false);\r\n  const [editCaseDesc, setEditCaseDesc] = useState(false);\r\n\r\n  const [createQuoteWindowDisplay, setCreateQuoteWindowDisplay] =\r\n    useState(false);\r\n\r\n  const [lockedEstimateIds, setLockedEstimateIds] = useState([]);\r\n\r\n  const [isUploadProjectPhotosOpen, setIsUploadProjectPhotosOpen] = useState(false);\r\n\r\n\r\n  //Mobile View States\r\n  const [estimateTextMobileColor, setEstimateTextMobileColor] = useState(ColorPalette.PrimaryButtonBlue);\r\n  const [proposalVisible, setProposalVisible] = useState(\"none\");\r\n\r\n  const [projectInfoTextMobileColor, setProjectInfoTextMobileColor] = useState(ColorPalette.PrimaryGrey);\r\n  const [projectInfoDisplay, setProjectInfoDisplay] = useState(\"none\");\r\n\r\n  //Read Receipts Visibility\r\n  const [readReceiptsOpen, setReadReceiptsOpen] = useState(false);\r\n\r\n\r\n  const DeleteProject = async (caseId) => {\r\n    let text =\r\n      \"Are you sure you want to delete this project? This action cannot be undone\";\r\n    if (window.confirm(text) == true) {\r\n      try {\r\n        setIsLoading(true);\r\n        // Delete the case using the provided caseId\r\n        const response = await axios.delete(window.$DBURL + \"case/\" + caseId);\r\n\r\n        // If the case was successfully deleted, get the updated cases and sort them\r\n        if (response.status === 200) {\r\n          let alerttext = \"This project has been deleted.\";\r\n          if (window.confirm(alerttext) == true) {\r\n            history.push(`/cases/${params.Id}/${params.storeId}`);\r\n          } else {\r\n            history.push(`/cases/${params.Id}/${params.storeId}`);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        // Handle any errors that may have occurred\r\n        console.error(error);\r\n      }\r\n    } else {\r\n      console.log(\"Cancelled\");\r\n    }\r\n  };\r\n\r\n  const DisplayProjectInfo = async (arrow) => {\r\n    if (arrow === \"/uparrow.svg\") {\r\n      setProjectInfoDisplay(\"none\");\r\n      setProjectInfoArrow(\"/downarrow.svg\");\r\n    } else {\r\n      setProjectInfoDisplay(\"flex\");\r\n      setProjectInfoArrow(\"/uparrow.svg\");\r\n    }\r\n  };\r\n\r\n  const DisplayProjectProposals = async (arrow, type) => {\r\n    // For non-expired proposals\r\n    if (type === \"nonExpired\") {\r\n      if (arrow === \"/uparrow.svg\") {\r\n        setProjectProposalsDisplay(\"none\");\r\n        setProjectProposalArrow(\"/downarrow.svg\");\r\n      } else {\r\n        setProjectProposalsDisplay(\"flex\");\r\n        setProjectProposalArrow(\"/uparrow.svg\");\r\n      }\r\n    }\r\n    // For expired proposals\r\n    else if (type === \"expired\") {\r\n      if (arrow === \"/uparrow.svg\") {\r\n        setExpiredProjectProposalsDisplay(\"none\");\r\n        setExpiredProjectProposalArrow(\"/downarrow.svg\");\r\n      } else {\r\n        setExpiredProjectProposalsDisplay(\"flex\");\r\n        setExpiredProjectProposalArrow(\"/uparrow.svg\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const DisplayProjectInvoices = async (arrow) => {\r\n    if (arrow === \"/uparrow.svg\") {\r\n      setProjectInvoicesDisplay(\"none\");\r\n      setProjectInvoiceArrow(\"/downarrow.svg\");\r\n    } else {\r\n      setProjectInvoicesDisplay(\"flex\");\r\n      setProjectInvoiceArrow(\"/uparrow.svg\");\r\n    }\r\n  };\r\n\r\n  const SetupProjectForDisplay = async (caseid) => {\r\n    var data = await GetCaseById(caseid);\r\n\r\n    if (data !== null) {\r\n      var project = data.Case;\r\n      if (project !== null) {\r\n        setProjectObj(project);\r\n        console.log(project);\r\n        SetupProjectDescriptionStrings(project.Description);\r\n        SetProposalVisibility(project);\r\n        SetDefaultButtons(project);\r\n        if (project.Invoices !== null) {\r\n          setProjectInvoices(project.Invoices);\r\n        }\r\n        if (data.Case.Tittle !== null && data.Case.Tittle !== undefined) {\r\n          setProjectName(project.Tittle);\r\n        }\r\n        if (project.Photos !== null) {\r\n          setPDFMap(\r\n            project.Photos.filter(\r\n              (o) =>\r\n                o.File?.slice(-4) === \".pdf\" || o.File?.slice(-4) === \".PDF\"\r\n            )\r\n          );\r\n          setProjectPhotos(\r\n            project.Photos.filter(\r\n              (o) =>\r\n                !o.File?.includes(\".pdf\") || !(o.File?.slice(-4) !== \".PDF\")\r\n            )\r\n          );\r\n        }\r\n      }\r\n      const resp = await axios.get(\r\n        `${window.$LOCKINURL}?caseId=eq.${params.caseId}`,\r\n        {\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            authorization: window.$POLYGONAUTHKEY,\r\n          },\r\n        }\r\n      );\r\n      const estimateIds = resp.data.map((item) => item.estimateId);\r\n      if (project.Quotes !== null) {\r\n        const updatedQuotes = project.Quotes.map((quote) => {\r\n          // Check if the current quote's Quote_Id matches any of the estimateIds\r\n          const isLocked = estimateIds.includes(quote.Id);\r\n\r\n          // Return a new object with all original quote properties plus the lockedEstimate\r\n          // Set lockedEstimate to true if a match is found, false otherwise\r\n          return { ...quote, lockedEstimate: isLocked };\r\n        });\r\n\r\n        // Update your project's proposals with the modified quotes array\r\n        setProjectProposals(updatedQuotes);\r\n        console.log(updatedQuotes);\r\n      }\r\n    }\r\n\r\n    // try {\r\n    //   const res = await fetch(\r\n    //     `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/forms?project_number=eq.${params.caseId}`,\r\n    //     {\r\n    //       headers: {\r\n    //         apikey: window.$POLYGONAPIKEY,\r\n    //         Authorization: window.$POLYGONAUTHKEY,\r\n    //         'Content-Type': 'application/json',\r\n    //       },\r\n    //     }\r\n    //   );\r\n    //   if (!res.ok) {\r\n    //     throw new Error('Error fetching forms');\r\n    //   }\r\n    //   const data = await res.json();\r\n    //   setForms(data);\r\n    // } catch (err) {\r\n    //   console.error(err);\r\n    // }    \r\n  };\r\n\r\n  const SetupProjectDescriptionStrings = async (projectdesc) => {\r\n    setProjectDescriptionString(\r\n      projectdesc.substring(projectdesc.indexOf(\"Description:\") + 12)\r\n    );\r\n    setProjectAreaString(\r\n      projectdesc.substring(\r\n        projectdesc.indexOf(\"Project Area\") + 13,\r\n        projectdesc.indexOf(\",\") - 1\r\n      )\r\n    );\r\n    setProjectScopeString(\r\n      projectdesc.substring(\r\n        projectdesc.indexOf(\"Project Scope\") + 14,\r\n        projectdesc.indexOf(\",\", projectdesc.indexOf(\",\") + 1)\r\n      )\r\n    );\r\n    setProjectTypeString(\r\n      projectdesc.substring(\r\n        projectdesc.indexOf(\"Project Type\") + 13,\r\n        projectdesc.indexOf(\", Project Style\") - 1\r\n      )\r\n    );\r\n    setProjectStyleString(\r\n      projectdesc.substring(\r\n        projectdesc.indexOf(\"Project Style\") + 14,\r\n        projectdesc.indexOf(\",Project Budget\") - 1\r\n      )\r\n    );\r\n    setProjectBudgetString(\r\n      projectdesc.substring(\r\n        projectdesc.indexOf(\"Project Budget:\") + 15,\r\n        projectdesc.indexOf(\", Description\")\r\n      )\r\n    );\r\n  };\r\n\r\n  var userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n  const SetDefaultButtons = async (project) => {\r\n    setDraftCaseVisible(\"none\");\r\n\r\n    setChangeStatusContDisplay(\"none\");\r\n\r\n    if (\r\n      (userinfo.Role === UserRole.Manager ||\r\n        project.Estimator_Id === userinfo.Id) &&\r\n      project.CaseStatus !== CaseStatus.Closed\r\n    ) {\r\n      setCloseButtonDisplay(\"block\");\r\n    } else {\r\n      setCloseButtonDisplay(\"none\");\r\n    }\r\n\r\n    if (\r\n      (userinfo.Role === UserRole.Manager ||\r\n        project.Estimator_Id === userinfo.Id) &&\r\n      project.CaseStatus === CaseStatus.Closed\r\n    ) {\r\n      setDeleteProjectDisplay(\"flex\");\r\n      setChangeStatusContDisplay(\"flex\");\r\n    } else {\r\n      setDeleteProjectDisplay(\"none\");\r\n    }\r\n\r\n    if (\r\n      project.CaseStatus === CaseStatus.PayPending &&\r\n      userinfo.Role === UserRole.Manager\r\n    ) {\r\n      setConstructionButtonDisplay(\"block\");\r\n    }\r\n\r\n    if (\r\n      (project.Estimator_Id === 0 || userinfo.Role === UserRole.Manager) &&\r\n      project.CaseStatus !== CaseStatus.Drafted\r\n    ) {\r\n      setTakeOverDisplay(\"block\");\r\n    } else setTakeOverDisplay(\"none\");\r\n\r\n    if (project.Estimator_Id === userinfo.Id) {\r\n      setCreateQuoteDisplay(\"block\");\r\n    } else setCreateQuoteDisplay(\"none\");\r\n\r\n    if (\r\n      (userinfo.Role === UserRole.Manager ||\r\n        project.Estimator_Id === userinfo.Id) &&\r\n      project.CaseStatus === CaseStatus.CancelRequested\r\n    )\r\n      setCancelButtonDisplay(\"block\");\r\n    else setCancelButtonDisplay(\"none\");\r\n  };\r\n\r\n  const SetProposalVisibility = async (projectobj) => {\r\n    if (projectobj.Quotes !== null) {\r\n      if (projectobj.Quotes.length > 0) {\r\n        setProposalVisible(\"block\");\r\n        setProjectProposalArrow(\"/uparrow.svg\");\r\n        setProjectProposalsDisplay(\"flex\");\r\n      } else {\r\n        setProjectInfoDisplay(\"flex\");\r\n        setProjectInfoArrow(\"/downarrow.svg\");\r\n        setProposalVisible(\"none\");\r\n        setProjectProposalsDisplay(\"block\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const ChangeProjectStatusToSubmit = async (caseid) => {\r\n    var data = await SetCaseTo_Submit(caseid);\r\n    if (data != null) setStatusValue(CaseStatus.Submitted);\r\n  };\r\n\r\n  const CloseCase = async (caseid) => {\r\n    if (caseid !== 0) {\r\n      var data = await SetCaseTo_Close(caseid);\r\n      if (data !== null) {\r\n        alert(\"Case closed\");\r\n        setStatusValue(CaseStatus.Closed);\r\n      }\r\n    }\r\n  };\r\n\r\n  const GuideTakeoverCase = async (caseid, userid) => {\r\n    if (caseid !== 0 && userid !== 0) {\r\n      var data = await AssignCase(caseid, userid);\r\n      if (data !== null) {\r\n        if (data.Case.CaseStatus === CaseStatus.Submitted) {\r\n          var accept = await SetCaseTo_Accept(caseid);\r\n          if (accept !== null) {\r\n            setStatusValue(CaseStatus.Accepted);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    SetupProjectForDisplay(caseid);\r\n  };\r\n\r\n  const SetProjectStatus = async (status, caseid) => {\r\n    if (status === CaseStatus.Drafted) {\r\n    } else if (status === CaseStatus.Submitted) {\r\n      await SetCaseTo_Submit(caseid);\r\n    } else if (status === CaseStatus.Accepted) {\r\n      await SetCaseTo_Accept(caseid);\r\n    } else if (status === CaseStatus.Processed) {\r\n      await SetCaseTo_Processed(caseid);\r\n    } else if (status === CaseStatus.Closed) {\r\n      await SetCaseTo_Close(caseid);\r\n    } else if (status === CaseStatus.CancelRequested) {\r\n      await SetCaseTo_CancelRequested(caseid);\r\n    } else if (status === CaseStatus.Canceled) {\r\n      await SetCaseTo_Cancel(caseid);\r\n    }\r\n  };\r\n\r\n  const GetListOfEstimators = async (storeid, role) => {\r\n    if (role === UserRole.Manager || role === UserRole.Admin)\r\n      if (storeid !== 0) {\r\n        const resp = await axios.get(\r\n          window.$DBURL + \"store/\" + storeid + \"/estimators\"\r\n        );\r\n        if (resp.status === 200) {\r\n          if (resp.data !== null) {\r\n            setListOfEstimators(resp.data.estimators);\r\n            setChangeEstimatorDisplay(\"flex\");\r\n          }\r\n        }\r\n      }\r\n  };\r\n\r\n  const AssignToCase = async (caseid, userid) => {\r\n    if (caseid !== 0) {\r\n      var data = await AssignCase(caseid, userid);\r\n      if (data !== null) {\r\n        if (data.Case.CaseStatus === CaseStatus.Submitted) {\r\n          var accept = await SetCaseTo_Accept(caseid);\r\n          if (accept !== null) {\r\n            SetupProjectForDisplay(caseid);\r\n          }\r\n        } else {\r\n          SetupProjectForDisplay(caseid);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const CaseToConstruction = async (caseid) => {\r\n    var data = await SetCaseTo_Construction(caseid);\r\n    if (data !== null) {\r\n      SetupProjectForDisplay(caseid);\r\n    }\r\n  };\r\n\r\n  const GetInvoiceObjectStructure = async () => {\r\n    var data = await GetInvoiceObject();\r\n    if (data !== null) {\r\n      setInvoiceObj(data);\r\n    }\r\n  };\r\n\r\n  const SaveCase = async (projectobj) => {\r\n    var data = await UpdateACase(projectobj);\r\n    await SetupProjectForDisplay(params.caseId);\r\n  };\r\n\r\n  const [cityList, setCityList] = useState([]);\r\n  const [metroList, setMetroList] = useState([]);\r\n\r\n  const GetLocationInfo = async () => {\r\n    let metrodata = await GetMetroList();\r\n    let citydata = await GetCityList(params.Id);\r\n    setCityList(citydata);\r\n    setMetroList(metrodata);\r\n  };\r\n\r\n  const UpdateCityList = async (metroid) => {\r\n    if (metroid !== 0 && metroid !== 3) {\r\n      // ContactInfo.current.City = \"\";\r\n      // ContactInfo.current.City_Id = 0;\r\n      let citydata = await GetCityList(metroid);\r\n      setCityList(citydata);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    GetLocationInfo();\r\n  }, []);\r\n\r\n  const SelectCity = async (e) => {\r\n    // Update projectObj.City_Id with the event target value.\r\n    projectObj.City_Id = e.target.value;\r\n\r\n    // Find the city object from cityList using the event target value.\r\n    const selectedCity = cityList.find((o) => o.Id === e.target.value);\r\n\r\n    // If a matching city object is found, update projectObj.City with its name.\r\n    if (selectedCity) {\r\n      projectObj.City = selectedCity.Name;\r\n    }\r\n\r\n    console.log(selectedCity); // Log the selected city object or undefined if not found.\r\n  };\r\n\r\n  const SelectMetro = async (e) => {\r\n    // Update projectObj.Metro_Id with the event target value.\r\n    projectObj.Metro_Id = e.target.value;\r\n\r\n    // Find the metro object from metroList using the event target value.\r\n    const selectedMetro = metroList.find((o) => o.Id === e.target.value);\r\n\r\n    // If a matching metro object is found, update projectObj.Metro with its name.\r\n    if (selectedMetro) {\r\n      projectObj.Metro = selectedMetro.Name;\r\n    }\r\n\r\n    console.log(selectedMetro); // Log the selected metro object or undefined if not found.\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    var userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    setUserId(userinfo.Id);\r\n    SetupProjectForDisplay(params.caseId);\r\n    GetListOfEstimators(params.storeId, userinfo.Role);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const reversedProposals = projectProposals?.slice()?.reverse();\r\n\r\n  const [frsFormsContainerDisplay, setFrsFormsContainerDisplay] = useState(\"block\");\r\n  const [frsFormsListDisplay, setFrsFormsListDisplay] = useState(\"none\");\r\n\r\n  // Icon state: set the arrow icon for toggling the list.\r\n  const [frsFormsArrow, setFrsFormsArrow] = useState('/downarrow.svg');\r\n\r\n  // Data state: assuming your forms data is similar to your project proposals.\r\n  const [forms, setForms] = useState([]);\r\n\r\n  if (isLoading == true) {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  } else if (projectObj !== undefined && projectObj !== null) {\r\n    if(window.$ISMOBILE === true){\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ActionMenu\r\n            pageProp={\"Projects - \" + projectObj?.Tittle}\r\n            mobilePageProp={projectObj?.Tittle}\r\n          ></ActionMenu>\r\n\r\n          <ContentCont77vw display={draftCaseVisible}>\r\n            <FlexCont90PercentAutoHeight>\r\n              <SmallHeaderLeagueSpartan>\r\n                Ready to Submit?\r\n              </SmallHeaderLeagueSpartan>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  ChangeProjectStatusToSubmit(projectObj.Id);\r\n                }}\r\n              >\r\n                Submit Project\r\n              </RegularResponsiveButton>\r\n            </FlexCont90PercentAutoHeight>\r\n          </ContentCont77vw>\r\n\r\n          {/* Project Information --------------------------------------------------------------- */}\r\n          <FlexRowContFullWidth mobileflexdirection='row' mobilewidth='100vw' margintop='3%'>\r\n\r\n          <FlexColumnDiv width='50%' alignitems='center' onClick={()=>{setEstimateTextMobileColor(ColorPalette.PrimaryButtonBlue); setProjectInfoTextMobileColor(ColorPalette.PrimaryGrey); setProposalVisible('block'); setProjectInfoDisplay('none')}}>\r\n          <FlexDiv>\r\n          <Icon30px20pxPointer color={estimateTextMobileColor} src=\"/newestimate_icon.svg\"></Icon30px20pxPointer>\r\n                  <LeagueSpartanHeaderSmall color={estimateTextMobileColor} margintop='auto' marginbottom='auto' mobilefontsize=\"12px\" cursor=\"pointer\">\r\n                    Estimates\r\n                  </LeagueSpartanHeaderSmall>\r\n          </FlexDiv>\r\n          <StyledHRPropColour border={`0.5px solid ${estimateTextMobileColor}`} width='100%'></StyledHRPropColour>\r\n          </FlexColumnDiv>\r\n\r\n          <FlexColumnDiv width='50%' alignitems='center' onClick={()=>{setEstimateTextMobileColor(ColorPalette.PrimaryGrey); setProjectInfoTextMobileColor(ColorPalette.PrimaryButtonBlue); setProposalVisible('none'); setProjectInfoDisplay('block')}}>\r\n          <FlexDiv>\r\n          <Icon30px20pxPointer color={projectInfoTextMobileColor} src=\"/Mobileprojects.svg\"></Icon30px20pxPointer>\r\n                  <LeagueSpartanHeaderSmall color={projectInfoTextMobileColor} margintop='auto' marginbottom='auto' mobilefontsize=\"12px\" cursor=\"pointer\">\r\n                    Project Info\r\n                  </LeagueSpartanHeaderSmall>\r\n          </FlexDiv>\r\n          <StyledHRPropColour border={`0.5px solid ${projectInfoTextMobileColor}`} width='100%'></StyledHRPropColour>\r\n          </FlexColumnDiv>\r\n\r\n          </FlexRowContFullWidth>\r\n\r\n\r\n          <ContentCont77vw\r\n            paddingbottom=\"0\"\r\n            paddingTop=\"5px\"\r\n            mobilepaddingbottom=\"0\"\r\n            mobilemargin=\"0%\"\r\n            margin=\"0%\"\r\n          >\r\n            <ProjectPhotoUploadPreviewWindow open={isUploadProjectPhotosOpen} CloseWindow={()=>{\r\n              setIsUploadProjectPhotosOpen(false); SetupProjectForDisplay(params.caseId);\r\n              GetListOfEstimators(params.storeId, userinfo.Role);\r\n            }}></ProjectPhotoUploadPreviewWindow>\r\n            <FlexDiv mobilewidth='92.5vw'>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n                mobileflexdirection=\"row\"\r\n                mobilewidth='92.5vw'\r\n                mobilejustifycontent=\"space-between\"\r\n                mobilealignitems=\"baseline\"\r\n              >\r\n                <FlexRowContAutox100Percent\r\n                  display={changeStatusContDisplay}\r\n                  mobiledisplay=\"none\"\r\n                >\r\n                  <Select16px\r\n                    onChange={(e) => {\r\n                      setStatusValue(e.target.value);\r\n                    }}\r\n                  >\r\n                    <Option16px value={0}>Change Status</Option16px>\r\n                    <Option16px value={1}>Submitted</Option16px>\r\n                    <Option16px value={2}>Accepted</Option16px>\r\n                    <Option16px value={3}>Processed</Option16px>\r\n                    <Option16px value={4}>Closed</Option16px>\r\n                    <Option16px value={5}>Request Cancel</Option16px>\r\n                    <Option16px value={-1}>Canceled</Option16px>\r\n                  </Select16px>\r\n                  <BlueUnderlinePointerPara\r\n                    onClick={() => {\r\n                      SetProjectStatus(statusValue, params.caseId);\r\n                    }}\r\n                  >\r\n                    Save\r\n                  </BlueUnderlinePointerPara>\r\n                </FlexRowContAutox100Percent>\r\n\r\n                <GuideCancelProjectWindow\r\n                  deleteOpen={cancelProjectWindowDisplay}\r\n                  projectId={params.caseId}\r\n                  CloseWindow={() => {\r\n                    setCancelProjectWindowDisplay(false);\r\n                  }}\r\n                ></GuideCancelProjectWindow>\r\n            \r\n                <RegularResponsiveButton\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  display={cancelButtonDisplay}\r\n                  onClick={() => {\r\n                    setCancelProjectWindowDisplay(true);\r\n                  }}\r\n                >\r\n                  Cancel\r\n                </RegularResponsiveButton>\r\n                <div>\r\n                  <FlexDiv>\r\n                <FlexDiv\r\n                  onClick={ async() => {\r\n                    const resp = await GuideTakeoverCase(params.caseId, userId);\r\n                    setCreateQuoteWindowDisplay(true);\r\n                  }}\r\n                >\r\n                  <IconButton width='40vw' text='New Estimate' src='/paperwhite_icon.svg'></IconButton>\r\n                </FlexDiv>\r\n                <AreaInputPopup\r\n                  visible={createQuoteWindowDisplay}\r\n                  createRegular={true}\r\n                  onClose={() => {\r\n                    setCreateQuoteWindowDisplay(false);\r\n                  }}\r\n                ></AreaInputPopup>\r\n              \r\n                <FlexDiv\r\n                  onClick={ async ()  => {\r\n                    const resp = await GuideTakeoverCase(params.caseId, userId);\r\n                    history.push(\r\n                      `/sitemapper/${params.Id}/${params.storeId}/${params.caseId}/0`\r\n                    );\r\n                  }}\r\n                >\r\n                  <IconButton width='40vw' text='New Site-Map' src='/pinwhite_icon.svg'></IconButton>\r\n                  </FlexDiv>\r\n                </FlexDiv>\r\n\r\n                <FlexDiv>\r\n\r\n                <FlexDiv\r\n                  onClick={() => {\r\n                    GuideTakeoverCase(params.caseId, userId);\r\n                  }}\r\n                >\r\n                  <IconButton width='40vw' text='Take Over Project' src='/smilewhite_icon.svg'></IconButton>\r\n                  </FlexDiv>\r\n                <FlexDiv onClick={()=>{setIsUploadProjectPhotosOpen(true)}}>\r\n                <IconButton width='40vw' text='Add Photos' src='/photowhite_icon.svg'></IconButton>\r\n                </FlexDiv>\r\n\r\n\r\n                </FlexDiv>\r\n                                <RegularResponsiveButton bgcolor={'#51C159'} onClick={()=>{setReadReceiptsOpen(true)}}>View Estimate Opens</RegularResponsiveButton>\r\n\r\n</div>\r\n\r\n <EstimateReadReceipts isOpen={readReceiptsOpen} onClose={()=>{setReadReceiptsOpen(false)}}></EstimateReadReceipts>\r\n\r\n                <FlexRowContAutox100Percent\r\n                  display={changeEstimatorDisplay}\r\n                  mobiledisplay=\"none\"\r\n                >\r\n                  <Select16px\r\n                    onChange={(e) => {\r\n                      setGuideUserId(e.target.value);\r\n                    }}\r\n                  >\r\n                    <Option16px value={0}>Assign Guide</Option16px>\r\n                    {listOfEstimators.map((o, i) => (\r\n                      <Option16px key={i} value={o.User_Id}>\r\n                        {o.Name}\r\n                      </Option16px>\r\n                    ))}\r\n                  </Select16px>\r\n                  <button\r\n                    bgcolor={ColorPalette.SecondaryGreen}\r\n                    onClick={() => {\r\n                      AssignToCase(params.caseId, guideUserId);\r\n                    }}\r\n                  >\r\n                    Assign\r\n                  </button>\r\n                </FlexRowContAutox100Percent>\r\n               \r\n              </FlexColumnCont>\r\n          \r\n            </FlexDiv>\r\n            {window.$ISMOBILE === true ? <hr></hr> : null}\r\n            <FlexColumnFullWidth\r\n              display={projectInfoDisplay}\r\n              mobiledisplay={projectInfoDisplay}\r\n            >\r\n              {/* <FlexColumnCont\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                height=\"auto\"\r\n                width=\"80%\"\r\n                margin=\"0\"\r\n                mobileflexdirection=\"column\"\r\n                mobilewidth=\"90vw\"\r\n                tabletflexdirection=\"column\"\r\n                tabletalignitems=\"baseline\"\r\n              >\r\n                <FlexInfoCont mobilewidth=\"100%\">\r\n                  <FlexDiv>\r\n  \r\n                  </FlexDiv>\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader minwidth='100px'>Project Name:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                    <SmallHeader display={editCaseInfo ? \"none\" : \"block\"}>\r\n                      {projectObj.Tittle}\r\n                    </SmallHeader>\r\n                    <TextInputReusable\r\n                      display={editCaseInfo ? \"block\" : \"none\"}\r\n                      defaultValue={projectObj.Tittle}\r\n                      onChange={(e) => {\r\n                        projectObj.Tittle = e.target.value;\r\n                      }}\r\n                    ></TextInputReusable>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader minwidth='100px'>Full Name:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                    <SmallHeader display={editCaseInfo ? \"none\" : \"block\"}>\r\n                      {projectObj.Name}\r\n                    </SmallHeader>\r\n                    <TextInputReusable\r\n                      display={editCaseInfo ? \"block\" : \"none\"}\r\n                      defaultValue={projectObj.Name}\r\n                      onChange={(e) => {\r\n                        projectObj.Name = e.target.value;\r\n                      }}\r\n                    ></TextInputReusable>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader minwidth='100px'>Phone Number:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                    <SmallHeader display={editCaseInfo ? \"none\" : \"block\"}>\r\n                      {projectObj.Phone}\r\n                    </SmallHeader>\r\n                    <TextInputReusable\r\n                      display={editCaseInfo ? \"block\" : \"none\"}\r\n                      defaultValue={projectObj.Phone}\r\n                      onChange={(e) => {\r\n                        projectObj.Phone = e.target.value;\r\n                      }}\r\n                    ></TextInputReusable>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader minwidth='100px'>Email Address:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                    <SmallHeader display={editCaseInfo ? \"none\" : \"block\"}>\r\n                      {projectObj.Email}\r\n                    </SmallHeader>\r\n                    <TextInputReusable\r\n                      display={editCaseInfo ? \"block\" : \"none\"}\r\n                      defaultValue={projectObj.Email}\r\n                      onChange={(e) => {\r\n                        projectObj.Email = e.target.value;\r\n                      }}\r\n                    ></TextInputReusable>\r\n                  </WideFlexInfoCont>\r\n                </FlexInfoCont>\r\n\r\n                <FlexInfoCont mobilewidth=\"100%\">\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader minwidth='100px'>Address:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                    <SmallHeader display={editCaseInfo ? \"none\" : \"block\"}>\r\n                      {projectObj.Street}\r\n                    </SmallHeader>\r\n                    <TextInputReusable\r\n                      display={editCaseInfo ? \"block\" : \"none\"}\r\n                      defaultValue={projectObj.Street}\r\n                      onChange={(e) => {\r\n                        projectObj.Street = e.target.value;\r\n                      }}\r\n                    ></TextInputReusable>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <WideFlexInfoCont >\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader minwidth='100px'>City:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n\r\n                    {editCaseInfo ? (\r\n                      <DatalistMedium\r\n                        defaultValue={projectObj.City}\r\n                        inputwidth=\"100%\"\r\n                        inputheight=\"40%\"\r\n                        id=\"cities\"\r\n                        onChange={(e) => {\r\n                          SelectCity(e);\r\n                          // UpdateCityList(e.target.value);\r\n                        }}\r\n                      >\r\n                        <DatalistOption value={0}>Select City</DatalistOption>\r\n                        {cityList.map((o, i) => (\r\n                          <DatalistOption\r\n                            id=\"city\"\r\n                            key={o.Id}\r\n                            value={o.Id}\r\n                            defaultValue={o.Id === projectObj.City_Id}\r\n                            selected={o.Id === projectObj.City_Id}\r\n                          >\r\n                            {o.Name}\r\n                          </DatalistOption>\r\n                        ))}\r\n                      </DatalistMedium>\r\n                    ) : (\r\n                      <SmallHeader display=\"block\">\r\n                        {projectObj.City}\r\n                      </SmallHeader>\r\n                    )}\r\n                  </WideFlexInfoCont>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader minwidth='100px'>Region:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n\r\n                    {editCaseInfo ? (\r\n                      <DatalistMedium\r\n                        defaultValue={projectObj.Metro}\r\n                        inputwidth=\"100%\"\r\n                        inputheight=\"40%\"\r\n                        id=\"metros\"\r\n                        onChange={(e) => {\r\n                          SelectMetro(e);\r\n                          UpdateCityList(e.target.value); // Assuming you want to update something related to the metro selection.\r\n                        }}\r\n                      >\r\n                        <DatalistOption value={0}>Select Region</DatalistOption>\r\n                        {metroList.map((o) => (\r\n                          <DatalistOption\r\n                            key={o.Id}\r\n                            value={o.Id}\r\n                            defaultValue={o.Id === projectObj.Metro_Id}\r\n                            selected={o.Id === projectObj.Metro_Id}\r\n                          >\r\n                            {o.Name}\r\n                          </DatalistOption>\r\n                        ))}\r\n                      </DatalistMedium>\r\n                    ) : (\r\n                      <SmallHeader display=\"block\">\r\n                        {projectObj.Metro}\r\n                      </SmallHeader>\r\n                    )}\r\n                  </WideFlexInfoCont>\r\n                </FlexInfoCont>\r\n                <WideFlexInfoCont display={editCaseInfo ? \"flex\" : \"none\"}>\r\n                  <RegularResponsiveButton\r\n                    width=\"100px\"\r\n                    onClick={() => {\r\n                      setEditCaseInfo(false);\r\n                      SaveCase(projectObj);\r\n                    }}\r\n                  >\r\n                    Save\r\n                  </RegularResponsiveButton>\r\n                  <RegularResponsiveButton\r\n                    width=\"100px\"\r\n                    onClick={() => {\r\n                      setEditCaseInfo(false);\r\n                    }}\r\n                  >\r\n                    Cancel\r\n                  </RegularResponsiveButton>\r\n                </WideFlexInfoCont>\r\n              </FlexColumnCont> */}\r\n\r\n                        {/* //START OF EDIT PROJECT */}\r\n          \r\n<EditFormContainer>\r\n\r\n<FlexDiv onClick={() => {\r\n                          setEditCaseInfo(true);\r\n                        }}\r\n                        >\r\n                      <Icon30px20pxPointer\r\n                      src=\"/editprojectinfo_icon.svg\"\r\n                      ></Icon30px20pxPointer>\r\n                      <RegularText cursor=\"pointer\">Edit Project</RegularText>\r\n                    </FlexDiv>\r\n\r\n      {/* LEFT COLUMN */}\r\n      <EditFormColumn>\r\n        {/* PROJECT NAME */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>Project Name:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditTextInput\r\n              defaultValue={projectObj.Tittle}\r\n              onChange={(e) => {\r\n                projectObj.Tittle = e.target.value;\r\n              }}\r\n            />\r\n          ) : (\r\n            <span>{projectObj.Tittle}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n        {/* FULL NAME */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>Full Name:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditTextInput\r\n              defaultValue={projectObj.Name}\r\n              onChange={(e) => {\r\n                projectObj.Name = e.target.value;\r\n              }}\r\n            />\r\n          ) : (\r\n            <span>{projectObj.Name}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n        {/* PHONE NUMBER */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>Phone Number:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditTextInput\r\n              defaultValue={projectObj.Phone}\r\n              onChange={(e) => {\r\n                projectObj.Phone = e.target.value;\r\n              }}\r\n            />\r\n          ) : (\r\n            <span>{projectObj.Phone}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n        {/* EMAIL */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>Email Address:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditTextInput\r\n              defaultValue={projectObj.Email}\r\n              onChange={(e) => {\r\n                projectObj.Email = e.target.value;\r\n              }}\r\n            />\r\n          ) : (\r\n            <span>{projectObj.Email}</span>\r\n          )}\r\n        </EditFieldRow>\r\n      </EditFormColumn>\r\n      <br></br>\r\n\r\n      {/* RIGHT COLUMN */}\r\n      <EditFormColumn>\r\n        {/* ADDRESS */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>Address:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditTextInput\r\n              defaultValue={projectObj.Street}\r\n              onChange={(e) => {\r\n                projectObj.Street = e.target.value;\r\n              }}\r\n            />\r\n          ) : (\r\n            <span>{projectObj.Street}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n   {/* REGION */}\r\n   <EditFieldRow>\r\n          <EditFieldLabel>Region:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditSelect\r\n              onChange={(e) => {\r\n                SelectMetro(e);\r\n                UpdateCityList(e.target.value);\r\n              }}\r\n              defaultValue={projectObj.Metro_Id}\r\n            >\r\n              <option value={0}>Select Region</option>\r\n              {metroList.map((o) => (\r\n                <option key={o.Id} value={o.Id}>\r\n                  {o.Name}\r\n                </option>\r\n              ))}\r\n            </EditSelect>\r\n          ) : (\r\n            <span>{projectObj.Metro}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n        {/* CITY */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>City:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditSelect\r\n              onChange={(e) => SelectCity(e)}\r\n              defaultValue={projectObj.City_Id}\r\n            >\r\n              <option value={0}>Select City</option>\r\n              {cityList.map((o) => (\r\n                <option key={o.Id} value={o.Id}>\r\n                  {o.Name}\r\n                </option>\r\n              ))}\r\n            </EditSelect>\r\n          ) : (\r\n            <span>{projectObj.City}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n        {/* SAVE/CANCEL (only when editing) */}\r\n        {editCaseInfo && (\r\n          <EditActionButtonsRow>\r\n            <IconButton bgcolor={ColorPalette.PrimaryGrey} onClick={() => {\r\n                setEditCaseInfo(false);\r\n              }}\r\n              style={{ backgroundColor: \"#aaa\" }}>Cancel</IconButton>\r\n              <IconButton    onClick={() => {\r\n                setEditCaseInfo(false);\r\n                SaveCase(projectObj);\r\n              }} src='/saveiconwhite_icon.svg'>Save</IconButton>\r\n          </EditActionButtonsRow>\r\n        )}\r\n      </EditFormColumn>\r\n    </EditFormContainer>\r\n\r\n              {/* //END OF EDIT PROJECT */}\r\n\r\n              <FlexContBottomGrey width=\"95%\" height=\"1%\"></FlexContBottomGrey>\r\n\r\n              <br></br>\r\n\r\n              {/* <FlexColumnCont\r\n                alignitems=\"left\"\r\n                height=\"100%\"\r\n                margintop=\"2%\"\r\n                margin=\"0\"\r\n                width=\"100%\"\r\n              >\r\n                <SmallHeader paddingbottom=\"1.5%\">\r\n                  Project Description:\r\n                </SmallHeader>\r\n                <LandscapePara\r\n                  mobilewidth='85vw'\r\n                  disabled={!editCaseDesc}\r\n                  //disabled\r\n                  defaultValue={projectObj.Description}\r\n                  onChange={(e) => {\r\n                    projectObj.Description = e.target.value;\r\n                  }}\r\n                ></LandscapePara>\r\n              </FlexColumnCont> */}\r\n              <WideFlexInfoCont>\r\n                <RegularResponsiveButton\r\n                  width=\"100px\"\r\n                  onClick={() => {\r\n                    setEditCaseDesc(true);\r\n                  }}\r\n                  display={\r\n                    editCaseDesc ||\r\n                    projectObj.CaseStatus >= CaseStatus.Processed\r\n                      ? \"none\"\r\n                      : \"block\"\r\n                  }\r\n                >\r\n                  Edit\r\n                </RegularResponsiveButton>\r\n                <RegularResponsiveButton\r\n                  width=\"100px\"\r\n                  onClick={() => {\r\n                    SaveCase(projectObj);\r\n                    setEditCaseDesc(false);\r\n                  }}\r\n                  display={editCaseDesc ? \"block\" : \"none\"}\r\n                >\r\n                  Save\r\n                </RegularResponsiveButton>\r\n                <RegularResponsiveButton\r\n                  width=\"100px\"\r\n                  onClick={() => {\r\n                    setEditCaseDesc(false);\r\n                  }}\r\n                  display={editCaseDesc ? \"block\" : \"none\"}\r\n                >\r\n                  Cancel\r\n                </RegularResponsiveButton>\r\n              </WideFlexInfoCont>\r\n              <FlexContFullWidthJustifyCenter>\r\n                <GridContainer2Wide mobilewidth='95vw'>\r\n                  {projectPhotos.map((o, i) => (\r\n                    <FlexDivFlexStartCenter margin='1%' key={i}>\r\n                      <a\r\n                        rel=\"noreferrer\"\r\n                        href={window.$IMGURL + o.File}\r\n                        target=\"_blank\"\r\n                      >\r\n                        <FlexRowCont300x200>\r\n                          <Image300x200\r\n                            width='90vw'\r\n                            src={window.$IMGURL + o.File}\r\n                            alt={\"File:\" + o.File}\r\n                          ></Image300x200>\r\n                        </FlexRowCont300x200>\r\n                      </a>\r\n                      <SmallTextPadding width='85vw'>{o.Caption}</SmallTextPadding>\r\n                      <StyledHRGreenBreakDashed></StyledHRGreenBreakDashed>\r\n                    </FlexDivFlexStartCenter>\r\n                  ))}\r\n\r\n                  {PDFMap.map((o, i) => (\r\n                    <FlexDivFlexStartCenter>\r\n                      <FlexRowCont300x200>\r\n                        <a\r\n                          rel=\"noreferrer\"\r\n                          href={window.$IMGURL + o.File}\r\n                          target=\"_blank\"\r\n                        >\r\n                          <PhotoContExtra key={i}>\r\n                            <FlexColumnCont height=\"auto\">\r\n                              <Image80x100px\r\n                                src={\"/pdficon.png\"}\r\n                                alt={\"File:\" + o.File}\r\n                              ></Image80x100px>\r\n                              <LargeResponsiveButton>\r\n                                View PDF\r\n                              </LargeResponsiveButton>\r\n                            </FlexColumnCont>\r\n                          </PhotoContExtra>\r\n                        </a>\r\n                      </FlexRowCont300x200>\r\n                      <SmallTextPadding>{o.Caption}</SmallTextPadding>\r\n                    </FlexDivFlexStartCenter>\r\n                  ))}\r\n                </GridContainer2Wide>\r\n              </FlexContFullWidthJustifyCenter>\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryRed}\r\n                onClick={() => {\r\n                  setDeleteProjectWindowDisplay(true);\r\n                }}\r\n                display={deleteProjectDisplay}\r\n              >\r\n                <Icon20x20 src=\"/Garbage_Icon.svg\"></Icon20x20>\r\n                Delete Project\r\n              </RegularResponsiveButton>\r\n\r\n              <DeleteProjectWindow\r\n                projectId={projectObj.Id}\r\n                deleteOpen={deleteProjectWindowDisplay}\r\n                CloseWindow={() => {\r\n                  setDeleteProjectWindowDisplay(false);\r\n                }}\r\n              ></DeleteProjectWindow>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n\r\n          {/* Project Proposals --------------------------------------------------------------- */}\r\n\r\n          <ContentCont77vw paddingTop='0px' mobilemargin='0%' display={proposalVisible}>\r\n            <FlexDiv>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n              </FlexColumnCont>\r\n            </FlexDiv>\r\n            <FlexColumnFullWidth margin=\"0\" display={projectProposalsDisplay}>\r\n              <FlexColumnCont\r\n                justifycontent=\"flex-start\"\r\n                width=\"73vw\"\r\n                height=\"auto\"\r\n                margin=\"0\"\r\n              >\r\n\r\n                <FlexColumnCont\r\n                  margin=\"0\"\r\n                  alignitems=\"left\"\r\n                  width=\"70vw\"\r\n                  height=\"auto\"\r\n                >\r\n                  <DeleteProposalWindow\r\n                    proposalid={deleteProposalId}\r\n                    deleteOpen={deleteProposalDisplay}\r\n                    CloseWindow={() => {\r\n                      setDeleteProposalDisplay(false);\r\n                    }}\r\n                  ></DeleteProposalWindow>\r\n\r\n{[...reversedProposals]\r\n  .sort((a, b) => {\r\n    // Sort by Buy_Install first\r\n    if (a.QuoteStatus === QuoteStatus.Buy_Install && b.QuoteStatus !== QuoteStatus.Buy_Install) {\r\n      return -1; // a should come before b\r\n    }\r\n    if (a.QuoteStatus !== QuoteStatus.Buy_Install && b.QuoteStatus === QuoteStatus.Buy_Install) {\r\n      return 1; // b should come before a\r\n    }\r\n    // Secondary sorting criteria can be added here (e.g., by date or other priority)\r\n    return 0;\r\n  })\r\n  .map((o, i) => {\r\n    if (o.Revision === 0 && o.QuoteStatus !== QuoteStatus.Expired) {\r\n      return (\r\n        <div key={i}>\r\n          <ProposalCardGuide\r\n            quoteid={o.Id}\r\n            proposalObj={o}\r\n            DeleteProposal={() => {\r\n              setDeleteProposalId(o.Id);\r\n              setDeleteProposalDisplay(true);\r\n            }}\r\n            UpdateProjectUI={() => {\r\n              SetupProjectForDisplay(params.caseId);\r\n            }}\r\n          />\r\n          {reversedProposals.map((revisionobj, j) => {\r\n            if (\r\n              revisionobj.Revision !== 0 &&\r\n              revisionobj.Proposal === o.Proposal &&\r\n              revisionobj.QuoteStatus !== QuoteStatus.Expired\r\n            ) {\r\n              return (\r\n                <ProposalCardGuide\r\n                  key={`${i}-${j}`}\r\n                  quoteid={revisionobj.Id}\r\n                  proposalObj={revisionobj}\r\n                  DeleteProposal={() => {\r\n                    setDeleteProposalId(revisionobj.Id);\r\n                    setDeleteProposalDisplay(true);\r\n                  }}\r\n                  UpdateProjectUI={() => {\r\n                    SetupProjectForDisplay(params.caseId);\r\n                  }}\r\n                />\r\n              );\r\n            } else return null;\r\n          })}\r\n        </div>\r\n      );\r\n    } else return null;\r\n  })}\r\n\r\n                </FlexColumnCont>\r\n              </FlexColumnCont>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n\r\n          {/* Expired Estimates */}\r\n\r\n          <ContentCont77vw display={expiredProposalVisible}>\r\n            {window.$ISMOBILE === true ? <hr></hr> : null}{\" \"}\r\n            <FlexDiv>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                mobilewidth=\"80vw\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"3%\">\r\n                  Archived Estimates\r\n                </SmallHeaderLeagueSpartan>\r\n              </FlexColumnCont>\r\n              <Icon30x30\r\n                onClick={() => {\r\n                  DisplayProjectProposals(\r\n                    expiredProjectProposalArrow,\r\n                    \"expired\"\r\n                  );\r\n                }}\r\n                src={expiredProjectProposalArrow}\r\n              ></Icon30x30>\r\n            </FlexDiv>\r\n            <FlexColumnFullWidth\r\n              margin=\"0\"\r\n              display={expiredProjectProposalsDisplay}\r\n            >\r\n              <FlexColumnCont\r\n                justifycontent=\"flex-start\"\r\n                width=\"73vw\"\r\n                height=\"auto\"\r\n                margin=\"0\"\r\n              >\r\n                <FlexColumnCont\r\n                  margin=\"0\"\r\n                  alignitems=\"left\"\r\n                  width=\"70vw\"\r\n                  height=\"auto\"\r\n                >\r\n                  <DeleteProposalWindow\r\n                    proposalid={deleteProposalId}\r\n                    deleteOpen={deleteProposalDisplay}\r\n                    CloseWindow={() => {\r\n                      setDeleteProposalDisplay(false);\r\n                    }}\r\n                  ></DeleteProposalWindow>\r\n\r\n                  {projectProposals.map((o, i) => {\r\n                    if (\r\n                      o.Revision === 0 &&\r\n                      o.QuoteStatus === QuoteStatus.Expired\r\n                    ) {\r\n                      return (\r\n                        <div key={i}>\r\n                          <ProposalCardGuide\r\n                            quoteid={o.Id}\r\n                            proposalObj={o}\r\n                            DeleteProposal={() => {\r\n                              setDeleteProposalId(o.Id);\r\n                              setDeleteProposalDisplay(true);\r\n                            }}\r\n                            UpdateProjectUI={() => {\r\n                              SetupProjectForDisplay(params.caseId);\r\n                            }}\r\n                          ></ProposalCardGuide>\r\n                          {projectProposals.map((revisionobj, i) => {\r\n                            if (\r\n                              revisionobj.Revision !== 0 &&\r\n                              revisionobj.Proposal === o.Proposal &&\r\n                              revisionobj.QuoteStatus === \"QuoteStatus.Expired\"\r\n                            ) {\r\n                              return (\r\n                                <ProposalCardGuide\r\n                                  key={i}\r\n                                  quoteid={revisionobj.Id}\r\n                                  proposalObj={revisionobj}\r\n                                  DeleteProposal={() => {\r\n                                    setDeleteProposalId(revisionobj.Id);\r\n                                    setDeleteProposalDisplay(true);\r\n                                  }}\r\n                                  UpdateProjectUI={() => {\r\n                                    SetupProjectForDisplay(params.caseId);\r\n                                  }}\r\n                                ></ProposalCardGuide>\r\n                              );\r\n                            } else return null;\r\n                          })}\r\n                        </div>\r\n                      );\r\n                    } else return null;\r\n                  })}\r\n                </FlexColumnCont>\r\n              </FlexColumnCont>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n\r\n          <FlexDivFlexEnd>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                DeleteProject(params.caseId);\r\n              }}\r\n              color={ColorPalette.PrimaryRed}\r\n            >\r\n              Delete Project\r\n            </BlueUnderlinePointerPara>\r\n          </FlexDivFlexEnd>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ActionMenu\r\n            pageProp={\"Projects - \" + projectObj?.Tittle}\r\n            mobilePageProp={projectObj?.Tittle}\r\n          ></ActionMenu>\r\n\r\n          <ContentCont77vw display={draftCaseVisible}>\r\n            <FlexCont90PercentAutoHeight>\r\n              <SmallHeaderLeagueSpartan>\r\n                Ready to Submit?\r\n              </SmallHeaderLeagueSpartan>\r\n              <RegularResponsiveButton\r\n                onClick={() => {\r\n                  ChangeProjectStatusToSubmit(projectObj.Id);\r\n                }}\r\n              >\r\n                Submit Project\r\n              </RegularResponsiveButton>\r\n            </FlexCont90PercentAutoHeight>\r\n          </ContentCont77vw>\r\n\r\n          {/* Project Information --------------------------------------------------------------- */}\r\n\r\n          <ContentCont77vw\r\n            paddingbottom=\"0\"\r\n            paddingTop=\"5px\"\r\n            mobilepaddingbottom=\"0\"\r\n            mobilemargin=\"0%\"\r\n            margin=\"0%\"\r\n          >\r\n            <ProjectPhotoUploadPreviewWindow open={isUploadProjectPhotosOpen} CloseWindow={()=>{\r\n              setIsUploadProjectPhotosOpen(false); SetupProjectForDisplay(params.caseId);\r\n              GetListOfEstimators(params.storeId, userinfo.Role);\r\n            }}></ProjectPhotoUploadPreviewWindow>\r\n            <FlexDiv mobilewidth='92.5vw'>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n                mobileflexdirection=\"row\"\r\n                mobilewidth='92.5vw'\r\n                mobilejustifycontent=\"space-between\"\r\n                mobilealignitems=\"baseline\"\r\n              >\r\n                <FlexRowContAutox100Percent\r\n                  display={changeStatusContDisplay}\r\n                  mobiledisplay=\"none\"\r\n                >\r\n                  <Select16px\r\n                    onChange={(e) => {\r\n                      setStatusValue(e.target.value);\r\n                    }}\r\n                  >\r\n                    <Option16px value={0}>Change Status</Option16px>\r\n                    <Option16px value={1}>Submitted</Option16px>\r\n                    <Option16px value={2}>Accepted</Option16px>\r\n                    <Option16px value={3}>Processed</Option16px>\r\n                    <Option16px value={4}>Closed</Option16px>\r\n                    <Option16px value={5}>Request Cancel</Option16px>\r\n                    <Option16px value={-1}>Canceled</Option16px>\r\n                  </Select16px>\r\n                  <BlueUnderlinePointerPara\r\n                    onClick={() => {\r\n                      SetProjectStatus(statusValue, params.caseId);\r\n                    }}\r\n                  >\r\n                    Save\r\n                  </BlueUnderlinePointerPara>\r\n                </FlexRowContAutox100Percent>\r\n\r\n                <GuideCancelProjectWindow\r\n                  deleteOpen={cancelProjectWindowDisplay}\r\n                  projectId={params.caseId}\r\n                  CloseWindow={() => {\r\n                    setCancelProjectWindowDisplay(false);\r\n                  }}\r\n                ></GuideCancelProjectWindow>\r\n                <RegularResponsiveButton\r\n                  bgcolor={ColorPalette.PrimaryRed}\r\n                  display={cancelButtonDisplay}\r\n                  onClick={() => {\r\n                    setCancelProjectWindowDisplay(true);\r\n                  }}\r\n                >\r\n                  Cancel\r\n                </RegularResponsiveButton>\r\n                <div>\r\n                  <FlexDiv>\r\n                <FlexDiv\r\n                  onClick={ async () => {\r\n                    const resp = await GuideTakeoverCase(params.caseId, userId);\r\n                    setCreateQuoteWindowDisplay(true);\r\n                  }}\r\n                >\r\n                  <Icon30px20pxPointer src=\"/newestimate_icon.svg\"></Icon30px20pxPointer>\r\n                  <RegularText mobilefontsize=\"16px\" cursor=\"pointer\">\r\n                    Estimate\r\n                  </RegularText>\r\n                </FlexDiv>\r\n                <AreaInputPopup\r\n                  visible={createQuoteWindowDisplay}\r\n                  createRegular={true}\r\n                  onClose={() => {\r\n                    setCreateQuoteWindowDisplay(false);\r\n                  }}\r\n                ></AreaInputPopup>\r\n              \r\n                <FlexDiv\r\n                 onClick={ async ()  => {\r\n                  const resp = await GuideTakeoverCase(params.caseId, userId);\r\n                  history.push(\r\n                    `/sitemapper/${params.Id}/${params.storeId}/${params.caseId}/0`\r\n                  );\r\n                }}\r\n                >\r\n                  <Icon30px20pxPointer src=\"/sitemap_icon.svg\"></Icon30px20pxPointer>\r\n                  <RegularText mobilefontsize=\"16px\" cursor=\"pointer\">\r\n                    Sitemap\r\n                  </RegularText>\r\n                </FlexDiv>\r\n            \r\n                <FlexDiv\r\n                  onClick={() => {\r\n                    GuideTakeoverCase(params.caseId, userId);\r\n                  }}\r\n                >\r\n                  <Icon30px20pxPointer src=\"/takeover_icon.svg\"></Icon30px20pxPointer>\r\n                  <RegularText mobilefontsize=\"16px\" cursor=\"pointer\">\r\n                    Self-Assign\r\n                  </RegularText>\r\n                </FlexDiv>\r\n                <FlexDiv onClick={()=>{setIsUploadProjectPhotosOpen(true)}}>\r\n                  <Icon30px20pxPointer src='/Green Button.svg'></Icon30px20pxPointer>\r\n                  <RegularText mobilefontsize=\"16px\" cursor=\"pointer\">\r\n                    Photos\r\n                  </RegularText>\r\n                </FlexDiv>\r\n                <FlexDiv onClick={() => {\r\n                          setEditCaseInfo(true);\r\n                        }}\r\n                        >\r\n                      <Icon30px20pxPointer\r\n                      src=\"/editprojectinfo_icon.svg\"\r\n                      ></Icon30px20pxPointer>\r\n                      <RegularText cursor=\"pointer\">Edit Project</RegularText>\r\n                    </FlexDiv>\r\n                </FlexDiv>\r\n</div>\r\n                <FlexRowContAutox100Percent\r\n                  display={changeEstimatorDisplay}\r\n                  mobiledisplay=\"none\"\r\n                >\r\n                  <Select16px\r\n                    onChange={(e) => {\r\n                      setGuideUserId(e.target.value);\r\n                    }}\r\n                  >\r\n                    <Option16px value={0}>Assign Guide</Option16px>\r\n                    {listOfEstimators.map((o, i) => (\r\n                      <Option16px key={i} value={o.User_Id}>\r\n                        {o.Name}\r\n                      </Option16px>\r\n                    ))}\r\n                  </Select16px>\r\n                  <button\r\n                    bgcolor={ColorPalette.SecondaryGreen}\r\n                    onClick={() => {\r\n                      AssignToCase(params.caseId, guideUserId);\r\n                    }}\r\n                  >\r\n                    Assign\r\n                  </button>\r\n                </FlexRowContAutox100Percent>\r\n               \r\n              <RegularResponsiveButton bgcolor={'#51C159'} onClick={()=>{setReadReceiptsOpen(true)}}>View Estimate Opens</RegularResponsiveButton>\r\n\r\n              </FlexColumnCont>\r\n              <Icon30x30\r\n                src={projectInfoArrow}\r\n                onClick={() => {\r\n                  DisplayProjectInfo(projectInfoArrow);\r\n                }}\r\n              ></Icon30x30>\r\n            </FlexDiv>\r\n\r\n            <EstimateReadReceipts isOpen={readReceiptsOpen} onClose={()=>{setReadReceiptsOpen(false)}}></EstimateReadReceipts>\r\n\r\n            {window.$ISMOBILE === true ? <hr></hr> : null}\r\n            <FlexColumnFullWidth\r\n              display={projectInfoDisplay}\r\n              mobiledisplay={projectInfoDisplay}\r\n            >\r\n\r\n            {/* //START OF EDIT PROJECT */}\r\n          \r\n<EditFormContainer>\r\n      {/* LEFT COLUMN */}\r\n      <EditFormColumn>\r\n        {/* PROJECT NAME */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>Project Name:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditTextInput\r\n              defaultValue={projectObj.Tittle}\r\n              onChange={(e) => {\r\n                projectObj.Tittle = e.target.value;\r\n              }}\r\n            />\r\n          ) : (\r\n            <span>{projectObj.Tittle}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n        {/* FULL NAME */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>Full Name:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditTextInput\r\n              defaultValue={projectObj.Name}\r\n              onChange={(e) => {\r\n                projectObj.Name = e.target.value;\r\n              }}\r\n            />\r\n          ) : (\r\n            <span>{projectObj.Name}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n        {/* PHONE NUMBER */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>Phone Number:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditTextInput\r\n              defaultValue={projectObj.Phone}\r\n              onChange={(e) => {\r\n                projectObj.Phone = e.target.value;\r\n              }}\r\n            />\r\n          ) : (\r\n            <span>{projectObj.Phone}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n        {/* EMAIL */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>Email Address:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditTextInput\r\n              defaultValue={projectObj.Email}\r\n              onChange={(e) => {\r\n                projectObj.Email = e.target.value;\r\n              }}\r\n            />\r\n          ) : (\r\n            <span>{projectObj.Email}</span>\r\n          )}\r\n        </EditFieldRow>\r\n      </EditFormColumn>\r\n\r\n      {/* RIGHT COLUMN */}\r\n      <EditFormColumn>\r\n        {/* ADDRESS */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>Address:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditTextInput\r\n              defaultValue={projectObj.Street}\r\n              onChange={(e) => {\r\n                projectObj.Street = e.target.value;\r\n              }}\r\n            />\r\n          ) : (\r\n            <span>{projectObj.Street}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n   {/* REGION */}\r\n   <EditFieldRow>\r\n          <EditFieldLabel>Region:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditSelect\r\n              onChange={(e) => {\r\n                SelectMetro(e);\r\n                UpdateCityList(e.target.value);\r\n              }}\r\n              defaultValue={projectObj.Metro_Id}\r\n            >\r\n              <option value={0}>Select Region</option>\r\n              {metroList.map((o) => (\r\n                <option key={o.Id} value={o.Id}>\r\n                  {o.Name}\r\n                </option>\r\n              ))}\r\n            </EditSelect>\r\n          ) : (\r\n            <span>{projectObj.Metro}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n        {/* CITY */}\r\n        <EditFieldRow>\r\n          <EditFieldLabel>City:</EditFieldLabel>\r\n          {editCaseInfo ? (\r\n            <EditSelect\r\n              onChange={(e) => SelectCity(e)}\r\n              defaultValue={projectObj.City_Id}\r\n            >\r\n              <option value={0}>Select City</option>\r\n              {cityList.map((o) => (\r\n                <option key={o.Id} value={o.Id}>\r\n                  {o.Name}\r\n                </option>\r\n              ))}\r\n            </EditSelect>\r\n          ) : (\r\n            <span>{projectObj.City}</span>\r\n          )}\r\n        </EditFieldRow>\r\n\r\n        {/* SAVE/CANCEL (only when editing) */}\r\n        {editCaseInfo && (\r\n          <EditActionButtonsRow>\r\n            <IconButton bgcolor={ColorPalette.PrimaryGrey} onClick={() => {\r\n                setEditCaseInfo(false);\r\n              }}\r\n              style={{ backgroundColor: \"#aaa\" }}>Cancel</IconButton>\r\n              <IconButton    onClick={() => {\r\n                setEditCaseInfo(false);\r\n                SaveCase(projectObj);\r\n              }} src='/saveiconwhite_icon.svg'>Save</IconButton>\r\n          </EditActionButtonsRow>\r\n        )}\r\n      </EditFormColumn>\r\n    </EditFormContainer>\r\n\r\n              {/* //END OF EDIT PROJECT */}\r\n\r\n              <FlexContBottomGrey width=\"95%\" height=\"1%\"></FlexContBottomGrey>\r\n\r\n              <br></br>\r\n{/* \r\n              <FlexColumnCont\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                height=\"auto\"\r\n                width=\"80%\"\r\n                margin=\"0\"\r\n                mobileflexdirection=\"column\"\r\n                mobilewidth=\"90vw\"\r\n                tabletflexdirection=\"column\"\r\n                tabletalignitems=\"baseline\"\r\n              >\r\n                <FlexInfoCont mobilewidth=\"100%\">\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader>Project Area:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                    <SmallHeader>{projectAreaString}</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader>Project Scope:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                    <SmallHeader>{projectScopeString}</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader>Project Type:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                    <SmallHeader>{ProjectTypeString}</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                </FlexInfoCont>\r\n\r\n                <FlexInfoCont mobilewidth=\"100%\">\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader>Project Style:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n                    <SmallHeader>\r\n                      {ProjectStyleString === \"N/\"\r\n                        ? \"Not Selected\"\r\n                        : ProjectStyleString}\r\n                    </SmallHeader>\r\n                  </WideFlexInfoCont>\r\n\r\n                  <WideFlexInfoCont>\r\n                    <WideFlexInfoCont width=\"175px\">\r\n                      <SmallHeader>Project Budget:</SmallHeader>\r\n                    </WideFlexInfoCont>\r\n\r\n                    <SmallHeader>{ProjectBudgetString}</SmallHeader>\r\n                  </WideFlexInfoCont>\r\n                </FlexInfoCont>\r\n              </FlexColumnCont> */}\r\n\r\n              {/* <FlexColumnCont\r\n                alignitems=\"left\"\r\n                height=\"100%\"\r\n                margintop=\"2%\"\r\n                margin=\"0\"\r\n                width=\"100%\"\r\n              >\r\n                <SmallHeader paddingbottom=\"1.5%\">\r\n                  Project Description:\r\n                </SmallHeader>\r\n                <LandscapePara\r\n                  disabled={!editCaseDesc}\r\n                  //disabled\r\n                  defaultValue={projectObj.Description}\r\n                  onChange={(e) => {\r\n                    projectObj.Description = e.target.value;\r\n                  }}\r\n                ></LandscapePara>\r\n              </FlexColumnCont> */}\r\n              {/* <WideFlexInfoCont>\r\n                <RegularResponsiveButton\r\n                  width=\"100px\"\r\n                  onClick={() => {\r\n                    setEditCaseDesc(true);\r\n                  }}\r\n                  display={\r\n                    editCaseDesc ||\r\n                    projectObj.CaseStatus >= CaseStatus.Processed\r\n                      ? \"none\"\r\n                      : \"block\"\r\n                  }\r\n                >\r\n                  Edit\r\n                </RegularResponsiveButton>\r\n                <RegularResponsiveButton\r\n                  width=\"100px\"\r\n                  onClick={() => {\r\n                    SaveCase(projectObj);\r\n                    setEditCaseDesc(false);\r\n                  }}\r\n                  display={editCaseDesc ? \"block\" : \"none\"}\r\n                >\r\n                  Save\r\n                </RegularResponsiveButton>\r\n                <RegularResponsiveButton\r\n                  width=\"100px\"\r\n                  onClick={() => {\r\n                    setEditCaseDesc(false);\r\n                  }}\r\n                  display={editCaseDesc ? \"block\" : \"none\"}\r\n                >\r\n                  Cancel\r\n                </RegularResponsiveButton>\r\n              </WideFlexInfoCont> */}\r\n              <FlexContFullWidthJustifyCenter>\r\n                <GridContainer2Wide>\r\n                  {projectPhotos.map((o, i) => (\r\n                    <FlexDivFlexStartCenter key={i}>\r\n                      <a\r\n                        rel=\"noreferrer\"\r\n                        href={window.$IMGURL + o.File}\r\n                        target=\"_blank\"\r\n                      >\r\n                        <FlexRowCont300x200>\r\n                          <Image300x200\r\n                            src={window.$IMGURL + o.File}\r\n                            alt={\"File:\" + o.File}\r\n                          ></Image300x200>\r\n                        </FlexRowCont300x200>\r\n                      </a>\r\n                      <SmallTextPadding>{o.Caption}</SmallTextPadding>\r\n                    </FlexDivFlexStartCenter>\r\n                  ))}\r\n\r\n                  {PDFMap.map((o, i) => (\r\n                    <FlexDivFlexStartCenter>\r\n                      <FlexRowCont300x200>\r\n                        <a\r\n                          rel=\"noreferrer\"\r\n                          href={window.$IMGURL + o.File}\r\n                          target=\"_blank\"\r\n                        >\r\n                          <PhotoContExtra key={i}>\r\n                            <FlexColumnCont height=\"auto\">\r\n                              <Image80x100px\r\n                                src={\"/pdficon.png\"}\r\n                                alt={\"File:\" + o.File}\r\n                              ></Image80x100px>\r\n                              <LargeResponsiveButton>\r\n                                View PDF\r\n                              </LargeResponsiveButton>\r\n                            </FlexColumnCont>\r\n                          </PhotoContExtra>\r\n                        </a>\r\n                      </FlexRowCont300x200>\r\n                      <SmallTextPadding>{o.Caption}</SmallTextPadding>\r\n                    </FlexDivFlexStartCenter>\r\n                  ))}\r\n                </GridContainer2Wide>\r\n              </FlexContFullWidthJustifyCenter>\r\n              <RegularResponsiveButton\r\n                bgcolor={ColorPalette.PrimaryRed}\r\n                onClick={() => {\r\n                  setDeleteProjectWindowDisplay(true);\r\n                }}\r\n                display={deleteProjectDisplay}\r\n              >\r\n                <Icon20x20 src=\"/Garbage_Icon.svg\"></Icon20x20>\r\n                Delete Project\r\n              </RegularResponsiveButton>\r\n\r\n              <DeleteProjectWindow\r\n                projectId={projectObj.Id}\r\n                deleteOpen={deleteProjectWindowDisplay}\r\n                CloseWindow={() => {\r\n                  setDeleteProjectWindowDisplay(false);\r\n                }}\r\n              ></DeleteProjectWindow>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n\r\n          {/* Project Proposals --------------------------------------------------------------- */}\r\n\r\n          <ContentCont77vw display={proposalVisible}>\r\n            {/* <MobileOnlyRegularHeader>\r\n              {projectObj.Tittle}\r\n            </MobileOnlyRegularHeader> */}\r\n            <FlexDiv>\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"3%\">\r\n                  Estimates\r\n                </SmallHeaderLeagueSpartan>\r\n              </FlexColumnCont>\r\n              <Icon30x30\r\n                onClick={() => {\r\n                  DisplayProjectProposals(projectProposalArrow, \"nonExpired\");\r\n                }}\r\n                src={projectProposalArrow}\r\n              ></Icon30x30>\r\n            </FlexDiv>\r\n            <FlexColumnFullWidth margin=\"0\" display={projectProposalsDisplay}>\r\n              <FlexColumnCont\r\n                justifycontent=\"flex-start\"\r\n                width=\"73vw\"\r\n                height=\"auto\"\r\n                margin=\"0\"\r\n              >\r\n\r\n                <FlexColumnCont\r\n                  margin=\"0\"\r\n                  alignitems=\"left\"\r\n                  width=\"70vw\"\r\n                  height=\"auto\"\r\n                >\r\n                  <DeleteProposalWindow\r\n                    proposalid={deleteProposalId}\r\n                    deleteOpen={deleteProposalDisplay}\r\n                    CloseWindow={() => {\r\n                      setDeleteProposalDisplay(false);\r\n                    }}\r\n                  ></DeleteProposalWindow>\r\n\r\n                  {reversedProposals.map((o, i) => {\r\n                    if (\r\n                      o.Revision === 0 &&\r\n                      o.QuoteStatus !== QuoteStatus.Expired\r\n                    ) {\r\n                      return (\r\n                        <div key={i}>\r\n                          <ProposalCardGuide\r\n                            quoteid={o.Id}\r\n                            proposalObj={o}\r\n                            DeleteProposal={() => {\r\n                              setDeleteProposalId(o.Id);\r\n                              setDeleteProposalDisplay(true);\r\n                            }}\r\n                            UpdateProjectUI={() => {\r\n                              SetupProjectForDisplay(params.caseId);\r\n                            }}\r\n                          />\r\n                          {reversedProposals.map((revisionobj, j) => {\r\n                            if (\r\n                              revisionobj.Revision !== 0 &&\r\n                              revisionobj.Proposal === o.Proposal &&\r\n                              revisionobj.QuoteStatus !== QuoteStatus.Expired\r\n                            ) {\r\n                              return (\r\n                                <ProposalCardGuide\r\n                                  key={`${i}-${j}`}\r\n                                  quoteid={revisionobj.Id}\r\n                                  proposalObj={revisionobj}\r\n                                  DeleteProposal={() => {\r\n                                    setDeleteProposalId(revisionobj.Id);\r\n                                    setDeleteProposalDisplay(true);\r\n                                  }}\r\n                                  UpdateProjectUI={() => {\r\n                                    SetupProjectForDisplay(params.caseId);\r\n                                  }}\r\n                                />\r\n                              );\r\n                            } else return null;\r\n                          })}\r\n                        </div>\r\n                      );\r\n                    } else return null;\r\n                  })}\r\n                </FlexColumnCont>\r\n              </FlexColumnCont>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n{/* \r\n          <ContentCont77vw display={frsFormsContainerDisplay}>\r\n      {window.$ISMOBILE === true ? <hr /> : null}{\" \"}\r\n      <FlexDiv>\r\n        <FlexColumnCont\r\n          height=\"8vh\"\r\n          mobilewidth=\"80vw\"\r\n          flexdirection=\"row\"\r\n          justifycontent=\"flex-start\"\r\n          margin=\"0\"\r\n        >\r\n          <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"3%\">\r\n            FRS Forms\r\n          </SmallHeaderLeagueSpartan>\r\n        </FlexColumnCont>\r\n        <Icon30x30\r\n          onClick={() => {\r\n            DisplayFRSForms(frsFormsArrow, \"frs\");\r\n          }}\r\n          src={frsFormsArrow}\r\n        />\r\n      </FlexDiv>\r\n      <FlexColumnFullWidth margin=\"0\" display={frsFormsListDisplay}>\r\n        <FlexColumnCont\r\n          justifycontent=\"flex-start\"\r\n          width=\"73vw\"\r\n          height=\"auto\"\r\n          margin=\"0\"\r\n        >\r\n          <FlexColumnCont margin=\"0\" alignitems=\"left\" width=\"70vw\" height=\"auto\">\r\n            <DeleteProposalWindow\r\n              proposalid={deleteFRSFormId}\r\n              deleteOpen={deleteFRSFormDisplay}\r\n              CloseWindow={() => {\r\n                setDeleteFRSFormDisplay(false);\r\n              }}\r\n            />\r\n       {forms.length === 0 ? (\r\n        <p>No forms found.</p>\r\n      ) : (\r\n        forms.map((form) => (\r\n          <div>\r\n          <FormItem  key={form.id}>\r\n            <FormTitle onClick={()=>{history.push(`/form-statistics/${form.id}`)}}>{form.title}</FormTitle>\r\n            <FormDescription>{form.description}</FormDescription>\r\n            <a href={`/view-form/${form.id}`}>View Form {form.id}</a>\r\n          </FormItem>\r\n          <br></br>\r\n          </div>\r\n        ))\r\n      )}\r\n          </FlexColumnCont>\r\n        </FlexColumnCont>\r\n      </FlexColumnFullWidth>\r\n    </ContentCont77vw> */}\r\n\r\n          <ContentCont77vw display={expiredProposalVisible}>\r\n            {window.$ISMOBILE === true ? <hr></hr> : null}{\" \"}\r\n            <FlexDiv>\r\n              {/* <MobileOnlyRegularHeader>\r\n              {projectObj.Tittle}\r\n            </MobileOnlyRegularHeader> */}\r\n              <FlexColumnCont\r\n                height=\"8vh\"\r\n                mobilewidth=\"80vw\"\r\n                flexdirection=\"row\"\r\n                justifycontent=\"flex-start\"\r\n                margin=\"0\"\r\n              >\r\n                <SmallHeaderLeagueSpartan width=\"100%\" marginleft=\"3%\">\r\n                  Archived Estimates\r\n                </SmallHeaderLeagueSpartan>\r\n              </FlexColumnCont>\r\n              <Icon30x30\r\n                onClick={() => {\r\n                  DisplayProjectProposals(\r\n                    expiredProjectProposalArrow,\r\n                    \"expired\"\r\n                  );\r\n                }}\r\n                src={expiredProjectProposalArrow}\r\n              ></Icon30x30>\r\n            </FlexDiv>\r\n            <FlexColumnFullWidth\r\n              margin=\"0\"\r\n              display={expiredProjectProposalsDisplay}\r\n            >\r\n              <FlexColumnCont\r\n                justifycontent=\"flex-start\"\r\n                width=\"73vw\"\r\n                height=\"auto\"\r\n                margin=\"0\"\r\n              >\r\n\r\n                <FlexColumnCont\r\n                  margin=\"0\"\r\n                  alignitems=\"left\"\r\n                  width=\"70vw\"\r\n                  height=\"auto\"\r\n                >\r\n                  <DeleteProposalWindow\r\n                    proposalid={deleteProposalId}\r\n                    deleteOpen={deleteProposalDisplay}\r\n                    CloseWindow={() => {\r\n                      setDeleteProposalDisplay(false);\r\n                    }}\r\n                  ></DeleteProposalWindow>\r\n\r\n                  {projectProposals.map((o, i) => {\r\n                    if (\r\n                      o.Revision === 0 &&\r\n                      o.QuoteStatus === QuoteStatus.Expired\r\n                    ) {\r\n                      return (\r\n                        <div key={i}>\r\n                          <ProposalCardGuide\r\n                            quoteid={o.Id}\r\n                            proposalObj={o}\r\n                            DeleteProposal={() => {\r\n                              setDeleteProposalId(o.Id);\r\n                              setDeleteProposalDisplay(true);\r\n                            }}\r\n                            UpdateProjectUI={() => {\r\n                              SetupProjectForDisplay(params.caseId);\r\n                            }}\r\n                          ></ProposalCardGuide>\r\n                          {projectProposals.map((revisionobj, i) => {\r\n                            if (\r\n                              revisionobj.Revision !== 0 &&\r\n                              revisionobj.Proposal === o.Proposal &&\r\n                              revisionobj.QuoteStatus === \"QuoteStatus.Expired\"\r\n                            ) {\r\n                              return (\r\n                                <ProposalCardGuide\r\n                                  key={i}\r\n                                  quoteid={revisionobj.Id}\r\n                                  proposalObj={revisionobj}\r\n                                  DeleteProposal={() => {\r\n                                    setDeleteProposalId(revisionobj.Id);\r\n                                    setDeleteProposalDisplay(true);\r\n                                  }}\r\n                                  UpdateProjectUI={() => {\r\n                                    SetupProjectForDisplay(params.caseId);\r\n                                  }}\r\n                                ></ProposalCardGuide>\r\n                              );\r\n                            } else return null;\r\n                          })}\r\n                        </div>\r\n                      );\r\n                    } else return null;\r\n                  })}\r\n                </FlexColumnCont>\r\n              </FlexColumnCont>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n\r\n          <FlexDivFlexEnd>\r\n            <BlueUnderlinePointerPara\r\n              onClick={() => {\r\n                DeleteProject(params.caseId);\r\n              }}\r\n              color={ColorPalette.PrimaryRed}\r\n            >\r\n              Delete Project\r\n            </BlueUnderlinePointerPara>\r\n          </FlexDivFlexEnd>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  }\r\n}\r\n  else {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nViewProjectGuideView.defaultProps = {};\r\n\r\nexport default ViewProjectGuideView;\r\n","import axios from \"axios\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCaseById,\r\n  GetInvoice,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  MakeStripePay,\r\n  SendPayNotification,\r\n  SetHeaderAuthorization,\r\n} from \"../../API_Functions/Utility_Functions\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnCont90PercentLeftAlign,\r\n  FlexColumnContAutoHeightLeftAlign,\r\n  FlexColumnFullWidth,\r\n  FlexRowCont,\r\n  FlexRowCont60PercentSpaceEvenly,\r\n  FlexRowContBoxShadow,\r\n  FlexRowContFlexStart,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Div125px, Div175px } from \"../../StylesheetComps/Div\";\r\nimport { Icon120x120, Icon80x80 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont, SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport { Cont, ContentContPropWidth } from \"../../StylesheetComps/Projects\";\r\nimport {\r\n  LeagueSpartanRegular,\r\n  SmallText,\r\n  StyledHRGreyBreak,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst PaymentOptionsScreen = () => {\r\n  const [etransferInfoDisplay, setEtransferInfoDisplay] = useState(\"none\");\r\n  const [chequeInfoDisplay, setChequeInfoDisplay] = useState(\"none\");\r\n\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  function generateRandomToken(length) {\r\n    var result = \"\";\r\n    var characters =\r\n      \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\r\n    var charactersLength = characters.length;\r\n    for (var i = 0; i < length; i++) {\r\n      result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n    }\r\n    return result;\r\n  }\r\n\r\n  const ProceedToStripePayment = async (amount, caseid, quoteid, invoiceid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data !== null) {\r\n      if (data.Case !== null) {\r\n        var token = axios.defaults.headers.common[\"Authorization\"];\r\n        if (token) {\r\n          var tokenRef = token.substring(6);\r\n        } else {\r\n          tokenRef = \"am9zaHRlc3QxMDU6QWExMjM0NTY3OCQ=\";\r\n        }\r\n        var name =\r\n          data.Case.Name +\r\n          \", \" +\r\n          data.Case.Street +\r\n          \",\" +\r\n          data.Case.City +\r\n          \" on Project # \" +\r\n          data.Case.CaseNumber;\r\n        var transactionid = data.Case.CaseNumber;\r\n        var paymenturl = await MakeStripePay(\r\n          amount,\r\n          \"CAD\",\r\n          name,\r\n          transactionid,\r\n          quoteid,\r\n          data.Case.Store_Id,\r\n          tokenRef,\r\n          invoiceid\r\n        );\r\n        if (paymenturl !== null) {\r\n          window.open(paymenturl, \"_blank\");\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const UpdateEtransferInfoUI = async (display) => {\r\n    switch (display) {\r\n      case \"none\":\r\n        setEtransferInfoDisplay(\"flex\");\r\n        break;\r\n      case \"flex\":\r\n        setEtransferInfoDisplay(\"none\");\r\n        break;\r\n      default:\r\n        setEtransferInfoDisplay(\"none\");\r\n    }\r\n  };\r\n\r\n  const UpdateChequeInfoUI = async (display) => {\r\n    switch (display) {\r\n      case \"none\":\r\n        setChequeInfoDisplay(\"flex\");\r\n        break;\r\n\r\n      case \"flex\":\r\n        setChequeInfoDisplay(\"none\");\r\n\r\n        break;\r\n\r\n      default:\r\n        setChequeInfoDisplay(\"none\");\r\n    }\r\n  };\r\n\r\n  const ConfirmaPaymentMethod = async (\r\n    method,\r\n    amount,\r\n    caseid,\r\n    quoteid,\r\n    invoiceid\r\n  ) => {\r\n    if (invoiceid === 0 || invoiceid === \"0\")\r\n      await SendPayNotification(caseid, amount, method, \"For deposit\");\r\n    else {\r\n      var invoice = await GetInvoice(invoiceid);\r\n      var notes = \"For invoice number \" + invoice.Number;\r\n      await SendPayNotification(caseid, amount, method, notes);\r\n    }\r\n\r\n    history.push(\"/paymentpending/\" + amount + \"/\" + caseid + \"/\" + quoteid);\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n  }, []);\r\n\r\n  return (\r\n    <Cont>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n      <FlexColumn81vwLightGrey>\r\n        <ActionMenu\r\n          pageProp={\"Proposal Payment Options\"}\r\n          projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n        ></ActionMenu>\r\n\r\n        <ContentContPropWidth width=\"96%\" height=\"auto\">\r\n          <FlexColumnCont\r\n            justifycontent=\"space-evenly\"\r\n            width=\"92%\"\r\n            alignitems=\"baseline\"\r\n            height=\"95%\"\r\n          >\r\n            <SmallHeaderLeagueSpartan>\r\n              Select a Payment Method\r\n            </SmallHeaderLeagueSpartan>\r\n\r\n            <FlexRowContBoxShadow\r\n              onClick={() => {\r\n                ProceedToStripePayment(\r\n                  params.amount,\r\n                  params.caseId,\r\n                  params.quoteId,\r\n                  params.invoiceid\r\n                );\r\n              }}\r\n            >\r\n              <Icon120x120\r\n                mobiledisplay=\"none\"\r\n                src=\"/Credit_Card_Icon.svg\"\r\n              ></Icon120x120>\r\n              <FlexColumnContAutoHeightLeftAlign>\r\n                <SmallHeaderLeagueSpartan>\r\n                  Pay by Credit Card\r\n                </SmallHeaderLeagueSpartan>\r\n                <SmallHeader>\r\n                  Pay through Stripe Payment using VISA, Mastercard, or American\r\n                  Express.\r\n                </SmallHeader>\r\n              </FlexColumnContAutoHeightLeftAlign>\r\n              <RegularResponsiveButton>Select</RegularResponsiveButton>\r\n            </FlexRowContBoxShadow>\r\n\r\n            {/* <FlexRowContBoxShadow\r\n              onClick={() => {\r\n                UpdateEtransferInfoUI(etransferInfoDisplay);\r\n              }}\r\n            >\r\n              <Icon120x120\r\n                mobiledisplay=\"none\"\r\n                src=\"/Etransfer_Icon.svg\"\r\n              ></Icon120x120>\r\n              <FlexColumnContAutoHeightLeftAlign>\r\n                <SmallHeaderLeagueSpartan>\r\n                  Pay by E-Transfer\r\n                </SmallHeaderLeagueSpartan>\r\n                <SmallHeader>\r\n                  Pay by e-transfer through your chosen financial institution.\r\n                </SmallHeader>\r\n              </FlexColumnContAutoHeightLeftAlign>\r\n              <RegularResponsiveButton>Select</RegularResponsiveButton>\r\n            </FlexRowContBoxShadow> */}\r\n\r\n            {/* <FlexColumnContAutoHeightLeftAlign\r\n              width=\"52%\"\r\n              display={etransferInfoDisplay}\r\n            >\r\n              <br></br>\r\n              <FlexColumnCont90PercentLeftAlign justifycontent=\"flex-start\">\r\n                <br></br>\r\n                <FlexRowContFlexStart>\r\n                  <Icon80x80 src=\"/1_Icon.svg\"></Icon80x80>\r\n                  <FlexColumnContAutoHeightLeftAlign\r\n                    margin=\"0\"\r\n                    alignitems=\"left\"\r\n                  >\r\n                    <LeagueSpartanRegular>\r\n                      Sign into your online bank account\r\n                    </LeagueSpartanRegular>\r\n                    <SmallText>\r\n                      In a new window, log into your chosen financial\r\n                      institution.\r\n                    </SmallText>\r\n                  </FlexColumnContAutoHeightLeftAlign>\r\n                </FlexRowContFlexStart>\r\n              </FlexColumnCont90PercentLeftAlign>\r\n\r\n              <FlexColumnCont90PercentLeftAlign justifycontent=\"flex-start\">\r\n                <br></br>\r\n                <FlexRowContFlexStart>\r\n                  <Icon80x80 src=\"/2_Icon.svg\"></Icon80x80>\r\n                  <FlexColumnContAutoHeightLeftAlign\r\n                    margin=\"0\"\r\n                    alignitems=\"left\"\r\n                  >\r\n                    <LeagueSpartanRegular>\r\n                      Select E-transfer and enter payment information\r\n                    </LeagueSpartanRegular>\r\n                    <SmallText>\r\n                      It is <b> VERY IMPORTANT </b> to include either your\r\n                      project name, phone number, or contact name in the message\r\n                      box so we can identify which project your payment belongs\r\n                      to.\r\n                    </SmallText>\r\n                  </FlexColumnContAutoHeightLeftAlign>\r\n                </FlexRowContFlexStart>\r\n                <br></br>\r\n                <FlexColumnFullWidth>\r\n                  <FlexRowCont60PercentSpaceEvenly>\r\n                    <Div125px>\r\n                      <SmallText>Name: </SmallText>\r\n                    </Div125px>\r\n                    <Div175px>\r\n                      <SmallText>New Rhodes Construction </SmallText>\r\n                    </Div175px>\r\n                  </FlexRowCont60PercentSpaceEvenly>\r\n                  <FlexRowCont60PercentSpaceEvenly>\r\n                    <Div125px>\r\n                      <SmallText>Email Address: </SmallText>\r\n                    </Div125px>\r\n                    <Div175px>\r\n                      <SmallText>ar@newrhodesconstruction.com </SmallText>\r\n                    </Div175px>\r\n                  </FlexRowCont60PercentSpaceEvenly>\r\n\r\n                  <FlexRowCont60PercentSpaceEvenly>\r\n                    <Div125px>\r\n                      <SmallText>Security Question: </SmallText>\r\n                    </Div125px>\r\n                    <Div175px>\r\n                      <SmallText>What's our company name?</SmallText>\r\n                    </Div175px>\r\n                  </FlexRowCont60PercentSpaceEvenly>\r\n\r\n                  <FlexRowCont60PercentSpaceEvenly>\r\n                    <Div125px>\r\n                      <SmallText>Security Answer: </SmallText>\r\n                    </Div125px>\r\n                    <Div175px>\r\n                      <SmallText>New Rhodes Construction</SmallText>\r\n                    </Div175px>\r\n                  </FlexRowCont60PercentSpaceEvenly>\r\n                </FlexColumnFullWidth>\r\n              </FlexColumnCont90PercentLeftAlign>\r\n\r\n              <br></br>\r\n              <FlexColumnCont90PercentLeftAlign justifycontent=\"flex-start\">\r\n                <br></br>\r\n                <FlexRowContFlexStart>\r\n                  <Icon80x80 src=\"/3_Icon.svg\"></Icon80x80>\r\n                  <FlexColumnContAutoHeightLeftAlign alignitems=\"left\">\r\n                    <LeagueSpartanRegular>\r\n                      Submit E-transfer and wait for confirmation.\r\n                    </LeagueSpartanRegular>\r\n                    <SmallText>\r\n                      For most financial institutions, we offer AUTO-DEPOSIT.\r\n                      Once we receive the funds, we will email you with payment\r\n                      confirmation within 3 business days.\r\n                    </SmallText>\r\n                  </FlexColumnContAutoHeightLeftAlign>\r\n                </FlexRowContFlexStart>\r\n              </FlexColumnCont90PercentLeftAlign>\r\n              <br></br>\r\n              <FlexRowCont>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    ConfirmaPaymentMethod(\r\n                      \"E-transfer\",\r\n                      params.amount,\r\n                      params.caseId,\r\n                      params.quoteId,\r\n                      params.invoiceid\r\n                    );\r\n                  }}\r\n                >\r\n                  Confirm Payment\r\n                </RegularResponsiveButton>\r\n              </FlexRowCont>\r\n              <br></br>\r\n\r\n              <StyledHRGreyBreak></StyledHRGreyBreak>\r\n              <br></br>\r\n            </FlexColumnContAutoHeightLeftAlign> */}\r\n\r\n            {/* <FlexRowContBoxShadow\r\n              onClick={() => {\r\n                UpdateChequeInfoUI(chequeInfoDisplay);\r\n              }}\r\n            >\r\n              <Icon120x120\r\n                mobiledisplay=\"none\"\r\n                src=\"/Cheque_Icon.svg\"\r\n              ></Icon120x120>\r\n              <FlexColumnContAutoHeightLeftAlign>\r\n                <SmallHeaderLeagueSpartan>\r\n                  Pay by Cheque\r\n                </SmallHeaderLeagueSpartan>\r\n                <SmallText>\r\n                  Pay by issuing a cheque by mail, or dropping it off at our\r\n                  head office.\r\n                </SmallText>\r\n              </FlexColumnContAutoHeightLeftAlign>\r\n              <RegularResponsiveButton>Select</RegularResponsiveButton>\r\n            </FlexRowContBoxShadow> */}\r\n            <br></br>\r\n            <br></br>\r\n            {/* <FlexColumnContAutoHeightLeftAlign\r\n              width=\"52%\"\r\n              display={chequeInfoDisplay}\r\n            >\r\n              <br></br>\r\n              <FlexColumnCont90PercentLeftAlign\r\n                alignitems=\"center\"\r\n                justifycontent=\"flex-start\"\r\n              >\r\n                <br></br>\r\n                <FlexRowContFlexStart>\r\n                  <Icon80x80 src=\"/1_Icon.svg\"></Icon80x80>\r\n                  <FlexColumnContAutoHeightLeftAlign\r\n                    margin=\"0\"\r\n                    alignitems=\"left\"\r\n                  >\r\n                    <LeagueSpartanRegular>\r\n                      Write Payment information on the cheque\r\n                    </LeagueSpartanRegular>\r\n                    <FlexRowCont60PercentSpaceEvenly>\r\n                      <Div125px>\r\n                        <SmallText>Date: </SmallText>\r\n                      </Div125px>\r\n                      <Div175px>\r\n                        <SmallText>Current Date </SmallText>\r\n                      </Div175px>\r\n                    </FlexRowCont60PercentSpaceEvenly>\r\n\r\n                    <FlexRowCont60PercentSpaceEvenly>\r\n                      <Div125px>\r\n                        <SmallText>Payee: </SmallText>\r\n                      </Div125px>\r\n                      <Div175px>\r\n                        <SmallText>New Rhodes Construction </SmallText>\r\n                      </Div175px>\r\n                    </FlexRowCont60PercentSpaceEvenly>\r\n\r\n                    <FlexRowCont60PercentSpaceEvenly>\r\n                      <Div125px>\r\n                        <SmallText>Amount: </SmallText>\r\n                      </Div125px>\r\n                      <Div175px>\r\n                        <SmallText>Total Contracted Deposit Amount</SmallText>\r\n                      </Div175px>\r\n                    </FlexRowCont60PercentSpaceEvenly>\r\n\r\n                    <FlexRowCont60PercentSpaceEvenly>\r\n                      <Div125px>\r\n                        <SmallText>Signature: </SmallText>\r\n                      </Div125px>\r\n                      <Div175px>\r\n                        <SmallText>Your signature is required</SmallText>\r\n                      </Div175px>\r\n                    </FlexRowCont60PercentSpaceEvenly>\r\n\r\n                    <FlexRowCont60PercentSpaceEvenly>\r\n                      <Div125px>\r\n                        <SmallText>Memo: </SmallText>\r\n                      </Div125px>\r\n                      <Div175px>\r\n                        <SmallText>Address or Project Name</SmallText>\r\n                      </Div175px>\r\n                    </FlexRowCont60PercentSpaceEvenly>\r\n                  </FlexColumnContAutoHeightLeftAlign>\r\n                </FlexRowContFlexStart>\r\n              </FlexColumnCont90PercentLeftAlign>\r\n\r\n              <FlexColumnCont90PercentLeftAlign justifycontent=\"flex-start\">\r\n                <br></br>\r\n                <FlexRowContFlexStart>\r\n                  <Icon80x80 src=\"/2_Icon.svg\"></Icon80x80>\r\n                  <FlexColumnContAutoHeightLeftAlign alignitems=\"left\">\r\n                    <LeagueSpartanRegular>\r\n                      Mail or drop off your cheque at our head office.\r\n                    </LeagueSpartanRegular>\r\n                    <SmallText>\r\n                      If dropping off, please give us a call beforehand at +1\r\n                      (778)-800-3598 to coordinate with our team.\r\n                    </SmallText>\r\n                    <br></br>\r\n                    <FlexColumnContAutoHeightLeftAlign\r\n                      alignitems=\"left\"\r\n                      justifycontent=\"flex-start\"\r\n                    >\r\n                      <FlexRowCont60PercentSpaceEvenly>\r\n                        <Div125px>\r\n                          <SmallText>Head Office: </SmallText>\r\n                        </Div125px>\r\n                        <Div175px>\r\n                          <SmallText>\r\n                            12306 McTavish Road, Pitt Meadows B.C. V3Y 1Z1\r\n                            Canada\r\n                          </SmallText>\r\n                        </Div175px>\r\n                      </FlexRowCont60PercentSpaceEvenly>\r\n                    </FlexColumnContAutoHeightLeftAlign>\r\n                  </FlexColumnContAutoHeightLeftAlign>\r\n                </FlexRowContFlexStart>\r\n              </FlexColumnCont90PercentLeftAlign>\r\n\r\n              <FlexColumnCont90PercentLeftAlign justifycontent=\"flex-start\">\r\n                <FlexRowContFlexStart>\r\n                  <Icon80x80 src=\"/3_Icon.svg\"></Icon80x80>\r\n                  <FlexColumnContAutoHeightLeftAlign\r\n                    margin=\"0\"\r\n                    alignitems=\"left\"\r\n                  >\r\n                    <LeagueSpartanRegular>\r\n                      Payment Confirmation\r\n                    </LeagueSpartanRegular>\r\n                    <SmallText>\r\n                      Once we deposit the cheque, we will email you with payment\r\n                      confirmation within 1-3 business days.\r\n                    </SmallText>\r\n                  </FlexColumnContAutoHeightLeftAlign>\r\n                  <br></br>\r\n                </FlexRowContFlexStart>\r\n              </FlexColumnCont90PercentLeftAlign>\r\n              <FlexRowCont>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    ConfirmaPaymentMethod(\r\n                      \"Cheque\",\r\n                      params.amount,\r\n                      params.caseId,\r\n                      params.quoteId,\r\n                      params.invoiceid\r\n                    );\r\n                  }}\r\n                >\r\n                  Confirm Payment\r\n                </RegularResponsiveButton>\r\n              </FlexRowCont>\r\n            </FlexColumnContAutoHeightLeftAlign> */}\r\n          </FlexColumnCont>\r\n        </ContentContPropWidth>\r\n      </FlexColumn81vwLightGrey>\r\n    </Cont>\r\n  );\r\n};\r\n\r\nPaymentOptionsScreen.defaultProps = {};\r\n\r\nexport default PaymentOptionsScreen;\r\n","import Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport {\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexColumnFullWidth,\r\n  FlexRowCont,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Icon100x100 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  Image300x200,\r\n  SmallHeaderLeagueSpartan,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnContBoxShadow } from \"../../StylesheetComps/Menu\";\r\nimport { Cont, ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport { SmallText } from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\nconst PaymentPendingScreen = () => {\r\n  //=============================================================================\r\n  // Payment Success Screen - User redirected here on Successful Stripe Payment\r\n  //=============================================================================\r\n\r\n  //=============================================================================\r\n  // User will redirect to QuoteAppointment Page to Book Appointment with Inst.\r\n  //=============================================================================\r\n\r\n  const [roleNum] = useState(0);\r\n  const [userInfo, setUserInfo] = useState({});\r\n\r\n  const history = useHistory();\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    setUserInfo(JSON.parse(sessionStorage.getItem(\"userInfo\")));\r\n  }, []);\r\n\r\n  if (roleNum !== UserRole.Loading) {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ActionMenu></ActionMenu>\r\n\r\n          <ContentCont77vw>\r\n            <FlexColumnFullWidth display={\"block\"} height=\"auto\" margin=\"0\">\r\n              <FlexColumnCont100xAutoPercent>\r\n                <Image300x200 src={\"/Customer_Service_Icon.svg\"}></Image300x200>\r\n                <SmallHeaderLeagueSpartan fontsize=\"24px\">\r\n                  Your Project is Pending Payment.\r\n                </SmallHeaderLeagueSpartan>\r\n\r\n                <br></br>\r\n                <br></br>\r\n\r\n                <FlexRowCont100PercentSpaceBetween mobileflexdirection=\"column\">\r\n                  <FlexColumnContBoxShadow>\r\n                    <Icon100x100 src=\"/number1.svg\"></Icon100x100>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Send Payment\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\n                      We've received your project's approval. Now it's time to\r\n                      send payment.\r\n                    </SmallText>\r\n                  </FlexColumnContBoxShadow>\r\n\r\n                  <FlexColumnContBoxShadow>\r\n                    <Icon100x100 src=\"/number2.svg\"></Icon100x100>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Payment Confirmation\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\n                      Once we receive payment, we'll notify you and confirm your\r\n                      project.\r\n                    </SmallText>\r\n                  </FlexColumnContBoxShadow>\r\n\r\n                  <FlexColumnContBoxShadow>\r\n                    <Icon100x100 src=\"/number3.svg\"></Icon100x100>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Project Scheduling\r\n                    </SmallHeaderLeagueSpartan>\r\n                    <SmallText>\r\n                      Your project will be scheduled at the soonest possible\r\n                      date and you'll be notified.\r\n                    </SmallText>\r\n                  </FlexColumnContBoxShadow>\r\n                </FlexRowCont100PercentSpaceBetween>\r\n                <br></br>\r\n                <br></br>\r\n                <FlexRowCont mobileflexdirection=\"column\">\r\n                  <RegularResponsiveButton\r\n                    mobilewidth=\"68vw\"\r\n                    onClick={() => {\r\n                      history.push(\r\n                        \"/CasesPersonal/\" +\r\n                          userInfo.Metro_Id +\r\n                          \"/\" +\r\n                          userInfo.Store_Id\r\n                      );\r\n                    }}\r\n                  >\r\n                    View Projects\r\n                  </RegularResponsiveButton>\r\n                  {/* <RegularResponsiveButton bgcolor={ColorPalette.DarkGrey} onClick={()=>{history.push(\"/payment/\"+params.amount+\"/\"+params.caseId+\"/\"+params.quoteId+\"/\")\r\n}}>View Payment Methods</RegularResponsiveButton> */}\r\n                </FlexRowCont>\r\n              </FlexColumnCont100xAutoPercent>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nPaymentPendingScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default PaymentPendingScreen;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\nimport {\r\n  Div100vw20vh,\r\n  MyAccountCardDiv,\r\n  TopDiv40vh,\r\n  WhiteTopRoundedDiv,\r\n} from \"../../MobileComponents/Divs\";\r\nimport { LogoRelativeLeft, TopImage40vh } from \"../../MobileComponents/Images\";\r\nimport {\r\n  LeagueHeader14px,\r\n  MenuHeader,\r\n  WhiteAvenirHeader,\r\n  WhiteLeagueHeader,\r\n} from \"../../MobileComponents/Text\";\r\nimport {\r\n  FlexColumnCont75x80Percent,\r\n  FlexColumnLeftAlign,\r\n  FlexContzIndex1,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { FlexColumnCont80vwAutoHeight } from \"../../StylesheetComps/Cont\";\r\nimport { Icon20x20 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\nconst MyAccountScreen = () => {\r\n  const [userinfo, setUserinfo] = useState({});\r\n  const [roleName, setRoleName] = useState(\"\");\r\n  const history = useHistory();\r\n\r\n  useEffect(() => {\r\n    setUserinfo(JSON.parse(sessionStorage.getItem(\"userInfo\")));\r\n    switch (JSON.parse(sessionStorage.getItem(\"userInfo\")).Role) {\r\n      case UserRole.User:\r\n        setRoleName(\"Homeowner\");\r\n        break;\r\n      case UserRole.VIP:\r\n        setRoleName(\"VIP Homeowner\");\r\n        break;\r\n      case UserRole.Worker:\r\n        setRoleName(\"Worker\");\r\n        break;\r\n      case UserRole.OwnerOperator:\r\n        setRoleName(\"Owner / Operator\");\r\n        break;\r\n      case UserRole.Estimator:\r\n        setRoleName(\"Guide\");\r\n        break;\r\n      case UserRole.Installer:\r\n        setRoleName(\"Installer\");\r\n        break;\r\n      case UserRole.Manager:\r\n        setRoleName(\"Manager\");\r\n        break;\r\n      case UserRole.Admin:\r\n        setRoleName(\"Admin\");\r\n        break;\r\n      case UserRole.Accountant:\r\n        setRoleName(\"Accountant\");\r\n        break;\r\n      case UserRole.Supplier:\r\n        setRoleName(\"Supplier\");\r\n        break;\r\n\r\n      default:\r\n        break;\r\n    }\r\n  }, []);\r\n\r\n  return (\r\n    <FlexContzIndex1>\r\n      <LeftCont>\r\n        <Menu> </Menu>\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <ActionMenu mobilePageProp=\"My Account\"></ActionMenu>\r\n\r\n        <Div100vw20vh>\r\n          <TopImage40vh src=\"/Log In Image.png\"></TopImage40vh>\r\n        </Div100vw20vh>\r\n\r\n        <TopDiv40vh>\r\n          <LogoRelativeLeft\r\n            src={\r\n              userinfo.Image === null\r\n                ? \"/PersonIcon.svg\"\r\n                : window.$IMGURL + userinfo.Image\r\n            }\r\n          ></LogoRelativeLeft>\r\n          <FlexColumnLeftAlign>\r\n            <WhiteLeagueHeader>\r\n              {userinfo.Name !== null ? userinfo.Name : \"\"}\r\n            </WhiteLeagueHeader>\r\n            <WhiteAvenirHeader>{roleName}</WhiteAvenirHeader>\r\n          </FlexColumnLeftAlign>\r\n        </TopDiv40vh>\r\n\r\n        <WhiteTopRoundedDiv width='87.75vw'>\r\n          <MenuHeader>My Account</MenuHeader>\r\n          <FlexColumnCont75x80Percent>\r\n            <MyAccountCardDiv>\r\n              <LeagueHeader14px\r\n                onClick={() => {\r\n                  history.push(\"/profile\");\r\n                }}\r\n              >\r\n                Profile\r\n              </LeagueHeader14px>\r\n              <Icon20x20 src=\"rightarrow.svg\"></Icon20x20>\r\n            </MyAccountCardDiv>\r\n\r\n            <a\r\n              rel=\"noreferrer\"\r\n              style={{ textDecoration: \"none\", color: \"black\" }}\r\n              href=\"https://newrhodesconstruction.com/privacy-policy/\"\r\n              target=\"_blank\"\r\n            >\r\n              <MyAccountCardDiv>\r\n                <LeagueHeader14px>Privacy Policy</LeagueHeader14px>\r\n                <Icon20x20 src=\"rightarrow.svg\"></Icon20x20>\r\n              </MyAccountCardDiv>\r\n            </a>\r\n\r\n            <a\r\n              rel=\"noreferrer\"\r\n              style={{ textDecoration: \"none\", color: \"black\" }}\r\n              href=\"https://newrhodesconstruction.com/rl-terms-of-service/\"\r\n              target=\"_blank\"\r\n            >\r\n              <MyAccountCardDiv>\r\n                <LeagueHeader14px>Terms of Service</LeagueHeader14px>\r\n                <Icon20x20 src=\"rightarrow.svg\"></Icon20x20>\r\n              </MyAccountCardDiv>\r\n            </a>\r\n          </FlexColumnCont75x80Percent>\r\n        </WhiteTopRoundedDiv>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexContzIndex1>\r\n  );\r\n};\r\n\r\nMyAccountScreen.defaultProps = {};\r\n\r\nexport default MyAccountScreen;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/ActionMenu\";\r\nimport {\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont,\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexColumnCont70x100Percent,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  LeftCont,\r\n  FlexColumn81vwLightGrey,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Cont } from \"../../StylesheetComps/Projects\";\r\nimport { ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport { Icon200x200 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { MediumHeader } from \"../../StylesheetComps/Titles\";\r\nimport { FlexColumnContBoxShadow19Percent } from \"../../StylesheetComps/Menu\";\r\nimport { SmallHeaderLeagueSpartan } from \"../../StylesheetComps/LandscapeForm\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\nimport { GreenButtonWidth12VWHeight40 } from \"../../StylesheetComps/AuthSheet\";\r\nimport axios from \"axios\";\r\n\r\nconst DashboardWelcomeScreen = () => {\r\n  const [roleNum] = useState(0);\r\n  const history = useHistory();\r\n  const [metroId, setMetroId] = useState(0);\r\n  const [storeId, setStoreId] = useState(0);\r\n\r\n  const CheckStoreEstimates = async (metroId, storeId) => {\r\n    const resp = await axios.get(window.$DBURL + \"store/metro/\" + metroId);\r\n    if (resp.status === 200) {\r\n      if (resp.data !== null) {\r\n        if (resp.data.stores !== null) {\r\n          if (storeId === 0) {\r\n            if (resp.data.stores.length !== 1) {\r\n              history.push(\"/storelistestimate/\" + metroId);\r\n            } else {\r\n              history.push(\r\n                \"/estimate/\" + metroId + \"/\" + resp.data.stores[0].Id\r\n              );\r\n            }\r\n          } else {\r\n            history.push(\"/estimate/\" + metroId + \"/\" + storeId);\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    var userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    setMetroId(userInfo.Metro_Id);\r\n    setStoreId(userInfo.Store_Id);\r\n  }, []);\r\n\r\n  if (roleNum !== UserRole.Loading) {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ActionMenu></ActionMenu>\r\n\r\n          <ContentCont77vw>\r\n            <FlexColumnFullWidth display={\"block\"} height=\"auto\" margin=\"0\">\r\n              <FlexColumnCont100xAutoPercent>\r\n                <FlexColumnCont70x100Percent>\r\n                  <SmallHeaderLeagueSpartan fontsize=\"24px\">\r\n                    Ready to start your project?\r\n                  </SmallHeaderLeagueSpartan>\r\n                  <br></br>\r\n                  <MediumHeader>\r\n                    Hack your Yard and receive a free cost estimate and construction plan. Then, we'll\r\n                    schedule the work and start building!\r\n                  </MediumHeader>\r\n                </FlexColumnCont70x100Percent>\r\n\r\n                <FlexRowCont100PercentSpaceBetween mobileflexdirection=\"column\">\r\n                  <FlexColumnContBoxShadow19Percent>\r\n                    <Icon200x200 src=\"/Home_Icon.svg\"></Icon200x200>\r\n                    <br></br>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Tell us about the project.\r\n                    </SmallHeaderLeagueSpartan>\r\n                  </FlexColumnContBoxShadow19Percent>\r\n\r\n                  <FlexColumnContBoxShadow19Percent>\r\n                    <Icon200x200 src=\"/Take_Photo_Icon.svg\"></Icon200x200>\r\n                    <br></br>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Take photos of the outdoor space.\r\n                    </SmallHeaderLeagueSpartan>\r\n                  </FlexColumnContBoxShadow19Percent>\r\n\r\n                  {/* <FlexColumnContBoxShadow19Percent>\r\n                    <Icon200x200 src=\"/Project_Package_Icon.svg\"></Icon200x200>\r\n                    <br></br>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Receive a full design {\" & \"} estimate.\r\n                    </SmallHeaderLeagueSpartan>\r\n                  </FlexColumnContBoxShadow19Percent> */}\r\n\r\n                  <FlexColumnContBoxShadow19Percent>\r\n                    <Icon200x200 src=\"/Schedule_Icon.svg\"></Icon200x200>\r\n                    <br></br>\r\n                    <SmallHeaderLeagueSpartan>\r\n                      Schedule the Construction.\r\n                    </SmallHeaderLeagueSpartan>\r\n                  </FlexColumnContBoxShadow19Percent>\r\n                </FlexRowCont100PercentSpaceBetween>\r\n                <br></br>\r\n                <br></br>\r\n                <FlexRowCont mobileflexdirection=\"column\">\r\n                  <GreenButtonWidth12VWHeight40\r\n                    mobilewidth=\"68vw\"\r\n                    onClick={() => {\r\n                      CheckStoreEstimates(metroId, storeId);\r\n                    }}\r\n                  >\r\n                    New Project\r\n                  </GreenButtonWidth12VWHeight40>\r\n                </FlexRowCont>\r\n              </FlexColumnCont100xAutoPercent>\r\n            </FlexColumnFullWidth>\r\n          </ContentCont77vw>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  } else {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n};\r\n\r\nDashboardWelcomeScreen.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  onPreview: () => {},\r\n  onProfileUpdated: () => {},\r\n};\r\n\r\nexport default DashboardWelcomeScreen;\r\n","/* eslint-disable */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexColumnFullWidth,\r\n  QuoteItemCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexibleEstimateDiv15Percent,\r\n  FlexibleEstimateDiv35Percent,\r\n  FlexibleEstimateDiv5Percent,\r\n  GreyFlexibleEstimateDiv15Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Icon20x20,\r\n  Icon30x40pxPointerNoMargin,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { SmallGreenLeagueText } from \"../../StylesheetComps/Titles\";\r\nconst InvoiceItem = ({\r\n  onClick,\r\n  header1,\r\n  header2,\r\n  subheader2notes,\r\n  subheader2,\r\n  header3,\r\n  header4,\r\n  header5,\r\n  header6,\r\n  header7,\r\n  header8,\r\n  quoteItemObj,\r\n  invoiceTypeName,\r\n  noChange,\r\n  OutputValue,\r\n  RemoveItemFromLocalQuoteObject,\r\n  parentid,\r\n  itemLink,\r\n  bgColor,\r\n  isHeader,\r\n  showRelatedItems,\r\n  createInvoice,\r\n}) => {\r\n  // const [containerPadding, setContainerPadding] = useState(\"\");\r\n\r\n  const [header1Display, setHeader1Display] = useState(\"none\");\r\n  const [header2Display, setHeader2Display] = useState(\"flex\");\r\n  const [subheader2Display] = useState(\"flex\");\r\n  const [header3Display, setHeader3Display] = useState(\"flex\");\r\n  const [header4Display, setHeader4Display] = useState(\"flex\");\r\n  const [header5Display, setHeader5Display] = useState(\"flex\");\r\n  const [header6Display, setHeader6Display] = useState(\"flex\");\r\n\r\n  const [header1InputDisplay, setHeader1InputDisplay] = useState(\"none\");\r\n  const [header2InputDisplay, setHeader2InputDisplay] = useState(\"none\");\r\n  const [header3InputDisplay, setHeader3InputDisplay] = useState(\"none\");\r\n  const [header5InputDisplay, setHeader5InputDisplay] = useState(\"none\");\r\n  const [header6InputDisplay, setHeader6InputDisplay] = useState(\"none\");\r\n\r\n  const [header1DefaultValue, setHeader1DefaultValue] = useState(header1);\r\n  const [header2DefaultValue, setHeader2DefaultValue] = useState(header2);\r\n  const [header3DefaultValue, setHeader3DefaultValue] = useState(\r\n    quoteItemObj?.Notes\r\n  );\r\n  const [header4DefaultValue, setHeader4DefaultValue] = useState(header4);\r\n  const [header5DefaultValue, setHeader5DefaultValue] = useState(0);\r\n  const [header6DefaultValue, setHeader6DefaultValue] = useState(\r\n    (quoteItemObj?.LaborSubtotalWithRelatedItems / quoteItemObj?.Quant).toFixed(\r\n      4\r\n    )\r\n  );\r\n\r\n  const [Header8, setHeader8] = useState(header8);\r\n\r\n  const [linkHeaderDisplay, setLinkHeaderDisplay] = useState(\"none\");\r\n  const [pointerEvent, setPointerEvent] = useState(\"none\");\r\n  const [youtubeLinkProp, setYoutubeLinkProp] = useState(\"\");\r\n\r\n  const [descriptionOverflow, setDescriptionOverflow] = useState(\"hidden\");\r\n  const [descriptionWhiteSpace, setDescriptionWhiteSpace] = useState(\"nowrap\");\r\n\r\n  const [deleteIconSrc, setDeleteIconSrc] = useState(\"\");\r\n\r\n  const [relatedItemToggleSRC, setRelatedItemToggleSRC] =\r\n    useState(\"/downarrow.svg\");\r\n  const [relatedItemsDisplay, setRelatedItemsDisplay] = useState(\"none\");\r\n\r\n  const [FontSize, setFontSize] = useState(\"14px\");\r\n  const [FontWeight, setFontWeight] = useState(\"regular\");\r\n  const [Rate, setItemRate] = useState(\r\n    quoteItemObj?.SubtotalWithRelatedItems / quoteItemObj?.Quant\r\n  );\r\n  const [installRate, setItemInstallRate] = useState(\r\n    quoteItemObj?.LaborSubtotalWithRelatedItems / quoteItemObj?.Quant\r\n  );\r\n\r\n  const DetermineInputHeaderLogic = async () => {\r\n    InitializeSetup();\r\n\r\n    if (createInvoice === true) {\r\n      quoteItemObj.Quant = 0;\r\n      switch (invoiceTypeName) {\r\n        case \"supply\":\r\n          //quoteItemObj.SubtotalWithRelatedItems=0;\r\n          setHeader3Display(\"none\");\r\n          setHeader3InputDisplay(\"flex\");\r\n          setHeader5Display(\"none\");\r\n          setHeader5InputDisplay(\"flex\");\r\n          RecalculateSubtotalWithRelatedItems(quoteItemObj, 0);\r\n          break;\r\n        case \"install\":\r\n          //quoteItemObj.LaborSubtotalWithRelatedItems=0;\r\n          setHeader3Display(\"none\");\r\n          setHeader3InputDisplay(\"flex\");\r\n          setHeader5Display(\"none\");\r\n          setHeader5InputDisplay(\"flex\");\r\n          setHeader6Display(\"none\");\r\n          setHeader6InputDisplay(\"flex\");\r\n          RecalculateLabourSubtotalWithRelatedItems(quoteItemObj, 0, 0);\r\n          break;\r\n        default:\r\n          break;\r\n      }\r\n      OutputValue(quoteItemObj);\r\n    }\r\n  };\r\n\r\n  const InitializeSetup = async () => {\r\n    setHeader1Display(\"none\");\r\n    setHeader2Display(\"flex\");\r\n    setHeader3Display(\"flex\");\r\n    setHeader4Display(\"flex\");\r\n    setHeader5Display(\"flex\");\r\n    setHeader6Display(\"flex\");\r\n    setDeleteIconSrc(\"\");\r\n\r\n    setHeader1InputDisplay(\"none\");\r\n    setHeader2InputDisplay(\"none\");\r\n    setHeader3InputDisplay(\"none\");\r\n    // setHeader4InputDisplay(\"none\")\r\n    setHeader5InputDisplay(\"none\");\r\n    setHeader6InputDisplay(\"none\");\r\n\r\n    if (isHeader == true) {\r\n      setFontSize(\"16px\");\r\n      setFontWeight(\"bold\");\r\n    }\r\n  };\r\n\r\n  const RecalculateSubtotalWithRelatedItems = async (item, quantity) => {\r\n    item.Quant = quantity;\r\n    item.SubtotalWithRelatedItems = Rate.toFixed(4) * item.Quant;\r\n    setHeader8(\"$\" + item.SubtotalWithRelatedItems.toFixed(2));\r\n  };\r\n\r\n  const RecalculateLabourSubtotalWithRelatedItems = async (\r\n    item,\r\n    quantity,\r\n    rate\r\n  ) => {\r\n    item.Quant = quantity;\r\n    item.LaborSubtotalWithRelatedItems = rate * item.Quant;\r\n    setHeader8(\"$\" + item.LaborSubtotalWithRelatedItems.toFixed(2));\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (quoteItemObj !== null && quoteItemObj != undefined)\r\n      DetermineInputHeaderLogic(invoiceTypeName);\r\n  }, [invoiceTypeName, createInvoice]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexColumnCont100xAutoPercent margin=\"0\" onClick={onClick}>\r\n      <QuoteItemCont\r\n        borderbottom={\r\n          relatedItemsDisplay === \"block\"\r\n            ? `1px dashed ${ColorPalette.PrimaryButtonBlue}`\r\n            : `1px solid ${ColorPalette.PrimaryGrey}`\r\n        }\r\n      >\r\n        {/* Column 1 */}\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          display={header1Display}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <Icon20x20\r\n            onClick={() => {\r\n              RemoveItemFromLocalQuoteObject();\r\n            }}\r\n            src={deleteIconSrc}\r\n          ></Icon20x20>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          display={header1InputDisplay}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header1DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        {/* Column 2 */}\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          height={descriptionOverflow === \"hidden\" ? \"110px\" : \"auto\"}\r\n          width=\"500px\"\r\n          display={header2Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={isHeader === true ? \"bold\" : \"\"}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnCont\r\n            mobilewidth=\"100%\"\r\n            width=\"auto\"\r\n            height=\"auto\"\r\n            margin=\"0%\"\r\n            justifycontent=\"center\"\r\n            alignitems=\"left\"\r\n          >\r\n            <SmallGreenLeagueText\r\n              display={bgColor === ColorPalette.LightGreen ? \"block\" : \"none\"}\r\n            >\r\n              {\"[REQUIRED PRODUCTS:]\"}\r\n            </SmallGreenLeagueText>\r\n            {youtubeLinkProp !== \"\" ? (\r\n              <a\r\n                rel=\"noreferrer\"\r\n                href={youtubeLinkProp}\r\n                target=\"_blank\"\r\n                style={{\r\n                  textDecoration: linkHeaderDisplay,\r\n                  pointerEvents: pointerEvent,\r\n                }}\r\n              >\r\n                {header2}\r\n              </a>\r\n            ) : (\r\n              header2\r\n            )}\r\n\r\n            {/* <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              margin=\"4px\"\r\n              display={isHeader !== true ? subheader2Display : \"none\"}\r\n              mobiledisplay=\"block\"\r\n              overflow={showRelatedItems === true ? 'visible' : 'hidden'}\r\n              whitespace={showRelatedItems === true ? 'normal' : 'nowrap'}\r\n            >\r\n              {subheader2notes}\r\n            </TinyHeaderDarkGrey>\r\n\r\n            <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              display={isHeader !== true ? \"\" : \"none\"}\r\n              margin=\"4px\"\r\n              overflow={showRelatedItems === true ? 'visible' : 'hidden'}\r\n              whitespace={showRelatedItems === true ? 'normal' : 'nowrap'}\r\n            >\r\n              {subheader2}\r\n            </TinyHeaderDarkGrey> */}\r\n          </FlexColumnCont>\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={isHeader !== true ? header2InputDisplay : \"none\"}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"text\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header2DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 3 */}\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          justifycontent=\"center\"\r\n          textalign=\"center\"\r\n          display={header3Display}\r\n          mobiledisplay={header3Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header3}\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          mobiledisplay={header3InputDisplay}\r\n          display={header3InputDisplay}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            inputwidth=\"180px\"\r\n            onChange={(e) => {\r\n              quoteItemObj.Notes = e.target.value;\r\n              OutputValue(quoteItemObj);\r\n            }}\r\n            defaultValue={header3DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        {/* Column 4 */}\r\n\r\n        {/* <FlexibleEstimateDiv15Percent\r\n          \r\n          display={header4Display}\r\n          mobiledisplay={header4Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header4}\r\n        </FlexibleEstimateDiv15Percent> */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display=\"none\"\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            width=\"40px\"\r\n            type=\"number\"\r\n            defaultValue={header4DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 5 */}\r\n\r\n        <GreyFlexibleEstimateDiv15Percent\r\n          display={header5Display}\r\n          mobiledisplay={header5Display}\r\n          bgcolor={\r\n            bgColor === \"\"\r\n              ? ColorPalette.TertiaryGrey\r\n              : bgColor !== ColorPalette.LightGreen\r\n              ? bgColor\r\n              : ColorPalette.GreyGreen\r\n          }\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header5}\r\n        </GreyFlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={header5InputDisplay}\r\n          mobiledisplay={header5InputDisplay}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            inputwidth=\"60px\"\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            onChange={(e) => {\r\n              if (e.target.value !== \"\") {\r\n                invoiceTypeName === \"supply\"\r\n                  ? RecalculateSubtotalWithRelatedItems(\r\n                      quoteItemObj,\r\n                      e.target.valueAsNumber\r\n                    )\r\n                  : RecalculateLabourSubtotalWithRelatedItems(\r\n                      quoteItemObj,\r\n                      e.target.valueAsNumber,\r\n                      installRate.toFixed(4)\r\n                    );\r\n                OutputValue(quoteItemObj);\r\n              }\r\n            }}\r\n            defaultValue={header5DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 6 */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          display={header6Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header6}\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          display={header6InputDisplay}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            type=\"number\"\r\n            inputwidth=\"100px\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header6DefaultValue}\r\n            onChange={(e) => {\r\n              if (e.target.value !== \"\") {\r\n                RecalculateLabourSubtotalWithRelatedItems(\r\n                  quoteItemObj,\r\n                  quoteItemObj.Quant,\r\n                  e.target.valueAsNumber\r\n                );\r\n                OutputValue(quoteItemObj);\r\n              }\r\n            }}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 7 */}\r\n        {/* <GreyFlexibleEstimateDiv15Percent\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          \r\n          display={header6Display}\r\n          bgcolor={\r\n            bgColor === \"\"\r\n              ? ColorPalette.TertiaryGrey\r\n              : bgColor !== ColorPalette.LightGreen\r\n              ? bgColor\r\n              : ColorPalette.GreyGreen\r\n          }\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {\" \"}\r\n          {header7}\r\n        </GreyFlexibleEstimateDiv15Percent> */}\r\n\r\n        {/* Column 8 */}\r\n        <FlexibleEstimateDiv15Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <b>{Header8}</b>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        ></FlexibleEstimateDiv5Percent>\r\n      </QuoteItemCont>\r\n    </FlexColumnCont100xAutoPercent>\r\n  );\r\n};\r\n\r\nInvoiceItem.defaultProps = {\r\n  header1: \"\",\r\n  header2: \"\",\r\n  subheader2: \"\",\r\n  header3: \"\",\r\n  header4: \"\",\r\n  header4input: \"\",\r\n  header5: \"\",\r\n  header6: \"\",\r\n  header7: \"\",\r\n  header8: \"\",\r\n  invoiceTypeName: \"\",\r\n  OutputValue: () => {},\r\n  RemoveItemFromLocalQuoteObject: () => {},\r\n  bgColor: \"\",\r\n  isHeader: false,\r\n  showRelatedItems: false,\r\n  createInvoice: false,\r\n};\r\n\r\nexport default InvoiceItem;\r\n","import { useEffect, useState } from \"react\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnCont100xAutoPercent,\r\n  QuoteItemCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexibleEstimateDiv15Percent,\r\n  FlexibleEstimateDiv35Percent,\r\n  FlexibleEstimateDiv5Percent,\r\n  GreyFlexibleEstimateDiv15Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon20x20 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { SmallGreenLeagueText } from \"../../StylesheetComps/Titles\";\r\nconst InvoiceItemCombo = ({\r\n  onClick,\r\n  header1,\r\n  header2,\r\n  subheader2notes,\r\n  subheader2,\r\n  header3,\r\n  header4,\r\n  header5,\r\n  header6,\r\n  header7,\r\n  header8,\r\n  quoteItemObj,\r\n  invoiceTypeName,\r\n  noChange,\r\n  OutputValue,\r\n  RemoveItemFromLocalQuoteObject,\r\n  parentid,\r\n  itemLink,\r\n  bgColor,\r\n  isHeader,\r\n  showRelatedItems,\r\n  createInvoice,\r\n}) => {\r\n  // const [containerPadding, setContainerPadding] = useState(\"\");\r\n\r\n  const [header1Display, setHeader1Display] = useState(\"none\");\r\n  const [header2Display, setHeader2Display] = useState(\"flex\");\r\n  const [subheader2Display] = useState(\"flex\");\r\n  const [header3Display, setHeader3Display] = useState(\"flex\");\r\n  const [header4Display, setHeader4Display] = useState(\"flex\");\r\n  const [header5Display, setHeader5Display] = useState(\"flex\");\r\n  const [header6Display, setHeader6Display] = useState(\"flex\");\r\n\r\n  const [header1InputDisplay, setHeader1InputDisplay] = useState(\"none\");\r\n  const [header2InputDisplay, setHeader2InputDisplay] = useState(\"none\");\r\n  const [header3InputDisplay, setHeader3InputDisplay] = useState(\"none\");\r\n  const [header5InputDisplay, setHeader5InputDisplay] = useState(\"none\");\r\n  const [header6InputDisplay, setHeader6InputDisplay] = useState(\"none\");\r\n\r\n  const [header1DefaultValue] = useState(header1);\r\n  const [header2DefaultValue] = useState(header2);\r\n  const [header3DefaultValue] = useState(header3);\r\n  const [header4DefaultValue] = useState(header4);\r\n  const [header5DefaultValue] = useState(0);\r\n  const [header6DefaultValue, setHeader6DefaultValue] = useState(\r\n    (\r\n      (quoteItemObj?.SubtotalWithRelatedItems +\r\n        quoteItemObj?.LaborSubtotalWithRelatedItems) /\r\n      quoteItemObj.Quant\r\n    ).toFixed(4)\r\n  );\r\n\r\n  const [Header8, setHeader8] = useState(header8);\r\n\r\n  const [linkHeaderDisplay] = useState(\"none\");\r\n  const [pointerEvent] = useState(\"none\");\r\n  const [youtubeLinkProp] = useState(\"\");\r\n\r\n  const [descriptionOverflow] = useState(\"hidden\");\r\n  const [deleteIconSrc, setDeleteIconSrc] = useState(\"\");\r\n  const [relatedItemsDisplay] = useState(\"none\");\r\n\r\n  const [FontSize, setFontSize] = useState(\"14px\");\r\n  const [FontWeight, setFontWeight] = useState(\"regular\");\r\n  const [Rate] = useState(\r\n    quoteItemObj?.SubtotalWithRelatedItems / quoteItemObj?.Quant\r\n  );\r\n  const [installRate] = useState(\r\n    quoteItemObj?.LaborSubtotalWithRelatedItems / quoteItemObj?.Quant\r\n  );\r\n\r\n  const DetermineInputHeaderLogic = async () => {\r\n    InitializeSetup();\r\n    if (createInvoice === true) {\r\n      quoteItemObj.Quant = 0;\r\n      setHeader5Display(\"none\");\r\n      setHeader5InputDisplay(\"flex\");\r\n\r\n      RecalculateSubtotal(quoteItemObj, 0);\r\n    }\r\n  };\r\n\r\n  const InitializeSetup = async () => {\r\n    setHeader1Display(\"none\");\r\n    setHeader2Display(\"flex\");\r\n    setHeader3Display(\"flex\");\r\n    setHeader4Display(\"flex\");\r\n    setHeader5Display(\"flex\");\r\n    setHeader6Display(\"flex\");\r\n    setDeleteIconSrc(\"\");\r\n\r\n    setHeader1InputDisplay(\"none\");\r\n    setHeader2InputDisplay(\"none\");\r\n    setHeader3InputDisplay(\"none\");\r\n    // setHeader4InputDisplay(\"none\")\r\n    setHeader5InputDisplay(\"none\");\r\n    setHeader6InputDisplay(\"none\");\r\n\r\n    if (isHeader == true) {\r\n      setFontSize(\"16px\");\r\n      setFontWeight(\"bold\");\r\n    }\r\n  };\r\n\r\n  const RecalculateSubtotal = async (item, quantity) => {\r\n    item.Quant = quantity;\r\n    item.SubtotalWithRelatedItems = item.Quant * Rate.toFixed(4);\r\n    item.LaborSubtotalWithRelatedItems = item.Quant * installRate.toFixed(4);\r\n\r\n    var sub =\r\n      item.SubtotalWithRelatedItems + item.LaborSubtotalWithRelatedItems;\r\n    setHeader8(\"$\" + sub.toFixed(2));\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (quoteItemObj !== null && quoteItemObj != undefined)\r\n      DetermineInputHeaderLogic(invoiceTypeName);\r\n  }, [invoiceTypeName, createInvoice]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexColumnCont100xAutoPercent margin=\"0\" onClick={onClick}>\r\n      <QuoteItemCont\r\n        borderbottom={\r\n          relatedItemsDisplay === \"block\"\r\n            ? `1px dashed ${ColorPalette.PrimaryButtonBlue}`\r\n            : `1px solid ${ColorPalette.PrimaryGrey}`\r\n        }\r\n      >\r\n        {/* Column 1 */}\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          display={header1Display}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <Icon20x20\r\n            onClick={() => {\r\n              RemoveItemFromLocalQuoteObject();\r\n            }}\r\n            src={deleteIconSrc}\r\n          ></Icon20x20>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          display={header1InputDisplay}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header1DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        {/* Column 2 */}\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          height={descriptionOverflow === \"hidden\" ? \"110px\" : \"auto\"}\r\n          width=\"500px\"\r\n          display={header2Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={isHeader === true ? \"bold\" : \"\"}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnCont\r\n            mobilewidth=\"100%\"\r\n            width=\"auto\"\r\n            height=\"auto\"\r\n            margin=\"0%\"\r\n            justifycontent=\"center\"\r\n            alignitems=\"left\"\r\n          >\r\n            <SmallGreenLeagueText\r\n              display={bgColor === ColorPalette.LightGreen ? \"block\" : \"none\"}\r\n            >\r\n              {\"[REQUIRED PRODUCTS:]\"}\r\n            </SmallGreenLeagueText>\r\n            {youtubeLinkProp !== \"\" ? (\r\n              <a\r\n                rel=\"noreferrer\"\r\n                href={youtubeLinkProp}\r\n                target=\"_blank\"\r\n                style={{\r\n                  textDecoration: linkHeaderDisplay,\r\n                  pointerEvents: pointerEvent,\r\n                }}\r\n              >\r\n                {header2}\r\n              </a>\r\n            ) : (\r\n              header2\r\n            )}\r\n\r\n            {/* <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              margin=\"4px\"\r\n              display={isHeader !== true ? subheader2Display : \"none\"}\r\n              mobiledisplay=\"block\"\r\n              overflow={showRelatedItems === true ? 'visible' : 'hidden'}\r\n              whitespace={showRelatedItems === true ? 'normal' : 'nowrap'}\r\n            >\r\n              {subheader2notes}\r\n            </TinyHeaderDarkGrey>\r\n\r\n            <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              display={isHeader !== true ? \"\" : \"none\"}\r\n              margin=\"4px\"\r\n              overflow={showRelatedItems === true ? 'visible' : 'hidden'}\r\n              whitespace={showRelatedItems === true ? 'normal' : 'nowrap'}\r\n            >\r\n              {subheader2}\r\n            </TinyHeaderDarkGrey> */}\r\n          </FlexColumnCont>\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={isHeader !== true ? header2InputDisplay : \"none\"}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"text\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header2DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 3 */}\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          justifycontent=\"center\"\r\n          textalign=\"center\"\r\n          display={header3Display}\r\n          mobiledisplay={header3Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header3}\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          mobiledisplay={header3InputDisplay}\r\n          display={header3InputDisplay}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            inputwidth=\"60px\"\r\n            type=\"number\"\r\n            id=\"quantvalue\"\r\n            key={header3DefaultValue}\r\n            onBlur={(e) => {\r\n              OutputValue(e.target.valueAsNumber);\r\n            }}\r\n            defaultValue={header3DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 4 */}\r\n\r\n        {/* <FlexibleEstimateDiv15Percent\r\n          \r\n          display={header4Display}\r\n          mobiledisplay={header4Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header4}\r\n        </FlexibleEstimateDiv15Percent> */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display=\"none\"\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            width=\"50px\"\r\n            type=\"number\"\r\n            defaultValue={header4DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 5 */}\r\n\r\n        <GreyFlexibleEstimateDiv15Percent\r\n          display={header5Display}\r\n          mobiledisplay={header5Display}\r\n          bgcolor={\r\n            bgColor === \"\"\r\n              ? ColorPalette.TertiaryGrey\r\n              : bgColor !== ColorPalette.LightGreen\r\n              ? bgColor\r\n              : ColorPalette.GreyGreen\r\n          }\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header5}\r\n        </GreyFlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={header5InputDisplay}\r\n          mobiledisplay={header5InputDisplay}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            inputwidth=\"100px\"\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            onChange={(e) => {\r\n              if (e.target.value !== \"\") {\r\n                RecalculateSubtotal(quoteItemObj, e.target.valueAsNumber);\r\n                OutputValue(quoteItemObj);\r\n              }\r\n            }}\r\n            defaultValue={header5DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 6 */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          display={header6Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header6}\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          display={header6InputDisplay}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        ></FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 7 */}\r\n        {/* <GreyFlexibleEstimateDiv15Percent\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          \r\n          display={header6Display}\r\n          bgcolor={\r\n            bgColor === \"\"\r\n              ? ColorPalette.TertiaryGrey\r\n              : bgColor !== ColorPalette.LightGreen\r\n              ? bgColor\r\n              : ColorPalette.GreyGreen\r\n          }\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {\" \"}\r\n          {header7}\r\n        </GreyFlexibleEstimateDiv15Percent> */}\r\n\r\n        {/* Column 8 */}\r\n        <FlexibleEstimateDiv15Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <b>{Header8}</b>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        ></FlexibleEstimateDiv5Percent>\r\n      </QuoteItemCont>\r\n    </FlexColumnCont100xAutoPercent>\r\n  );\r\n};\r\n\r\nInvoiceItemCombo.defaultProps = {\r\n  header1: \"\",\r\n  header2: \"\",\r\n  subheader2: \"\",\r\n  header3: \"\",\r\n  header4: \"\",\r\n  header4input: \"\",\r\n  header5: \"\",\r\n  header6: \"\",\r\n  header7: \"\",\r\n  header8: \"\",\r\n  invoiceTypeName: \"\",\r\n  OutputValue: () => {},\r\n  RemoveItemFromLocalQuoteObject: () => {},\r\n  bgColor: \"\",\r\n  isHeader: false,\r\n  showRelatedItems: false,\r\n  createInvoice: false,\r\n};\r\n\r\nexport default InvoiceItemCombo;\r\n","/* eslint-disable */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnCont100xAutoPercent,\r\n  QuoteItemCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexibleEstimateDiv15Percent,\r\n  FlexibleEstimateDiv35Percent,\r\n  FlexibleEstimateDiv5Percent,\r\n  GreyFlexibleEstimateDiv15Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon20x20 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { FlexColumnCont } from \"../../StylesheetComps/Menu\";\r\nimport { SmallGreenLeagueText } from \"../../StylesheetComps/Titles\";\r\nconst InvoiceToolItem = ({\r\n  onClick,\r\n  header1,\r\n  header2,\r\n  subheader2notes,\r\n  subheader2,\r\n  header3,\r\n  header4,\r\n  header5,\r\n  header6,\r\n  header7,\r\n  header8,\r\n  quoteItemObj,\r\n  invoiceTypeName,\r\n  noChange,\r\n  OutputValue,\r\n  RemoveItemFromLocalQuoteObject,\r\n  parentid,\r\n  itemLink,\r\n  bgColor,\r\n  isHeader,\r\n  showRelatedItems,\r\n  createInvoice,\r\n}) => {\r\n  // const [containerPadding, setContainerPadding] = useState(\"\");\r\n\r\n  const [header1Display, setHeader1Display] = useState(\"none\");\r\n  const [header2Display, setHeader2Display] = useState(\"flex\");\r\n  const [subheader2Display] = useState(\"flex\");\r\n  const [header3Display, setHeader3Display] = useState(\"flex\");\r\n  const [header4Display, setHeader4Display] = useState(\"flex\");\r\n  const [header5Display, setHeader5Display] = useState(\"flex\");\r\n  const [header6Display, setHeader6Display] = useState(\"flex\");\r\n\r\n  const [header1InputDisplay, setHeader1InputDisplay] = useState(\"none\");\r\n  const [header2InputDisplay, setHeader2InputDisplay] = useState(\"none\");\r\n  const [header3InputDisplay, setHeader3InputDisplay] = useState(\"none\");\r\n  const [header5InputDisplay, setHeader5InputDisplay] = useState(\"none\");\r\n  const [header6InputDisplay, setHeader6InputDisplay] = useState(\"none\");\r\n\r\n  const [header1DefaultValue, setHeader1DefaultValue] = useState(header1);\r\n  const [header2DefaultValue, setHeader2DefaultValue] = useState(header2);\r\n  const [header3DefaultValue, setHeader3DefaultValue] = useState(header3);\r\n  const [header4DefaultValue, setHeader4DefaultValue] = useState(header4);\r\n  const [header5DefaultValue, setHeader5DefaultValue] = useState(0);\r\n  const [header6DefaultValue, setHeader6DefaultValue] = useState(\r\n    quoteItemObj?.RentalRate > 0.1\r\n      ? quoteItemObj?.RentalRate\r\n      : quoteItemObj?.BasePrice\r\n  );\r\n\r\n  const [Header8, setHeader8] = useState(header8);\r\n\r\n  const [linkHeaderDisplay, setLinkHeaderDisplay] = useState(\"none\");\r\n  const [pointerEvent, setPointerEvent] = useState(\"none\");\r\n  const [youtubeLinkProp, setYoutubeLinkProp] = useState(\"\");\r\n\r\n  const [descriptionOverflow, setDescriptionOverflow] = useState(\"hidden\");\r\n  const [descriptionWhiteSpace, setDescriptionWhiteSpace] = useState(\"nowrap\");\r\n\r\n  const [deleteIconSrc, setDeleteIconSrc] = useState(\"\");\r\n\r\n  const [relatedItemToggleSRC, setRelatedItemToggleSRC] =\r\n    useState(\"/downarrow.svg\");\r\n  const [relatedItemsDisplay, setRelatedItemsDisplay] = useState(\"none\");\r\n\r\n  const [FontSize, setFontSize] = useState(\"14px\");\r\n  const [FontWeight, setFontWeight] = useState(\"regular\");\r\n  const [Quantity, setItemQuantity] = useState(quoteItemObj?.Quant);\r\n\r\n  const DetermineInputHeaderLogic = async () => {\r\n    InitializeSetup();\r\n    if (createInvoice === true) {\r\n      quoteItemObj.Quant = 0;\r\n      setHeader5Display(\"none\");\r\n      setHeader5InputDisplay(\"flex\");\r\n      if (quoteItemObj.RentalRate > 0.1)\r\n        setHeader6DefaultValue(quoteItemObj.RentalRate);\r\n      else setHeader6DefaultValue(quoteItemObj.BasePrice);\r\n\r\n      RecalculateSubtotal(quoteItemObj, 0);\r\n    }\r\n  };\r\n\r\n  const InitializeSetup = async () => {\r\n    setItemQuantity(quoteItemObj.Quant);\r\n\r\n    setHeader1Display(\"none\");\r\n    setHeader2Display(\"flex\");\r\n    setHeader3Display(\"flex\");\r\n    setHeader4Display(\"flex\");\r\n    setHeader5Display(\"flex\");\r\n    setHeader6Display(\"flex\");\r\n    setDeleteIconSrc(\"\");\r\n\r\n    setHeader1InputDisplay(\"none\");\r\n    setHeader2InputDisplay(\"none\");\r\n    setHeader3InputDisplay(\"none\");\r\n    // setHeader4InputDisplay(\"none\")\r\n    setHeader5InputDisplay(\"none\");\r\n    setHeader6InputDisplay(\"none\");\r\n\r\n    if (isHeader == true) {\r\n      setFontSize(\"16px\");\r\n      setFontWeight(\"bold\");\r\n    }\r\n  };\r\n\r\n  const RecalculateSubtotal = async (item, quantity) => {\r\n    if (quantity > 0) {\r\n      item.Quant = quantity;\r\n      if (item.RentalRate > 0.1)\r\n        item.Price = item.RentalRate * item.Quant + item.BasePrice;\r\n      else item.Price = item.Quant * item.BasePrice;\r\n    } else {\r\n      item.Quant = 0;\r\n      item.Price = 0;\r\n    }\r\n    setHeader8(\"$\" + item.Price.toFixed(2));\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (quoteItemObj !== null && quoteItemObj != undefined)\r\n      DetermineInputHeaderLogic(invoiceTypeName);\r\n  }, [invoiceTypeName, createInvoice]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <FlexColumnCont100xAutoPercent margin=\"0\" onClick={onClick}>\r\n      <QuoteItemCont\r\n        borderbottom={\r\n          relatedItemsDisplay === \"block\"\r\n            ? `1px dashed ${ColorPalette.PrimaryButtonBlue}`\r\n            : `1px solid ${ColorPalette.PrimaryGrey}`\r\n        }\r\n      >\r\n        {/* Column 1 */}\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          display={header1Display}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <Icon20x20\r\n            onClick={() => {\r\n              RemoveItemFromLocalQuoteObject();\r\n            }}\r\n            src={deleteIconSrc}\r\n          ></Icon20x20>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          display={header1InputDisplay}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header1DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        {/* Column 2 */}\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          height={descriptionOverflow === \"hidden\" ? \"110px\" : \"auto\"}\r\n          width=\"500px\"\r\n          display={header2Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={isHeader === true ? \"bold\" : \"\"}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <FlexColumnCont\r\n            mobilewidth=\"100%\"\r\n            width=\"auto\"\r\n            height=\"auto\"\r\n            margin=\"0%\"\r\n            justifycontent=\"center\"\r\n            alignitems=\"left\"\r\n          >\r\n            <SmallGreenLeagueText\r\n              display={bgColor === ColorPalette.LightGreen ? \"block\" : \"none\"}\r\n            >\r\n              {\"[REQUIRED PRODUCTS:]\"}\r\n            </SmallGreenLeagueText>\r\n            {youtubeLinkProp !== \"\" ? (\r\n              <a\r\n                rel=\"noreferrer\"\r\n                href={youtubeLinkProp}\r\n                target=\"_blank\"\r\n                style={{\r\n                  textDecoration: linkHeaderDisplay,\r\n                  pointerEvents: pointerEvent,\r\n                }}\r\n              >\r\n                {header2}\r\n              </a>\r\n            ) : (\r\n              header2\r\n            )}\r\n\r\n            {/* <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              margin=\"4px\"\r\n              display={isHeader !== true ? subheader2Display : \"none\"}\r\n              mobiledisplay=\"block\"\r\n              overflow={showRelatedItems === true ? 'visible' : 'hidden'}\r\n              whitespace={showRelatedItems === true ? 'normal' : 'nowrap'}\r\n            >\r\n              {subheader2notes}\r\n            </TinyHeaderDarkGrey>\r\n\r\n            <TinyHeaderDarkGrey\r\n              width=\"15vw\"\r\n              display={isHeader !== true ? \"\" : \"none\"}\r\n              margin=\"4px\"\r\n              overflow={showRelatedItems === true ? 'visible' : 'hidden'}\r\n              whitespace={showRelatedItems === true ? 'normal' : 'nowrap'}\r\n            >\r\n              {subheader2}\r\n            </TinyHeaderDarkGrey> */}\r\n          </FlexColumnCont>\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={isHeader !== true ? header2InputDisplay : \"none\"}\r\n          mobiledisplay=\"none\"\r\n        >\r\n          <TextInputProp\r\n            type=\"text\"\r\n            mobiledisplay=\"none\"\r\n            defaultValue={header2DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 3 */}\r\n\r\n        <FlexibleEstimateDiv35Percent\r\n          justifycontent=\"center\"\r\n          textalign=\"center\"\r\n          display={header3Display}\r\n          mobiledisplay={header3Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header3}\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          mobiledisplay={header3InputDisplay}\r\n          display={header3InputDisplay}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            inputwidth=\"60px\"\r\n            type=\"number\"\r\n            id=\"quantvalue\"\r\n            key={header3DefaultValue}\r\n            onBlur={(e) => {\r\n              OutputValue(e.target.valueAsNumber);\r\n            }}\r\n            defaultValue={header3DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 4 */}\r\n\r\n        {/* <FlexibleEstimateDiv15Percent\r\n          \r\n          display={header4Display}\r\n          mobiledisplay={header4Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header4}\r\n        </FlexibleEstimateDiv15Percent> */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display=\"none\"\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            width=\"50px\"\r\n            type=\"number\"\r\n            defaultValue={header4DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 5 */}\r\n\r\n        <GreyFlexibleEstimateDiv15Percent\r\n          display={header5Display}\r\n          mobiledisplay={header5Display}\r\n          bgcolor={\r\n            bgColor === \"\"\r\n              ? ColorPalette.TertiaryGrey\r\n              : bgColor !== ColorPalette.LightGreen\r\n              ? bgColor\r\n              : ColorPalette.GreyGreen\r\n          }\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header5}\r\n        </GreyFlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          display={header5InputDisplay}\r\n          mobiledisplay={header5InputDisplay}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <TextInputProp\r\n            inputwidth=\"100px\"\r\n            type=\"number\"\r\n            mobiledisplay=\"none\"\r\n            onChange={(e) => {\r\n              if (e.target.value !== \"\") {\r\n                RecalculateSubtotal(quoteItemObj, e.target.valueAsNumber);\r\n                OutputValue(quoteItemObj);\r\n              }\r\n            }}\r\n            defaultValue={header5DefaultValue}\r\n          ></TextInputProp>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 6 */}\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          display={header6Display}\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {header6}\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv15Percent\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          display={header6InputDisplay}\r\n          mobiledisplay=\"none\"\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        ></FlexibleEstimateDiv15Percent>\r\n\r\n        {/* Column 7 */}\r\n        {/* <GreyFlexibleEstimateDiv15Percent\r\n          borderright={`1px solid ${ColorPalette.DarkGrey}`}\r\n          \r\n          display={header6Display}\r\n          bgcolor={\r\n            bgColor === \"\"\r\n              ? ColorPalette.TertiaryGrey\r\n              : bgColor !== ColorPalette.LightGreen\r\n              ? bgColor\r\n              : ColorPalette.GreyGreen\r\n          }\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          {\" \"}\r\n          {header7}\r\n        </GreyFlexibleEstimateDiv15Percent> */}\r\n\r\n        {/* Column 8 */}\r\n        <FlexibleEstimateDiv15Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        >\r\n          <b>{Header8}</b>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        <FlexibleEstimateDiv5Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          fontfamily={isHeader === true ? \"LeagueSpartan-Bold \" : \"\"}\r\n        ></FlexibleEstimateDiv5Percent>\r\n      </QuoteItemCont>\r\n    </FlexColumnCont100xAutoPercent>\r\n  );\r\n};\r\n\r\nInvoiceToolItem.defaultProps = {\r\n  header1: \"\",\r\n  header2: \"\",\r\n  subheader2: \"\",\r\n  header3: \"\",\r\n  header4: \"\",\r\n  header4input: \"\",\r\n  header5: \"\",\r\n  header6: \"\",\r\n  header7: \"\",\r\n  header8: \"\",\r\n  invoiceTypeName: \"\",\r\n  OutputValue: () => {},\r\n  RemoveItemFromLocalQuoteObject: () => {},\r\n  bgColor: \"\",\r\n  isHeader: false,\r\n  showRelatedItems: false,\r\n  createInvoice: false,\r\n};\r\n\r\nexport default InvoiceToolItem;\r\n","/* eslint-disable */\r\n\r\n//  React Imports ---------------------------------------\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport Pdf from \"react-to-pdf\";\r\nimport {\r\n  AddInvoice,\r\n  GetCaseById,\r\n  GetInvoiceObject,\r\n  GetInvoicesByStore,\r\n  GetQuoteByIdForUserDisplay,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  GetCurrentTime,\r\n  SetHeaderAuthorization,\r\n  UploadFileToCloud,\r\n} from \"../../API_Functions/Utility_Functions\";\r\nimport InvoiceItem from \"../../comps/InvoiceItem\";\r\nimport InvoiceItemCombo from \"../../comps/InvoiceItemCombo\";\r\nimport InvoiceToolItem from \"../../comps/InvoiceToolItem\";\r\n//  Imported Components ---------------------------------\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport { RegularGreenLeagueText } from \"../../MobileComponents/Text\";\r\nimport { SmallTextInput } from \"../../StylesheetComps/AuthSheet\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FixedIconToTop,\r\n  RegularResponsiveButton,\r\n} from \"../../StylesheetComps/Components\";\r\n// Imported Styled Components ---------------------------\r\nimport {\r\n  DivWithDisplay,\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnLeftAlign,\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContAutox100PercentMobileColumn,\r\n  FlexRowContFullWidth,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  DatalistMedium,\r\n  DatalistOption,\r\n  Image300x200,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { Cont, ContentContQuote } from \"../../StylesheetComps/Projects\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanRegular,\r\n  SmallText,\r\n  StyledHRGreenBreakThick,\r\n  StyledHRPropColour,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\n\r\nconst InvoiceGenerator = () => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n  const [Quote, setProposal] = useState({});\r\n  const [Project, setProject] = useState({});\r\n  const [toolsmachinesHeader, setToolsMachinesHeader] = useState(\"none\");\r\n  const [removalHeader, setRemovalHeader] = useState(\"none\");\r\n  const [accessDisplay, setAccessDisplay] = useState(\"none\");\r\n  const [generalMaterialsHeader, setGeneralMaterialsHeader] = useState(\"none\");\r\n  const [deliveryHeader, setDeliveryHeader] = useState(\"none\");\r\n\r\n  const [invoiceType, setInvoiceType] = useState(\"supply\");\r\n  const [invoiceTypeName, setInvoiceTypeName] = useState(\"SUPPLY INVOICE\");\r\n  const [createInvoice, setCreateInvoice] = useState(false);\r\n\r\n  const [showModifyInvoiceButton, setShowModifyInvoiceButton] = useState(true);\r\n  const [showGenerateInvoiceButton, setShowGenerateInvoiceButton] =\r\n    useState(true);\r\n  const [showSaveInvoiceButton, setShowSaveInvoiceButton] = useState(false);\r\n  const [showCancelButton, setShowCancelButton] = useState(false);\r\n\r\n  const [showAttachToProjectButton, setShowAttachtoProjectButton] =\r\n    useState(true);\r\n  const [showDownloadButton, setShowDownloadButton] = useState(false);\r\n  const [enterPaid, setEnterPaid] = useState(false);\r\n  const [toTal, setTotal] = useState();\r\n  const [Paid, setPaid] = useState(0.0);\r\n  const [invoiceDate, setInvoiceDate] = useState();\r\n  const [dueDate, setDueDate] = useState();\r\n  const [invoiceNumber, setInvoiceNumber] = useState(\"0000\");\r\n  const [invoicefileMaterial, setInvoicefileMaterial] = useState(\r\n    \"invoice_material.pdf\"\r\n  );\r\n  const [invoicefileInstall, setInvoicefileInstall] = useState(\r\n    \"invoice_install.pdf\"\r\n  );\r\n  const ref = React.createRef();\r\n\r\n  const [pdfOptions, setPdfOptions] = useState({\r\n    orientation: \"portrait\",\r\n    unit: \"in\",\r\n    format: [8.5, 11],\r\n    pagesplit: true,\r\n  });\r\n\r\n  var materialSub = 0;\r\n  var installSub = 0;\r\n  var invoiceItem;\r\n\r\n  const GetProjectInformation = async (caseid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data !== null) {\r\n      await setProject(data.Case);\r\n      return data.Case;\r\n    } else return null;\r\n  };\r\n\r\n  const GetProposalInformation = async (quoteid) => {\r\n    var data = await GetQuoteByIdForUserDisplay(quoteid);\r\n    if (data !== null) {\r\n      if (data.quote !== null) {\r\n        return data.quote;\r\n      }\r\n    } else return null;\r\n  };\r\n\r\n  const SetUpInvoiceData = async (project, quoteid) => {\r\n    var quote = await GetProposalInformation(quoteid);\r\n    if (quote !== null) {\r\n      setProposal(quote);\r\n      if (toTal === null || toTal === undefined)\r\n        InitializeTotal({ ...quote.Material.Total });\r\n      else InitializeTotal(toTal);\r\n      var mx = await GenerateInvoiceNumber(project);\r\n      setInvoiceNumber(mx.toString());\r\n      var invoicedate = new Date();\r\n      var duedate = new Date();\r\n      duedate.setDate(duedate.getDate() + 7);\r\n      setInvoiceDate(invoicedate.toLocaleDateString());\r\n      setDueDate(duedate.toLocaleDateString());\r\n      SetQuoteDisplay(quote);\r\n    }\r\n  };\r\n\r\n  const InitializeTotal = (total) => {\r\n    if (total !== null && total !== undefined) {\r\n      total.Subtotal = 0;\r\n      total.Total = 0;\r\n      if (total.Tax?.length > 0) {\r\n        for (let i = 0; i < total.Tax.length; i++) {\r\n          total.Tax[i].Amount = 0;\r\n        }\r\n      }\r\n      if (toTal === null || toTal === undefined) setTotal(total);\r\n    }\r\n  };\r\n  const SetQuoteDisplay = async (quote) => {\r\n    if (quote != null) {\r\n      if (quote.Material?.Items?.length > 0) setGeneralMaterialsHeader(\"flex\");\r\n\r\n      if (quote.Delivery?.Tools?.length > 0) setDeliveryHeader(\"flex\");\r\n\r\n      if (quote.Tool?.Tools?.length > 0) setToolsMachinesHeader(\"flex\");\r\n\r\n      if (quote.Removal?.Items?.length > 0) setRemovalHeader(\"flex\");\r\n\r\n      if (quote.AccessArea?.Items?.length > 0) setAccessDisplay(\"flex\");\r\n    }\r\n  };\r\n\r\n  const modifyInvoice = async () => {\r\n    setCreateInvoice(true);\r\n    setShowModifyInvoiceButton(false);\r\n    setShowGenerateInvoiceButton(false);\r\n    setShowCancelButton(true);\r\n    setShowSaveInvoiceButton(true);\r\n    ItemCounts = 0;\r\n  };\r\n\r\n  var ItemCounts = 0;\r\n  const AddItemToInvoiceTotal = (total, tax, subtotal) => {\r\n    if (subtotal > 0) ++ItemCounts;\r\n\r\n    if (total !== null && total !== undefined) {\r\n      total.Subtotal += subtotal;\r\n      for (let i = 0; i < tax.length; i++) {\r\n        var amt = (tax[i].Rate * subtotal) / 100;\r\n        for (let j = 0; j < total.Tax?.length; j++) {\r\n          if (total.Tax[j].Id === tax[i].Id) {\r\n            total.Tax[j].Amount += amt;\r\n            total.Total += amt;\r\n          }\r\n        }\r\n      }\r\n      total.Total += subtotal;\r\n    }\r\n  };\r\n\r\n  const Save = async () => {\r\n    InitializeTotal(toTal);\r\n    setCreateInvoice(false);\r\n    setShowCancelButton(false);\r\n    setShowSaveInvoiceButton(false);\r\n    setShowModifyInvoiceButton(true); //Modify button should be used only once to avoid errors.\r\n    setShowGenerateInvoiceButton(true);\r\n    setShowDownloadButton(false);\r\n  };\r\n\r\n  const Cancel = async () => {\r\n    InitializeTotal(toTal);\r\n    setCreateInvoice(false);\r\n    setShowCancelButton(false);\r\n    setShowSaveInvoiceButton(false);\r\n    //setShowModifyInvoiceButton(true);\r\n    setShowGenerateInvoiceButton(true);\r\n  };\r\n\r\n  const SetUpOnInvoiceType = async (type, project) => {\r\n    await SetUpInvoiceData(project, params.quoteId);\r\n    var invoicedate = new Date();\r\n    var info =\r\n      project?.Name +\r\n      \"_\" +\r\n      project?.City +\r\n      \"_\" +\r\n      invoicedate.toLocaleDateString();\r\n    var file = \"invoice_supply_\" + info;\r\n\r\n    switch (type) {\r\n      case \"supply\":\r\n        setInvoiceTypeName(\"SUPPLY INVOICE\");\r\n        setInvoicefileMaterial(file);\r\n        break;\r\n      case \"install\":\r\n        setInvoiceTypeName(\"INSTALL INVOICE\");\r\n        file = \"invoice_install_\" + info;\r\n        setInvoicefileInstall(file);\r\n        break;\r\n      case \"supplyewo\":\r\n        setInvoiceTypeName(\"SUPPLY EWO INVOICE\");\r\n        break;\r\n      case \"installewo\":\r\n        setInvoiceTypeName(\"INSTALL EWO INVOICE\");\r\n        break;\r\n      default:\r\n        break;\r\n    }\r\n    setShowDownloadButton(false);\r\n  };\r\n\r\n  const SetupPdfLength = async (quote) => {\r\n    console.log(\"in setting up pdf length:\", ItemCounts);\r\n    if (quote !== null && quote !== undefined) {\r\n      ItemCounts += quote.Tags.length; //each tag will be listed on a line\r\n\r\n      if (invoiceType === \"install\") {\r\n        // install will include other header rows\r\n        if (quote.AccessArea.Items.length > 0) ++ItemCounts;\r\n\r\n        if (quote.Tool.Tools.length > 0) ++ItemCounts;\r\n\r\n        if (quote.Delivery.Tools.length > 0) ++ItemCounts;\r\n\r\n        if (quote.Removal.Items.length > 0) ++ItemCounts;\r\n\r\n        if (quote.Labor.Items.length > 0) ++ItemCounts;\r\n      }\r\n      var len = 1;\r\n      if (ItemCounts > 5) len = Math.ceil((ItemCounts + 10) / 10);\r\n\r\n      len = 11.1 * len;\r\n      setPdfOptions({\r\n        orientation: \"portrait\",\r\n        unit: \"in\",\r\n        format: [8.5, len],\r\n        pagesplit: true,\r\n      });\r\n    }\r\n  };\r\n\r\n  const InitialSetup = async (casid) => {\r\n    var project = await GetProjectInformation(casid);\r\n    await SetUpOnInvoiceType(invoiceType, project);\r\n  };\r\n\r\n  /* const GenerateInvoiceNumber = async (project) => {\r\n    if (project === null || project === undefined) return 2000;\r\n\r\n    var invoices = await GetInvoicesByStore(project.Store_Id);\r\n    if (invoices?.length > 0) {\r\n      var mx = Math.max(...invoices.map((o) => o.Number));\r\n      return ++mx;\r\n    } else {\r\n      return 2000;\r\n    }\r\n  }; */\r\n\r\n  const GenerateInvoiceNumber = async (project) => {\r\n    var d = new Date();\r\n    var year = d.getFullYear();\r\n    var month = (\"0\" + (d.getMonth() + 1)).slice(-2);\r\n    var day = (\"0\" + d.getDate()).slice(-2);\r\n    var hour = (\"0\" + d.getHours()).slice(-2);\r\n    var minute = (\"0\" + d.getMinutes()).slice(-2);\r\n    //var seconds = (\"0\" + d.getSeconds()).slice(-2);\r\n    var invoicenumber = month + day + hour + minute + \"-\" + project.Id;\r\n\r\n    if (invoiceType === \"supply\") invoicenumber = \"S\" + invoicenumber;\r\n    if (invoiceType === \"install\") invoicenumber = \"I\" + invoicenumber;\r\n\r\n    return invoicenumber;\r\n  };\r\n\r\n  const GenerateInvoiceInfo = async (filename, project, tittle, quoteid) => {\r\n    var invoice = await GetInvoiceObject();\r\n    invoice.Case_Id = project.Id;\r\n    invoice.Total = toTal.Total - Paid;\r\n    invoice.File = filename;\r\n    invoice.isPaid = false;\r\n    invoice.Number = await GenerateInvoiceNumber(project);\r\n    invoice.Address = project.Street + \", \" + project.City;\r\n    invoice.Upload_Time = await GetCurrentTime();\r\n    invoice.Tittle = tittle;\r\n    invoice.Store_Id = project.Store_Id;\r\n    invoice.Quote_Id = quoteid;\r\n\r\n    return invoice;\r\n  };\r\n  const UploadInvoiceInfo = async (invoice) => {\r\n    await AddInvoice(invoice);\r\n  };\r\n\r\n  const CreateInvoiceRecord = async (filename, project, tittle, quoteid) => {\r\n    var invoice = await GenerateInvoiceInfo(filename, project, tittle, quoteid);\r\n    await UploadInvoiceInfo(invoice);\r\n  };\r\n\r\n  const AttachInvoiceToProject = async (event) => {\r\n    const file = event.target.files[0];\r\n    var tittle = file.name;\r\n    var filename = await UploadFileToCloud(file);\r\n    await CreateInvoiceRecord(filename, Project, tittle, params.quoteId);\r\n  };\r\n  const hiddenFileInput = React.useRef(null);\r\n\r\n  const AttachToProject = (event) => {\r\n    hiddenFileInput.current.click();\r\n  };\r\n\r\n  useEffect(() => {\r\n    SetUpOnInvoiceType(invoiceType, Project);\r\n  }, [invoiceType]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(async () => {\r\n    SetHeaderAuthorization();\r\n    await InitialSetup(params.caseId);\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n  if (Quote !== null && Quote !== undefined) {\r\n    if (Quote.Material !== null && Quote.Material !== undefined) {\r\n      InitializeTotal(toTal);\r\n      return (\r\n        <DivWithDisplay>\r\n          <DivWithDisplay>\r\n            <DivWithDisplay alignitems=\"baseline\" margin=\"0\">\r\n              <ContentContQuote id=\"install\">\r\n                <DivWithDisplay height=\"auto\">\r\n                  <FlexRowCont100PercentSpaceBetween mobiledisplay=\"none\">\r\n                    <FlexRowContFullWidth>\r\n                      <Icon30px30pxPointer\r\n                        src=\"/leftarrow.svg\"\r\n                        onClick={() => {\r\n                          history.push(\r\n                            `/viewquoteuser/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/${params.numberofquotes}/${params.lastrevision}`\r\n                          );\r\n                        }}\r\n                      ></Icon30px30pxPointer>\r\n                      <LeagueSpartanRegular>\r\n                        Invoice Generator\r\n                      </LeagueSpartanRegular>\r\n                    </FlexRowContFullWidth>\r\n                    <FlexRowContFullWidth width=\"auto\">\r\n                      <DatalistMedium\r\n                        onChange={(e) => {\r\n                          setInvoiceType(e.target.value);\r\n                        }}\r\n                      >\r\n                        <DatalistOption value=\"supply\">\r\n                          Supply Invoice\r\n                        </DatalistOption>\r\n                        <DatalistOption value={\"install\"}>\r\n                          Install Invoice\r\n                        </DatalistOption>\r\n                        {/* <DatalistOption value={\"supplyewo\"}>EWO Supply Invoice</DatalistOption>\r\n                        <DatalistOption value={\"installewo\"}>EWO Install Invoice</DatalistOption>\r\n */}{\" \"}\r\n                      </DatalistMedium>\r\n                      <RegularResponsiveButton\r\n                        display={\r\n                          showSaveInvoiceButton === true ? \"block\" : \"none\"\r\n                        }\r\n                        width=\"125px\"\r\n                        onClick={() => {\r\n                          Save();\r\n                        }}\r\n                      >\r\n                        Save Invoice\r\n                      </RegularResponsiveButton>\r\n                      <RegularResponsiveButton\r\n                        display={enterPaid === false ? \"block\" : \"none\"}\r\n                        width=\"125px\"\r\n                        onClick={() => {\r\n                          setEnterPaid(true);\r\n                        }}\r\n                      >\r\n                        Enter PAID\r\n                      </RegularResponsiveButton>\r\n                      <RegularResponsiveButton\r\n                        display={enterPaid === true ? \"block\" : \"none\"}\r\n                        width=\"125px\"\r\n                        onClick={() => {\r\n                          setEnterPaid(false);\r\n                        }}\r\n                      >\r\n                        Save PAID\r\n                      </RegularResponsiveButton>\r\n                      <RegularResponsiveButton\r\n                        display={\r\n                          showModifyInvoiceButton === true ? \"block\" : \"none\"\r\n                        }\r\n                        width=\"125px\"\r\n                        bgcolor={ColorPalette.DarkGrey}\r\n                        onClick={() => {\r\n                          InitializeTotal(toTal);\r\n                          modifyInvoice();\r\n                        }}\r\n                      >\r\n                        Modify Invoice\r\n                      </RegularResponsiveButton>\r\n                      {/* <Pdf\r\n                        targetRef={ref}\r\n                        filename={\r\n                          invoiceType === \"supply\"\r\n                            ? invoicefileMaterial\r\n                            : invoicefileInstall\r\n                        }\r\n                        options={pdfOptions}\r\n                        scale={1.0}                       \r\n                      >\r\n                        {({ toPdf }) => (\r\n                          <RegularResponsiveButton\r\n                            display={\r\n                              showDownloadButton === true ? \"block\" : \"none\"\r\n                            }\r\n                            width=\"125px\"\r\n                            onClick={toPdf}\r\n                          >\r\n                            Download Pdf File\r\n                          </RegularResponsiveButton>\r\n                        )}\r\n                      </Pdf> */}\r\n\r\n                      <RegularResponsiveButton\r\n                        display={\r\n                          showAttachToProjectButton === true ? \"block\" : \"none\"\r\n                        }\r\n                        width=\"125px\"\r\n                        bgcolor={ColorPalette.SecondaryGreen}\r\n                        onClick={(e) => {\r\n                          AttachToProject(e);\r\n                        }}\r\n                      >\r\n                        Attach to Project\r\n                      </RegularResponsiveButton>\r\n                      <input\r\n                        type=\"file\"\r\n                        ref={hiddenFileInput}\r\n                        onChange={AttachInvoiceToProject}\r\n                        style={{ display: \"none\" }}\r\n                      />\r\n                    </FlexRowContFullWidth>\r\n                    <br></br>\r\n                    <StyledHRPropColour\r\n                      border={`0.5px solid ${ColorPalette.PrimaryGrey}`}\r\n                    ></StyledHRPropColour>\r\n                    <br></br>\r\n                  </FlexRowCont100PercentSpaceBetween>\r\n\r\n                  <DivWithDisplay height=\"auto\" ref={ref} flexdirection=\"row\">\r\n                    <DivWithDisplay width=\"25px\"> </DivWithDisplay>\r\n                    <DivWithDisplay>\r\n                      <br></br> <br></br>\r\n                      <DivWithDisplay>\r\n                        {/* Start of the Invoice Section. Everything Below this will be included in the invoice */}\r\n                        <FlexRowCont100PercentSpaceBetween>\r\n                          <FlexColumnLeftAlign>\r\n                            <LeagueSpartanHeaderSmall>\r\n                              New Rhodes Construction\r\n                            </LeagueSpartanHeaderSmall>\r\n                            <SmallText>12306 McTavish Road</SmallText>\r\n                            <SmallText>Pitt Meadows BC V3Y 1Z1</SmallText>\r\n                            <SmallText>+1 778-700-3598</SmallText>\r\n                            <SmallText>ar@newrhodesconstruction.com</SmallText>\r\n                            <SmallText>www.newrhodesconstruction.com</SmallText>\r\n                            <SmallText>GST/HST Registration No. :</SmallText>\r\n                            <SmallText>739799336RT0001</SmallText>\r\n                          </FlexColumnLeftAlign>\r\n                          <Image300x200\r\n                            height=\"auto\"\r\n                            src=\"/YHLogoTinyPNG.png\"\r\n                          ></Image300x200>\r\n                        </FlexRowCont100PercentSpaceBetween>\r\n                        <br></br>\r\n                        <RegularGreenLeagueText fontsize=\"24px\">\r\n                          {invoiceTypeName}\r\n                        </RegularGreenLeagueText>\r\n                        <br></br>\r\n                        <br></br>\r\n                        <DivWithDisplay flexdirection=\"row\" mobileflexdirection=\"row\">\r\n                          <DivWithDisplay alignitems=\"left\">\r\n                            <LeagueSpartanHeaderSmall>\r\n                              BILL TO\r\n                            </LeagueSpartanHeaderSmall>\r\n                            <SmallText>{Project?.Name}</SmallText>\r\n                            <SmallText>{Project?.Street}</SmallText>\r\n                            <SmallText>{Project?.City}</SmallText>\r\n                          </DivWithDisplay>                       \r\n                          <DivWithDisplay >\r\n                            <FlexDiv>\r\n                              <FlexColumnLeftAlign>\r\n                                <LeagueSpartanHeaderSmall>\r\n                                  INVOICE #\r\n                                </LeagueSpartanHeaderSmall>\r\n\r\n                                <LeagueSpartanHeaderSmall>\r\n                                  DATE\r\n                                </LeagueSpartanHeaderSmall>\r\n                                <br></br>\r\n                                <LeagueSpartanHeaderSmall>\r\n                                  DUE DATE\r\n                                </LeagueSpartanHeaderSmall>\r\n                              </FlexColumnLeftAlign>\r\n                              <DivWithDisplay\r\n                                width=\"20px\"\r\n                                heigt=\"20px\"\r\n                              ></DivWithDisplay>\r\n                              <FlexColumnLeftAlign>\r\n                                <SmallText>{invoiceNumber}</SmallText>\r\n                                <SmallText>{invoiceDate}</SmallText>\r\n                                <br></br>\r\n                                <SmallText>{dueDate}</SmallText>\r\n                              </FlexColumnLeftAlign>\r\n                            </FlexDiv>\r\n                          </DivWithDisplay>\r\n                        </DivWithDisplay>\r\n                        <StyledHRPropColour\r\n                          border={`0.5px solid ${ColorPalette.LightGreen}`}\r\n                        ></StyledHRPropColour>\r\n                        {/* Start of the Invoice Items. Items below are conditionally rendered */}\r\n                        {invoiceType === \"supply\" ? (\r\n                          <DivWithDisplay>\r\n                            <DivWithDisplay>\r\n                              <InvoiceItem\r\n                                isHeader={true}\r\n                                header2=\"Item\"\r\n                                header3=\"Description\"\r\n                                header4=\"\"\r\n                                header5=\"Quantity\"\r\n                                header6=\"Unit Rate\"\r\n                                header7=\"\"\r\n                                header8=\"Subtotal\"\r\n                                bgColor={ColorPalette.White}\r\n                              ></InvoiceItem>\r\n                              <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n                            </DivWithDisplay>\r\n                            {Quote.Tags.map((t, j) => (\r\n                              <DivWithDisplay>\r\n                                <DivWithDisplay>\r\n                                  {Quote.Material.Items.filter(\r\n                                    (item) =>\r\n                                      item.Tag_Id == t.Id &&\r\n                                      item.Parent_Id === 0\r\n                                  ).map(\r\n                                    (o, i) => (\r\n                                      (invoiceItem = o),\r\n                                      (materialSub =\r\n                                        invoiceItem.SubtotalWithRelatedItems),\r\n                                      AddItemToInvoiceTotal(\r\n                                        toTal,\r\n                                        invoiceItem.Tax,\r\n                                        materialSub\r\n                                      ),\r\n                                      (\r\n                                        <DivWithDisplay\r\n                                          display={\r\n                                            invoiceItem.Quant > 0\r\n                                              ? \"flex\"\r\n                                              : \"none\"\r\n                                          }\r\n                                        >\r\n                                          <InvoiceItem\r\n                                            showRelatedItems={false}\r\n                                            createInvoice={createInvoice}\r\n                                            noChange={invoiceItem.NoChange}\r\n                                            key={i}\r\n                                            quoteItemObj={invoiceItem}\r\n                                            parentid={invoiceItem.Parent_Id}\r\n                                            OutputValue={(value) => {\r\n                                              invoiceItem = value;\r\n                                            }}\r\n                                            header1=\"Delete\"\r\n                                            header2={invoiceItem.Name}\r\n                                            header3={\r\n                                              invoiceItem.Notes == null\r\n                                                ? \"\"\r\n                                                : invoiceItem.Notes + \"\"\r\n                                            }\r\n                                            header4={\"\"}\r\n                                            invoiceTypeName={invoiceType}\r\n                                            header5={\r\n                                              invoiceItem.Quant.toFixed(\r\n                                                2\r\n                                              ).replace(\r\n                                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                \",\"\r\n                                              ) +\r\n                                              \" \" +\r\n                                              invoiceItem.DisplayUnit\r\n                                            }\r\n                                            header6={\r\n                                              \"$ \" +\r\n                                              (\r\n                                                materialSub / invoiceItem.Quant\r\n                                              ).toFixed(4)\r\n                                            }\r\n                                            header7={\"\"}\r\n                                            header8={\r\n                                              \"$\" +\r\n                                              materialSub\r\n                                                .toFixed(2)\r\n                                                .replace(\r\n                                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                  \",\"\r\n                                                )\r\n                                            }\r\n                                            bgColor={ColorPalette.White}\r\n                                          ></InvoiceItem>\r\n                                        </DivWithDisplay>\r\n                                      )\r\n                                    )\r\n                                  )}\r\n                                </DivWithDisplay>\r\n                              </DivWithDisplay>\r\n                            ))}\r\n\r\n                            <DivWithDisplay>\r\n                              {/* display={generalMaterialsHeader} */}\r\n                              {Quote.Material.Items.filter(\r\n                                (item) =>\r\n                                  item.Tag_Id === 0 && item.Parent_Id === 0\r\n                              ).length > 0 ? (\r\n                                <DivWithDisplay>\r\n                                  {Quote.Material.Items.map((o, i) => {\r\n                                    return o.Parent_Id === 0 && o.Tag_Id === 0\r\n                                      ? ((invoiceItem = o),\r\n                                        (materialSub =\r\n                                          invoiceItem.SubtotalWithRelatedItems),\r\n                                        AddItemToInvoiceTotal(\r\n                                          toTal,\r\n                                          invoiceItem.Tax,\r\n                                          materialSub\r\n                                        ),\r\n                                        (\r\n                                          <DivWithDisplay\r\n                                            display={\r\n                                              invoiceItem.Quant > 0\r\n                                                ? \"flex\"\r\n                                                : \"none\"\r\n                                            }\r\n                                          >\r\n                                            <InvoiceItem\r\n                                              showRelatedItems={false}\r\n                                              key={i}\r\n                                              quoteItemObj={invoiceItem}\r\n                                              createInvoice={createInvoice}\r\n                                              noChange={invoiceItem.NoChange}\r\n                                              parentid={invoiceItem.Parent_Id}\r\n                                              OutputValue={(value) => {\r\n                                                invoiceItem = value;\r\n                                              }}\r\n                                              header1=\"Delete\"\r\n                                              header2={invoiceItem.Name}\r\n                                              header3={\r\n                                                invoiceItem.Notes == null\r\n                                                  ? \"\"\r\n                                                  : invoiceItem.Notes + \"\"\r\n                                              }\r\n                                              invoiceTypeName={invoiceType}\r\n                                              header5={\r\n                                                invoiceItem.Quant.toFixed(\r\n                                                  2\r\n                                                ).replace(\r\n                                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                  \",\"\r\n                                                ) +\r\n                                                \" \" +\r\n                                                invoiceItem.DisplayUnit\r\n                                              }\r\n                                              header6={\r\n                                                \"$ \" +\r\n                                                (\r\n                                                  materialSub /\r\n                                                  invoiceItem.Quant\r\n                                                ).toFixed(4)\r\n                                              }\r\n                                              header7={\"\"}\r\n                                              header8={\r\n                                                \"$\" +\r\n                                                materialSub\r\n                                                  .toFixed(2)\r\n                                                  .replace(\r\n                                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                    \",\"\r\n                                                  )\r\n                                              }\r\n                                              bgColor={ColorPalette.White}\r\n                                            ></InvoiceItem>\r\n                                          </DivWithDisplay>\r\n                                        ))\r\n                                      : null;\r\n                                  })}\r\n                                </DivWithDisplay>\r\n                              ) : null}\r\n                            </DivWithDisplay>\r\n\r\n                            <StyledHRPropColour\r\n                              border={`0.5px dotted ${ColorPalette.PrimaryGrey}`}\r\n                            ></StyledHRPropColour>\r\n                            <br></br>\r\n                            <br></br>\r\n                            <DivWithDisplay flexdirection=\"row\">\r\n                              <DivWithDisplay>\r\n                                <TinyTextItalics>\r\n                                  We appreciate your business and hope you\r\n                                  consider us for any future projects!\r\n                                </TinyTextItalics>\r\n                              </DivWithDisplay>\r\n                              <DivWithDisplay width=\"50%\" flexdirection=\"row\">\r\n                                <DivWithDisplay flexdirection=\"row\" mobileflexdirection=\"row\">\r\n                                  <DivWithDisplay textalign=\"left\">\r\n                                    <SmallText>SUBTOTAL</SmallText>\r\n                                    {toTal?.Tax?.map((o, i) => (\r\n                                      <SmallText>\r\n                                        {o.TaxCode} @ {o.Rate}%\r\n                                      </SmallText>\r\n                                    ))}\r\n                                    <SmallText>TOTAL</SmallText>\r\n                                    <SmallText>PAID</SmallText>\r\n                                    <SmallText>BALANCE DUE</SmallText>\r\n                                  </DivWithDisplay>\r\n\r\n                                  <DivWithDisplay textalign=\"right\">\r\n                                    <SmallText>\r\n                                      $\r\n                                      {toTal?.Subtotal.toFixed(2).replace(\r\n                                        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                        \",\"\r\n                                      )}\r\n                                    </SmallText>\r\n                                    {toTal?.Tax?.map((o, i) => (\r\n                                      <SmallText>\r\n                                        $\r\n                                        {o.Amount.toFixed(2).replace(\r\n                                          /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                          \",\"\r\n                                        )}\r\n                                      </SmallText>\r\n                                    ))}\r\n\r\n                                    <SmallText>\r\n                                      $\r\n                                      {toTal?.Total.toFixed(2).replace(\r\n                                        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                        \",\"\r\n                                      )}\r\n                                    </SmallText>\r\n                                    <SmallText\r\n                                      display={\r\n                                        createInvoice || enterPaid\r\n                                          ? \"none\"\r\n                                          : \"block\"\r\n                                      }\r\n                                    >\r\n                                      ${Paid}\r\n                                    </SmallText>\r\n                                    <SmallTextInput\r\n                                      inputdisplay={\r\n                                        createInvoice || enterPaid\r\n                                          ? \"block\"\r\n                                          : \"none\"\r\n                                      }\r\n                                      type=\"number\"\r\n                                      onChange={(e) => {\r\n                                        if (e.target.value !== \"\") {\r\n                                          setPaid(e.target.valueAsNumber);\r\n                                        }\r\n                                      }}\r\n                                      defaultValue={0}\r\n                                    ></SmallTextInput>\r\n                                    <LeagueSpartanHeaderSmall>\r\n                                      $\r\n                                      {(toTal?.Total - Paid)\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                                    </LeagueSpartanHeaderSmall>\r\n                                  </DivWithDisplay>\r\n                                </DivWithDisplay>\r\n                              </DivWithDisplay>\r\n                            </DivWithDisplay>\r\n                          </DivWithDisplay>\r\n                        ) : null}\r\n\r\n                        {invoiceType === \"install\" ? (\r\n                          <DivWithDisplay>\r\n                            <InvoiceItem\r\n                              isHeader={true}\r\n                              header2=\"Item\"\r\n                              header3=\"Description\"\r\n                              header4=\"\"\r\n                              header5=\"Quantity\"\r\n                              header6=\"Install Rate\"\r\n                              header7=\"\"\r\n                              header8=\"Subtotal\"\r\n                              bgColor={ColorPalette.White}\r\n                            ></InvoiceItem>\r\n                            <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n                            {Quote.Tags.map((t, j) => (\r\n                              <DivWithDisplay>\r\n                                <DivWithDisplay>\r\n                                  {Quote.Material.Items.filter(\r\n                                    (item) =>\r\n                                      item.Tag_Id == t.Id &&\r\n                                      item.Parent_Id === 0\r\n                                  ).map(\r\n                                    (o, i) => (\r\n                                      (invoiceItem = o),\r\n                                      (installSub =\r\n                                        invoiceItem.LaborSubtotalWithRelatedItems),\r\n                                      AddItemToInvoiceTotal(\r\n                                        toTal,\r\n                                        invoiceItem.Tax,\r\n                                        installSub\r\n                                      ),\r\n                                      (\r\n                                        <DivWithDisplay\r\n                                          display={\r\n                                            invoiceItem.Quant > 0\r\n                                              ? \"flex\"\r\n                                              : \"none\"\r\n                                          }\r\n                                        >\r\n                                          <InvoiceItem\r\n                                            showRelatedItems={false}\r\n                                            noChange={invoiceItem.NoChange}\r\n                                            key={i}\r\n                                            createInvoice={createInvoice}\r\n                                            invoiceTypeName={invoiceType}\r\n                                            quoteItemObj={invoiceItem}\r\n                                            bgColor={ColorPalette.White}\r\n                                            parentid={invoiceItem.Parent_Id}\r\n                                            OutputValue={(value) => {\r\n                                              invoiceItem = value;\r\n                                            }}\r\n                                            header1=\"Delete\"\r\n                                            header2={invoiceItem.Name}\r\n                                            header3={invoiceItem.Notes}\r\n                                            header4={\"\"}\r\n                                            header5={\r\n                                              invoiceItem.Quant.toFixed(\r\n                                                2\r\n                                              ).replace(\r\n                                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                \",\"\r\n                                              ) +\r\n                                              \" \" +\r\n                                              invoiceItem.DisplayUnit\r\n                                            }\r\n                                            header6={\r\n                                              \"$ \" +\r\n                                              (\r\n                                                installSub / invoiceItem.Quant\r\n                                              ).toFixed(4)\r\n                                            }\r\n                                            header7={\"\"}\r\n                                            header8={\r\n                                              \"$\" +\r\n                                              installSub\r\n                                                .toFixed(2)\r\n                                                .replace(\r\n                                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                  \",\"\r\n                                                )\r\n                                            }\r\n                                          ></InvoiceItem>\r\n                                        </DivWithDisplay>\r\n                                      )\r\n                                    )\r\n                                  )}\r\n                                </DivWithDisplay>\r\n                              </DivWithDisplay>\r\n                            ))}\r\n\r\n                            <DivWithDisplay>\r\n                              {/* display={generalMaterialsHeader} */}\r\n\r\n                              {Quote.Material.Items.map((o, i) => {\r\n                                return o.Parent_Id === 0 && o.Tag_Id === 0\r\n                                  ? ((invoiceItem = o),\r\n                                    (installSub =\r\n                                      o.LaborSubtotalWithRelatedItems),\r\n                                    AddItemToInvoiceTotal(\r\n                                      toTal,\r\n                                      invoiceItem.Tax,\r\n                                      installSub\r\n                                    ),\r\n                                    (\r\n                                      <DivWithDisplay\r\n                                        display={\r\n                                          invoiceItem.Quant > 0\r\n                                            ? \"flex\"\r\n                                            : \"none\"\r\n                                        }\r\n                                      >\r\n                                        <InvoiceItem\r\n                                          showRelatedItems={false}\r\n                                          key={i}\r\n                                          quoteItemObj={invoiceItem}\r\n                                          createInvoice={createInvoice}\r\n                                          invoiceTypeName={invoiceType}\r\n                                          OutputValue={(value) => {\r\n                                            invoiceItem = value;\r\n                                          }}\r\n                                          noChange={invoiceItem.NoChange}\r\n                                          parentid={invoiceItem.Parent_Id}\r\n                                          bgColor={ColorPalette.White}\r\n                                          header1=\"Delete\"\r\n                                          header2={invoiceItem.Name}\r\n                                          header3={invoiceItem.Notes}\r\n                                          header4={\"\"}\r\n                                          header5={\r\n                                            invoiceItem.Quant.toFixed(\r\n                                              2\r\n                                            ).replace(\r\n                                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                              \",\"\r\n                                            ) +\r\n                                            \" \" +\r\n                                            invoiceItem.DisplayUnit\r\n                                          }\r\n                                          header6={\r\n                                            \"$ \" +\r\n                                            (\r\n                                              installSub / invoiceItem.Quant\r\n                                            ).toFixed(4)\r\n                                          }\r\n                                          header7={\"\"}\r\n                                          header8={\r\n                                            \"$\" +\r\n                                            installSub\r\n                                              .toFixed(2)\r\n                                              .replace(\r\n                                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                \",\"\r\n                                              )\r\n                                          }\r\n                                        ></InvoiceItem>\r\n                                      </DivWithDisplay>\r\n                                    ))\r\n                                  : null;\r\n                              })}\r\n                            </DivWithDisplay>\r\n\r\n                            {Quote.Delivery.Tools.map(\r\n                              (o, i) => (\r\n                                (invoiceItem = o),\r\n                                AddItemToInvoiceTotal(\r\n                                  toTal,\r\n                                  invoiceItem.Tax,\r\n                                  invoiceItem.Price\r\n                                ),\r\n                                (\r\n                                  <DivWithDisplay\r\n                                    display={\r\n                                      invoiceItem.Quant > 0 ? \"flex\" : \"none\"\r\n                                    }\r\n                                  >\r\n                                    <InvoiceToolItem\r\n                                      key={i}\r\n                                      createInvoice={createInvoice}\r\n                                      invoiceTypeName={invoiceType}\r\n                                      quoteItemObj={invoiceItem}\r\n                                      OutputValue={(value) => {\r\n                                        invoiceItem = value;\r\n                                      }}\r\n                                      header1=\" \"\r\n                                      header2={invoiceItem.ToolName}\r\n                                      header3={invoiceItem.Notes}\r\n                                      header5={invoiceItem.Quant.toFixed(\r\n                                        2\r\n                                      ).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                                      header6={\r\n                                        \"$\" +\r\n                                        invoiceItem.BasePrice.toFixed(\r\n                                          2\r\n                                        ).replace(\r\n                                          /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                          \",\"\r\n                                        ) +\r\n                                        \"/ Load\"\r\n                                      }\r\n                                      header8={\r\n                                        \"$\" +\r\n                                        invoiceItem.Price.toFixed(2).replace(\r\n                                          /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                          \",\"\r\n                                        )\r\n                                      }\r\n                                      header7={\"\"}\r\n                                      bgColor={ColorPalette.White}\r\n                                    ></InvoiceToolItem>\r\n                                  </DivWithDisplay>\r\n                                )\r\n                              )\r\n                            )}\r\n\r\n                            {Quote.Removal.Items.map(\r\n                              (o, i) => (\r\n                                (invoiceItem = o),\r\n                                (installSub =\r\n                                  invoiceItem.SubtotalWithRelatedItems +\r\n                                  invoiceItem.LaborSubtotalWithRelatedItems),\r\n                                AddItemToInvoiceTotal(\r\n                                  toTal,\r\n                                  invoiceItem.Tax,\r\n                                  installSub\r\n                                ),\r\n                                (\r\n                                  <DivWithDisplay\r\n                                    display={\r\n                                      invoiceItem.Quant > 0 ? \"flex\" : \"none\"\r\n                                    }\r\n                                  >\r\n                                    <InvoiceItemCombo\r\n                                      showRelatedItems={false}\r\n                                      key={i}\r\n                                      quoteItemObj={invoiceItem}\r\n                                      createInvoice={createInvoice}\r\n                                      invoiceTypeName={invoiceType}\r\n                                      OutputValue={(value) => {\r\n                                        invoiceItem = value;\r\n                                      }}\r\n                                      noChange={invoiceItem.NoChange}\r\n                                      parentid={invoiceItem.Parent_Id}\r\n                                      bgColor={ColorPalette.White}\r\n                                      header1=\"Delete\"\r\n                                      header2={invoiceItem.Name}\r\n                                      header3={invoiceItem.Notes}\r\n                                      header4={\"\"}\r\n                                      header5={\r\n                                        invoiceItem.Quant.toFixed(2).replace(\r\n                                          /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                          \",\"\r\n                                        ) +\r\n                                        \" \" +\r\n                                        invoiceItem.DisplayUnit\r\n                                      }\r\n                                      header6={\r\n                                        \"$ \" +\r\n                                        (\r\n                                          installSub / invoiceItem.Quant\r\n                                        ).toFixed(4)\r\n                                      }\r\n                                      header7={\"\"}\r\n                                      header8={\r\n                                        \"$\" +\r\n                                        installSub\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                      }\r\n                                    ></InvoiceItemCombo>\r\n                                  </DivWithDisplay>\r\n                                )\r\n                              )\r\n                            )}\r\n\r\n                            {Quote.AccessArea.Items.map(\r\n                              (o, i) => (\r\n                                (invoiceItem = o),\r\n                                (installSub =\r\n                                  invoiceItem.SubtotalWithRelatedItems +\r\n                                  invoiceItem.LaborSubtotalWithRelatedItems),\r\n                                AddItemToInvoiceTotal(\r\n                                  toTal,\r\n                                  invoiceItem.Tax,\r\n                                  installSub\r\n                                ),\r\n                                (\r\n                                  <DivWithDisplay\r\n                                    display={\r\n                                      invoiceItem.Quant > 0 ? \"flex\" : \"none\"\r\n                                    }\r\n                                  >\r\n                                    <InvoiceItemCombo\r\n                                      showRelatedItems={false}\r\n                                      key={i}\r\n                                      quoteItemObj={invoiceItem}\r\n                                      createInvoice={createInvoice}\r\n                                      invoiceTypeName={\"supply\"} //Access area  is install invoice, but they are product items, so need to use supply\r\n                                      OutputValue={(value) => {\r\n                                        invoiceItem = value;\r\n                                      }}\r\n                                      noChange={invoiceItem.NoChange}\r\n                                      parentid={invoiceItem.Parent_Id}\r\n                                      bgColor={ColorPalette.White}\r\n                                      header1=\"Delete\"\r\n                                      header2={invoiceItem.Name}\r\n                                      header3={invoiceItem.Notes}\r\n                                      header4={\"\"}\r\n                                      header5={\r\n                                        invoiceItem.Quant.toFixed(2).replace(\r\n                                          /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                          \",\"\r\n                                        ) +\r\n                                        \" \" +\r\n                                        invoiceItem.DisplayUnit\r\n                                      }\r\n                                      header6={\r\n                                        \"$ \" +\r\n                                        (\r\n                                          installSub / invoiceItem.Quant\r\n                                        ).toFixed(4)\r\n                                      }\r\n                                      header7={\"\"}\r\n                                      header8={\r\n                                        \"$\" +\r\n                                        installSub\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                      }\r\n                                    ></InvoiceItemCombo>\r\n                                  </DivWithDisplay>\r\n                                )\r\n                              )\r\n                            )}\r\n\r\n                            {Quote.Tool.Tools.map((o, i) =>\r\n                              o.BasePrice > 0.1 || o.RentalRate > 0.1\r\n                                ? ((invoiceItem = o),\r\n                                  AddItemToInvoiceTotal(\r\n                                    toTal,\r\n                                    invoiceItem.Tax,\r\n                                    invoiceItem.Price\r\n                                  ),\r\n                                  (\r\n                                    <DivWithDisplay\r\n                                      display={\r\n                                        invoiceItem.Quant > 0 ? \"flex\" : \"none\"\r\n                                      }\r\n                                    >\r\n                                      <InvoiceToolItem\r\n                                        key={i}\r\n                                        createInvoice={createInvoice}\r\n                                        invoiceTypeName={invoiceType}\r\n                                        quoteItemObj={invoiceItem}\r\n                                        OutputValue={(value) => {\r\n                                          invoiceItem = value;\r\n                                        }}\r\n                                        header1=\" \"\r\n                                        header2={invoiceItem.ToolName}\r\n                                        subheader2={\r\n                                          invoiceItem.Notes !== null\r\n                                            ? invoiceItem.Notes\r\n                                            : \"\"\r\n                                        }\r\n                                        header3={\r\n                                          \"$ \" +\r\n                                          invoiceItem.BasePrice.toFixed(\r\n                                            2\r\n                                          ).replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          )\r\n                                        }\r\n                                        header5={\r\n                                          invoiceItem.RentalRate > 0.1\r\n                                            ? invoiceItem.RentalLength.toFixed(\r\n                                                2\r\n                                              ).replace(\r\n                                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                \",\"\r\n                                              ) + \" hr\"\r\n                                            : invoiceItem.Quant.toFixed(\r\n                                                2\r\n                                              ).replace(\r\n                                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                                \",\"\r\n                                              ) + \" pc\"\r\n                                        }\r\n                                        header6={\r\n                                          \"$\" +\r\n                                          invoiceItem.RentalRate.toFixed(\r\n                                            2\r\n                                          ).replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          )\r\n                                        }\r\n                                        header8={\r\n                                          \"$\" +\r\n                                          invoiceItem.Price.toFixed(2).replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          )\r\n                                        }\r\n                                        header7={\"\"}\r\n                                        bgColor={ColorPalette.White}\r\n                                      ></InvoiceToolItem>\r\n                                    </DivWithDisplay>\r\n                                  ))\r\n                                : null\r\n                            )}\r\n\r\n                            <br></br>\r\n                            <StyledHRPropColour\r\n                              border={`0.5px dotted ${ColorPalette.PrimaryGrey}`}\r\n                            ></StyledHRPropColour>\r\n                            <br></br>\r\n                            <br></br>\r\n                            <FlexRowContFullWidth margintop=\"100px\">\r\n                              <DivWithDisplay>\r\n                                <TinyTextItalics>\r\n                                  We appreciate your business and hope you\r\n                                  consider us for any future projects!\r\n                                </TinyTextItalics>\r\n                              </DivWithDisplay>\r\n                              <DivWithDisplay width=\"50%\" flexdirection=\"row\">\r\n                                <FlexRowCont100PercentSpaceBetween>\r\n                                  <DivWithDisplay textalign=\"left\">\r\n                                    <SmallText>SUBTOTAL</SmallText>\r\n                                    {toTal?.Tax?.map((o, i) => (\r\n                                      <SmallText>\r\n                                        {o.TaxCode} @ {o.Rate}%\r\n                                      </SmallText>\r\n                                    ))}\r\n                                    <SmallText>TOTAL</SmallText>\r\n                                    <SmallText>PAID</SmallText>\r\n                                    <SmallText>BALANCE DUE</SmallText>\r\n                                  </DivWithDisplay>\r\n\r\n                                  <DivWithDisplay textalign=\"right\">\r\n                                    <SmallText>\r\n                                      $\r\n                                      {toTal?.Subtotal.toFixed(2).replace(\r\n                                        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                        \",\"\r\n                                      )}\r\n                                    </SmallText>\r\n                                    {toTal?.Tax?.map((o, i) => (\r\n                                      <SmallText>\r\n                                        $\r\n                                        {o.Amount.toFixed(2).replace(\r\n                                          /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                          \",\"\r\n                                        )}\r\n                                      </SmallText>\r\n                                    ))}\r\n\r\n                                    <SmallText>\r\n                                      $\r\n                                      {toTal?.Total.toFixed(2).replace(\r\n                                        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                        \",\"\r\n                                      )}\r\n                                    </SmallText>\r\n                                    <SmallText\r\n                                      display={\r\n                                        createInvoice || enterPaid\r\n                                          ? \"none\"\r\n                                          : \"block\"\r\n                                      }\r\n                                    >\r\n                                      ${Paid}\r\n                                    </SmallText>\r\n                                    <SmallTextInput\r\n                                      inputdisplay={\r\n                                        createInvoice ? \"block\" : \"none\"\r\n                                      }\r\n                                      type=\"number\"\r\n                                      onChange={(e) => {\r\n                                        if (e.target.value !== \"\") {\r\n                                          setPaid(e.target.valueAsNumber);\r\n                                        }\r\n                                      }}\r\n                                      defaultValue={0}\r\n                                    ></SmallTextInput>\r\n                                    <LeagueSpartanHeaderSmall>\r\n                                      $\r\n                                      {(toTal?.Total - Paid)\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                                    </LeagueSpartanHeaderSmall>\r\n                                  </DivWithDisplay>\r\n                                </FlexRowCont100PercentSpaceBetween>\r\n                              </DivWithDisplay>\r\n                            </FlexRowContFullWidth>\r\n                          </DivWithDisplay>\r\n                        ) : null}\r\n                      </DivWithDisplay>\r\n                    </DivWithDisplay>\r\n                  </DivWithDisplay>\r\n                </DivWithDisplay>\r\n              </ContentContQuote>\r\n            </DivWithDisplay>\r\n          </DivWithDisplay>\r\n\r\n          {/* <FixedIconToTop\r\n            src=\"/BackToTopArrowAlt.svg\"\r\n            onClick={() => {\r\n              window.scrollTo(0, 0);\r\n            }}\r\n          ></FixedIconToTop> */}\r\n        </DivWithDisplay>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nInvoiceGenerator.defaultProps = {};\r\n\r\nexport default InvoiceGenerator;\r\n","//  React Imports ---------------------------------------\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport { GetStoreBiddingQuotes } from \"../../API_Functions/CaseQuote_Functions\";\r\nimport moment from \"moment\";\r\n//  Imported Components ---------------------------------\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n// Imported Styled Components ---------------------------\r\nimport {\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnFullWidthMargins,\r\n  FlexColumnOverflowCont800px,\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  LeftCont,\r\n  FlexListOverflowPropDiv,\r\n  DivWithDisplay,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Cont, ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport {\r\n  LeagueSpartanHeaderSmall,\r\n  SmallHeaderOpenSans,\r\n  SmallHeaderOpenSansBold,\r\n  StyledHRPropColour,\r\n} from \"../../StylesheetComps/Titles\";\r\n// Import Calendar Components -----------------------------\r\nimport format from \"date-fns/format\";\r\nimport getDay from \"date-fns/getDay\";\r\nimport parse from \"date-fns/parse\";\r\nimport startOfWeek from \"date-fns/startOfWeek\";\r\nimport { Calendar, dateFnsLocalizer } from \"react-big-calendar\";\r\nimport \"react-big-calendar/lib/css/react-big-calendar.css\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { SetHeaderAuthorization } from \"../../API_Functions/Utility_Functions\";\r\n\r\nconst ProjectBidListScreen = () => {\r\n  const { metroId, storeId } = useParams();\r\n  const params = useParams();\r\n  const history = useHistory()\r\n  const [storeBiddingQuotes, setStoreBiddingQuotes] = useState([]);\r\n\r\n  const locales = {\r\n    \"en-US\": require(\"date-fns/locale/en-US\"),\r\n  };\r\n\r\n  const localizer = dateFnsLocalizer({\r\n    format,\r\n    parse,\r\n    startOfWeek,\r\n    getDay,\r\n    locales,\r\n  });\r\n\r\n  const calendarStyle = {\r\n    height: \"65vh\",\r\n    width: \"100%\",\r\n    \"@media (maxWidth: 1006px)\": {\r\n      height: \"65vw\",\r\n    },\r\n  };\r\n\r\n  const GetListOfBiddingQuotes = async (storeid) => {\r\n   \r\n    const data = await GetStoreBiddingQuotes(storeid);\r\n    if (data) {       \r\n      setStoreBiddingQuotes(data);\r\n    }\r\n   \r\n  };\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetListOfBiddingQuotes(storeId);\r\n  }, []);\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ContentCont77vw>\r\n            <SmallHeaderOpenSansBold>\r\n              Here are the instructions to installers: 1. Click project to view\r\n              and bid. 2. Give a construction date, etc......\r\n            </SmallHeaderOpenSansBold>\r\n          </ContentCont77vw>\r\n          <ContentCont77vw>\r\n            <FlexColumnFullWidthMargins></FlexColumnFullWidthMargins>\r\n          </ContentCont77vw>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ContentCont77vw>\r\n            <SmallHeaderOpenSansBold>\r\n            To bid on a project:\r\n            </SmallHeaderOpenSansBold>\r\n            <SmallHeaderOpenSans>\r\n             <b> 1. </b> Click the 'Bid' button next to the project you would like to bid on.\r\n\r\n            </SmallHeaderOpenSans>\r\n            <SmallHeaderOpenSans><b> 2. </b> Adjust the estimated cost and construction date in the provided fields to submit your desired bid.\r\n            </SmallHeaderOpenSans>\r\n            <SmallHeaderOpenSans><b> 3. </b> Click the 'Post Bid' button to submit your bid to the project.\r\n</SmallHeaderOpenSans>\r\n<SmallHeaderOpenSans><b> 4. </b> If your bid is accepted by the homeowner, you will be notified via email or other communication method.\r\n</SmallHeaderOpenSans>\r\n          </ContentCont77vw>\r\n          <ContentCont77vw>\r\n            <FlexDiv>\r\n              <FlexColumnFullWidthMargins width=\"100%\">\r\n                <FlexRowCont100PercentSpaceBetween>\r\n                  <DivWithDisplay width = \"175px\">\r\n                    <SmallHeaderOpenSansBold>Projects</SmallHeaderOpenSansBold>\r\n                  </DivWithDisplay>\r\n                  <DivWithDisplay width = \"175px\">\r\n                    <SmallHeaderOpenSansBold>City</SmallHeaderOpenSansBold>\r\n                  </DivWithDisplay>\r\n                  <DivWithDisplay width = \"225px\">\r\n                    <SmallHeaderOpenSansBold>\r\n                      Desired Start Date\r\n                    </SmallHeaderOpenSansBold>\r\n                  </DivWithDisplay >\r\n                  <DivWithDisplay width = \"175px\">\r\n                    <SmallHeaderOpenSansBold></SmallHeaderOpenSansBold>\r\n                  </DivWithDisplay >\r\n                </FlexRowCont100PercentSpaceBetween>\r\n                <FlexListOverflowPropDiv maxheight=\"600px\">\r\n                  {storeBiddingQuotes.map((o, i) => (\r\n                    <div key={i}>\r\n                      <br></br>\r\n                      <FlexRowCont100PercentSpaceBetween>\r\n                        <DivWithDisplay width = \"175px\">\r\n                          <LeagueSpartanHeaderSmall>\r\n                            {o.Tittle} <br></br>\r\n                          </LeagueSpartanHeaderSmall>\r\n                          {\"$ \" + o.BidAmount?.toFixed(2).replace(\r\n                                                /\\B(?=(\\d{3})+(?!\\d))/g, \",\" )}\r\n                        </DivWithDisplay >\r\n                        <DivWithDisplay width = \"175px\">\r\n                          <SmallHeaderOpenSans>{o.Address}</SmallHeaderOpenSans>\r\n                        </DivWithDisplay >\r\n                        <DivWithDisplay width = \"225px\">\r\n                          <SmallHeaderOpenSans>\r\n                            {moment(o.DesiredInstallDate)\r\n                              .startOf(\"day\")\r\n                              .format(\"LL\")}                        \r\n                          </SmallHeaderOpenSans>\r\n                        </DivWithDisplay>\r\n                        <DivWithDisplay width = \"175px\">\r\n                          <RegularResponsiveButton onClick={()=>{    history.push(\r\n          \"/bidquote/\" +\r\n            params.metroId +\r\n            \"/\" +\r\n            params.storeId +\r\n            \"/\" +\r\n            o.Case_Id +\r\n            \"/\" +\r\n            o.Id +\r\n            \"/\" +\r\n            0 +\r\n            \"/\" +\r\n            0\r\n        );}}>Bid</RegularResponsiveButton>\r\n                        </DivWithDisplay >\r\n                      </FlexRowCont100PercentSpaceBetween>\r\n                      <StyledHRPropColour\r\n                        width=\"100%\"\r\n                        border={`0.5px dotted ${ColorPalette.SecondaryGrey}`}\r\n                      ></StyledHRPropColour>\r\n                      <br></br>\r\n                    </div>\r\n                  ))}\r\n                </FlexListOverflowPropDiv>\r\n              </FlexColumnFullWidthMargins>\r\n            </FlexDiv>\r\n          </ContentCont77vw>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nProjectBidListScreen.defaultProps = {};\r\n\r\nexport default ProjectBidListScreen;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\n\r\n/* Wrapper for positioning and sizing the SVG */\r\nconst CircleWrapper = styled.div`\r\n  width: 40px;\r\n  height: 40px;\r\n  position: relative;\r\n`;\r\n\r\n/* A background circle in light grey */\r\nconst CircleBackground = styled.circle`\r\n  stroke: #e2e2e2;\r\n  fill: transparent;\r\n  stroke-width: 4;\r\n`;\r\n\r\n/* The progress circle that animates with strokeDashoffset */\r\nconst CircleProgress = styled.circle`\r\n  stroke: #51C159; /* Use green to match the checkmark */\r\n  fill: transparent;\r\n  stroke-width: 4;\r\n  stroke-linecap: round;\r\n  transition: stroke-dashoffset 0.35s;\r\n  transform: rotate(-90deg);\r\n  transform-origin: 50% 50%;\r\n`;\r\n\r\nconst CircularRing = ({ completion = 0 }) => {\r\n  const radius = 16; // 16px radius\r\n  const circumference = 2 * Math.PI * radius;\r\n  // Calculate how much of the circumference to hide\r\n  const offset = circumference - (completion / 100) * circumference;\r\n\r\n  return (\r\n    <CircleWrapper>\r\n      <svg width=\"40\" height=\"40\">\r\n        <CircleBackground r={radius} cx=\"20\" cy=\"20\" />\r\n        <CircleProgress\r\n          r={radius}\r\n          cx=\"20\"\r\n          cy=\"20\"\r\n          strokeDasharray={circumference}\r\n          strokeDashoffset={offset}\r\n        />\r\n      </svg>\r\n    </CircleWrapper>\r\n  );\r\n};\r\n\r\nexport default CircularRing;\r\n","// AnimatedCheckmark.jsx\r\nimport React from \"react\";\r\nimport styled, { keyframes } from \"styled-components\";\r\n\r\nconst drawCheck = keyframes`\r\n  from {\r\n    stroke-dashoffset: 50;\r\n  }\r\n  to {\r\n    stroke-dashoffset: 0;\r\n  }\r\n`;\r\n\r\nconst CheckmarkSvg = styled.svg`\r\n  width: 40px;\r\n  height: 40px;\r\n`;\r\n\r\nconst CheckmarkPath = styled.path`\r\n  fill: none;\r\n  stroke: #51C159; /* Green color */\r\n  stroke-width: 4;\r\n  stroke-linecap: round;\r\n  stroke-dasharray: 50;\r\n  stroke-dashoffset: 50;\r\n  animation: ${drawCheck} 0.5s ease-out forwards;\r\n`;\r\n\r\nconst AnimatedCheckmark = () => (\r\n  <CheckmarkSvg viewBox=\"0 0 52 52\">\r\n    <CheckmarkPath d=\"M14 27 l10 10 l15 -15\" />\r\n  </CheckmarkSvg>\r\n);\r\n\r\nexport default AnimatedCheckmark;\r\n","// import React, { useEffect, useState } from \"react\";\r\n// import { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\n// import { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n// import {\r\n//   FlexColumnCont100xAutoPercent,\r\n//   FlexColumnContCenterAlign,\r\n//   FlexColumnFullWidth,\r\n//   FlexContCenterAlign,\r\n//   FlexDiv,\r\n//   QuoteItemCont,\r\n// } from \"../../StylesheetComps/Cont\";\r\n// import {\r\n//   FlexibleEstimateDiv5Percent,\r\n//   FlexibleEstimateDiv15Percent,\r\n//   FlexibleEstimateDiv35Percent,\r\n// } from \"../../StylesheetComps/Div\";\r\n// import {\r\n//   Icon20x20,\r\n//   Icon30x40pxPointerNoMargin,\r\n// } from \"../../StylesheetComps/Imgs/Icons\";\r\n// import { FlexColumnCont, StyledHR } from \"../../StylesheetComps/Menu\";\r\n// import {\r\n//   GreyTinyTextItalics,\r\n//   LeagueSpartanRegularMinWidth,\r\n//   TinyHeaderDarkGrey,\r\n// } from \"../../StylesheetComps/Titles\";\r\n// import styled from \"styled-components\";\r\n// import CircularRing from \"../CircularRing\";\r\n// import AnimatedCheckmark from \"../AnimatedCheckmark\";\r\n// import { decimalHoursToTimeString } from \"../../API_Functions/Utility_Functions\";\r\n// import { GetQuoteTag } from \"../../API_Functions/CaseQuote_Functions\";\r\n// import { useParams } from \"react-router-dom\";\r\n\r\n// // Internal inline editing component.\r\n// const EditableField = ({ value, placeholder, onSave, displayUnit = \"\" }) => {\r\n//   const [editing, setEditing] = useState(false);\r\n//   const [localValue, setLocalValue] = useState(value);\r\n\r\n//   const handleSave = async (e) => {\r\n//     e.stopPropagation();\r\n//     await onSave && onSave(localValue);\r\n//     setEditing(false);\r\n//   };\r\n\r\n//   useEffect(() => {\r\n//     if(value){\r\n//       setLocalValue(value)\r\n//       console.log('set value:', value)\r\n//     }\r\n//   }, [value]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n//   return (\r\n//     <>\r\n//       {editing ? (\r\n//         <div>\r\n//           <input\r\n//             type=\"text\"\r\n//             value={localValue}\r\n//             onChange={(e) => setLocalValue(e.target.value)}\r\n//             placeholder={placeholder}\r\n//             style={{ padding: \"4px\", fontSize: \"14px\", width: \"70%\" }}\r\n//           />\r\n//           <button onClick={handleSave} style={{ marginLeft: \"4px\" }}>\r\n//             Save\r\n//           </button>\r\n//         </div>\r\n//       ) : (\r\n//         <span\r\n//           onClick={(e) => {\r\n//             e.stopPropagation();\r\n//             setEditing(true);\r\n//           }}\r\n//           style={{\r\n//             cursor: \"pointer\",\r\n//             color: !localValue ? \"#FFC107\" : \"black\",\r\n//           }}\r\n//         >\r\n//           {!localValue ? \"Pending Entry\" : `${localValue} ${displayUnit}`}\r\n//         </span>\r\n//       )}\r\n//     </>\r\n//   );\r\n// };\r\n\r\n// const QuoteItemTimesheet = ({\r\n//   onClick,\r\n//   header2,       // Name\r\n//   subheader2notes,\r\n//   header3,       // Quantity\r\n//   header4,       // Time Allowed\r\n//   header5,       // Quantity Used\r\n//   header6,       // Time Taken\r\n\r\n//   header1,\r\n//   header7,\r\n//   header8,\r\n//   subheader2,\r\n//   quoteItemObj,\r\n//   inputheaderposition,\r\n//   noChange,\r\n//   OutputValue,\r\n//   RemoveItemFromLocalQuoteObject,\r\n//   parentid,\r\n//   itemLink,\r\n//   bgColor,\r\n//   isHeader,\r\n//   showRelatedItems,\r\n//   constructionView,\r\n//   hideBidQuoteHeaders,\r\n//   onToggleDisplay,\r\n//   CategoryType,\r\n//   RemovalItems,\r\n//   isCompleted,\r\n//   // New props for global identifiers:\r\n//   caseId,      // project_number\r\n//   quoteId,      // estimate_number\r\n//   RefreshUserInterface,\r\n//   isHeaderCompleted,\r\n//   tagobj,\r\n//   completedTagIds,\r\n//   completedTagNames\r\n// }) => {\r\n//   // Other display states for non-editable fields\r\n//   const [header2Display, setHeader2Display] = useState(\"flex\");\r\n//   const [header3Display, setHeader3Display] = useState(\"flex\");\r\n//   const [header4Display, setHeader4Display] = useState(\"flex\");\r\n\r\n//   const [relatedItemToggleSRC, setRelatedItemToggleSRC] = useState(\"/downarrow.svg\");\r\n//   const [relatedItemsDisplay, setRelatedItemsDisplay] = useState(\"none\");\r\n\r\n//   const [youtubeLinkProp, setYoutubeLinkProp] = useState(\"\");\r\n//   const [linkHeaderDisplay, setLinkHeaderDisplay] = useState(\"none\");\r\n//   const [pointerEvent, setPointerEvent] = useState(\"none\");\r\n\r\n//   const [FontSize, setFontSize] = useState(\"14px\");\r\n//   const [FontWeight, setFontWeight] = useState(\"regular\");\r\n\r\n//   const params = useParams();\r\n\r\n//   const [isCompletedParams, setIsCompletedParams] = useState(false);\r\n//   const [isCompletedTagIds, setIsCompletedTagIds] = useState([]);\r\n//   const [isCompletedTagNames, setIsCompletedTagNames] = useState([]);\r\n\r\n//   useEffect(() => {\r\n//     // Assuming fetchedData.isCompleted gets updated when new data is pulled\r\n//     if (isCompleted) {\r\n//       setIsCompletedParams(true);\r\n//     }\r\n//   }, [isCompleted]);\r\n\r\n//   useEffect(() => {\r\n//     // Assuming fetchedData.isCompleted gets updated when new data is pulled\r\n//     if (completedTagIds) {\r\n//       setIsCompletedTagIds(completedTagIds);\r\n//     }\r\n\r\n//     if (completedTagNames) {\r\n//       setIsCompletedTagNames(completedTagNames);\r\n//     }\r\n//   }, [completedTagIds, completedTagNames]);\r\n\r\n//   // Set the appropriate icon based on CategoryType\r\n//   const itemIconSRC = isHeader\r\n//     ? null\r\n//     : CategoryType === CategoryTypes.Material\r\n//     ? \"/Material_EstimateIcon.svg\"\r\n//     : CategoryType === \"Delivery\"\r\n//     ? \"/Delivery_EstimateIcon.svg\"\r\n//     : CategoryType === CategoryTypes.Removal\r\n//     ? \"/Removal_EstimateIcon.svg\"\r\n//     : CategoryType === CategoryTypes.Access\r\n//     ? \"/AccessArea_EstimateIcon.svg\"\r\n//     : CategoryType === \"Tool\"\r\n//     ? \"/Tools_EstimateIcon.svg\"\r\n//     : CategoryType === CategoryTypes.Labor\r\n//     ? \"/Labour_EstimateIcon.svg\"\r\n//     : null;\r\n\r\n//   useEffect(() => {\r\n//     if (isHeader) {\r\n//       setFontSize(\"16px\");\r\n//       setFontWeight(\"bold\");\r\n//     }\r\n//   }, [isHeader, inputheaderposition]);\r\n\r\n//   useEffect(() => {\r\n//     if (showRelatedItems) {\r\n//       setRelatedItemsDisplay(\"flex\");\r\n//       setRelatedItemToggleSRC(\"/uparrow.svg\");\r\n//     } else {\r\n//       setRelatedItemsDisplay(\"none\");\r\n//       setRelatedItemToggleSRC(\"/downarrow.svg\");\r\n//     }\r\n//   }, [showRelatedItems]);\r\n\r\n//   useEffect(() => {\r\n//     if (!itemLink) return;\r\n//     const p =\r\n//       /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\r\n//     if (p.test(itemLink)) {\r\n//       setYoutubeLinkProp(itemLink);\r\n//       setLinkHeaderDisplay(\"underline\");\r\n//       setPointerEvent(\"auto\");\r\n//     }\r\n//   }, [itemLink]);\r\n\r\n//   // Compute the completion percentage, making sure to convert values to numbers\r\n//   const quantUsed = parseFloat(header5) || 0;\r\n//   const totalQuant = parseFloat(quoteItemObj?.Quant) || 0;\r\n//   const completionValue = totalQuant > 0 ? (quantUsed / totalQuant) * 100 : 0;\r\n\r\n//   const saveWorkEntryField = async (field, newValue) => {\r\n//     let ItemTagName = \"\";\r\n//     if (quoteItemObj.Tag_Id !== 0) {\r\n//       try {\r\n//         const resp = await GetQuoteTag(quoteItemObj.Tag_Id);\r\n//         ItemTagName = resp.TagName;\r\n//       } catch (error) {\r\n//         console.error(\"Error fetching tag:\", error);\r\n//       }\r\n//     }\r\n\r\n//     // Determine updated values:\r\n//     // If saving \"quantity_used\", use newValue for quantity and header6 for time.\r\n//     // If saving \"time_taken\", use newValue for time and header5 for quantity.\r\n//     const updatedQuantity = field === \"quantity_used\" ? newValue : (header5 ?? 0);\r\n//     const updatedTime = field === \"time_taken\" ? newValue : (header6 ?? 0);\r\n    \r\n//     const payload = {\r\n//       quantity_used: updatedQuantity,\r\n//       time_taken: updatedTime,\r\n//       project_number: params.caseId,\r\n//       estimate_number: params.quoteId,\r\n//       // Use the item's id (not Product_Id) as the unique identifier.\r\n//       item_id: quoteItemObj?.Id || \"\",\r\n//       tag_id: quoteItemObj?.Tag_Id || \"\",\r\n//       tag_name: ItemTagName || \"\",\r\n//       entered_by:\r\n//         (sessionStorage.getItem(\"userInfo\") &&\r\n//           JSON.parse(sessionStorage.getItem(\"userInfo\")).Id) ||\r\n//         \"\",\r\n//       entered_by_name:\r\n//         (sessionStorage.getItem(\"userInfo\") &&\r\n//           JSON.parse(sessionStorage.getItem(\"userInfo\")).Name) ||\r\n//         \"\",\r\n//       estimated_quantity: quoteItemObj?.Quant || 0,\r\n//       estimated_time: header4 || 0,\r\n//       is_completed: false\r\n//     };\r\n    \r\n//     try {\r\n//       const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/work_entries`;\r\n//       const response = await fetch(url, {\r\n//         method: \"POST\",\r\n//         headers: {\r\n//           \"Content-Type\": \"application/json\",\r\n//           apikey: window.$POLYGONAPIKEY,\r\n//           Authorization: window.$POLYGONAUTHKEY\r\n//         },\r\n//         body: JSON.stringify(payload)\r\n//       });\r\n//       if (!response.ok) {\r\n//         throw new Error(\"Failed to create work entry\");\r\n//       }\r\n//       const data = await response.json();\r\n//       return data[0];\r\n//     } catch (error) {\r\n//       console.error(\"Error creating work entry:\", error);\r\n//       return null;\r\n//     }\r\n//   };\r\n  \r\n//    // API function to mark the work entry as completed.\r\n//    const markItemAsCompleted = async () => {\r\n//     let ItemTagName = \"\";\r\n//     if (quoteItemObj.Tag_Id !== 0) {\r\n//       try {\r\n//         const resp = await GetQuoteTag(quoteItemObj.Tag_Id);\r\n//         ItemTagName = resp.TagName;\r\n//       } catch (error) {\r\n//         console.error(\"Error fetching tag:\", error);\r\n//       }\r\n//     }\r\n    \r\n//     const payload = {\r\n//       quantity_used: header5,\r\n//       time_taken: header6,\r\n//       project_number: params.caseId || caseId,\r\n//       estimate_number: params.quoteId || quoteId,\r\n//       item_id: quoteItemObj?.Id || \"\",\r\n//       tag_id: quoteItemObj?.Tag_Id || \"\",\r\n//       tag_name: ItemTagName || \"\",\r\n//       entered_by:\r\n//         sessionStorage.getItem(\"userInfo\") &&\r\n//         JSON.parse(sessionStorage.getItem(\"userInfo\")).Id || \"\",\r\n//       entered_by_name:\r\n//         sessionStorage.getItem(\"userInfo\") &&\r\n//         JSON.parse(sessionStorage.getItem(\"userInfo\")).Name || \"\",\r\n//       estimated_quantity: quoteItemObj?.Quant || 0,\r\n//       estimated_time: header4 || 0,\r\n//       is_completed: true\r\n//     };\r\n\r\n//     try {\r\n//       const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/work_entries`;\r\n//       const response = await fetch(url, {\r\n//         method: \"POST\",\r\n//         headers: {\r\n//           \"Content-Type\": \"application/json\",\r\n//           apikey: window.$POLYGONAPIKEY,\r\n//           Authorization: window.$POLYGONAUTHKEY\r\n//         },\r\n//         body: JSON.stringify(payload)\r\n//       });\r\n//       if (!response.ok) {\r\n//         throw new Error(\"Failed to mark item as completed\");\r\n//       }\r\n//       const data = await response.json();\r\n//       return data[0];\r\n//     } catch (error) {\r\n//       console.error(\"Error marking item as completed:\", error);\r\n//       return null;\r\n//     }\r\n//   };\r\n\r\n//     const handleMarkCompleted = async () => {\r\n//       const confirmed = window.confirm(\"Mark Item As Completed?\");\r\n//       if (confirmed) {\r\n//         setIsCompletedParams(true);\r\n//         const result = await markItemAsCompleted();\r\n//           RefreshUserInterface();\r\n        \r\n//       }\r\n//     };  \r\n  \r\n//   // Handler for saving a field update.\r\n//   const handleFieldSave = async (field, newValue) => {\r\n//     const updatedRecord = await saveWorkEntryField(field, newValue);\r\n//     if (updatedRecord) {\r\n//       // Call the OutputValue callback with the new value from the database.\r\n//       OutputValue && OutputValue(field, updatedRecord[field]);\r\n//     }\r\n//     RefreshUserInterface()\r\n//   };\r\n\r\n//   // Suppose you call this from a button click or similar event:\r\n// // tagobj looks like:\r\n// // {\r\n// //   Id: 1462,\r\n// //   Quote_Id: 1488,\r\n// //   TagName: \"Front yard\"\r\n// // }\r\n\r\n// async function handleMarkTagCompleted(tagobj) {\r\n//   const SUPABASE_URL = 'https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/project_completion_status';\r\n  \r\n//   try {\r\n//     // Copy the current arrays from state\r\n//     let newCompletedTagIds = [...completedTagIds];\r\n//     let newCompletedTagNames = [...completedTagNames];\r\n\r\n//     // Append the new tag only if it isn't already in the array.\r\n//     if (!newCompletedTagIds.includes(tagobj.Id)) {\r\n//       newCompletedTagIds.push(tagobj.Id);\r\n//       newCompletedTagNames.push(tagobj.TagName);\r\n//     }\r\n\r\n//     // Construct the filter query using template literals.\r\n//     const filter = `?project_number=eq.${params.caseId}&estimate_number=eq.${params.quoteId}`;\r\n\r\n//     const response = await fetch(SUPABASE_URL + filter, {\r\n//       method: 'PATCH',\r\n//       headers: {\r\n//         'Content-Type': 'application/json',\r\n//         apikey: window.$POLYGONAPIKEY,\r\n//         Authorization: window.$POLYGONAUTHKEY,\r\n//         'Prefer': 'return=representation'\r\n//       },\r\n//       body: JSON.stringify({\r\n//         completed_tag_ids: newCompletedTagIds,\r\n//         completed_tag_names: newCompletedTagNames\r\n//       })\r\n//     });\r\n\r\n//     if (!response.ok) {\r\n//       throw new Error(`Failed to update record: ${response.status} ${response.statusText}`);\r\n//     }\r\n\r\n//     const data = await response.json();\r\n//     console.log('Updated row:', data);\r\n\r\n//     // Immediately update the local state so the UI reflects the change.\r\n//     setIsCompletedTagIds(newCompletedTagIds);\r\n//     setIsCompletedTagNames(newCompletedTagNames);\r\n\r\n//     RefreshUserInterface(); // refresh any additional UI as needed\r\n\r\n//   } catch (error) {\r\n//     console.error('Error updating tag as completed:', error);\r\n//   }\r\n// }\r\n\r\n//   return (\r\n//     <FlexColumnCont100xAutoPercent bgcolor={isCompleted ? ColorPalette.CompletedGreen : 'white'}\r\n//     margin=\"0\" onClick={onClick}>\r\n//       <QuoteItemCont\r\n//         height=\"100%\"\r\n//         alignitems=\"stretch\"\r\n//         borderbottom={\r\n//           relatedItemsDisplay === \"block\"\r\n//             ? `1px dashed ${ColorPalette.PrimaryButtonBlue}`\r\n//             : `1px solid ${ColorPalette.PrimaryGrey}`\r\n//         }\r\n//       >\r\n//         {/* COLUMN 1: Icon */}\r\n//         <FlexibleEstimateDiv5Percent\r\n//           mobiledisplay=\"none\"\r\n//           fontsize={isHeader ? \"24px\" : FontSize}\r\n//           fontweight={FontWeight}\r\n//         >\r\n//           {itemIconSRC && <Icon20x20 src={itemIconSRC} />}\r\n//         </FlexibleEstimateDiv5Percent>\r\n\r\n//         {/* COLUMN 2: Name */}\r\n//         <FlexibleEstimateDiv35Percent\r\n//           bgcolor={bgColor}\r\n//           fontsize={isHeader ? \"18px\" : FontSize}\r\n//           fontweight={isHeader ? \"bold\" : FontWeight}\r\n//           display={header2Display}\r\n//         >\r\n//   {isHeader ? (\r\n//   <FlexDiv>\r\n//     <FlexContCenterAlign onClick={() => handleMarkTagCompleted(tagobj)}>\r\n//       <LeagueSpartanRegularMinWidth>{header2}</LeagueSpartanRegularMinWidth>\r\n//       {tagobj ? (\r\n//   header2 !== \"Subtotal\" && isCompletedTagIds && (\r\n//     isCompletedTagIds.includes(String(tagobj.Id)) ? (\r\n//       <AnimatedCheckmark />\r\n//     ) : (\r\n//       <CircularRing completion={completionValue} />\r\n//     )\r\n//   )\r\n// ) : null}\r\n//     </FlexContCenterAlign>\r\n//   </FlexDiv>\r\n// ) : (\r\n//   <div style={{ textAlign: \"left\" }}>\r\n//     {youtubeLinkProp ? (\r\n//       <a\r\n//         rel=\"noreferrer\"\r\n//         href={youtubeLinkProp}\r\n//         target=\"_blank\"\r\n//         style={{\r\n//           textDecoration: linkHeaderDisplay,\r\n//           pointerEvents: pointerEvent,\r\n//         }}\r\n//       >\r\n//         {header2}\r\n//       </a>\r\n//     ) : (\r\n//       header2\r\n//     )}\r\n//     {subheader2notes && (\r\n//       <TinyHeaderDarkGrey\r\n//         width=\"90%\"\r\n//         margin=\"4px 0 0 0\"\r\n//         whitespace=\"normal\"\r\n//       >\r\n//         {subheader2notes}\r\n//       </TinyHeaderDarkGrey>\r\n//     )}\r\n//   </div>\r\n// )}\r\n\r\n\r\n\r\n//         </FlexibleEstimateDiv35Percent>\r\n\r\n//         {/* COLUMN 3: Quantity */}\r\n//         <FlexibleEstimateDiv15Percent\r\n//           bgcolor={bgColor}\r\n//           fontsize={FontSize}\r\n//           fontweight={FontWeight}\r\n//           display={header3Display}\r\n//         >\r\n//           <div style={{ textAlign: \"center\" }}>\r\n//             {isHeader ? (header2 === \"Subtotal\" ? header3 : \"Quantity\") : (\r\n//               <>\r\n//                 <GreyTinyTextItalics>Quantity</GreyTinyTextItalics>\r\n//                 <span>{header3}</span>\r\n//               </>\r\n//             )}\r\n//           </div>\r\n//         </FlexibleEstimateDiv15Percent>\r\n\r\n//         {/* COLUMN 4: Time Allowed */}\r\n//         <FlexibleEstimateDiv15Percent\r\n//           bgcolor={bgColor}\r\n//           fontsize={FontSize}\r\n//           fontweight={FontWeight}\r\n//           display={header4Display}\r\n//         >\r\n//           <div style={{ textAlign: \"center\" }}>\r\n//             {isHeader ? (header2 === \"Subtotal\" ? header4 : \"Time Allowed\") : (\r\n//               <>\r\n//                 <GreyTinyTextItalics>Time Allowed</GreyTinyTextItalics>\r\n//                 <span>{decimalHoursToTimeString(header4)}</span>\r\n//               </>\r\n//             )}\r\n//           </div>\r\n//         </FlexibleEstimateDiv15Percent>\r\n\r\n//         {isHeader ? null : (\r\n//           <hr\r\n//             style={{\r\n//               margin: 0,\r\n//               border: `1px solid ${ColorPalette.MiddleGreen}`,\r\n//             }}\r\n//           />\r\n//         )}\r\n\r\n//         {/* COLUMN 5: Quantity Used */}\r\n//         <FlexibleEstimateDiv15Percent\r\n//           bgcolor={bgColor}\r\n//           fontsize={FontSize}\r\n//           fontweight={FontWeight}\r\n//         >\r\n//           <div style={{ textAlign: \"center\" }}>\r\n//             {isHeader ? (\r\n//               header2 === \"Subtotal\" ? header5 : \"Quantity Used\"\r\n//             ) : (\r\n//               <>\r\n//                 <GreyTinyTextItalics>Quantity Used</GreyTinyTextItalics>\r\n//                 <EditableField\r\n//                   value={header5}\r\n//                   placeholder=\"Enter Quantity Used\"\r\n//                   displayUnit={quoteItemObj?.DisplayUnit || \"\"}\r\n//                   onSave={async (newValue) => {\r\n//                     await handleFieldSave(\"quantity_used\", newValue);\r\n//                   }}\r\n//                 />\r\n//               </>\r\n//             )}\r\n//           </div>\r\n//         </FlexibleEstimateDiv15Percent>\r\n\r\n//         {/* COLUMN 6: Time Taken */}\r\n//         <FlexibleEstimateDiv15Percent\r\n//           bgcolor={bgColor}\r\n//           fontsize={FontSize}\r\n//           fontweight={FontWeight}\r\n//         >\r\n//           <div style={{ textAlign: \"center\" }}>\r\n//             {isHeader ? (\r\n//               header2 === \"Subtotal\" ? header6 : \"Time Taken\"\r\n//             ) : (\r\n//               <>\r\n//                 <GreyTinyTextItalics>Time Taken</GreyTinyTextItalics>\r\n//                 <EditableField\r\n//                   value={header6}\r\n//                   placeholder=\"Enter Time Taken\"\r\n//                   displayUnit=\"Hours\"\r\n//                   onSave={async (newValue) => {\r\n//                     await handleFieldSave(\"time_taken\", newValue);\r\n//                   }}\r\n//                 />\r\n//               </>\r\n//             )}\r\n//           </div>\r\n//         </FlexibleEstimateDiv15Percent>\r\n\r\n//         {/* COLUMN 7: Progress / Checkmark */}\r\n//         <FlexibleEstimateDiv5Percent\r\n//           bgcolor={bgColor}\r\n//           fontsize={FontSize}\r\n//           fontweight={FontWeight}\r\n//         >\r\n//           {isHeader ? null : (\r\n//             isCompletedParams === true ? (\r\n//               <AnimatedCheckmark />\r\n//             ) : (\r\n//               <div onClick={()=>{handleMarkCompleted()}} style={{ cursor: \"pointer\" }}>\r\n//               <CircularRing completion={completionValue} />\r\n//               </div>\r\n//             )\r\n//           )}\r\n//         </FlexibleEstimateDiv5Percent>\r\n//       </QuoteItemCont>\r\n//     </FlexColumnCont100xAutoPercent>\r\n//   );\r\n// };\r\n\r\n// QuoteItemTimesheet.defaultProps = {\r\n//   header1: \"\",\r\n//   header2: \"\",\r\n//   subheader2: \"\",\r\n//   subheader2notes: \"\",\r\n//   header3: \"\",\r\n//   header4: \"\",\r\n//   header5: \"\",\r\n//   header6: \"\",\r\n//   header7: \"\",\r\n//   header8: \"\",\r\n//   inputheaderposition: 0,\r\n//   noChange: false,\r\n//   showRelatedItems: false,\r\n//   hideBidQuoteHeaders: false,\r\n//   constructionView: false,\r\n//   RemovalItems: [],\r\n//   bgColor: \"\",\r\n//   CategoryType: CategoryTypes.Material,\r\n//   completedTagIds: null,\r\n//   tagobj: null,\r\n//   onClick: () => {},\r\n//   onToggleDisplay: () => {},\r\n//   OutputValue: () => {},\r\n//   RemoveItemFromLocalQuoteObject: () => {},\r\n//   RefreshUserInterface: () => {}\r\n// };\r\n\r\n// export default QuoteItemTimesheet;\r\n\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnFullWidth,\r\n  FlexContCenterAlign,\r\n  FlexDiv,\r\n  QuoteItemCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexibleEstimateDiv5Percent,\r\n  FlexibleEstimateDiv15Percent,\r\n  FlexibleEstimateDiv35Percent,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Icon20x20,\r\n  Icon30x40pxPointerNoMargin,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport { FlexColumnCont, StyledHR } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  GreyTinyTextItalics,\r\n  LeagueSpartanRegularMinWidth,\r\n  TinyHeaderDarkGrey,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport styled from \"styled-components\";\r\nimport CircularRing from \"../CircularRing\";\r\nimport AnimatedCheckmark from \"../AnimatedCheckmark\";\r\nimport { decimalHoursToTimeString } from \"../../API_Functions/Utility_Functions\";\r\nimport { GetQuoteTag } from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { useParams } from \"react-router-dom\";\r\n\r\n// Modified internal inline editing component.\r\n// When editing, it shows the current value with a plus sign and an empty input for incremental change.\r\n// On save, it adds the incremental value to the previous value and calls onSave.\r\nconst EditableField = ({ value, placeholder, onSave, displayUnit = \"\" }) => {\r\n  const [editing, setEditing] = useState(false);\r\n  // localValue will store the incremental input. It is reset to an empty string when editing begins.\r\n  const [localValue, setLocalValue] = useState(\"\");\r\n\r\n  const handleSave = async (e) => {\r\n    e.stopPropagation();\r\n    // Convert the incremental input to a number (defaulting to 0 if empty)\r\n    const increment = parseFloat(localValue) || 0;\r\n    // Calculate new total by adding the increment to the previous value.\r\n    const newValue = (parseFloat(value) || 0) + increment;\r\n    await onSave && onSave(newValue);\r\n    setEditing(false);\r\n  };\r\n\r\n  // When not editing, update localValue with the absolute value so that when editing starts again,\r\n  // the user sees an empty input (since we clear it on click).\r\n  useEffect(() => {\r\n    if (!editing) {\r\n      setLocalValue(value);\r\n    }\r\n  }, [value, editing]);\r\n\r\n  return (\r\n    <>\r\n      {editing ? (\r\n        <div>\r\n          {/* Display previous value with a plus sign */}\r\n          <span style={{ marginRight: \"4px\" }}>{value} +</span>\r\n          <input\r\n            type=\"text\"\r\n            value={localValue}\r\n            onChange={(e) => setLocalValue(e.target.value)}\r\n            placeholder={placeholder}\r\n            style={{ padding: \"4px\", fontSize: \"14px\", width: \"70%\" }}\r\n          />\r\n          <button onClick={handleSave} style={{ marginLeft: \"4px\" }}>\r\n            Save\r\n          </button>\r\n        </div>\r\n      ) : (\r\n        <span\r\n          onClick={(e) => {\r\n            e.stopPropagation();\r\n            // Clear the incremental input so it starts off blank\r\n            setLocalValue(\"\");\r\n            setEditing(true);\r\n          }}\r\n          style={{\r\n            cursor: \"pointer\",\r\n            color: !value ? \"#FFC107\" : \"black\",\r\n          }}\r\n        >\r\n          {!value ? \"Pending Entry\" : `${value} ${displayUnit}`}\r\n        </span>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n\r\nconst QuoteItemTimesheet = ({\r\n  onClick,\r\n  header2,       // Name\r\n  subheader2notes,\r\n  header3,       // Quantity\r\n  header4,       // Time Allowed\r\n  header5,       // Quantity Used\r\n  header6,       // Time Taken\r\n\r\n  header1,\r\n  header7,\r\n  header8,\r\n  subheader2,\r\n  quoteItemObj,\r\n  inputheaderposition,\r\n  noChange,\r\n  OutputValue,\r\n  RemoveItemFromLocalQuoteObject,\r\n  parentid,\r\n  itemLink,\r\n  bgColor,\r\n  isHeader,\r\n  showRelatedItems,\r\n  constructionView,\r\n  hideBidQuoteHeaders,\r\n  onToggleDisplay,\r\n  CategoryType,\r\n  RemovalItems,\r\n  isCompleted,\r\n  // New props for global identifiers:\r\n  caseId,      // project_number\r\n  quoteId,     // estimate_number\r\n  RefreshUserInterface,\r\n  isHeaderCompleted,\r\n  tagobj,\r\n  completedTagIds,\r\n  completedTagNames\r\n}) => {\r\n  // Other display states for non-editable fields\r\n  const [header2Display, setHeader2Display] = useState(\"flex\");\r\n  const [header3Display, setHeader3Display] = useState(\"flex\");\r\n  const [header4Display, setHeader4Display] = useState(\"flex\");\r\n\r\n  const [relatedItemToggleSRC, setRelatedItemToggleSRC] = useState(\"/downarrow.svg\");\r\n  const [relatedItemsDisplay, setRelatedItemsDisplay] = useState(\"none\");\r\n\r\n  const [youtubeLinkProp, setYoutubeLinkProp] = useState(\"\");\r\n  const [linkHeaderDisplay, setLinkHeaderDisplay] = useState(\"none\");\r\n  const [pointerEvent, setPointerEvent] = useState(\"none\");\r\n\r\n  const [FontSize, setFontSize] = useState(\"14px\");\r\n  const [FontWeight, setFontWeight] = useState(\"regular\");\r\n\r\n  const params = useParams();\r\n\r\n  const [isCompletedParams, setIsCompletedParams] = useState(false);\r\n  const [isCompletedTagIds, setIsCompletedTagIds] = useState([]);\r\n  const [isCompletedTagNames, setIsCompletedTagNames] = useState([]);\r\n\r\n  useEffect(() => {\r\n    // Assuming fetchedData.isCompleted gets updated when new data is pulled\r\n    if (isCompleted) {\r\n      setIsCompletedParams(true);\r\n    }\r\n  }, [isCompleted]);\r\n\r\n  useEffect(() => {\r\n    // Update completed tag ids and names from props.\r\n    if (completedTagIds) {\r\n      setIsCompletedTagIds(completedTagIds);\r\n    }\r\n    if (completedTagNames) {\r\n      setIsCompletedTagNames(completedTagNames);\r\n    }\r\n  }, [completedTagIds, completedTagNames]);\r\n\r\n  // Set the appropriate icon based on CategoryType\r\n  const itemIconSRC = isHeader\r\n    ? null\r\n    : CategoryType === CategoryTypes.Material\r\n    ? \"/Material_EstimateIcon.svg\"\r\n    : CategoryType === \"Delivery\"\r\n    ? \"/Delivery_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Removal\r\n    ? \"/Removal_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Access\r\n    ? \"/AccessArea_EstimateIcon.svg\"\r\n    : CategoryType === \"Tool\"\r\n    ? \"/Tools_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Labor\r\n    ? \"/Labour_EstimateIcon.svg\"\r\n    : null;\r\n\r\n  useEffect(() => {\r\n    if (isHeader) {\r\n      setFontSize(\"16px\");\r\n      setFontWeight(\"bold\");\r\n    }\r\n  }, [isHeader, inputheaderposition]);\r\n\r\n  useEffect(() => {\r\n    if (showRelatedItems) {\r\n      setRelatedItemsDisplay(\"flex\");\r\n      setRelatedItemToggleSRC(\"/uparrow.svg\");\r\n    } else {\r\n      setRelatedItemsDisplay(\"none\");\r\n      setRelatedItemToggleSRC(\"/downarrow.svg\");\r\n    }\r\n  }, [showRelatedItems]);\r\n\r\n  useEffect(() => {\r\n    if (!itemLink) return;\r\n    const p =\r\n      /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\r\n    if (p.test(itemLink)) {\r\n      setYoutubeLinkProp(itemLink);\r\n      setLinkHeaderDisplay(\"underline\");\r\n      setPointerEvent(\"auto\");\r\n    }\r\n  }, [itemLink]);\r\n\r\n  // Compute the completion percentage, making sure to convert values to numbers\r\n  const quantUsed = parseFloat(header5) || 0;\r\n  const totalQuant = parseFloat(quoteItemObj?.Quant) || 0;\r\n  const completionValue = totalQuant > 0 ? (quantUsed / totalQuant) * 100 : 0;\r\n\r\n  const saveWorkEntryField = async (field, newValue) => {\r\n    let ItemTagName = \"\";\r\n    if (quoteItemObj.Tag_Id !== 0) {\r\n      try {\r\n        const resp = await GetQuoteTag(quoteItemObj.Tag_Id);\r\n        ItemTagName = resp.TagName;\r\n      } catch (error) {\r\n        console.error(\"Error fetching tag:\", error);\r\n      }\r\n    }\r\n    // Determine updated values:\r\n    // If saving \"quantity_used\", use newValue for quantity and header6 for time.\r\n    // If saving \"time_taken\", use newValue for time and header5 for quantity.\r\n    const updatedQuantity = field === \"quantity_used\" ? newValue : (header5 ?? 0);\r\n    const updatedTime = field === \"time_taken\" ? newValue : (header6 ?? 0);\r\n    \r\n    const payload = {\r\n      quantity_used: updatedQuantity,\r\n      time_taken: updatedTime,\r\n      project_number: params.caseId,\r\n      estimate_number: params.quoteId,\r\n      // Use the item's id (not Product_Id) as the unique identifier.\r\n      item_id: quoteItemObj?.Id || \"\",\r\n      tag_id: quoteItemObj?.Tag_Id || \"\",\r\n      tag_name: ItemTagName || \"\",\r\n      entered_by:\r\n        (sessionStorage.getItem(\"userInfo\") &&\r\n          JSON.parse(sessionStorage.getItem(\"userInfo\")).Id) ||\r\n        \"\",\r\n      entered_by_name:\r\n        (sessionStorage.getItem(\"userInfo\") &&\r\n          JSON.parse(sessionStorage.getItem(\"userInfo\")).Name) ||\r\n        \"\",\r\n      estimated_quantity: quoteItemObj?.Quant || 0,\r\n      estimated_time: header4 || 0,\r\n      is_completed: false\r\n    };\r\n    \r\n    try {\r\n      const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/work_entries`;\r\n      const response = await fetch(url, {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY\r\n        },\r\n        body: JSON.stringify(payload)\r\n      });\r\n      if (!response.ok) {\r\n        throw new Error(\"Failed to create work entry\");\r\n      }\r\n      const data = await response.json();\r\n      return data[0];\r\n    } catch (error) {\r\n      console.error(\"Error creating work entry:\", error);\r\n      return null;\r\n    }\r\n  };\r\n  \r\n  // API function to mark the work entry as completed.\r\n  const markItemAsCompleted = async () => {\r\n    let ItemTagName = \"\";\r\n    if (quoteItemObj.Tag_Id !== 0) {\r\n      try {\r\n        const resp = await GetQuoteTag(quoteItemObj.Tag_Id);\r\n        ItemTagName = resp.TagName;\r\n      } catch (error) {\r\n        console.error(\"Error fetching tag:\", error);\r\n      }\r\n    }\r\n    \r\n    const payload = {\r\n      quantity_used: header5,\r\n      time_taken: header6,\r\n      project_number: params.caseId || caseId,\r\n      estimate_number: params.quoteId || quoteId,\r\n      item_id: quoteItemObj?.Id || \"\",\r\n      tag_id: quoteItemObj?.Tag_Id || \"\",\r\n      tag_name: ItemTagName || \"\",\r\n      entered_by:\r\n        sessionStorage.getItem(\"userInfo\") &&\r\n        JSON.parse(sessionStorage.getItem(\"userInfo\")).Id || \"\",\r\n      entered_by_name:\r\n        sessionStorage.getItem(\"userInfo\") &&\r\n        JSON.parse(sessionStorage.getItem(\"userInfo\")).Name || \"\",\r\n      estimated_quantity: quoteItemObj?.Quant || 0,\r\n      estimated_time: header4 || 0,\r\n      is_completed: true\r\n    };\r\n\r\n    try {\r\n      const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/work_entries`;\r\n      const response = await fetch(url, {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY\r\n        },\r\n        body: JSON.stringify(payload)\r\n      });\r\n      if (!response.ok) {\r\n        throw new Error(\"Failed to mark item as completed\");\r\n      }\r\n      const data = await response.json();\r\n      return data[0];\r\n    } catch (error) {\r\n      console.error(\"Error marking item as completed:\", error);\r\n      return null;\r\n    }\r\n  };\r\n\r\n  const handleMarkCompleted = async () => {\r\n    const confirmed = window.confirm(\"Mark Item As Completed?\");\r\n    if (confirmed) {\r\n      setIsCompletedParams(true);\r\n      const result = await markItemAsCompleted();\r\n      RefreshUserInterface();\r\n    }\r\n  };\r\n\r\n  // Handler for saving a field update.\r\n  const handleFieldSave = async (field, newValue) => {\r\n    const updatedRecord = await saveWorkEntryField(field, newValue);\r\n    if (updatedRecord) {\r\n      // Call the OutputValue callback with the new value from the database.\r\n      OutputValue && OutputValue(field, updatedRecord[field]);\r\n    }\r\n    RefreshUserInterface();\r\n  };\r\n\r\n  // Suppose you call this from a button click or similar event.\r\n  // tagobj looks like:\r\n  // {\r\n  //   Id: 1462,\r\n  //   Quote_Id: 1488,\r\n  //   TagName: \"Front yard\"\r\n  // }\r\n  async function handleMarkTagCompleted(tagobj) {\r\n    const SUPABASE_URL = 'https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/project_completion_status';\r\n    \r\n    try {\r\n      // Copy the current arrays from state\r\n      let newCompletedTagIds = [...completedTagIds];\r\n      let newCompletedTagNames = [...completedTagNames];\r\n\r\n      // Append the new tag only if it isn't already in the array.\r\n      if (!newCompletedTagIds.includes(tagobj.Id)) {\r\n        newCompletedTagIds.push(tagobj.Id);\r\n        newCompletedTagNames.push(tagobj.TagName);\r\n      }\r\n\r\n      // Construct the filter query using template literals.\r\n      const filter = `?project_number=eq.${params.caseId}&estimate_number=eq.${params.quoteId}`;\r\n\r\n      const response = await fetch(SUPABASE_URL + filter, {\r\n        method: 'PATCH',\r\n        headers: {\r\n          'Content-Type': 'application/json',\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY,\r\n          'Prefer': 'return=representation'\r\n        },\r\n        body: JSON.stringify({\r\n          completed_tag_ids: newCompletedTagIds,\r\n          completed_tag_names: newCompletedTagNames\r\n        })\r\n      });\r\n\r\n      if (!response.ok) {\r\n        throw new Error(`Failed to update record: ${response.status} ${response.statusText}`);\r\n      }\r\n\r\n      const data = await response.json();\r\n      console.log('Updated row:', data);\r\n\r\n      // Immediately update the local state so the UI reflects the change.\r\n      setIsCompletedTagIds(newCompletedTagIds);\r\n      setIsCompletedTagNames(newCompletedTagNames);\r\n\r\n      RefreshUserInterface(); // refresh any additional UI as needed\r\n\r\n    } catch (error) {\r\n      console.error('Error updating tag as completed:', error);\r\n    }\r\n  }\r\n\r\n  return (\r\n    <FlexColumnCont100xAutoPercent\r\n      bgcolor={isCompleted ? ColorPalette.CompletedGreen : \"white\"}\r\n      margin=\"0\"\r\n      onClick={onClick}\r\n    >\r\n      <QuoteItemCont\r\n        height=\"100%\"\r\n        alignitems=\"stretch\"\r\n        borderbottom={\r\n          relatedItemsDisplay === \"block\"\r\n            ? `1px dashed ${ColorPalette.PrimaryButtonBlue}`\r\n            : `1px solid ${ColorPalette.PrimaryGrey}`\r\n        }\r\n      >\r\n        {/* COLUMN 1: Icon */}\r\n        <FlexibleEstimateDiv5Percent\r\n          mobiledisplay=\"none\"\r\n          fontsize={isHeader ? \"24px\" : FontSize}\r\n          fontweight={FontWeight}\r\n        >\r\n          {itemIconSRC && <Icon20x20 src={itemIconSRC} />}\r\n        </FlexibleEstimateDiv5Percent>\r\n\r\n        {/* COLUMN 2: Name */}\r\n        <FlexibleEstimateDiv35Percent\r\n          bgcolor={bgColor}\r\n          fontsize={isHeader ? \"18px\" : FontSize}\r\n          fontweight={isHeader ? \"bold\" : FontWeight}\r\n          display={header2Display}\r\n        >\r\n          {isHeader ? (\r\n            <FlexDiv>\r\n              <FlexContCenterAlign onClick={() => handleMarkTagCompleted(tagobj)}>\r\n                <LeagueSpartanRegularMinWidth>{header2}</LeagueSpartanRegularMinWidth>\r\n                {tagobj ? (\r\n                  header2 !== \"Subtotal\" &&\r\n                  isCompletedTagIds &&\r\n                  (isCompletedTagIds.includes(String(tagobj.Id)) ? (\r\n                    <AnimatedCheckmark />\r\n                  ) : (\r\n                    <CircularRing completion={completionValue} />\r\n                  ))\r\n                ) : null}\r\n              </FlexContCenterAlign>\r\n            </FlexDiv>\r\n          ) : (\r\n            <div style={{ textAlign: \"left\" }}>\r\n              {youtubeLinkProp ? (\r\n                <a\r\n                  rel=\"noreferrer\"\r\n                  href={youtubeLinkProp}\r\n                  target=\"_blank\"\r\n                  style={{\r\n                    textDecoration: linkHeaderDisplay,\r\n                    pointerEvents: pointerEvent,\r\n                  }}\r\n                >\r\n                  {header2}\r\n                </a>\r\n              ) : (\r\n                header2\r\n              )}\r\n              {subheader2notes && (\r\n                <TinyHeaderDarkGrey\r\n                  width=\"90%\"\r\n                  margin=\"4px 0 0 0\"\r\n                  whitespace=\"normal\"\r\n                >\r\n                  {subheader2notes}\r\n                </TinyHeaderDarkGrey>\r\n              )}\r\n            </div>\r\n          )}\r\n        </FlexibleEstimateDiv35Percent>\r\n\r\n        {/* COLUMN 3: Quantity */}\r\n        <FlexibleEstimateDiv15Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          display={header3Display}\r\n        >\r\n          <div style={{ textAlign: \"center\" }}>\r\n            {isHeader ? (\r\n              header2 === \"Subtotal\" ? header3 : \"Quantity\"\r\n            ) : (\r\n              <>\r\n                <GreyTinyTextItalics>Quantity</GreyTinyTextItalics>\r\n                <span>{header3}</span>\r\n              </>\r\n            )}\r\n          </div>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* COLUMN 4: Time Allowed */}\r\n        <FlexibleEstimateDiv15Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n          display={header4Display}\r\n        >\r\n          <div style={{ textAlign: \"center\" }}>\r\n            {isHeader ? (\r\n              header2 === \"Subtotal\" ? header4 : \"Time Allowed\"\r\n            ) : (\r\n              <>\r\n                <GreyTinyTextItalics>Time Allowed</GreyTinyTextItalics>\r\n                <span>{decimalHoursToTimeString(header4)}</span>\r\n              </>\r\n            )}\r\n          </div>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {isHeader ? null : (\r\n          <hr\r\n            style={{\r\n              margin: 0,\r\n              border: `1px solid ${ColorPalette.MiddleGreen}`,\r\n            }}\r\n          />\r\n        )}\r\n\r\n        {/* COLUMN 5: Quantity Used */}\r\n        <FlexibleEstimateDiv15Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n        >\r\n          <div style={{ textAlign: \"center\" }}>\r\n            {isHeader ? (\r\n              header2 === \"Subtotal\" ? header5 : \"Quantity Used\"\r\n            ) : (\r\n              <>\r\n                <GreyTinyTextItalics>Quantity Used</GreyTinyTextItalics>\r\n                <EditableField\r\n                  value={header5}\r\n                  placeholder=\"Enter Quantity Used\"\r\n                  displayUnit={quoteItemObj?.DisplayUnit || \"\"}\r\n                  onSave={async (newValue) => {\r\n                    await handleFieldSave(\"quantity_used\", newValue);\r\n                  }}\r\n                />\r\n              </>\r\n            )}\r\n          </div>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* COLUMN 6: Time Taken */}\r\n        <FlexibleEstimateDiv15Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n        >\r\n          <div style={{ textAlign: \"center\" }}>\r\n            {isHeader ? (\r\n              header2 === \"Subtotal\" ? header6 : \"Time Taken\"\r\n            ) : (\r\n              <>\r\n                <GreyTinyTextItalics>Time Taken</GreyTinyTextItalics>\r\n                <EditableField\r\n                  value={header6}\r\n                  placeholder=\"Enter Time Taken\"\r\n                  displayUnit=\"Hours\"\r\n                  onSave={async (newValue) => {\r\n                    await handleFieldSave(\"time_taken\", newValue);\r\n                  }}\r\n                />\r\n              </>\r\n            )}\r\n          </div>\r\n        </FlexibleEstimateDiv15Percent>\r\n\r\n        {/* COLUMN 7: Progress / Checkmark */}\r\n        <FlexibleEstimateDiv5Percent\r\n          bgcolor={bgColor}\r\n          fontsize={FontSize}\r\n          fontweight={FontWeight}\r\n        >\r\n          {isHeader ? null : (\r\n            isCompletedParams === true ? (\r\n              <AnimatedCheckmark />\r\n            ) : (\r\n              <div onClick={() => { handleMarkCompleted() }} style={{ cursor: \"pointer\" }}>\r\n                <CircularRing completion={completionValue} />\r\n              </div>\r\n            )\r\n          )}\r\n        </FlexibleEstimateDiv5Percent>\r\n      </QuoteItemCont>\r\n    </FlexColumnCont100xAutoPercent>\r\n  );\r\n};\r\n\r\nQuoteItemTimesheet.defaultProps = {\r\n  header1: \"\",\r\n  header2: \"\",\r\n  subheader2: \"\",\r\n  subheader2notes: \"\",\r\n  header3: \"\",\r\n  header4: \"\",\r\n  header5: \"\",\r\n  header6: \"\",\r\n  header7: \"\",\r\n  header8: \"\",\r\n  inputheaderposition: 0,\r\n  noChange: false,\r\n  showRelatedItems: false,\r\n  hideBidQuoteHeaders: false,\r\n  constructionView: false,\r\n  RemovalItems: [],\r\n  bgColor: \"\",\r\n  CategoryType: CategoryTypes.Material,\r\n  completedTagIds: null,\r\n  tagobj: null,\r\n  onClick: () => {},\r\n  onToggleDisplay: () => {},\r\n  OutputValue: () => {},\r\n  RemoveItemFromLocalQuoteObject: () => {},\r\n  RefreshUserInterface: () => {}\r\n};\r\n\r\nexport default QuoteItemTimesheet;\r\n\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport { decimalHoursToTimeString, UploadFileToCloud } from \"../../API_Functions/Utility_Functions\";\r\nimport { GetQuoteTag } from \"../../API_Functions/CaseQuote_Functions\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n// --- New layout components (from the MobileEstimateQuoteItem design) ---\r\nimport {\r\n  BackgroundColorDiv,\r\n  FixedItemPropertyDiv,\r\n} from \"../../MobileComponents/Divs\";\r\nimport {\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexDiv,\r\n  FlexContCenterAlign,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  LeagueSpartanRegularMinWidth,\r\n  RegularText,\r\n  StyledHRGreenBreakDashed,\r\n  StyledHRPropColour,\r\n  TinyHeaderDarkGrey,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport CircularRing from \"../../comps/CircularRing\";\r\nimport AnimatedCheckmark from \"../../comps/AnimatedCheckmark\";\r\nimport SpeechBubbleComponent from \"../../comps/Windows/UpdateBubble\";\r\nimport Dropdown from \"../../comps/DropdownMenu\";\r\nimport { FlexDivSpaceBetween } from \"../../StylesheetComps/Div\";\r\nimport { Backdrop, CircularProgress } from \"@material-ui/core\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\n\r\nexport const InfoContainer = styled.div`\r\n  display: grid;\r\n  /* Auto-fit makes it responsive: columns expand to fill the space */\r\n  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\r\n  gap: 10px;\r\n  padding: 0px;\r\n  margin: 0px;\r\n  width: 96%;\r\n  /* Use system font stack for an Apple-like feel */\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\r\n`;\r\n\r\nexport const InfoCard = styled.div`\r\n  background-color: #fff;\r\n  padding: 24px;\r\n  border-radius: 12px;\r\n  text-align: center;\r\n  /* Subtle shadow to make it pop a bit */\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);\r\n`;\r\n\r\nexport const SectionTitle = styled.div`\r\n  font-size: 16px;\r\n  font-weight: 600;\r\n  color: #333;\r\n  margin-bottom: 8px;\r\n`;\r\n\r\nexport const EstimateValue = styled.div`\r\n  font-size: 22px;\r\n  font-weight: 600;\r\n  color: #111;\r\n  margin-bottom: 16px;\r\n`;\r\n\r\nexport const ProgressRow = styled.div`\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  margin-bottom: 8px;\r\n`;\r\n\r\nexport const ProgressLabel = styled.div`\r\n  font-size: 14px;\r\n  color: #555;\r\n  margin-right: 8px;\r\n`;\r\n\r\nexport const ProgressValue = styled.div`\r\n  font-size: 16px;\r\n  font-weight: 600;\r\n`;\r\n\r\nexport const Separator = styled.div`\r\n  margin: 0 8px;\r\n  font-size: 16px;\r\n  color: #999;\r\n`;\r\n\r\nexport const RemainingRow = styled.div`\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n`;\r\n\r\nexport const RemainingLabel = styled.div`\r\n  font-size: 14px;\r\n  color: #555;\r\n  margin-right: 8px;\r\n`;\r\n\r\nexport const RemainingValue = styled.div`\r\n  font-size: 16px;\r\n  font-weight: 600;\r\n  color: ${(props) => (props.remaining < 0 ? \"#ff3b30\" : \"#34c759\")};\r\n  /* Use Apple-like “red” and “green” if you prefer */\r\n`;\r\n\r\nexport const StatusSection = styled.div`\r\n  margin-top: 20px;\r\n  text-align: center;\r\n  font-size: 14px;\r\n  color: #333;\r\n`;\r\n\r\nasync function insertWorkEntryAttachment(attachmentObj) {\r\n  const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/work_entry_attachments`;\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: \"POST\",\r\n      headers: {\r\n        \"Content-Type\": \"application/json\",\r\n        apikey: window.$POLYGONAPIKEY,\r\n        Authorization: window.$POLYGONAUTHKEY,\r\n        Prefer: \"return=representation\"\r\n      },\r\n      body: JSON.stringify([attachmentObj]),\r\n    });\r\n\r\n    const data = await response.json();\r\n    if (!response.ok) {\r\n      throw new Error(data.message || \"Failed to insert work_entry_attachment\");\r\n    }\r\n    return data;\r\n  } catch (error) {\r\n    console.error(\"Error inserting work_entry_attachment:\", error);\r\n    throw error;\r\n  }\r\n}\r\n\r\nasync function insertWorkEntryNote(noteObj) {\r\n  const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/work_entry_notes`;\r\n  try {\r\n    const response = await fetch(url, {\r\n      method: \"POST\",\r\n      headers: {\r\n        \"Content-Type\": \"application/json\",\r\n        apikey: window.$POLYGONAPIKEY,\r\n        Authorization: window.$POLYGONAUTHKEY,\r\n        Prefer: \"return=representation\"\r\n      },\r\n      body: JSON.stringify([noteObj]),\r\n    });\r\n\r\n    const data = await response.json();\r\n    if (!response.ok) {\r\n      throw new Error(data.message || \"Failed to insert work_entry_note\");\r\n    }\r\n    return data;\r\n  } catch (error) {\r\n    console.error(\"Error inserting work_entry_note:\", error);\r\n    throw error;\r\n  }\r\n}\r\n\r\nconst MobileQuoteItemTimesheet = (props) => {\r\n  const {\r\n    header2, // Item Name\r\n    header3, // Estimated Quantity\r\n    header4, // Time Allowed (in hours)\r\n    header5, // Quantity Used\r\n    header6, // Time Taken (in hours)\r\n    bgColor,\r\n    isHeader,\r\n    quoteItemObj,\r\n    CategoryType,\r\n    RefreshUserInterface,\r\n    tagobj,\r\n    isCompleted,\r\n    completedTagIds,\r\n    completedTagNames,\r\n    hourlyRate,\r\n    installSub,\r\n    workEntries,\r\n    crewHourTotal,\r\n    // New callback prop to update parent's crew hour total:\r\n    onCrewHoursUsed,\r\n  } = props;\r\n\r\n  const params = useParams();\r\n\r\n  const [isExpanded, setIsExpanded] = useState(false);\r\n  const [localQuantityUsed, setLocalQuantityUsed] = useState(header5);\r\n  const [localTimeTaken, setLocalTimeTaken] = useState(header6);\r\n  const [editingField, setEditingField] = useState(null);\r\n  const [isCompletedParams, setIsCompletedParams] = useState(isCompleted || false);\r\n  const [isCompletedTagIds, setIsCompletedTagIds] = useState(completedTagIds || []);\r\n  const [isCompletedTagNames, setIsCompletedTagNames] = useState(completedTagNames || []);\r\n\r\n  // New state for the incremental inputs.\r\n  const [quantityInput, setQuantityInput] = useState(\"\");\r\n  const [timeInput, setTimeInput] = useState(\"\");\r\n\r\n  const [notes, setNotes] = useState(\"\");\r\n  const [uploadedPhotos, setUploadedPhotos] = useState([]);\r\n  const imageInputRef = useRef(null);\r\n\r\n  const userId =\r\n    (sessionStorage.getItem(\"userInfo\") &&\r\n      JSON.parse(sessionStorage.getItem(\"userInfo\")).Id) ||\r\n    \"\";\r\n  const userName =\r\n    (sessionStorage.getItem(\"userInfo\") &&\r\n      JSON.parse(sessionStorage.getItem(\"userInfo\")).Name) ||\r\n    \"\";\r\n\r\n  const handleImageUploadClick = () => {\r\n    if (imageInputRef.current) {\r\n      imageInputRef.current.click();\r\n    }\r\n  };\r\n\r\n  const handleImageUpload = async (e) => {\r\n    const files = Array.from(e.target.files).map((file) => {\r\n      if (!file.name) {\r\n        return new File([file], `photo-${Date.now()}.jpg`, { type: file.type });\r\n      }\r\n      return file;\r\n    });\r\n    \r\n    for (let file of files) {\r\n      try {\r\n        const uploadedUrl = await UploadFileToCloud(file);\r\n        if (uploadedUrl) {\r\n          const attachmentObj = {\r\n            work_entry_id: null,\r\n            file_path: uploadedUrl,\r\n            file_name: file.name,\r\n            file_type: file.type,\r\n            entered_by: userId,\r\n            project_id: params.caseId,\r\n            estimate_id: params.quoteId,\r\n          };\r\n          await insertWorkEntryAttachment(attachmentObj);\r\n          setUploadedPhotos((prev) => [\r\n            ...prev,\r\n            { id: Date.now() + Math.random(), url: uploadedUrl },\r\n          ]);\r\n        }\r\n      } catch (error) {\r\n        console.error(\"Error uploading file:\", error);\r\n      }\r\n    }\r\n  };\r\n\r\n  const handleAddNotes = async () => {\r\n    if (notes.trim()) {\r\n      try {\r\n        const noteObj = {\r\n          work_entry_id: null,\r\n          note_text: notes.trim(),\r\n          entered_by: userId,\r\n          project_id: params.caseId,\r\n          estimate_id: params.quoteId,\r\n        };\r\n        await insertWorkEntryNote(noteObj);\r\n        setNotes(\"\");\r\n        window.alert(\"Uploaded Successfully\");\r\n      } catch (error) {\r\n        console.error(\"Error inserting note:\", error);\r\n      }\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    setLocalQuantityUsed(header5);\r\n  }, [header5]);\r\n\r\n  useEffect(() => {\r\n    setLocalTimeTaken(header6);\r\n  }, [header6]);\r\n\r\n  useEffect(() => {\r\n    if (isCompleted) setIsCompletedParams(true);\r\n  }, [isCompleted]);\r\n\r\n  useEffect(() => {\r\n    if (completedTagIds) setIsCompletedTagIds(completedTagIds);\r\n    if (completedTagNames) setIsCompletedTagNames(completedTagNames);\r\n  }, [completedTagIds, completedTagNames]);\r\n\r\n  const quantUsed = parseFloat(header5) || 0;\r\n  const totalQuant = parseFloat(quoteItemObj?.Quant) || 0;\r\n  const completionValue = totalQuant > 0 ? (quantUsed / totalQuant) * 100 : 0;\r\n\r\n  const toggleDropdown = () => {\r\n    setIsExpanded(!isExpanded);\r\n  };\r\n\r\n  // Save updated fields as before.\r\n  // For the time_taken field, we calculate the difference between the new and previous values,\r\n  // and call the onCrewHoursUsed callback with that difference.\r\n  const saveWorkEntryField = async (field, newValue) => {\r\n    let ItemTagName = \"\";\r\n    if (quoteItemObj.Tag_Id !== 0) {\r\n      try {\r\n        const resp = await GetQuoteTag(quoteItemObj.Tag_Id);\r\n        ItemTagName = resp.TagName;\r\n      } catch (error) {\r\n        console.error(\"Error fetching tag:\", error);\r\n      }\r\n    }\r\n    const updatedQuantity = field === \"quantity_used\" ? newValue : header5 || 0;\r\n    const updatedTime = field === \"time_taken\" ? newValue : header6 || 0;\r\n    if(updatedTime){\r\n      onCrewHoursUsed(updatedTime - header6);\r\n    }\r\n    const payload = {\r\n      quantity_used: updatedQuantity,\r\n      time_taken: updatedTime,\r\n      project_number: params.caseId,\r\n      estimate_number: params.quoteId,\r\n      item_id: quoteItemObj?.Id || \"\",\r\n      tag_id: quoteItemObj?.Tag_Id || \"\",\r\n      tag_name: ItemTagName || \"\",\r\n      entered_by:\r\n        (sessionStorage.getItem(\"userInfo\") &&\r\n          JSON.parse(sessionStorage.getItem(\"userInfo\")).Id) ||\r\n        \"\",\r\n      entered_by_name:\r\n        (sessionStorage.getItem(\"userInfo\") &&\r\n          JSON.parse(sessionStorage.getItem(\"userInfo\")).Name) ||\r\n        \"\",\r\n      estimated_quantity: quoteItemObj?.Quant || 0,\r\n      estimated_time: header4 || 0,\r\n      is_completed: false,\r\n    };\r\n\r\n    try {\r\n      const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/work_entries`;\r\n      const response = await fetch(url, {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY,\r\n        },\r\n        body: JSON.stringify(payload),\r\n      });\r\n      if (!response.ok) throw new Error(\"Failed to create work entry\");\r\n      const data = await response.json();\r\n      return data[0];\r\n    } catch (error) {\r\n      console.error(\"Error creating work entry:\", error);\r\n      return null;\r\n    }\r\n  };\r\n\r\n  // // When saving a field, update the corresponding local state.\r\n  // // For \"time_taken\", subtract the difference from the parent's crew hour total.\r\n  // const handleFieldSave = async (field, newValue) => {\r\n  //   const previousValue = field === \"time_taken\" ? parseFloat(localTimeTaken) || 0 : 0;\r\n  //   const updatedRecord = await saveWorkEntryField(field, newValue);\r\n  //   if (updatedRecord) {\r\n  //     if (field === \"quantity_used\") {\r\n  //       setLocalQuantityUsed(updatedRecord[field]);\r\n  //     }\r\n  //     if (field === \"time_taken\") {\r\n  //       const newTime = parseFloat(updatedRecord[field]) || 0;\r\n  //         setLocalTimeTaken(updatedRecord[field]);\r\n  //     }\r\n  //   }\r\n  //   RefreshUserInterface && RefreshUserInterface();\r\n  //   setEditingField(null);\r\n  // };\r\n\r\n const handleFieldSave = async (field, newValue) => {\r\n  console.log(field, newValue)\r\n    const previousValue = field === \"time_taken\" ? parseFloat(localTimeTaken) || 0 : 0;\r\n    console.log(previousValue)\r\n    const updatedRecord = await saveWorkEntryField(field, newValue);\r\n    if (updatedRecord) {\r\n      if (field === \"quantity_used\") {\r\n        setLocalQuantityUsed(updatedRecord[field]);\r\n      }\r\n      if (field === \"time_taken\") {\r\n        const newTime = parseFloat(updatedRecord[field]) || 0;\r\n        setLocalTimeTaken(updatedRecord[field]);\r\n        onCrewHoursUsed(newTime - previousValue);\r\n      }\r\n    }\r\n    RefreshUserInterface && RefreshUserInterface();\r\n    setEditingField(null);\r\n  };\r\n\r\n  const markItemAsCompleted = async () => {\r\n    let ItemTagName = \"\";\r\n    if (quoteItemObj.Tag_Id !== 0) {\r\n      try {\r\n        const resp = await GetQuoteTag(quoteItemObj.Tag_Id);\r\n        ItemTagName = resp.TagName;\r\n      } catch (error) {\r\n        console.error(\"Error fetching tag:\", error);\r\n      }\r\n    }\r\n    const payload = {\r\n      quantity_used: header5,\r\n      time_taken: header6,\r\n      project_number: params.caseId,\r\n      estimate_number: params.quoteId,\r\n      item_id: quoteItemObj?.Id || \"\",\r\n      tag_id: quoteItemObj?.Tag_Id || \"\",\r\n      tag_name: ItemTagName || \"\",\r\n      entered_by:\r\n        (sessionStorage.getItem(\"userInfo\") &&\r\n          JSON.parse(sessionStorage.getItem(\"userInfo\")).Id) ||\r\n        \"\",\r\n      entered_by_name:\r\n        (sessionStorage.getItem(\"userInfo\") &&\r\n          JSON.parse(sessionStorage.getItem(\"userInfo\")).Name) ||\r\n        \"\",\r\n      estimated_quantity: quoteItemObj?.Quant || 0,\r\n      estimated_time: header4 || 0,\r\n      is_completed: true,\r\n    };\r\n\r\n    try {\r\n      const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/work_entries`;\r\n      const response = await fetch(url, {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY,\r\n        },\r\n        body: JSON.stringify(payload),\r\n      });\r\n      if (!response.ok) throw new Error(\"Failed to mark item as completed\");\r\n      const data = await response.json();\r\n      return data[0];\r\n    } catch (error) {\r\n      console.error(\"Error marking item as completed:\", error);\r\n      return null;\r\n    }\r\n  };\r\n\r\n  const handleMarkCompleted = async () => {\r\n    const confirmed = window.confirm(\"Mark Item As Completed?\");\r\n    if (confirmed) {\r\n      setIsCompletedParams(true);\r\n      await markItemAsCompleted();\r\n      RefreshUserInterface && RefreshUserInterface();\r\n    }\r\n  };\r\n\r\n  const startEditingField = (field) => {\r\n    setEditingField(field);\r\n    if (field === \"quantity_used\") {\r\n      setQuantityInput(\"\");\r\n    } else if (field === \"time_taken\") {\r\n      setTimeInput(\"\");\r\n    }\r\n  };\r\n\r\n  const renderEditableField = (field, value, placeholder, unit) => {\r\n    if (editingField === field) {\r\n      return (\r\n        <div style={{ display: \"flex\", alignItems: \"center\" }}>\r\n          <span style={{ marginRight: \"4px\" }}>{value} +</span>\r\n          <input\r\n            type=\"text\"\r\n            value={field === \"quantity_used\" ? quantityInput : timeInput}\r\n            onChange={(e) => {\r\n              if (field === \"quantity_used\") {\r\n                setQuantityInput(e.target.value);\r\n              } else {\r\n                setTimeInput(e.target.value);\r\n              }\r\n            }}\r\n            placeholder={placeholder}\r\n            style={{\r\n              padding: \"8px\",\r\n              fontSize: \"16px\",\r\n              width: \"100%\",\r\n              minWidth: \"100px\",\r\n              border: `1px solid ${ColorPalette.PrimaryGrey}`,\r\n              borderRadius: \"8px\",\r\n              outline: \"none\",\r\n              transition: \"border-color 0.2s ease\",\r\n            }}\r\n          />\r\n          <button\r\n         onClick={() => {\r\n          const currentValue = Number(value) || 0;\r\n          const increment = Number(field === \"quantity_used\" ? quantityInput : timeInput) || 0;\r\n          const updatedValue = currentValue + increment;\r\n          handleFieldSave(field, updatedValue);\r\n        }}        \r\n            style={{\r\n              marginLeft: \"8px\",\r\n              fontSize: \"14px\",\r\n              padding: \"6px 12px\",\r\n              backgroundColor: ColorPalette.PrimaryButtonBlue,\r\n              color: \"white\",\r\n              border: \"none\",\r\n              borderRadius: \"8px\",\r\n              cursor: \"pointer\",\r\n              transition: \"background-color 0.2s ease\",\r\n            }}\r\n          >\r\n            Save\r\n          </button>\r\n        </div>\r\n      );\r\n    } else {\r\n      return (\r\n        <span\r\n          onClick={() => startEditingField(field)}\r\n          style={{\r\n            cursor: \"pointer\",\r\n            color: !value ? \"#FFC107\" : \"black\",\r\n          }}\r\n        >\r\n          {!value ? \"Pending Entry\" : `${value} ${unit}`}\r\n        </span>\r\n      );\r\n    }\r\n  };\r\n\r\n  const handleMarkTagCompleted = async (tagobj) => {\r\n    const SUPABASE_URL =\r\n      \"https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/project_completion_status\";\r\n\r\n    try {\r\n      let newCompletedTagIds = [...isCompletedTagIds];\r\n      let newCompletedTagNames = [...isCompletedTagNames];\r\n\r\n      if (!newCompletedTagIds.includes(tagobj.Id)) {\r\n        newCompletedTagIds.push(tagobj.Id);\r\n        newCompletedTagNames.push(tagobj.TagName);\r\n      }\r\n\r\n      const filter = `?project_number=eq.${params.caseId}&estimate_number=eq.${params.quoteId}`;\r\n      const response = await fetch(SUPABASE_URL + filter, {\r\n        method: \"PATCH\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY,\r\n          Prefer: \"return=representation\",\r\n        },\r\n        body: JSON.stringify({\r\n          completed_tag_ids: newCompletedTagIds,\r\n          completed_tag_names: newCompletedTagNames,\r\n        }),\r\n      });\r\n\r\n      if (!response.ok)\r\n        throw new Error(`Failed to update record: ${response.status} ${response.statusText}`);\r\n\r\n      const data = await response.json();\r\n      console.log(\"Updated tag row:\", data);\r\n\r\n      setIsCompletedTagIds(newCompletedTagIds);\r\n      setIsCompletedTagNames(newCompletedTagNames);\r\n      RefreshUserInterface && RefreshUserInterface();\r\n    } catch (error) {\r\n      console.error(\"Error updating tag as completed:\", error);\r\n    }\r\n  };\r\n\r\n  const itemIconSRC = isHeader\r\n    ? null\r\n    : CategoryTypes.Material === CategoryType\r\n    ? \"/Material_EstimateIcon.svg\"\r\n    : CategoryType === \"Delivery\"\r\n    ? \"/Delivery_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Removal\r\n    ? \"/Removal_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Access\r\n    ? \"/AccessArea_EstimateIcon.svg\"\r\n    : CategoryType === \"Tool\"\r\n    ? \"/Tools_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Labor\r\n    ? \"/Labour_EstimateIcon.svg\"\r\n    : null;\r\n\r\n  return (\r\n    <div style={{ margin: \"12px 0\" }}>\r\n      <SpeechBubbleComponent display=\"none\" />\r\n      <BackgroundColorDiv\r\n        width={isHeader ? \"94.5vw\" : \"92.5vw\"}\r\n        padding={isHeader ? \"0px\" : \"8px\"}\r\n        bgcolor={\r\n          quoteItemObj?.Parent_Id !== 0\r\n            ? isCompletedParams\r\n              ? ColorPalette.CompletedGreen\r\n              : bgColor || ColorPalette.LightGreen\r\n            : isCompletedParams\r\n            ? ColorPalette.CompletedGreen\r\n            : bgColor || ColorPalette.White\r\n        }\r\n      >\r\n        <FlexRowCont100PercentSpaceBetween>\r\n          <FlexDivSpaceBetween margintop=\"0%\" style={{ width: \"97%\" }}>\r\n            <div\r\n              style={{ display: \"flex\", alignItems: \"center\", cursor: \"pointer\" }}\r\n              onClick={toggleDropdown}\r\n            >\r\n              {isHeader ? (\r\n                <LeagueSpartanRegularMinWidth>{header2}</LeagueSpartanRegularMinWidth>\r\n              ) : (\r\n                <FlexDivSpaceBetween\r\n                  margintop=\"0%\"\r\n                  width={quoteItemObj.Parent_Id !== 0 ? \"81vw\" : \"87.5vw\"}\r\n                >\r\n                  <RegularText mobilefontsize=\"14px\" maxwidth=\"75%\" textalign=\"left\">\r\n                    {header2}\r\n                  </RegularText>\r\n                  {isCompletedParams ? (\r\n                    <AnimatedCheckmark />\r\n                  ) : (\r\n                    <div\r\n                      onClick={handleMarkCompleted}\r\n                      style={{ cursor: \"pointer\", display: \"inline-block\" }}\r\n                    >\r\n                      <CircularRing completion={completionValue} />\r\n                    </div>\r\n                  )}\r\n                </FlexDivSpaceBetween>\r\n              )}\r\n            </div>\r\n            {tagobj && header2 !== \"Subtotal\" && isCompletedTagIds && (\r\n              <div\r\n                onClick={(e) => {\r\n                  e.stopPropagation();\r\n                  handleMarkTagCompleted(tagobj);\r\n                }}\r\n                style={{ display: \"flex\", alignItems: \"center\" }}\r\n              >\r\n                {isCompletedTagIds.includes(String(tagobj.Id)) ? (\r\n                  <AnimatedCheckmark />\r\n                ) : (\r\n                  <CircularRing completion={completionValue} />\r\n                )}\r\n              </div>\r\n            )}\r\n          </FlexDivSpaceBetween>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n\r\n        {!isHeader ? (\r\n          <div>\r\n            <StyledHRPropColour border=\"0.5px dashed #D3D3D3\"></StyledHRPropColour>\r\n            <FlexDivSpaceBetween marginleft=\"2%\" margintop=\"0%\" width=\"95%\">\r\n              <div style={{ height: \"50px\" }}>\r\n                <FlexDiv>\r\n                  <RemainingLabel>Estimated:</RemainingLabel>\r\n                  <ProgressValue>\r\n                    {parseFloat(header3)?.toFixed(2) || 0} {quoteItemObj?.DisplayUnit}\r\n                  </ProgressValue>\r\n                </FlexDiv>\r\n\r\n                <ProgressRow>\r\n                  <RemainingLabel>Estimated:</RemainingLabel>\r\n                  <ProgressValue>{decimalHoursToTimeString(header4)}</ProgressValue>\r\n                </ProgressRow>\r\n              </div>\r\n\r\n              <div style={{ height: \"50px\" }}>\r\n                <FlexDiv>\r\n                  <RemainingLabel>Remaining:</RemainingLabel>\r\n                  <RemainingValue remaining={(parseFloat(header3) || 0) - (parseFloat(localQuantityUsed) || 0)}>\r\n                    {(parseFloat(header3) || 0) - (parseFloat(localQuantityUsed) || 0)} {quoteItemObj?.DisplayUnit}\r\n                  </RemainingValue>\r\n                </FlexDiv>\r\n\r\n                <FlexDiv>\r\n                  <RemainingRow>\r\n                    <RemainingLabel>Remaining:</RemainingLabel>\r\n                    <RemainingValue remaining={parseFloat(header4) - (parseFloat(localTimeTaken) || 0)}>\r\n                      {decimalHoursToTimeString(parseFloat(header4) - (parseFloat(localTimeTaken) || 0))}\r\n                    </RemainingValue>\r\n                  </RemainingRow>\r\n                </FlexDiv>\r\n              </div>\r\n            </FlexDivSpaceBetween>\r\n          </div>\r\n        ) : null}\r\n\r\n        {isExpanded && !isHeader && (\r\n          <div style={{ paddingTop: \"16px\" }}>\r\n            <InfoContainer>\r\n              <InfoCard>\r\n                <SectionTitle>Quantity</SectionTitle>\r\n                <ProgressRow>\r\n                  <ProgressLabel>Used:</ProgressLabel>\r\n                  <ProgressValue>\r\n                    {renderEditableField(\r\n                      \"quantity_used\",\r\n                      localQuantityUsed,\r\n                      \"Enter Quantity Used\",\r\n                      quoteItemObj?.DisplayUnit || \"\"\r\n                    )}\r\n                  </ProgressValue>\r\n                  <Separator>/</Separator>\r\n                  <ProgressValue>\r\n                    {parseFloat(header3)?.toFixed(2) || 0} {quoteItemObj?.DisplayUnit}\r\n                  </ProgressValue>\r\n                </ProgressRow>\r\n                <RemainingRow>\r\n                  <RemainingLabel>Remaining:</RemainingLabel>\r\n                  <RemainingValue remaining={(parseFloat(header3) || 0) - (parseFloat(localQuantityUsed) || 0)}>\r\n                    {(parseFloat(header3) || 0) - (parseFloat(localQuantityUsed) || 0)} {quoteItemObj?.DisplayUnit}\r\n                  </RemainingValue>\r\n                </RemainingRow>\r\n              </InfoCard>\r\n\r\n              <InfoCard>\r\n                <SectionTitle>Time</SectionTitle>\r\n                <TinyTextItalics>{crewHourTotal} Crew Hours Remaining Today:</TinyTextItalics>\r\n                <ProgressRow>\r\n                  <ProgressLabel>Taken:</ProgressLabel>\r\n                  <ProgressValue>\r\n                    {renderEditableField(\"time_taken\", localTimeTaken, \"Enter Time Taken\", \"Hours\")}\r\n                  </ProgressValue>\r\n                  <Separator>/</Separator>\r\n                  <ProgressValue>{decimalHoursToTimeString(header4)}</ProgressValue>\r\n                </ProgressRow>\r\n                <RemainingRow>\r\n                  <RemainingLabel>Remaining:</RemainingLabel>\r\n                  <RemainingValue remaining={parseFloat(header4) - (parseFloat(localTimeTaken) || 0)}>\r\n                    {decimalHoursToTimeString(parseFloat(header4) - (parseFloat(localTimeTaken) || 0))}\r\n                  </RemainingValue>\r\n                </RemainingRow>\r\n              </InfoCard>\r\n            </InfoContainer>\r\n\r\n            {quoteItemObj?.RelatedItems && quoteItemObj.RelatedItems.length > 0 && (\r\n              <div style={{ marginTop: \"16px\" }}>\r\n                {quoteItemObj.RelatedItems.map((o, i) => {\r\n                  if (o.CateType !== CategoryTypes.Labor) {\r\n                    const workEntry = workEntries[o.Id];\r\n                    return (\r\n                      <MobileQuoteItemTimesheet\r\n                        key={i}\r\n                        {...o}\r\n                        isHeader={false}\r\n                        quoteItemObj={o}\r\n                        isCompleted={workEntry ? workEntry.is_completed : false}\r\n                        bgColor={ColorPalette.LightGreen}\r\n                        hourlyRate={hourlyRate}\r\n                        parentid={o.Parent_Id}\r\n                        noChange={o.NoChange}\r\n                        header2={o.Name}\r\n                        RefreshUserInterface={() => RefreshUserInterface()}\r\n                        subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                        subheader2={o.Description == null ? \"\" : o.Description}\r\n                        header3={\r\n                          typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                            ? o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                              \" \" +\r\n                              o.DisplayUnit\r\n                            : \"0.00 \" + o.DisplayUnit\r\n                        }\r\n                        header4={o.LaborSubtotal / hourlyRate}\r\n                        header5={workEntry ? workEntry.quantity_used : null}\r\n                        header6={workEntry ? workEntry.time_taken : null}\r\n                        header7={decimalHoursToTimeString(o.LaborSubtotal / hourlyRate)}\r\n                        header8={\r\n                          \"$\" +\r\n                          (parseFloat(o.Price.toFixed(2)) + parseFloat(o.LaborSubtotal.toFixed(2)))\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                        header3title=\"Quantity\"\r\n                        header4title=\"Material Rate\"\r\n                        header5title=\"Install Rate\"\r\n                        header7title=\"Install Time\"\r\n                      />\r\n                    );\r\n                  }\r\n                  return null;\r\n                })}\r\n              </div>\r\n            )}\r\n          </div>\r\n        )}\r\n\r\n        {isExpanded && isHeader && (\r\n          <div style={{ paddingTop: \"16px\", marginTop: \"16px\" }}>\r\n            <SectionTitle>Upload Photos & Notes</SectionTitle>\r\n            <p style={{ marginTop: \"8px\", fontSize: \"12px\", color: \"#666\" }}>\r\n              You can either upload photos or write notes regarding the scope of work.\r\n            </p>\r\n            <div\r\n              style={{\r\n                border: \"2px dashed grey\",\r\n                borderRadius: \"8px\",\r\n                padding: \"16px\",\r\n                textAlign: \"center\",\r\n                cursor: \"pointer\",\r\n                width: \"90%\",\r\n              }}\r\n              onClick={handleImageUploadClick}\r\n            >\r\n              <p>Click here to upload images</p>\r\n              <input\r\n                type=\"file\"\r\n                accept=\"image/*\"\r\n                style={{ display: \"none\" }}\r\n                ref={imageInputRef}\r\n                onChange={handleImageUpload}\r\n                multiple\r\n              />\r\n            </div>\r\n\r\n            <div\r\n              style={{\r\n                display: \"grid\",\r\n                gridTemplateColumns: \"repeat(auto-fill, minmax(80px, 1fr))\",\r\n                gap: \"8px\",\r\n                marginTop: \"16px\",\r\n              }}\r\n            >\r\n              {uploadedPhotos.map((photo) => (\r\n                <div\r\n                  key={photo.id}\r\n                  style={{\r\n                    border: \"1px solid #ccc\",\r\n                    borderRadius: \"4px\",\r\n                    overflow: \"hidden\",\r\n                    width: \"80px\",\r\n                    height: \"80px\",\r\n                    position: \"relative\",\r\n                  }}\r\n                >\r\n                  {photo.isLoading ? (\r\n                    <div\r\n                      style={{\r\n                        display: \"flex\",\r\n                        justifyContent: \"center\",\r\n                        alignItems: \"center\",\r\n                        width: \"100%\",\r\n                        height: \"100%\",\r\n                      }}\r\n                    >\r\n                      <div>\r\n                        <CircularProgress color=\"inherit\" />\r\n                      </div>\r\n                    </div>\r\n                  ) : (\r\n                    <img\r\n                      src={window.$IMGURL + photo.url}\r\n                      alt=\"Uploaded preview\"\r\n                      style={{\r\n                        width: \"100%\",\r\n                        height: \"100%\",\r\n                        objectFit: \"cover\",\r\n                      }}\r\n                    />\r\n                  )}\r\n                </div>\r\n              ))}\r\n            </div>\r\n\r\n            <textarea\r\n              placeholder=\"Or type your notes here...\"\r\n              value={notes}\r\n              onChange={(e) => setNotes(e.target.value)}\r\n              style={{\r\n                width: \"94%\",\r\n                minHeight: \"100px\",\r\n                marginTop: \"16px\",\r\n                borderRadius: \"8px\",\r\n                border: \"1px solid #ccc\",\r\n                padding: \"8px\",\r\n              }}\r\n            />\r\n            <RegularResponsiveButton onClick={() => { handleAddNotes(); }} bgcolor={\"#51C159\"} width=\"93%\">\r\n              Save Changes\r\n            </RegularResponsiveButton>\r\n          </div>\r\n        )}\r\n      </BackgroundColorDiv>\r\n    </div>\r\n  );\r\n};\r\n\r\nMobileQuoteItemTimesheet.defaultProps = {\r\n  header2: \"\",\r\n  header3: \"\",\r\n  header4: \"\",\r\n  header5: \"\",\r\n  header6: \"\",\r\n  bgColor: ColorPalette.White,\r\n  isHeader: false,\r\n  quoteItemObj: {},\r\n  CategoryType: CategoryTypes.Material,\r\n  RefreshUserInterface: () => {},\r\n  onCrewHoursUsed: () => {},\r\n  tagobj: null,\r\n  isCompleted: false,\r\n  completedTagIds: [],\r\n  completedTagNames: [],\r\n  hourlyRate: 0,\r\n  installSub: 0,\r\n  workEntries: []\r\n};\r\n\r\nexport default MobileQuoteItemTimesheet;\r\n","import React from 'react';\r\nimport styled, { keyframes } from 'styled-components';\r\n\r\n// Keyframes for the seamless barbershop pole animation\r\nconst barbershop = keyframes`\r\n  from {\r\n    background-position: 0 0;\r\n  }\r\n  to {\r\n    background-position: 55px 0;\r\n  }\r\n`;\r\n\r\n// Overall wrapper for the tracker (progress bar + labels)\r\nconst TrackerWrapper = styled.div`\r\n  width: 96%;\r\n`;\r\n\r\n// The progress bar container\r\nconst ProgressBarContainer = styled.div`\r\n  width: 100%;\r\n  background-color: #ddd;\r\n  border-radius: 8px;\r\n  overflow: hidden;\r\n  height: 20px;\r\n  position: relative;\r\n`;\r\n\r\n// The animated fill representing the current progress with a seamless barbershop pole effect\r\nconst ProgressBarFill = styled.div`\r\n  height: 100%;\r\n  width: ${props => props.progress}%;\r\n  transition: width 0.5s ease-in-out;\r\n  background-image: repeating-linear-gradient(\r\n    -45deg,\r\n    #4caf50,\r\n    #4caf50 10px,\r\n    #388e3c 10px,\r\n    #388e3c 20px\r\n  );\r\n  /* Ensures the repeating pattern is sized to loop cleanly */\r\n  background-size: 55px 55px;\r\n  animation: ${barbershop} 5s linear infinite;\r\n`;\r\n\r\n// Container for the segmentation markers and tag labels (placed below the bar)\r\nconst SegmentContainer = styled.div`\r\n  width: 100%;\r\n  display: flex;\r\n  justify-content: space-between;\r\n  margin-top: 8px;\r\n`;\r\n\r\n// Each segment divides the progress bar equally\r\nconst Segment = styled.div`\r\n  flex: 1;\r\n  display: flex;\r\n  justify-content: center;\r\n`;\r\n\r\n// Tag label for each segment; hidden unless the tag is completed\r\nconst TagLabel = styled.div`\r\n  font-size: 0.9rem;\r\n  white-space: nowrap;\r\n  opacity: ${props => (props.visible ? 1 : 0)};\r\n  transition: opacity 0.5s ease-in-out;\r\n`;\r\n\r\nconst TagProgressTracker = ({ tags, completedTagIds = [] }) => {\r\n  const totalTags = tags && tags.length ? tags.length : 0;\r\n  const completedCount = completedTagIds && completedTagIds.length ? completedTagIds.length : 0;\r\n  const progress = totalTags > 0 ? (completedCount / totalTags) * 100 : 0;\r\n\r\n  return (\r\n    <TrackerWrapper>\r\n      <ProgressBarContainer>\r\n        <ProgressBarFill progress={progress} />\r\n      </ProgressBarContainer>\r\n      <SegmentContainer>\r\n        {tags && tags.map((tag) => (\r\n          <Segment key={tag.Id}>\r\n            <TagLabel visible={completedTagIds.includes(String(tag.Id))}>\r\n              {tag.TagName} {completedTagIds.includes(String(tag.Id)) ? '✔' : ''}\r\n            </TagLabel>\r\n          </Segment>\r\n        ))}\r\n      </SegmentContainer>\r\n    </TrackerWrapper>\r\n  );\r\n};\r\n\r\nexport default TagProgressTracker;\r\n","/* eslint-disable */\r\n\r\nimport { useEffect, useState } from \"react\";\r\nimport {\r\n  BackgroundColorDiv,\r\n  FixedItemPropertyDiv,\r\n} from \"../../MobileComponents/Divs\";\r\nimport { TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContFlexStart,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  LeagueSpartanRegular,\r\n  LeagueSpartanRegularMinWidth,\r\n  LeagueSpartanTiny,\r\n  RegularText,\r\n  SmallGreenLeagueText,\r\n  StyledHRPropColour,\r\n  TinyHeaderDarkGrey,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { Icon30px20pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport SpeechBubbleComponent from \"../../comps/Windows/UpdateBubble\";\r\nimport Dropdown from \"../../comps/DropdownMenu\";\r\nimport { decimalHoursToTimeString } from \"../../API_Functions/Utility_Functions\";\r\nimport { FlexDivFlexEnd, FlexDivSpaceBetween } from \"../../StylesheetComps/Div\";\r\nimport { Icon15x15 } from \"../../StylesheetComps/Imgs/Icons\";\r\nconst MobileEstimateQuoteItem = ({\r\n  header1,\r\n  header2,\r\n  subheader2notes,\r\n  subheader2,\r\n  header3,\r\n  header3title,\r\n  header4,\r\n  header4title,\r\n  header5,\r\n  header5title,\r\n  header6,\r\n  header6title,\r\n  header7,\r\n  header7title,\r\n  header8,\r\n  quoteItemObj,\r\n  inputheaderposition,\r\n  noChange,\r\n  OutputValue,\r\n  RemoveItemFromLocalQuoteObject,\r\n  parentid,\r\n  itemLink,\r\n  bgColor,\r\n  onClick,\r\n  header10,\r\n  isHeader,\r\n  showRelatedItems,\r\n  constructionView,\r\n  hideBidQuoteHeaders,\r\n  onToggleDisplay,\r\n  hourlyRate,\r\n  CategoryType,\r\n  ShowItemSelection,\r\n  EditTag,\r\n  DeleteTag,\r\n  DeliveryItems,\r\n  RemovalItems,\r\n  showAddOnsSelection,\r\n  deleteItemFromEstimate,\r\n  RefreshComponentState,\r\n  adjustAccess,\r\n}) => {\r\n  const [itemPropertyDisplay, setItemPropertyDisplay] = useState(\"none\");\r\n  const [itemHRDisplay, setItemHRDisplay] = useState(\"none\");\r\n  const [itemPropertyToggle, setItemProperyToggle] = useState(false);\r\n\r\n  const [subheader2Display] = useState(\"flex\");\r\n  const [header3Display, setHeader3Display] = useState(\"block\");\r\n\r\n  const [header3InputDisplay, setHeader3InputDisplay] = useState(\"none\");\r\n\r\n  const [descriptionOverflow, setDescriptionOverflow] = useState(\"hidden\");\r\n  const [descriptionWhiteSpace, setDescriptionWhiteSpace] = useState(\"nowrap\");\r\n\r\n  const UpdateDescriptionUI = async (overflow) => {\r\n    if (overflow === \"hidden\") {\r\n      setDescriptionOverflow(\"visible\");\r\n      setDescriptionWhiteSpace(\"normal\");\r\n    } else {\r\n      setDescriptionOverflow(\"hidden\");\r\n      setDescriptionWhiteSpace(\"nowrap\");\r\n    }\r\n  };\r\n\r\n  const DetermineInputHeaderLogic = async () => {\r\n    if (parentid === 0) {\r\n      if (noChange === false) {\r\n        InitializeSetup();\r\n        switch (inputheaderposition) {\r\n          case 1:\r\n            break;\r\n          case 2:\r\n            break;\r\n          case 3:\r\n            setHeader3Display(\"none\");\r\n            UpdateItemPropertyView(false);\r\n            setHeader3InputDisplay(\"flex\");\r\n            break;\r\n          case 5:\r\n            break;\r\n          case 6:\r\n            break;\r\n          default:\r\n            break;\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const InitializeSetup = async () => {\r\n    setHeader3Display(\"block\");\r\n\r\n    setHeader3InputDisplay(\"none\");\r\n  };\r\n\r\n  useEffect(() => {\r\n    DetermineInputHeaderLogic(inputheaderposition);\r\n  }, [inputheaderposition]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const CheckIfValidLink = async (link) => {\r\n    if (link !== null && link !== undefined && link !== \"\") {\r\n      var p =\r\n        /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})(?:\\S+)?$/;\r\n      if (link.match(p)) {\r\n        setYoutubeLinkProp(link);\r\n        setLinkHeaderDisplay(\"underline\");\r\n        setPointerEvent(\"auto\");\r\n      } else {\r\n        setLinkHeaderDisplay(\"none\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const UpdateItemPropertyView = async (itemtoggle) => {\r\n    UpdateDescriptionUI(descriptionOverflow, descriptionWhiteSpace);\r\n    if (itemtoggle === false) {\r\n      setItemPropertyDisplay(\"flex\");\r\n      setItemHRDisplay(\"block\");\r\n      setItemProperyToggle(true);\r\n    } else {\r\n      setItemPropertyDisplay(\"none\");\r\n      setItemHRDisplay(\"none\");\r\n      setItemProperyToggle(false);\r\n    }\r\n  };\r\n\r\n  const shouldDisplayPencil =\r\n    isHeader === true &&\r\n    header2 !== \"Subtotal\" &&\r\n    header2 !== \"General Materials\" &&\r\n    header2 !== \"Delivery\" &&\r\n    header2 !== \"Removals\" &&\r\n    header2 !== \"Access Area\" &&\r\n    header2 !== \"Tools/Machines\" &&\r\n    header2 !== \"Labour Breakdown\";\r\n\r\n  const shouldDisplayGreenButton =\r\n    header2 === \"General Materials\" ||\r\n    header2 === \"Delivery\" ||\r\n    header2 === \"Removals\" ||\r\n    header2 === \"Access Area\" ||\r\n    header2 === \"Tools/Machines\" ||\r\n    header2 === \"Labour Breakdown\";\r\n\r\n  let iconSrc = \"\";\r\n\r\n  if (shouldDisplayPencil) {\r\n    iconSrc = \"/Pencil.svg\";\r\n  } else if (shouldDisplayGreenButton) {\r\n    iconSrc = \"/Green Button.svg\";\r\n  }\r\n\r\n  const itemIconSRC = isHeader\r\n    ? null // Don't display anything when isHeader is true\r\n    : CategoryType === CategoryTypes.Material\r\n    ? \"/Material_EstimateIcon.svg\"\r\n    : CategoryType === \"Delivery\"\r\n    ? \"/Delivery_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Removal\r\n    ? \"/Removal_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Access\r\n    ? \"/AccessArea_EstimateIcon.svg\"\r\n    : CategoryType === \"Tool\"\r\n    ? \"/Tools_EstimateIcon.svg\"\r\n    : CategoryType === CategoryTypes.Labor\r\n    ? \"/Labour_EstimateIcon.svg\"\r\n    : \"\"; // Set default to an empty string\r\n\r\n  useEffect(() => {\r\n    CheckIfValidLink(itemLink);\r\n  }, [itemLink]);\r\n\r\n  const [isOpen, setIsOpen] = useState(false);\r\n\r\n  // Toggle open/closed on click\r\n  const toggleOpen = () => {\r\n    setIsOpen((prev) => !prev);\r\n  };\r\n\r\n\r\n  const [selectedItem, setSelectedItem] = useState(null);\r\n\r\n  const handleItemClick = (item, field) => {\r\n    setSelectedItem({ item, field });\r\n  };\r\n\r\n  const determineSpeechBubbleDisplayValue = () => {\r\n    if (selectedItem) return \"block\";\r\n    return \"none\";\r\n  };\r\n\r\n  const determineDivDisplayValue = () => {\r\n    if (hideBidQuoteHeaders === true) return \"none\";\r\n\r\n    if (DeliveryItems.length > 0 || RemovalItems.length > 0) return \"none\";\r\n\r\n    const nonLaborRelatedItemsExist =\r\n      quoteItemObj?.RelatedItems?.filter(\r\n        (o) => o.CateType !== CategoryTypes.Labor\r\n      ).length > 0;\r\n\r\n    if (quoteItemObj?.Parent_Id === 0 && nonLaborRelatedItemsExist) {\r\n      return \"block\";\r\n    }\r\n\r\n    if (quoteItemObj?.Parent_Id === 0) {\r\n      return \"block\";\r\n    }\r\n\r\n    if (quoteItemObj?.Parent_Id !== 0 && isHeader === false) {\r\n      return \"block\";\r\n    }\r\n\r\n    if (CategoryType === CategoryTypes.Removal) {\r\n      return \"block\";\r\n    }\r\n\r\n    if (\r\n      quoteItemObj?.Parent_Id !== 0 &&\r\n      CategoryType === CategoryTypes.Material\r\n    ) {\r\n      return \"block\";\r\n    }\r\n\r\n    if (quoteItemObj.RentalLength) {\r\n      return \"block\";\r\n    }\r\n\r\n    return \"none\";\r\n  };\r\n\r\n  return (\r\n    <div onClick={toggleOpen}    >\r\n      <SpeechBubbleComponent\r\n        itemObj={selectedItem?.item}\r\n        display={determineSpeechBubbleDisplayValue()}\r\n        RefreshComponentState={() => {\r\n          RefreshComponentState();\r\n        }}\r\n        cancelItemChange={() => {\r\n          setSelectedItem(null);\r\n        }}\r\n        fieldType={selectedItem?.field}\r\n      />\r\n      <StyledHRPropColour\r\n        margin=\"0\"\r\n        border={\r\n          parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n            ? `0.25px solid ${ColorPalette.PrimaryButtonBlue}`\r\n            : `0.25px solid white`\r\n        }\r\n      ></StyledHRPropColour>\r\n      <BackgroundColorDiv\r\n        width={isHeader === true ? \"94.5vw\" : \"92.5vw\"}\r\n        padding={isHeader === true ? \"0px\" : parentid === 0 ? \"8px\" : \"8px\"}\r\n        bgcolor={\r\n          parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n            ? ColorPalette.LightGreen\r\n            : ColorPalette.White\r\n        }\r\n      >\r\n        {/* <StyledHRPropColour\r\n          border=\"0.5px solid white\"\r\n          mobiledisplay={\r\n            parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n              ? \"none\"\r\n              : itemHRDisplay\r\n          }\r\n        ></StyledHRPropColour> */}\r\n        <FlexRowCont100PercentSpaceBetween mobilewidth=\"100%\">\r\n        <FlexDivSpaceBetween textalign='left' width='94vw'>\r\n  {/* Item Name */}\r\n  {isHeader ? (\r\n    <FlexDiv>\r\n    <LeagueSpartanRegular\r\n      margin=\"0px\"\r\n      onClick={() => {\r\n        onToggleDisplay();\r\n        UpdateItemPropertyView(itemPropertyToggle);\r\n      }}\r\n    >\r\n      {header2}\r\n    </LeagueSpartanRegular>\r\n   \r\n      <FlexDiv>\r\n        {shouldDisplayPencil ? (\r\n          <>\r\n            <Icon30px20pxPointer\r\n              display=\"block\"\r\n              src=\"/Green Button.svg\"\r\n              onClick={ShowItemSelection}\r\n            />\r\n            <Icon30px20pxPointer\r\n              display=\"block\"\r\n              src=\"/Pencil.svg\"\r\n              onClick={() => {\r\n                if (header2 === \"Machines, Disposals, & Access\") {\r\n                  adjustAccess();\r\n                } else {\r\n                  EditTag();\r\n                }\r\n              }}\r\n            />\r\n          </>\r\n        ) : (\r\n          shouldDisplayGreenButton && (\r\n            <Icon30px20pxPointer\r\n              display=\"block\"\r\n              src=\"/Green Button.svg\"\r\n              onClick={ShowItemSelection}\r\n            />\r\n          )\r\n        )}\r\n      </FlexDiv>\r\n\r\n      <Icon30px20pxPointer\r\n            display={\r\n              isHeader === true &&\r\n              header2 !== \"General Materials\" &&\r\n              header2 !== \"Delivery\" &&\r\n              header2 !== \"Removals\" &&\r\n              header2 !== \"Access Area\" &&\r\n              header2 !== \"Tools/Machines\" &&\r\n              header2 !== \"Labour Breakdown\" &&\r\n              header2 !== \"Subtotal\"\r\n                ? \"block\"\r\n                : \"none\"\r\n            }\r\n            src=\"/Garbage_Icon.svg\"\r\n            onClick={() => {\r\n              DeleteTag();\r\n            }}\r\n          ></Icon30px20pxPointer>\r\n\r\n      </FlexDiv>\r\n  ) : (\r\n    <RegularText\r\n      maxwidth=\"63vw\"\r\n      mobilefontsize='12px'\r\n      fontweight='bold'\r\n      onClick={() => {\r\n        onToggleDisplay();\r\n        UpdateItemPropertyView(itemPropertyToggle);\r\n      }}\r\n    >\r\n      {header2}\r\n    </RegularText>\r\n  )}\r\n\r\n  <FlexDiv>\r\n  {\r\n  isHeader && header2 === 'Subtotal' ? (\r\n    <div>\r\n      {/* <StyledHRPropColour border=\"0.5px solid white\" /> */}\r\n      <LeagueSpartanTiny\r\n        fontsize={isHeader ? '18px' : '12px'}\r\n        margintop=\"auto\"\r\n        marginbottom=\"auto\"\r\n      >\r\n        {header8}\r\n      </LeagueSpartanTiny>\r\n      {/* <StyledHRPropColour border=\"0.5px solid white\" /> */}\r\n    </div>\r\n  ) : isHeader && header2 !== 'Subtotal' ? (\r\n  null\r\n  ) : (\r\n    <div>\r\n      {/* <StyledHRPropColour border=\"0.5px solid white\" /> */}\r\n      <LeagueSpartanTiny\r\n        fontsize={isHeader ? '18px' : '12px'}\r\n        margintop=\"auto\"\r\n        marginbottom=\"auto\"\r\n      >\r\n        {header8}\r\n      </LeagueSpartanTiny>\r\n      {/* <StyledHRPropColour border=\"0.5px solid white\" /> */}\r\n    </div>\r\n  )\r\n}\r\n\r\n  {isHeader === true && header2 == 'Subtotal' ? (\r\n    null ) : \r\n  <div style={{ display: determineDivDisplayValue() }}>\r\n    <Dropdown\r\n      currentPage=\"itemCard\"\r\n      addOns={showAddOnsSelection}\r\n      deleteItem={() => deleteItemFromEstimate(quoteItemObj.Id)}\r\n      changeTag={() => handleItemClick(quoteItemObj, \"Tag\")}\r\n    />\r\n   \r\n  </div>\r\n }\r\n\r\n \r\n  </FlexDiv>\r\n\r\n  \r\n</FlexDivSpaceBetween>\r\n\r\n        </FlexRowCont100PercentSpaceBetween>\r\n      \r\n        <TinyTextItalics\r\n          marginleft=\"-2px\"\r\n          margintop=\"0px\"\r\n          fontsize='10px'\r\n          onClick={() => {\r\n            handleItemClick(quoteItemObj, \"Notes\");\r\n          }}\r\n        >\r\n          {subheader2notes}\r\n        </TinyTextItalics>\r\n\r\n        <FlexRowCont100PercentSpaceBetween\r\n          onClick={() => {\r\n            UpdateItemPropertyView(itemPropertyToggle);\r\n            onToggleDisplay();\r\n          }}\r\n        >\r\n          <FlexDivFlexEnd\r\n          width='91vw'\r\n          >\r\n          <TinyHeaderDarkGrey\r\n            display={subheader2Display}\r\n            mobiledisplay=\"block\"\r\n            overflow={descriptionOverflow}\r\n            whitespace={descriptionWhiteSpace}\r\n          >\r\n            {header7}\r\n          </TinyHeaderDarkGrey>\r\n          {!isHeader ? (\r\n        <Icon15x15\r\n         padding=\"0px 0px 0px 0px\"\r\n          src={isOpen ? \"/uparrow.svg\" : \"/downarrow.svg\"}\r\n          // Toggle state on click\r\n        />\r\n      ) : null}\r\n          </FlexDivFlexEnd>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n\r\n        <StyledHRPropColour\r\n                width='100%'\r\n          display={itemHRDisplay}\r\n          mobiledisplay={itemHRDisplay}\r\n          border={`0.5px dashed ${ColorPalette.PrimaryGrey}`}\r\n        ></StyledHRPropColour>\r\n        <StyledHRPropColour\r\n          display={itemHRDisplay}\r\n          mobiledisplay={itemHRDisplay}\r\n          border={\r\n            parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n              ? `0.25px solid ${ColorPalette.LightGreen}`\r\n              : `0.25px solid white`\r\n          }\r\n        ></StyledHRPropColour>\r\n\r\n        <FlexRowCont100PercentSpaceBetween display={itemPropertyDisplay}>\r\n          <FixedItemPropertyDiv\r\n            onClick={() => {\r\n              handleItemClick(quoteItemObj, \"Quantity\");\r\n            }}\r\n          >\r\n            <TinyHeaderDarkGrey>{header3title}</TinyHeaderDarkGrey>\r\n            <TinyHeaderDarkGrey mobiledisplay={header3Display}>\r\n              {header3}\r\n            </TinyHeaderDarkGrey>\r\n            <TextInputProp\r\n              inputmargintop=\"5px\"\r\n              mobilewidth=\"18.5vw\"\r\n              mobiledisplay={header3InputDisplay}\r\n              type=\"number\"\r\n              onBlur={(e) => {\r\n                OutputValue(e.target.valueAsNumber);\r\n              }}\r\n              defaultValue={quoteItemObj?.Quant}\r\n            ></TextInputProp>\r\n          </FixedItemPropertyDiv>\r\n\r\n          <FixedItemPropertyDiv>\r\n            <TinyHeaderDarkGrey>{header4title}</TinyHeaderDarkGrey>\r\n            <TinyHeaderDarkGrey>{header4}</TinyHeaderDarkGrey>\r\n          </FixedItemPropertyDiv>\r\n\r\n          <FixedItemPropertyDiv\r\n            onClick={() => {\r\n              handleItemClick(quoteItemObj, \"Removal Quantity\");\r\n              console.log(quoteItemObj);\r\n            }}\r\n          >\r\n            <TinyHeaderDarkGrey>{header5title}</TinyHeaderDarkGrey>\r\n            <TinyHeaderDarkGrey>{header5}</TinyHeaderDarkGrey>\r\n          </FixedItemPropertyDiv>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n\r\n        <StyledHRPropColour\r\n          display={itemHRDisplay}\r\n          mobiledisplay={itemHRDisplay}\r\n          border={\r\n            parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n              ? `0.25px solid ${ColorPalette.LightGreen}`\r\n              : `0.25px solid white`\r\n          }\r\n        ></StyledHRPropColour>\r\n\r\n        <FlexRowCont100PercentSpaceBetween display={itemPropertyDisplay}>\r\n          <FixedItemPropertyDiv>\r\n            <TinyHeaderDarkGrey></TinyHeaderDarkGrey>\r\n          </FixedItemPropertyDiv>\r\n\r\n          <FixedItemPropertyDiv>\r\n            <TinyHeaderDarkGrey>{header6title}</TinyHeaderDarkGrey>\r\n            <TinyHeaderDarkGrey>{header6}</TinyHeaderDarkGrey>\r\n          </FixedItemPropertyDiv>\r\n\r\n          <FixedItemPropertyDiv\r\n            onClick={() => {\r\n              if (!quoteItemObj?.ToolName) {\r\n                handleItemClick(quoteItemObj, \"Install\");\r\n              } else {\r\n                handleItemClick(quoteItemObj, \"Rental Hours\");\r\n              }\r\n            }}\r\n          >\r\n            <TinyHeaderDarkGrey>{header7title}</TinyHeaderDarkGrey>\r\n            <TinyHeaderDarkGrey>{header7}</TinyHeaderDarkGrey>\r\n          </FixedItemPropertyDiv>\r\n        </FlexRowCont100PercentSpaceBetween>\r\n      </BackgroundColorDiv>\r\n\r\n      {/* <StyledHRPropColour\r\n        border={`0.5px solid ${ColorPalette.LightBlack}`}\r\n        mobiledisplay={\r\n          parentid !== 0 && quoteItemObj?.CateType === CategoryTypes.Material\r\n            ? \"none\"\r\n            : \"block\"\r\n        }\r\n      ></StyledHRPropColour> */}\r\n\r\n      {DeliveryItems.map((o, i) => {\r\n        return (\r\n          <FlexColumnFullWidth\r\n            margin=\"0\"\r\n            key={i}\r\n            mobiledisplay={showRelatedItems ? \"block\" : \"none\"}\r\n          >\r\n            <FlexDiv>\r\n              <MobileEstimateQuoteItem\r\n                header1=\"Delete\"\r\n                key={i}\r\n                RefreshComponentState={() => {\r\n                  RefreshComponentState();\r\n                }}\r\n                deleteItemFromEstimate={() => {\r\n                  deleteItemFromEstimate(o.Id);\r\n                }}\r\n                quoteItemObj={o}\r\n                CategoryType={\"Delivery\"}\r\n                header2={o.Notes}\r\n                header3={o?.Quant + \" Load(s)\"}\r\n                header4={`$${o.BasePrice.toFixed(2).replace(\r\n                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                  \",\"\r\n                )}`}\r\n                header8={\r\n                  \"$\" + o.Price.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n              ></MobileEstimateQuoteItem>\r\n              <Dropdown\r\n                currentPage={\"deliveryItemCard\"}\r\n                deleteItem={() => {\r\n                  deleteItemFromEstimate(o.Id);\r\n                }}\r\n              ></Dropdown>\r\n            </FlexDiv>\r\n          </FlexColumnFullWidth>\r\n        );\r\n      })}\r\n\r\n      {RemovalItems.map((o, i) => {\r\n        return (\r\n          <FlexColumnFullWidth\r\n            margin=\"0\"\r\n            key={i}\r\n            mobiledisplay={showRelatedItems ? \"block\" : \"none\"}\r\n          >\r\n            <MobileEstimateQuoteItem\r\n              header1=\"Delete\"\r\n              quoteItemObj={o}\r\n              RefreshComponentState={() => {\r\n                RefreshComponentState();\r\n              }}\r\n              CategoryType={CategoryTypes.Removal}\r\n              deleteItemFromEstimate={() => {\r\n                deleteItemFromEstimate(o.Id);\r\n              }}\r\n              header2={o.Name}\r\n              header3={\r\n                typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                  ? o.Quant.toFixed(2) + \" \" + o.DisplayUnit\r\n                  : \"\"\r\n              }\r\n              header4={\r\n                \"$\" + ((o.Price + o.LaborSubtotal) / o?.Quant).toFixed(4)\r\n              }\r\n              // header5={\r\n              //   \"$\" +\r\n              //   (o.Price + o.LaborSubtotal)\r\n              //     .toFixed(2)\r\n              //     .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n              // }\r\n              header5={o.removalTime}\r\n              header8={\r\n                \"$\" +\r\n                (o.Price + o.LaborSubtotal)\r\n                  .toFixed(2)\r\n                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n              }\r\n              header3title={\"Quantity\"}\r\n              header4title={\"Removal Rate\"}\r\n            ></MobileEstimateQuoteItem>\r\n          </FlexColumnFullWidth>\r\n        );\r\n      })}\r\n\r\n      {quoteItemObj?.RelatedItems?.map((o, i) => {\r\n        if (o.CateType !== CategoryTypes.Labor) {\r\n          return (\r\n            <FlexColumnFullWidth\r\n              margin=\"0\"\r\n              //   display={\r\n              //     parentid !== 0 &&\r\n              //     quoteItemObj?.CateType === CategoryTypes.Material\r\n              //       ? \"block\"\r\n              //       : itemPropertyDisplay\r\n              //   }\r\n              mobiledisplay={showRelatedItems ? \"block\" : \"none\"}\r\n            >\r\n              <MobileEstimateQuoteItem\r\n                quoteItemObj={o}\r\n                key={i}\r\n                parentid={o.Parent_Id}\r\n                noChange={o.NoChange}\r\n                header2={o.Name}\r\n                RefreshComponentState={() => {\r\n                  RefreshComponentState();\r\n                }}\r\n                showRelatedItems={showRelatedItems}\r\n                subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                subheader2={o.Description == null ? \"\" : o.Description}\r\n                header3={\r\n                  typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                    ? o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                      \" \" +\r\n                      o.DisplayUnit\r\n                    : \"0.00 \" + o.DisplayUnit\r\n                }\r\n                header4={\r\n                  \"$\" +\r\n                  o.UnitPrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                header6={\r\n                  \"$\" +\r\n                  (o.LaborSubtotal / o?.Quant)\r\n                    .toFixed(2)\r\n                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                header7={decimalHoursToTimeString(o.LaborSubtotal / hourlyRate)}\r\n                header8={\r\n                  \"$\" +\r\n                  (\r\n                    parseFloat(o.Price.toFixed(2)) +\r\n                    parseFloat(o.LaborSubtotal.toFixed(2))\r\n                  )\r\n                    .toFixed(2)\r\n                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n                header3title=\"Quantity\"\r\n                header4title=\"Material Rate\"\r\n                header5title=\"Install Rate\"\r\n                header7title=\"Install Time\"\r\n              ></MobileEstimateQuoteItem>\r\n            </FlexColumnFullWidth>\r\n          );\r\n        } else {\r\n          return null;\r\n        }\r\n      })}\r\n\r\n      {/* <MobileEstimateQuoteItem header8={header8} isHeader={true}>\r\n      </MobileEstimateQuoteItem> */}\r\n    </div>\r\n  );\r\n};\r\n\r\nMobileEstimateQuoteItem.defaultProps = {\r\n  header1: \"\",\r\n  header2: \"\",\r\n  subheader2: \"\",\r\n  header3: \"\",\r\n  header3title: \"\",\r\n  header4: \"\",\r\n  header4title: \"\",\r\n  header4input: \"\",\r\n  header5: \"\",\r\n  header5title: \"\",\r\n  header6: \"\",\r\n  header6title: \"\",\r\n  header7: \"\",\r\n  header7title: \"\",\r\n  header8: \"\",\r\n  showRelatedItems: false,\r\n  bgColor: ColorPalette.White,\r\n  inputheaderposition: 0,\r\n  OutputValue: () => {},\r\n  RemoveItemFromLocalQuoteObject: () => {},\r\n  RefreshComponentState: () => {},\r\n  onToggleDisplay: () => {},\r\n  deleteItemFromEstimate: () => {},\r\n  adjustAccess: () => {},\r\n  hourlyRate: 0,\r\n  CategoryType: CategoryTypes.Material,\r\n  DeliveryItems: [],\r\n  RemovalItems: [],\r\n};\r\n\r\nexport default MobileEstimateQuoteItem;\r\n","import React, { useState } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\n\r\n// Modal overlay with a gentle backdrop\r\nconst ModalOverlay = styled.div`\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  background: rgba(0, 0, 0, 0.3);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  z-index: 1000;\r\n`;\r\n\r\n// Modal container with a clean white background, rounded corners, and subtle shadow\r\nconst ModalContainer = styled.div`\r\n  background: #fff;\r\n  width: 90%;\r\n  max-width: 400px;\r\n  padding: 12px;\r\n  border-radius: 12px;\r\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\r\n  position: relative;\r\n`;\r\n\r\n// Header styled for clarity and simplicity\r\nconst ModalHeader = styled.h2`\r\n  margin: 0;\r\n  margin-bottom: 20px;\r\n  text-align: center;\r\n  font-size: 22px;\r\n  font-weight: 600;\r\n  color: #333;\r\n`;\r\n\r\n// Date input styled with soft borders and rounded corners\r\nconst DateInput = styled.input`\r\n  width: 93%;\r\n  padding: 12px;\r\n  margin-bottom: 20px;\r\n  font-size: 16px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  outline: none;\r\n  &:focus {\r\n    border-color: #007aff;\r\n  }\r\n`;\r\n\r\n// Person row container for the label and input\r\nconst PersonRow = styled.div`\r\n  display: flex;\r\n  align-items: center;\r\n  margin-bottom: 16px;\r\n`;\r\n\r\n// Person label styled for a subtle, elegant look\r\nconst PersonLabel = styled.label`\r\n  flex: 0 0 90px;\r\n  font-size: 16px;\r\n  color: #555;\r\n`;\r\n\r\n// Person input with a minimal design and focus effect\r\nconst PersonInput = styled.input`\r\n  flex: 1;\r\n  padding: 12px;\r\n  font-size: 16px;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  outline: none;\r\n  &:focus {\r\n    border-color: #007aff;\r\n  }\r\n`;\r\n\r\n// Plus button styled as a circular icon with Apple's blue accent color\r\nconst AddButton = styled.button`\r\n  background: ${ColorPalette.PrimaryButtonBlue};\r\n  color: white;\r\n  border: none;\r\n  border-radius: 50%;\r\n  width: 40px;\r\n  height: 40px;\r\n  font-size: 24px;\r\n  cursor: pointer;\r\n  display: block;\r\n  margin: 0 auto 20px auto;\r\n  outline: none;\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n`;\r\n\r\n// Save button styled with a prominent blue background and clean typography\r\nconst SaveButton = styled.button`\r\n  background: ${ColorPalette.PrimaryButtonBlue};\r\n  color: white;\r\n  padding: 14px;\r\n  border: none;\r\n  border-radius: 8px;\r\n  width: 100%;\r\n  font-size: 16px;\r\n  cursor: pointer;\r\n  outline: none;\r\n  font-weight: 500;\r\n`;\r\n\r\n// Close button in the top-right corner with subtle hover effect\r\nconst CloseButton = styled.button`\r\n  position: absolute;\r\n  top: 16px;\r\n  right: 16px;\r\n  background: transparent;\r\n  border: none;\r\n  font-size: 28px;\r\n  color: #aaa;\r\n  cursor: pointer;\r\n  outline: none;\r\n  &:hover {\r\n    color: #555;\r\n  }\r\n`;\r\n\r\n// The CrewHourModal component now accepts an \"open\" prop to control visibility,\r\n// and passes the total crew hours to the parent when closing.\r\nconst CrewHourModal = ({ open, onClose, onSave }) => {\r\n  const [date, setDate] = useState(\"\");\r\n  const [personHours, setPersonHours] = useState([\"\"]);\r\n\r\n  // Helper to compute total crew hours\r\n  const calculateTotalHours = () =>\r\n    personHours.reduce((acc, hours) => acc + (parseFloat(hours) || 0), 0);\r\n\r\n  // Add a new input row for another crew member\r\n  const addPerson = () => {\r\n    setPersonHours([...personHours, \"\"]);\r\n  };\r\n\r\n  // Update hours for a specific crew member\r\n  const updatePersonHour = (index, value) => {\r\n    const updated = [...personHours];\r\n    updated[index] = value;\r\n    setPersonHours(updated);\r\n  };\r\n\r\n  // When Save is clicked, pass the date and hours data to onSave,\r\n  // then call onClose with the total crew hours.\r\n  const handleSave = () => {\r\n    if (onSave) {\r\n      onSave({ date, personHours });\r\n    }\r\n    const totalHours = calculateTotalHours();\r\n    if (onClose) {\r\n      onClose(totalHours);\r\n    }\r\n  };\r\n\r\n  // If not open, render nothing.\r\n  if (!open) return null;\r\n\r\n  // When the user clicks the close (X) button, also pass the total crew hours.\r\n  const handleClose = () => {\r\n    const totalHours = calculateTotalHours();\r\n    if (onClose) {\r\n      onClose(totalHours);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <ModalOverlay>\r\n      <ModalContainer>\r\n        <CloseButton onClick={handleClose}>&times;</CloseButton>\r\n        <ModalHeader>Crew Hour Time</ModalHeader>\r\n        <DateInput\r\n          type=\"date\"\r\n          value={date}\r\n          onChange={(e) => setDate(e.target.value)}\r\n        />\r\n        {personHours.map((hours, index) => (\r\n          <PersonRow key={index}>\r\n            <PersonLabel>{`Crew ${index + 1}`}</PersonLabel>\r\n            <PersonInput\r\n              type=\"number\"\r\n              placeholder=\"Enter hours\"\r\n              value={hours}\r\n              onChange={(e) => updatePersonHour(index, e.target.value)}\r\n            />\r\n          </PersonRow>\r\n        ))}\r\n        <AddButton onClick={addPerson}>+</AddButton>\r\n        <SaveButton onClick={handleSave}>Save</SaveButton>\r\n      </ModalContainer>\r\n    </ModalOverlay>\r\n  );\r\n};\r\n\r\nexport default CrewHourModal;\r\n","/* eslint-disable */\r\n\r\n//  React Imports ---------------------------------------\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport html2canvas from \"html2canvas\";\r\nimport axios from \"axios\";\r\nimport jsPDF from \"jspdf\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCaseById,\r\n  GetQuoteByIdForUserDisplay,\r\n  QuoteStatus,\r\n  ReverseQuant_QuoteItem,\r\n  SetQuoteTo_Buy,\r\n  SetQuoteTo_Buy_Install,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  decimalHoursToTimeString,\r\n  GetCurrentTime,\r\n  MakeStripePay,\r\n  SetHeaderAuthorization,\r\n} from \"../../API_Functions/Utility_Functions\";\r\n//  Imported Components ---------------------------------\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport TopMentProposalView from \"../../comps/MenuComps/TopMenuProposalView\";\r\nimport QuoteItem from \"../../comps/QuoteItem\";\r\nimport ImageViewWindow from \"../../comps/Windows/ImageEnlargementWindow\";\r\nimport RevisionInstructionsWindow from \"../../comps/Windows/RevisionInstructions\";\r\nimport DuplicateProposalWindow from \"../../comps/Windows/SaveRevisionGuide\";\r\nimport MobileQuoteItem from \"../../MobileComponents/MobileQuoteItem\";\r\nimport { Stored_Values } from \"../../Stored_Values\";\r\nimport { CaseStatus } from \"../../StylesheetComps/CaseStatus\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FixedIconToTop,\r\n  RegularResponsiveButton,\r\n} from \"../../StylesheetComps/Components\";\r\n// Imported Styled Components ---------------------------\r\nimport { GetTaxesForMetro } from \"../../API_Functions/Store_Functions\";\r\nimport {\r\n  AutoSizeOverflowY,\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnFullWidth,\r\n  FlexDiv,\r\n  FlexRowCont,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContAutox100PercentMobileColumn,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFlexStartMobileColumn,\r\n  FlexRowContFullWidth,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Cont, ContentContQuote } from \"../../StylesheetComps/Projects\";\r\nimport {\r\n  LeagueSpartanLarge,\r\n  LeagueSpartanRegular,\r\n  StyledHRGreenBreakThick,\r\n  StyledHRPropColour,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport QuoteItemTimesheet from \"../../comps/QuoteItemTimesheet\";\r\nimport MobileQuoteItemTimesheet from \"../../MobileComponents/MobileQuoteItemTimesheet\";\r\nimport { LinearProgress } from \"@material-ui/core\";\r\nimport { ProgressBar, ProgressBarWidth } from \"../../StylesheetComps/LandscapeForm\";\r\nimport TagProgressTracker from \"../../comps/TagProgressBar\";\r\nimport  MobileEstimateQuoteItem  from '../../MobileComponents/MobileEstimateQuoteItem'\r\nimport QuoteItemEstimator from \"../../comps/QuoteItemEstimator\";\r\nimport CrewHourModal from \"../../comps/CrewHourModal\";\r\nimport { FlexDivSpaceBetween } from \"../../StylesheetComps/Div\";\r\n\r\nconst ViewProposalConstructionView = () => {\r\n  const history = useHistory();\r\n  const params = useParams();\r\n  var MaterialSum = 0;\r\n  var InstallSum = 0;\r\n  var TotalSum = 0;\r\n  var materialSub = 0;\r\n  var installSub = 0;\r\n\r\n  const [Quote, setProposal] = useState({});\r\n\r\n  const [supplyTotal, setSupplyTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n\r\n  const [installTotal, setInstallTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n\r\n  const GreenBorderConst = \"4px solid \" + ColorPalette.PrimaryButtonBlue;\r\n\r\n  // Material / Install Header Display Const\r\n\r\n  const [laborHeader, setLaborHeader] = useState(\"none\");\r\n  const [toolsmachinesHeader, setToolsMachinesHeader] = useState(\"none\");\r\n  const [removalHeader, setRemovalHeader] = useState(\"none\");\r\n  const [accessDisplay, setAccessDisplay] = useState(\"none\");\r\n  const [generalMaterialsHeader, setGeneralMaterialsHeader] = useState(\"none\");\r\n  const [deliveryHeader, setDeliveryHeader] = useState(\"none\");\r\n\r\n  //Revision Instruction Window\r\n\r\n  const [revisionInstructionDisplay, setRevisionInstructionDisplay] =\r\n    useState(false);\r\n\r\n  const [curTime, setCurTime] = useState(\"\");\r\n  // Image Gallery Preview\r\n\r\n  const [imagePreviewUrl, setImagePreviewUrl] = useState(\"\");\r\n  const [imageGalleryDisplay, setImageGalleryDisplay] = useState(false);\r\n\r\n  // Accept / Decline Button Display\r\n\r\n  const [revisionAcceptDisplay, setRevisionAcceptDisplay] = useState(\"none\");\r\n  const [revisionDeclineDisplay, setRevisionDeclineDisplay] = useState(\"none\");\r\n\r\n  // Accept / Decline Revision Window Display Boolean\r\n\r\n  const [declineRevisionWindowDisplay, setDeclineRevisionWindowDisplay] =\r\n    useState(false);\r\n  const [acceptRevisionWindowDisplay, setAcceptRevisionWindowDisplay] =\r\n    useState(false);\r\n\r\n  const [deleteState, setDeleteState] = useState(false);\r\n\r\n  // Supply / Supply + Install Box Border\r\n\r\n  const [supplyOnly, setSupplyOnly] = useState(\"\");\r\n  const [supplyInstall, setSupplyInstall] = useState(\r\n    \"4px solid \" + ColorPalette.PrimaryButtonBlue\r\n  );\r\n\r\n  // Project Subtotal Const\r\n  const [projectSummarySubtotal, setProjectSummarySubtotal] = useState(0);\r\n  const [projectSubtotal, setProjectSubtotal] = useState(0);\r\n\r\n  // Project Deposit Const\r\n\r\n  const [deposit, setDeposit] = useState(0);\r\n  const [showDepositButton, setShowDepositButton] = useState(\"block\");\r\n  // Project Grand Total Const\r\n\r\n  const [projectGrandTotal, setProjectGrandTotal] = useState(0);\r\n\r\n  // Project Case Number\r\n\r\n  const [projectCaseNumber, setProjectCaseNumber] = useState(0);\r\n\r\n  // Proposal Comments Array\r\n\r\n  const [proposalComments, setProposalComments] = useState([]);\r\n\r\n  // Section Open / Close Toggle Booleans\r\n\r\n  const [overviewToggle, setOverviewToggle] = useState(true);\r\n  const [supplyEstimateToggle, setSupplyEstimateToggle] = useState(false);\r\n  const [installEstimateToggle, setInstallEstimateToggle] = useState(false);\r\n  const [commentsToggle, setCommentsToggle] = useState(false);\r\n\r\n  //Section Display + Arrow SRC\r\n\r\n  const [proposalOverviewDisplay, setProposalOverviewDisplay] =\r\n    useState(\"block\");\r\n  const [projectOverviewArrow, setProjectOverviewArrow] =\r\n    useState(\"/downarrow.svg\");\r\n\r\n  const [installEstimateDisplay, setInstallEstimateDisplay] = useState(\"block\");\r\n  const [installEstimateArrow, setInstallEstimateArrow] =\r\n    useState(\"/uparrow.svg\");\r\n\r\n  const [laborDetailView, setLaborDetailView] = useState(\"none\");\r\n  const [showGenerateInovice, setShowGenerateInvoice] = useState(\"none\");\r\n  const [laborDetailToggleView, setLaborDetailToggleView] = useState(\"none\");\r\n  const [laborDetailToggle, setLaborDetailToggle] = useState(false);\r\n  const [laborDetailArrow, setLaborDetailArrow] = useState(\"/downarrow.svg\");\r\n\r\n  const [proposalCommentsDisplay, setProposalCommentsDisplay] =\r\n    useState(\"none\");\r\n  const [proposalCommentsArrow, setProposalCommentsArrow] =\r\n    useState(\"/uparrow.svg\");\r\n  const [discardButtonDisplay, setDiscardButtonDisplay] = useState(\"none\");\r\n  const [makeRevisionsButtonDisplay, setMakeRevisionsButtonDisplay] =\r\n    useState(\"block\");\r\n  const [saveRevisionsButtonDisplay, setSaveRevisionsButtonDisplay] =\r\n    useState(\"none\");\r\n\r\n  const [cloneProposalButtonDisplay, setCloneProposalButtonDisplay] =\r\n    useState(\"none\");\r\n  const [cloneProposalWindowDisplay, setCloneProposalWindowDisplay] =\r\n    useState(false);\r\n\r\n  const [installSubtotalDisplay, setInstallSubtotalDisplay] = useState(\"flex\");\r\n\r\n  const [hideProjectConfirmationDisplay, setHideProjectConfirmationDisplay] =\r\n    useState(\"block\");\r\n\r\n  // Save Revision Window Display\r\n\r\n  const [saveRevisionWindowDisplay, setSaveRevisionWindowDisplay] =\r\n    useState(false);\r\n\r\n  const [headerInputShown, setHeaderInputShown] = useState(0);\r\n\r\n  const [supplyTotalOpacity, setSupplyTotalOpacity] = useState(\"100%\");\r\n  const [installTotalOpacity, setInstallTotalOpacity] = useState(\"100%\");\r\n\r\n  const [revisionText, setRevisionText] = useState(\"\");\r\n\r\n  // Boolean if Homeowner Agrees to Terms\r\n\r\n  const [userAgreementStatus, setUserAgreementStatus] = useState(false);\r\n\r\n  const [projectName, setProjectName] = useState(\"\");\r\n  const [estimateName, setEstimateName] = useState(\"\");\r\n  const [invoicefileMaterial, setInvoicefileMaterial] = useState(\r\n    \"invoice_material.pdf\"\r\n  );\r\n  const [invoicefileInstall, setInvoicefileInstall] = useState(\r\n    \"invoice_install.pdf\"\r\n  );\r\n  // Proceed to Deposit Button Background Color\r\n\r\n  const [DepositBGColor, setDepositBGColor] = useState(\r\n    ColorPalette.PrimaryGrey\r\n  );\r\n\r\n  // 'Please Agree to our Terms' error text\r\n\r\n  const [errorAgreementText, setErrorAgreementText] = useState(\"\");\r\n\r\n  const [supplyOnlySelected, setSupplyOnlySelected] = useState(false);\r\n\r\n  const [commentText, setCommentText] = useState(\"\");\r\n\r\n  const [labourBreakdownDisplay, setShowLabourBreakdown] = useState(\"none\");\r\n\r\n  const [showRelated, setShowRelated] = useState(false);\r\n\r\n  const [storeTaxes, setStoreTaxes] = useState(false);\r\n\r\n  const scrollToOverview = document.getElementById(\"overview\");\r\n  const scrollToSupply = document.getElementById(\"supply\");\r\n  const scrollToInstall = document.getElementById(\"install\");\r\n  const scrollToDesigns = document.getElementById(\"designs\");\r\n  const scrollToComments = document.getElementById(\"comments\");\r\n  const scrollToConfirm = document.getElementById(\"confirmation\");\r\n  const [caseStatus, setCaseStatus] = useState(0);\r\n\r\n  const [deliveryTotal, setDeliveryTotal] = useState(0);\r\n  const [accessTotal, setAccessTotal] = useState(0);\r\n\r\n  const [homeownerName, setHomeownerName] = useState(\"\");\r\n\r\n  const [sendButtonDisplay, setSendButtonDisplay] = useState(\"none\");\r\n\r\n  const [submittingLoadingIcon, setSubmittingLoadingIcon] = useState(false);\r\n\r\n  const materialOnlyRadioReference = useRef(null);\r\n  const materialAndInstallRadioReference = useRef(null);\r\n  const buttonRef = React.useRef(null);\r\n\r\n  const [totalHoursByProduct, setTotalHoursByProduct] = useState({});\r\n  const [totalRemovalsByItem, setTotalRemovalsByItem] = useState({});\r\n  let noTagTimeSubtotal = 0;\r\n  let noTagInstallSubtotal = 0;\r\n  let removalTimeSubtotal = 0;\r\n  let removalPriceSubtotal = 0;\r\n  let accessAreaPriceSubtotal = 0;\r\n  let toolsPriceSubtotal = 0;\r\n  let deliveryPriceSubtotal = 0;\r\n\r\n  var [workEntries, setWorkEntries] = useState({});\r\n\r\n  const [crewHourModalOpen, setCrewHourModalOpen] = useState(false);\r\n  const [crewHourTotal, setCrewHourTotal] = useState(0);\r\n\r\n  const fetchWorkEntries = async (caseId, quoteId) => {\r\n    try {\r\n      const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/work_entries?project_number=eq.${caseId}&estimate_number=eq.${quoteId}`;\r\n      const response = await fetch(url, {\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY\r\n        }\r\n      });\r\n      if (!response.ok) {\r\n        throw new Error(\"Failed to fetch work entries\");\r\n      }\r\n      const data = await response.json();\r\n      // Build a mapping using the item's id (the work entry's item_id field)\r\n      const workEntryMap = {};\r\n      data.forEach((entry) => {\r\n        // entry.item_id is the item id, which should match o.id when rendering each item.\r\n        workEntryMap[entry.item_id] = entry;\r\n      });\r\n      return workEntryMap;\r\n    } catch (error) {\r\n      console.error(\"Error fetching work entries:\", error);\r\n      return {};\r\n    }\r\n  };\r\n  \r\n\r\n  const DisplayImageInGallery = async (url) => {\r\n    if (url !== \"\" && url !== undefined && url !== null) {\r\n      setImagePreviewUrl(url);\r\n      setImageGalleryDisplay(true);\r\n      document.body.style.overflow = \"hidden\";\r\n    }\r\n  };\r\n\r\n  const DisplayProposalOverview = async (toggle) => {\r\n    if (toggle === true) {\r\n      setProjectOverviewArrow(\"/uparrow.svg\");\r\n      setProposalOverviewDisplay(\"none\");\r\n      setOverviewToggle(false);\r\n    } else {\r\n      setProjectOverviewArrow(\"/downarrow.svg\");\r\n      setProposalOverviewDisplay(\"flex\");\r\n      setOverviewToggle(true);\r\n    }\r\n  };\r\n\r\n  const DisplayLaborBreakdown = async (toggle) => {\r\n    if (toggle === true) {\r\n      setLaborDetailArrow(\"/downarrow.svg\");\r\n      setLaborDetailToggleView(\"none\");\r\n      setLaborDetailToggle(false);\r\n    } else {\r\n      setLaborDetailToggle(true);\r\n      setLaborDetailArrow(\"/uparrow.svg\");\r\n      setLaborDetailToggleView(\"flex\");\r\n    }\r\n  };\r\n\r\n  const [projectLength, setProjectLength] = useState(0);\r\n\r\n  let total = 0;\r\n\r\n  useEffect(() => {\r\n    setProjectLength(total);\r\n  }, [total, Quote?.Labor?.Items]);\r\n\r\n  // const ScrollToBottom = () => {\r\n  //   window.scrollTo(0, document.body.scrollHeight);\r\n  // };\r\n\r\n  const GetProjectInformation = async (caseid) => {\r\n    const data = await GetCaseById(caseid);\r\n    const caseData = data?.Case;\r\n\r\n    if (caseData) {\r\n      setHomeownerName(caseData.Name ?? \"\");\r\n      setProjectName(caseData.Tittle ?? \"\");\r\n      setProjectCaseNumber(caseData.CaseNumber ?? 0);\r\n\r\n      if (caseData.Street && caseData.City) {\r\n        const ext = `${caseData.Street}-${caseData.City}`;\r\n        setInvoicefileInstall(`invoice_install_${ext}.pdf`);\r\n        setInvoicefileMaterial(`invoice_material_${ext}.pdf`);\r\n      }\r\n\r\n      const status = caseData.CaseStatus;\r\n      const hideStatuses = [\r\n        CaseStatus.Closed,\r\n        CaseStatus.Canceled,\r\n        CaseStatus.CancelRequested,\r\n        CaseStatus.Drafted,\r\n      ];\r\n      if (hideStatuses.includes(status)) {\r\n        setMakeRevisionsButtonDisplay(\"none\");\r\n      }\r\n\r\n      setCaseStatus(status);\r\n    }\r\n  };\r\n\r\n  const DisplayDepositButton = async () => {\r\n    if (caseStatus === CaseStatus.Construction) {\r\n      setShowDepositButton(\"none\");\r\n    } else setShowDepositButton(\"block\");\r\n  };\r\n\r\n  const [estimateGST, setEstimateGST] = useState(0);\r\n  const [estimatePST, setEstimatePST] = useState(0);\r\n  const [laborNamesByProduct, setLaborNamesByProduct] = useState({});\r\n\r\n  const [completedTagIds, setCompletedTagIds] = useState([]);\r\n  const [completedTagNames, setCompletedTagNames] = useState([]);\r\n  const [tagProgress, setTagProgress] = useState(0);\r\n\r\n  const GetProposalInformation = async (quoteid) => {\r\n    // Get the proposal data first.\r\n    const proposalData = await GetQuoteByIdForUserDisplay(quoteid);\r\n    let quote = null;\r\n    if (proposalData !== null) {\r\n      if (proposalData.quote !== null) {\r\n        quote = proposalData.quote;\r\n        setProposal(quote);\r\n        setDeliveryTotal(\r\n          quote?.Delivery?.Tools?.reduce(\r\n            (accumulator, tool) => accumulator + tool.Price,\r\n            0\r\n          )\r\n        );\r\n        setAccessTotal(\r\n          quote?.AccessArea?.Items?.reduce(\r\n            (accumulator, items) => accumulator + items.Price,\r\n            0\r\n          )\r\n        );\r\n        UpdateUIBasedOnStatus(quote);\r\n        supplyTotal.Subtotal = (\r\n          quote?.Material?.Total?.Subtotal +\r\n          quote?.Delivery?.Total?.Subtotal\r\n        ).toFixed(2);\r\n        installTotal.Subtotal =\r\n          quote?.Labor?.Total?.Subtotal > Stored_Values.MIN_LABOR\r\n            ? (\r\n                quote?.Labor?.Total?.Subtotal +\r\n                quote?.Tool?.Total?.Subtotal +\r\n                quote?.Removal?.Total?.Subtotal +\r\n                quote?.AccessArea?.Total?.Subtotal\r\n              ).toFixed(2)\r\n            : (\r\n                Stored_Values?.MIN_LABOR +\r\n                quote?.Tool?.Total?.Subtotal +\r\n                quote?.Removal?.Total?.Subtotal +\r\n                quote?.AccessArea?.Total?.Subtotal\r\n              ).toFixed(2);\r\n        var subtotal =\r\n          Number(supplyTotal.Subtotal) + Number(installTotal.Subtotal);\r\n        setProjectSubtotal(\r\n          subtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n        );\r\n        if (quote.Tittle !== null && quote.Tittle !== undefined) {\r\n          setEstimateName(quote.Tittle);\r\n        }\r\n        var storeTaxArray = await GetTaxesForMetro(params.Id);\r\n        setStoreTaxes(storeTaxArray);\r\n        let gstTax = 0;\r\n        const taxitems = [\r\n          {\r\n            type: \"Material\",\r\n            subtotal: parseFloat(quote?.Material?.Total?.Subtotal),\r\n          },\r\n          {\r\n            type: \"Delivery\",\r\n            subtotal: parseFloat(quote?.Delivery?.Total?.Subtotal),\r\n          },\r\n          {\r\n            type: \"Labor\",\r\n            subtotal: parseFloat(\r\n              quote?.Labor?.Total?.Subtotal < Stored_Values.MIN_LABOR\r\n                ? Stored_Values.MIN_LABOR\r\n                : quote?.Labor?.Total?.Subtotal\r\n            ),\r\n          },\r\n          {\r\n            type: \"Removal\",\r\n            subtotal: parseFloat(quote?.Removal?.Total?.Subtotal),\r\n          },\r\n          {\r\n            type: \"AccessArea\",\r\n            subtotal: parseFloat(quote?.AccessArea?.Total?.Subtotal),\r\n          },\r\n          {\r\n            type: \"Tool\",\r\n            subtotal: parseFloat(quote?.Tool?.Total?.Subtotal),\r\n          },\r\n        ];\r\n    \r\n        const gst = storeTaxArray.find((tax) => tax.TaxCode === \"Gst\");\r\n    \r\n        if (gst) {\r\n          taxitems.forEach((item) => {\r\n            const { subtotal } = item;\r\n            gstTax += (gst.Rate / 100) * subtotal;\r\n          });\r\n        }\r\n        setEstimateGST(gstTax.toFixed(2));\r\n        setProjectGrandTotal(\r\n          Number(gstTax.toFixed(2)) + Number(subtotal.toFixed(2))\r\n        );\r\n        setDeposit(\r\n          (Number(gstTax.toFixed(2)) + Number(subtotal.toFixed(2))) * 0.1\r\n        );\r\n    \r\n        computeTotalHours(quote.Material.Items, quote.Labor.Items);\r\n        computeRemovalsTotal(quote.Removal.Items, quote.Labor.Items);\r\n      }\r\n    }\r\n    \r\n    const entries = await fetchWorkEntries(params.caseId, params.quoteId);\r\n    setWorkEntries(entries);\r\n    \r\n    try {\r\n      // Construct the Supabase REST URL to look for an existing record.\r\n      // Now we select both completed_tag_ids and completed_tag_names.\r\n      const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/project_completion_status\r\n        ?select=completed_tag_ids,completed_tag_names\r\n        &project_number=eq.${params.caseId}\r\n        &estimate_number=eq.${params.quoteId}\r\n        &order=created_at.desc\r\n        &limit=1`;\r\n      const finalUrl = url.replace(/\\s+/g, \"\");\r\n    \r\n      const response = await fetch(finalUrl, {\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY,\r\n        },\r\n      });\r\n    \r\n      if (!response.ok) {\r\n        throw new Error(\r\n          `Failed to fetch: ${response.status} ${response.statusText}`\r\n        );\r\n      }\r\n    \r\n      // Rename the variable to avoid shadowing the proposalData.\r\n      const completionData = await response.json();\r\n    \r\n      if (completionData && completionData.length > 0) {\r\n        // Record found: use the fetched completed_tag_ids and completed_tag_names.\r\n        const { completed_tag_ids, completed_tag_names } = completionData[0];\r\n        setCompletedTagIds(completed_tag_ids || []);\r\n        setCompletedTagNames(completed_tag_names || []);\r\n      } else {\r\n        // No record found: create one by mapping over the Tags from data.quote.\r\n        // Since Quote.Tags is undefined here, we access it from the quote variable.\r\n        const incomplete_tag_ids =\r\n          quote && quote.Tags ? quote.Tags.map((tag) => tag.Id) : [];\r\n        const incomplete_tag_names =\r\n          quote && quote.Tags ? quote.Tags.map((tag) => tag.TagName) : [];\r\n    \r\n        const newRow = {\r\n          project_number: params.caseId,\r\n          estimate_number: params.quoteId,\r\n          incomplete_tag_ids,\r\n          incomplete_tag_names,\r\n        };\r\n    \r\n        const createResponse = await fetch(\r\n          \"https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/project_completion_status\",\r\n          {\r\n            method: \"POST\",\r\n            headers: {\r\n              \"Content-Type\": \"application/json\",\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n              Prefer: \"return=representation\",\r\n            },\r\n            body: JSON.stringify(newRow),\r\n          }\r\n        );\r\n    \r\n        if (!createResponse.ok) {\r\n          throw new Error(\r\n            `Failed to create new record: ${createResponse.status} ${createResponse.statusText}`\r\n          );\r\n        }\r\n    \r\n        const createdData = await createResponse.json();\r\n        // Since the record was just created, we assume no completed tags yet.\r\n        setCompletedTagIds([]);\r\n        setCompletedTagNames([]);\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error fetching or creating project_completion_status:\", error);\r\n    }\r\n  };\r\n\r\n  // useEffect(() => {\r\n  //   if (Quote && Quote.Tags) {\r\n  //     const totalTags = Quote.Tags.length;\r\n  //     const completedCount = completedTagIds.length;\r\n  //     const progress = totalTags > 0 ? (completedCount / totalTags) * 100 : 0;\r\n  //     setTagProgress(progress);\r\n  //   }\r\n  // }, [Quote, completedTagIds]);  \r\n\r\n  function computeTotalHours(productsArray, labourArray) {\r\n    const totalHoursByProduct = {};\r\n    const laborNamesByProduct = {};\r\n\r\n    productsArray.forEach((product, productIndex) => {\r\n      if (product.Parent_Id === 0) {\r\n        let totalHours = 0;\r\n\r\n        labourArray.forEach((labour) => {\r\n          if (\r\n            (labour.Notes === `Install ${product.Name}` ||\r\n              labour.Notes === product.Name) &&\r\n            labour.Parent_Id === product.Id\r\n          ) {\r\n            totalHours += labour.Quant;\r\n            if (!laborNamesByProduct[`${product.Name}_${productIndex}`]) {\r\n              laborNamesByProduct[`${product.Name}_${productIndex}`] =\r\n                new Set();\r\n            }\r\n            laborNamesByProduct[`${product.Name}_${productIndex}`].add(\r\n              labour.Name\r\n            );\r\n          }\r\n        });\r\n\r\n        productsArray.forEach((relatedProduct) => {\r\n          if (relatedProduct.Parent_Id === product.Id) {\r\n            labourArray.forEach((labour) => {\r\n              if (\r\n                (labour.Notes === `Install ${relatedProduct.Name}` ||\r\n                  labour.Notes === relatedProduct.Name) &&\r\n                labour.Parent_Id === relatedProduct.Id\r\n              ) {\r\n                totalHours += labour.Quant;\r\n              }\r\n            });\r\n          }\r\n        });\r\n\r\n        totalHoursByProduct[`${product.Name}_${productIndex}`] = totalHours;\r\n      }\r\n    });\r\n\r\n    setTotalHoursByProduct(totalHoursByProduct);\r\n    setLaborNamesByProduct(laborNamesByProduct);\r\n  }\r\n\r\n  function computeRemovalsTotal(removalsArray, labourArray) {\r\n    const totalRemovalsByItem = {};\r\n    const assignedLabours = new Set();\r\n\r\n    removalsArray.forEach((removal, removalIndex) => {\r\n      let totalRemovals = 0;\r\n\r\n      labourArray.forEach((labour) => {\r\n        if (assignedLabours.has(labour.Id)) return; // Skip already assigned labours\r\n\r\n        const removalMatch = removalsArray.reduce((closest, r) => {\r\n          if (\r\n            labour.Notes.includes(\"Removals\") &&\r\n            labour.Notes.split(\"-\").some((part) => r.Name.includes(part.trim()))\r\n          ) {\r\n            const currentDiff = Math.abs(\r\n              r.Price + r.LaborSubtotal - labour.Price\r\n            );\r\n            const closestDiff = closest\r\n              ? Math.abs(closest.Price + closest.LaborSubtotal - labour.Price)\r\n              : Infinity;\r\n\r\n            return currentDiff < closestDiff ? r : closest;\r\n          }\r\n          return closest;\r\n        }, null);\r\n\r\n        if (\r\n          removalMatch &&\r\n          (removalMatch.Id === removal.Id ||\r\n            removalMatch.Parent_Id === removal.Id)\r\n        ) {\r\n          totalRemovals += labour.Quant;\r\n          assignedLabours.add(labour.Id); // Mark the labour as assigned\r\n        }\r\n      });\r\n\r\n      totalRemovalsByItem[`${removal.Name}_${removalIndex}`] = totalRemovals;\r\n    });\r\n\r\n    setTotalRemovalsByItem(totalRemovalsByItem);\r\n  }\r\n\r\n  const UpdateUIBasedOnStatus = async (quoteobj) => {\r\n    let userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    if (\r\n      quoteobj.QuoteStatus === QuoteStatus.RevisionRequested &&\r\n      userinfo.Role === UserRole.Manager\r\n    ) {\r\n      setRevisionDeclineDisplay(\"block\");\r\n      setRevisionAcceptDisplay(\"block\");\r\n    }\r\n    if (\r\n      userinfo.Role === UserRole.Manager ||\r\n      userinfo.Role === UserRole.Estimator\r\n    ) {\r\n      setCloneProposalButtonDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const ChangeUIToMakeRevisions = async () => {\r\n    setHeaderInputShown(3);\r\n    setMakeRevisionsButtonDisplay(\"none\");\r\n    setDiscardButtonDisplay(\"block\");\r\n    setSaveRevisionsButtonDisplay(\"block\");\r\n  };\r\n\r\n  const UpdateQuoteItemQuantity = async (itemid, itemquantity) => {\r\n    var reverseQuantity = await ReverseQuant_QuoteItem(itemid, itemquantity);\r\n    Quote.Material.Items.find(function (o, i) {\r\n      if (o.Id === itemid) {\r\n        o.Quant = itemquantity;\r\n        o.Price = reverseQuantity * o.UnitPrice;\r\n        setSupplyTotalOpacity(\"40%\");\r\n        setInstallTotalOpacity(\"40%\");\r\n      }\r\n      return null;\r\n    });\r\n    //Change Delete State to force a rerender in React\r\n    setDeleteState(!deleteState);\r\n  };\r\n\r\n  const ValidateAgreement = async (supplyonly, caseid, quoteid) => {\r\n    if (supplyonly === true) {\r\n      var databuy = await SetQuoteTo_Buy(quoteid);\r\n      if (databuy !== null) {\r\n        PushToPayment(deposit.toFixed(2), caseid, quoteid);\r\n      } else setErrorAgreementText(\"Please try again!\");\r\n    } else {\r\n      var databuyinstall = await SetQuoteTo_Buy_Install(quoteid);\r\n      if (databuyinstall !== null) {\r\n        var depositSelect =\r\n          deposit < Stored_Values.MIN_DEPOSIT\r\n            ? Stored_Values.MIN_DEPOSIT\r\n            : deposit;\r\n        PushToPayment(depositSelect.toFixed(2), caseid, quoteid);\r\n      } else setErrorAgreementText(\"Please try again!\");\r\n    }\r\n    //PushToPayment(deposit.toFixed(2), caseid, quoteid)\r\n  };\r\n\r\n  const PushToPayment = async (amount, caseid, quoteid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data !== null) {\r\n      if (data.Case !== null) {\r\n        var token = axios.defaults.headers.common[\"Authorization\"];\r\n        if (token) {\r\n          var tokenRef = token.substring(6);\r\n        } else {\r\n          tokenRef = \"am9zaHRlc3QxMDU6QWExMjM0NTY3OCQ=\";\r\n        }\r\n        var name =\r\n          data.Case.Name +\r\n          \", \" +\r\n          data.Case.Street +\r\n          \",\" +\r\n          data.Case.City +\r\n          \" on Project # \" +\r\n          data.Case.CaseNumber;\r\n        var transactionid = data.Case.CaseNumber;\r\n        var paymenturl = await MakeStripePay(\r\n          amount,\r\n          \"CAD\",\r\n          name,\r\n          transactionid,\r\n          quoteid,\r\n          data.Case.Store_Id,\r\n          tokenRef,\r\n          0\r\n        );\r\n        if (paymenturl !== null) {\r\n          window.open(paymenturl, \"_blank\");\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const SetCurrentTime = async () => {\r\n    var curtime = await GetCurrentTime();\r\n    setCurTime(curtime);\r\n  };\r\n\r\n  const ref = React.createRef();\r\n  const ref2 = React.createRef();\r\n  const options = {\r\n    orientation: \"portrait\",\r\n    unit: \"in\",\r\n    format: [12, 40],\r\n  };\r\n\r\n  var userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n  const SetQuoteDisplay = async (quote) => {\r\n    if (quote != null) {\r\n      if (\r\n        userinfo.Role === UserRole.Installer ||\r\n        userinfo.Role === UserRole.Manager ||\r\n        userinfo.Role === UserRole.Estimator\r\n      ) {\r\n        setLaborDetailView(\"block\");\r\n      }\r\n      if (\r\n        userinfo.Role === UserRole.Manager ||\r\n        userinfo.Role === UserRole.Estimator ||\r\n        userinfo.Role === UserRole.Accountant\r\n      ) {\r\n        setShowGenerateInvoice(\"block\");\r\n        setShowLabourBreakdown(\"flex\");\r\n      }\r\n\r\n      if (\r\n        quote.Material?.Items.filter(\r\n          (item) => item.Parent_Id === 0 && item.Tag_Id === 0\r\n        ).length > 0\r\n      )\r\n        setGeneralMaterialsHeader(\"flex\");\r\n\r\n      if (quote.Delivery?.Tools?.length > 0) setDeliveryHeader(\"flex\");\r\n\r\n      if (quote.Tool?.Tools?.length > 0) setToolsMachinesHeader(\"flex\");\r\n\r\n      if (quote.Removal?.Items?.length > 0) setRemovalHeader(\"flex\");\r\n\r\n      if (quote.AccessArea?.Items?.length > 0) setAccessDisplay(\"flex\");\r\n    }\r\n  };\r\n\r\n  const RouteToPrevious = async (role) => {\r\n    if (role == UserRole.User || role == UserRole.VIP) {\r\n      history.push(\r\n        \"/viewcaseuser/\" +\r\n          params.Id +\r\n          \"/\" +\r\n          params.storeId +\r\n          \"/\" +\r\n          params.caseId\r\n      );\r\n    } else if (params.lastrevision == 0) {\r\n      history.push(\r\n        \"/viewcase/\" + params.Id + \"/\" + params.storeId + \"/\" + params.caseId\r\n      );\r\n    } else {\r\n      history.push(\r\n        \"/viewcaseuser/\" +\r\n          params.Id +\r\n          \"/\" +\r\n          params.storeId +\r\n          \"/\" +\r\n          params.caseId\r\n      );\r\n    }\r\n  };\r\n\r\n  //Project Comment Files\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n  const [errorText, setErrorText] = useState(\"\");\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetProposalInformation(params.quoteId);\r\n    GetProjectInformation(params.caseId);\r\n    DisplayDepositButton();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (params.numberofquotes === 0) {\r\n      setMakeRevisionsButtonDisplay(\"none\");\r\n      setHideProjectConfirmationDisplay(\"none\");\r\n    }\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    SetCurrentTime();\r\n    SetQuoteDisplay(Quote);\r\n  }, [Quote]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  var observe;\r\n  if (window.attachEvent) {\r\n    observe = function (element, event, handler) {\r\n      element?.attachEvent(\"on\" + event, handler);\r\n    };\r\n  } else {\r\n    observe = function (element, event, handler) {\r\n      element?.addEventListener(event, handler, false);\r\n    };\r\n  }\r\n  function init() {\r\n    var text = document.getElementById(\"text\");\r\n    if (text !== null) {\r\n      function resize() {\r\n        text.style.height = \"auto\";\r\n        text.style.height = text.scrollHeight + \"px\";\r\n      }\r\n      /* 0-timeout to get the already changed text */\r\n      function delayedResize() {\r\n        window.setTimeout(resize, 0);\r\n      }\r\n      observe(text, \"change\", resize);\r\n      observe(text, \"cut\", delayedResize);\r\n      observe(text, \"paste\", delayedResize);\r\n      observe(text, \"drop\", delayedResize);\r\n      observe(text, \"keydown\", delayedResize);\r\n\r\n      resize();\r\n    }\r\n  }\r\n\r\n  const formattedDateTime = async () => {\r\n    const now = new Date();\r\n    const day = now.getDate();\r\n    const month = now.toLocaleString(\"default\", { month: \"short\" });\r\n    const year = now.getFullYear();\r\n    let hour = now.getHours();\r\n    const ampm = hour >= 12 ? \"PM\" : \"AM\";\r\n    hour = hour % 12;\r\n    hour = hour ? hour : 12;\r\n    const minute = now.getMinutes().toString().padStart(2, \"0\");\r\n    return `${day} ${month} ${year}, ${hour}:${minute} ${ampm}`;\r\n  };\r\n\r\n  const downloadPDF = async () => {\r\n    const timestamp = await formattedDateTime();\r\n    const input = document.getElementById(\"estimate\");\r\n\r\n    // const includeElement = document.getElementById('include-on-pdf');\r\n    // const originalDisplayStyle = includeElement.style.display;\r\n    // includeElement.style.display = 'block';\r\n\r\n    html2canvas(input, {\r\n      useCss: true,\r\n      scale: 1, // Reduce the size of the canvas\r\n      ignoreElements: (element) => {\r\n        return element.id === \"exclude-from-pdf\";\r\n      },\r\n    }).then((canvas) => {\r\n      // includeElement.style.display = originalDisplayStyle;\r\n\r\n      const imgData = canvas.toDataURL(\"image/jpeg\", 1); // Use JPEG with 50% quality\r\n      const pdf = new jsPDF(\"p\", \"mm\", \"a4\"); // set the PDF to A4 size\r\n      const pageWidth = pdf.internal.pageSize.getWidth();\r\n      const pageHeight = pdf.internal.pageSize.getHeight();\r\n      const imgProps = pdf.getImageProperties(imgData);\r\n      const pdfWidth = pageWidth;\r\n      const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;\r\n      let pdfPages = Math.ceil(pdfHeight / pageHeight);\r\n\r\n      for (let i = 0; i < pdfPages; i++) {\r\n        if (i !== 0) {\r\n          pdf.addPage();\r\n        }\r\n        pdf.addImage(imgData, \"PNG\", 0, -(i * pageHeight), pdfWidth, pdfHeight);\r\n      }\r\n\r\n      pdf.save(`${timestamp} ${estimateName} Construction View.pdf`);\r\n    });\r\n  };\r\n\r\n  useEffect(() => {\r\n    init();\r\n  }, [Quote.Notes]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (commentText.length > 0) {\r\n      setSendButtonDisplay(\"block\");\r\n    } else {\r\n      setSendButtonDisplay(\"none\");\r\n    }\r\n  }, [commentText]);\r\n\r\n  useEffect(() => {\r\n    if (previewImage !== \"\") {\r\n      setSendButtonDisplay(\"block\");\r\n    } else {\r\n      setSendButtonDisplay(\"none\");\r\n    }\r\n  }, [previewImage]);\r\n\r\n  if (Quote !== null && Quote !== undefined) {\r\n    if (Quote.Material !== null && Quote.Material !== undefined) {\r\n      /////////////////////////// MOBILE ->>>>>>>>>>>>>\r\n\r\n      if (window.$ISMOBILE === true) {\r\n        return (\r\n          <Cont>\r\n            <LeftCont>\r\n              <Menu />\r\n            </LeftCont>\r\n            <FlexColumn81vwLightGrey>\r\n              <TopMentProposalView\r\n                currentPage={\"constructionView\"}\r\n                mobilePageProp={`Construction View`}\r\n                pageProp={projectName}\r\n                estimateName={`${estimateName} Construction View`}\r\n                homeownerName={homeownerName}\r\n                projectsbottom={\"4px solid \" + ColorPalette.PrimaryButtonBlue}\r\n                scrollinfo={() => {\r\n                  scrollToOverview.scrollIntoView();\r\n                }}\r\n                scrollsupply={() => {\r\n                  scrollToSupply.scrollIntoView();\r\n                }}\r\n                scrollinstall={() => {\r\n                  scrollToInstall.scrollIntoView();\r\n                }}\r\n                scrolldesigns={() => {\r\n                  scrollToDesigns.scrollIntoView();\r\n                }}\r\n                scrollcomments={() => {\r\n                  scrollToComments.scrollIntoView();\r\n                }}\r\n                scrollconfirmation={() => {\r\n                  scrollToConfirm.scrollIntoView();\r\n                }}\r\n              />\r\n              <FlexRowContFlexStartMobileColumn\r\n                height=\"auto\"\r\n                display={\r\n                  Quote.QuoteStatus === QuoteStatus.RevisionRequested ? \"none\" : \"flex\"\r\n                }\r\n              />\r\n\r\n              <CrewHourModal \r\n              open={crewHourModalOpen} \r\n              onClose={(crewHourTotal)=>\r\n            {\r\n            setCrewHourModalOpen(false);\r\n            setCrewHourTotal(crewHourTotal) \r\n            console.log(crewHourTotal) \r\n            }}\r\n              \r\n              ></CrewHourModal>\r\n      \r\n              {/* Proposal Overview */}\r\n              <RevisionInstructionsWindow\r\n                open={revisionInstructionDisplay}\r\n                CloseWindow={() => setRevisionInstructionDisplay(false)}\r\n                StartRevising={() => {\r\n                  ChangeUIToMakeRevisions();\r\n                  setRevisionInstructionDisplay(false);\r\n                }}\r\n              />\r\n              <DuplicateProposalWindow\r\n                quoteObj={Quote}\r\n                onClose={() => setCloneProposalWindowDisplay(false)}\r\n                open={cloneProposalWindowDisplay}\r\n              />\r\n              <ImageViewWindow\r\n                open={imageGalleryDisplay}\r\n                imgurl={imagePreviewUrl}\r\n                onClose={() => {\r\n                  setImageGalleryDisplay(false);\r\n                  document.body.style.overflow = \"unset\";\r\n                }}\r\n              />\r\n      \r\n              <FlexRowContAutox100PercentMobileColumn alignitems=\"baseline\" margin=\"0\">\r\n                <ContentContQuote id=\"install\">\r\n              \r\n                  <LeagueSpartanRegular>{projectName}</LeagueSpartanRegular>\r\n\r\n<RegularResponsiveButton mobilewidth='90%' onClick={()=>{setCrewHourModalOpen(true)}} bgcolor='#51C159'>Add Total Crew Hours For Day</RegularResponsiveButton>\r\n\r\n\r\n                  <LeagueSpartanRegular>{estimateName} Project Status</LeagueSpartanRegular>\r\n\r\n                  <TagProgressTracker tags={Quote?.Tags} completedTagIds={completedTagIds}></TagProgressTracker>\r\n           \r\n                  <FlexColumnFullWidth display={installEstimateDisplay} height=\"auto\" ref={ref2}>\r\n                    <AutoSizeOverflowY>\r\n                      <StyledHRPropColour border=\"0.5px solid white\" />\r\n      \r\n                      {/* Process each Tag */}\r\n                      {Quote.Tags.map((t, j) => {\r\n                        // Reset sums if needed before processing each tag\r\n                        let materialInstallSubSum = 0;\r\n                        let materialTimeSum = 0;\r\n                        let removalInstallSubSum = 0;\r\n                        let removalTimeSum = 0;\r\n      \r\n                        // Render Tagged Material Items\r\n                        const materialItems = Quote.Material.Items.filter(\r\n                          (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                        ).map((o, i) => {\r\n                          const workEntry = workEntries[o.Id];\r\n                          const installSub = showRelated\r\n                            ? o.LaborSubtotal\r\n                            : o.LaborSubtotalWithRelatedItems;\r\n                          materialInstallSubSum += installSub;\r\n                          const originalIndex = Quote.Material.Items.findIndex(item => item.Id === o.Id);\r\n                          // (Compute hourlyRate as before…)\r\n                          const laborNames = laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n                            ? Array.from(laborNamesByProduct[`${o.Name}_${originalIndex}`]).join(\", \")\r\n                            : \"\";\r\n                          const laborName = laborNames ? laborNames.split(\", \")[0] : \"\";\r\n                          const laborItem = Quote.Labor.Items.find(item => item.Name === laborName);\r\n                          const hourlyRate = laborItem ? laborItem.UnitPrice : 154;\r\n      \r\n                          return (\r\n                            <MobileQuoteItemTimesheet\r\n                              workEntries={workEntries}                           \r\n                              key={`material-${i}`}\r\n                              noChange={o.NoChange}\r\n                              constructionView={true}\r\n                              hourlyRate={hourlyRate}\r\n                              showRelatedItems={showRelated}\r\n                              onClick={() => setShowRelated(!showRelated)}\r\n                              inputheaderposition={headerInputShown}\r\n                              OutputValue={(value) => UpdateQuoteItemQuantity(o.Id, value)}\r\n                              quoteItemObj={o}\r\n                              parentid={o.Parent_Id}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2notes={o.Notes ? o.Notes + \"\" : \"\"}\r\n                              subheader2={o.Description ? o.Description : \"\"}\r\n                              header3={`${o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")} ${o.DisplayUnit}`}\r\n                              header4={(installSub / hourlyRate)}\r\n                              header5={workEntry ? workEntry.quantity_used : null}\r\n                              header6={workEntry ? workEntry.time_taken : null}\r\n                              isCompleted={workEntry ? workEntry.is_completed : false}\r\n                              header8={\r\n                                \"$\" +\r\n                                installSub.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              }\r\n                              installSub={installSub}\r\n                              RefreshUserInterface={() => GetProposalInformation(params.quoteId)}\r\n                              crewHourTotal={crewHourTotal}\r\n                              onCrewHoursUsed={(delta) => {\r\n                                // Subtract the delta from the current crew hour total\r\n                                setCrewHourTotal(prevTotal => prevTotal - delta);\r\n                              }}\r\n                            \r\n                            />\r\n                          );\r\n                        });\r\n      \r\n                        // Render Tagged Removal Items\r\n                        const removalItems = Quote.Removal.Items.filter(\r\n                          (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                        ).map((o, i) => {\r\n                          const workEntry = workEntries[o.Id];\r\n                          const removalInstallSub = showRelated\r\n                            ? o.LaborSubtotal\r\n                            : o.LaborSubtotalWithRelatedItems;\r\n                          removalInstallSubSum += removalInstallSub;\r\n                          const originalIndex = Quote.Removal.Items.findIndex(item => item.Id === o.Id);\r\n                          const laborNames = laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n                            ? Array.from(laborNamesByProduct[`${o.Name}_${originalIndex}`]).join(\", \")\r\n                            : \"\";\r\n                          const laborName = laborNames ? laborNames.split(\", \")[0] : \"\";\r\n                          const laborItem = Quote.Labor.Items.find(item => item.Name === laborName);\r\n                          const hourlyRate = laborItem ? laborItem.UnitPrice : 154;\r\n                          return (\r\n                            <MobileQuoteItemTimesheet\r\n                            crewHourTotal={crewHourTotal}\r\n                            onCrewHoursUsed={(delta) => {\r\n                              // Subtract the delta from the current crew hour total\r\n                              setCrewHourTotal(prevTotal => prevTotal - delta);\r\n                            }}\r\n                          \r\n                              key={`removal-${i}`}\r\n                              noChange={o.NoChange}\r\n                              constructionView={true}\r\n                              showRelatedItems={showRelated}\r\n                              inputheaderposition={headerInputShown}\r\n                              OutputValue={(value) => UpdateQuoteItemQuantity(o.Id, value)}\r\n                              quoteItemObj={o}\r\n                              parentid={o.Parent_Id}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2notes={o.Notes ? o.Notes + \"\" : \"\"}\r\n                              subheader2={o.Description ? o.Description : \"\"}\r\n                              header3={`${o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")} ${o.DisplayUnit}`}\r\n                              header4={(removalInstallSub / hourlyRate)}\r\n                              header5={workEntry ? workEntry.quantity_used : null}\r\n                              header6={workEntry ? workEntry.time_taken : null}\r\n                              isCompleted={workEntry ? workEntry.is_completed : false}\r\n                              header8={\r\n                                \"$\" +\r\n                                removalInstallSub.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              }\r\n                              RefreshUserInterface={() => GetProposalInformation(params.quoteId)}\r\n                            />\r\n                          );\r\n                        });\r\n      \r\n                        // Combine material and removal items for the tag\r\n                        const combinedItems = [...materialItems, ...removalItems];\r\n                        const combinedInstallSub = materialInstallSubSum + removalInstallSubSum;\r\n                        // (Combined time sum can be computed similarly if needed)\r\n      \r\n                        return (\r\n                          <div key={t.Id}>\r\n                            {combinedItems.length > 0 && (\r\n                              <div>\r\n                                <MobileQuoteItemTimesheet\r\n                                  isHeader={true}\r\n                                  header2={t.TagName}\r\n                                  tagobj={t}\r\n                                  completedTagIds={completedTagIds}\r\n                                  completedTagNames={completedTagNames}\r\n                                  header3=\"Quantity\"\r\n                                  header6=\"Crew\"\r\n                                  header7=\"Time Allowed\"\r\n                                  header8=\"Install Subtotal\"\r\n                                  bgColor={ColorPalette.White}\r\n                                />\r\n                                <StyledHRGreenBreakThick />\r\n                              </div>\r\n                            )}\r\n                            {combinedItems}\r\n                            <br></br>\r\n                          </div>\r\n                        );\r\n                      })}\r\n      \r\n                      {/* General Materials Section */}\r\n                      <div>\r\n                        {generalMaterialsHeader === \"flex\" && <br />}\r\n                        {generalMaterialsHeader === \"flex\" && (\r\n                          <MobileQuoteItemTimesheet\r\n                            isHeader={true}\r\n                            header2=\"General Materials\"\r\n                            header3=\"Quantity\"\r\n                            header4=\"\"\r\n                            header5=\"\"\r\n                            header6=\"Crew\"\r\n                            header7=\"Time Allowed\"\r\n                            header8=\"Install Subtotal\"\r\n                            bgColor={ColorPalette.White}\r\n                          />\r\n                        )}\r\n                        <StyledHRGreenBreakThick display={generalMaterialsHeader} />\r\n                        {Quote.Material.Items.map((o, i) => {\r\n                          if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n                            // (You can compute totals and hourly rate as before)\r\n                            return (\r\n                              <MobileQuoteItemTimesheet\r\n                                key={i}\r\n                                showRelatedItems={showRelated}\r\n                                constructionView={true}\r\n                                onClick={() => setShowRelated(!showRelated)}\r\n                                quoteItemObj={o}\r\n                                inputheaderposition={headerInputShown}\r\n                                OutputValue={(value) => UpdateQuoteItemQuantity(o.Id, value)}\r\n                                noChange={o.NoChange}\r\n                                parentid={o.Parent_Id}\r\n                                header1=\"Delete\"\r\n                                header2={o.Name}\r\n                                subheader2={o.Description ? o.Description : \"\"}\r\n                                subheader2notes={o.Notes ? o.Notes + \"\" : \"\"}\r\n                                header3={`${o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")} ${o.DisplayUnit}`}\r\n                                header4={(/* calculated install rate */ 0)}\r\n                                header5={workEntries[o.Id] ? workEntries[o.Id].quantity_used : null}\r\n                                header6={workEntries[o.Id] ? workEntries[o.Id].time_taken : null}\r\n                                isCompleted={workEntries[o.Id] ? workEntries[o.Id].is_completed : false}\r\n                                header8={\r\n                                  \"$\" +\r\n                                  (/* install subtotal */ 0).toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                }\r\n                                crewHourTotal={crewHourTotal}\r\n                                onCrewHoursUsed={(delta) => {\r\n                                  // Subtract the delta from the current crew hour total\r\n                                  setCrewHourTotal(prevTotal => prevTotal - delta);\r\n                                  console.log(prevTotal)\r\n                                  console.log(delta)\r\n                                }}\r\n                              \r\n                                RefreshUserInterface={() => GetProposalInformation(params.quoteId)}\r\n                              />\r\n                            );\r\n                          }\r\n                          return null;\r\n                        })}\r\n                        <br></br>\r\n                      </div>\r\n      \r\n                      {/* Delivery Section */}\r\n                      {/* {deliveryHeader === \"flex\" && <br />}\r\n                      {Quote.Delivery.Tools.map((o, i) => (\r\n                        <MobileQuoteItemTimesheet\r\n                          key={i}\r\n                          header1=\" \"\r\n                          subheader2={o.Notes ? o.Notes : \"\"}\r\n                          header3={o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          header4={`$${o.BasePrice.toFixed(2).replace(\r\n                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                            \",\"\r\n                          )}/ Load`}\r\n                          header5={`$${o.Price.toFixed(2).replace(\r\n                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                            \",\"\r\n                          )}`}\r\n                          header8={`$${o.Price.toFixed(2).replace(\r\n                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                            \",\"\r\n                          )}`}\r\n                          header3title=\"Quantity\"\r\n                          header4title=\"Delivery Rate\"\r\n                          header5title=\"Delivery Subtotal\"\r\n                        />\r\n                      ))} */}\r\n      \r\n                      {/* Removals Section */}\r\n                      {/* <LeagueSpartanRegular display={removalHeader}>Removals</LeagueSpartanRegular>\r\n                      <StyledHRGreenBreakThick mobiledisplay={removalHeader} />\r\n                      {Quote.Removal.Items.map((o, i) => (\r\n                        <MobileQuoteItemTimesheet\r\n                          key={i}\r\n                          header1=\"Delete\"\r\n                          header2={o.Name}\r\n                          subheader2notes={o.Notes ? o.Notes + \"\" : \"\"}\r\n                          header3={`${o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")} ${o.DisplayUnit}`}\r\n                          header4={`$${((o.Price + o.LaborSubtotal) / o.Quant)\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          header5={`$${(o.Price + o.LaborSubtotal)\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          header8={`$${(o.Price + o.LaborSubtotal)\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          header3title=\"Quantity\"\r\n                          header4title=\"Removal Rate\"\r\n                          header5title=\"Removal Subtotal\"\r\n                        />\r\n                      ))}\r\n       */}\r\n                      {/* Access Area Section */}\r\n                      {accessDisplay === \"flex\" && (\r\n                        <MobileQuoteItemTimesheet\r\n                          isHeader={true}\r\n                          header2=\"Access Area\"\r\n                          header3=\"\"\r\n                          header4=\"\"\r\n                          header5=\"\"\r\n                          header6=\"\"\r\n                          header7=\"\"\r\n                          header8=\"Access Total\"\r\n                          bgColor={ColorPalette.White}\r\n                        />\r\n                      )}\r\n                      {/* <StyledHRGreenBreakThick display={accessDisplay} /> */}\r\n                      {Quote.AccessArea.Items.map((o, i) => (\r\n                        <MobileQuoteItemTimesheet\r\n                          key={i}\r\n                          header1=\"Delete\"\r\n                          header2={o.Name}\r\n                          subheader2={o.Notes}\r\n                          header3={`${o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")} ${o.DisplayUnit}`}\r\n                          header4={`$${o.UnitPrice.toFixed(2).replace(\r\n                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                            \",\"\r\n                          )}${o.DisplayUnit}`}\r\n                          header5={`$${o.Price.toFixed(2).replace(\r\n                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                            \",\"\r\n                          )}`}\r\n                          header3title=\"Quantity\"\r\n                          header4title=\"Access Rate\"\r\n                          header5title=\"Access Subtotal\"\r\n                        />\r\n                      ))}\r\n                      {Quote.AccessArea.Items.length > 0 && (\r\n                        <MobileQuoteItemTimesheet\r\n                          isHeader={true}\r\n                          bgColor={ColorPalette.White}\r\n                          header2=\"Subtotal\"\r\n                          header8={`$${accessAreaPriceSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                        />\r\n                      )}\r\n      \r\n                      {/* Tools/Machines Section */}\r\n                      {toolsmachinesHeader === \"flex\" && (\r\n                        <MobileEstimateQuoteItem\r\n                          isHeader={true}\r\n                          header2=\"Tools/Machines\"\r\n                          header3=\"Quantity\"\r\n                          header4=\"Rental Length\"\r\n                          header5=\"\"\r\n                          header6=\"Rental Rate\"\r\n                          header7=\"Move Cost Per Machine\"\r\n                          header8=\"Machine Subtotal\"\r\n                          bgColor={ColorPalette.White}\r\n                        />\r\n                      )}\r\n                      <StyledHRGreenBreakThick display={toolsmachinesHeader} />\r\n                      {Quote.Tool.Tools.map((o, i) => {\r\n                        if (!o?.ToolName.includes(\"Wheelbarrow\")) {\r\n                          return (\r\n                            <MobileEstimateQuoteItem\r\n                              key={i}\r\n                              header1=\"Delete\"\r\n                              header2={o.ToolName}\r\n                              subheader2={o.Notes ? o.Notes : \"\"}\r\n                              itemLink={o.VideoUrl}\r\n                              header3={\r\n                                o.RentalLength > 0\r\n                                  ? `${o.RentalLength.toFixed(2).replace(\r\n                                      /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                      \",\"\r\n                                    )} hr`\r\n                                  : `${o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")} day`\r\n                              }\r\n                              header4={\r\n                                o.RentalRate > 0\r\n                                  ? `$${(o.RentalRate * o.RentalLength)\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`\r\n                                  : `$${o.BasePrice.toFixed(2).replace(\r\n                                      /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                      \",\"\r\n                                    )}`\r\n                              }\r\n                              header5={\r\n                                o.RentalRate > 0 && o.BasePrice > 0\r\n                                  ? `$${o.BasePrice.toFixed(2).replace(\r\n                                      /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                      \",\"\r\n                                    )}`\r\n                                  : \"\"\r\n                              }\r\n                              header8={`$${o.Price.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                              header3title=\"Quantity\"\r\n                              header4title=\"Rental Rate\"\r\n                              header5title={o.RentalRate > 0 && o.BasePrice > 0 ? \"Move Cost Per Machine\" : \"\"}\r\n                            />\r\n                          );\r\n                        }\r\n                        return null;\r\n                      })}\r\n      \r\n                      {/* Labour Breakdown */}\r\n                      {/* <FlexRowContFullWidth onClick={() => DisplayLaborBreakdown(laborDetailToggle)}>\r\n                        <MobileQuoteItemTimesheet\r\n                          isHeader={true}\r\n                          header2=\"Labour Breakdown\"\r\n                          header3=\"\"\r\n                          header4=\"\"\r\n                          header5=\"\"\r\n                          header6=\"Quantity\"\r\n                          header7=\"Labour Rate\"\r\n                          header8=\"Line Subtotal\"\r\n                          bgColor={ColorPalette.White}\r\n                        />\r\n                      </FlexRowContFullWidth> */}\r\n                      {/* <StyledHRGreenBreakThick /> */}\r\n                      {/* <StyledHRPropColour border=\"0.5px solid white\" /> */}\r\n                      {/* {(() => {\r\n                        let total = 0;\r\n                        return Quote.Labor.Items.map((o, i) => {\r\n                          total += o.Quant;\r\n                          return (\r\n                            <MobileQuoteItemTimesheet\r\n                              key={i}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2={o.Notes}\r\n                              header4={decimalHoursToTimeString(o.Quant)}\r\n                              header7={`$${o.UnitPrice.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )}`}\r\n                              header8={`$${o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )}`}\r\n                            />\r\n                          );\r\n                        }).concat(\r\n                          <MobileQuoteItemTimesheet\r\n                            key=\"total\"\r\n                            isHeader={true}\r\n                            header2=\"Estimated Project Length:\"\r\n                            header8={`${total.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            )} hr`}\r\n                          />\r\n                        );\r\n                      })()} */}\r\n                      <div style={{ display: \"none\" }}>\r\n                        {toolsPriceSubtotal > 0 && (\r\n                          <MobileEstimateQuoteItem\r\n                            isHeader\r\n                            bgColor={ColorPalette.White}\r\n                            header2=\"Subtotal\"\r\n                            header8={`$${toolsPriceSubtotal.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            )}`}\r\n                          />\r\n                        )}\r\n                        {toolsmachinesHeader === \"flex\" && (\r\n                          <div>\r\n                            <br />\r\n                            <br />\r\n                          </div>\r\n                        )}\r\n                        <FlexRowContFullWidth onClick={() => DisplayLaborBreakdown(laborDetailToggle)}>\r\n                          <MobileEstimateQuoteItem\r\n                            isHeader\r\n                            header2=\"Labour Breakdown\"\r\n                            header3=\"\"\r\n                            header4=\"\"\r\n                            header5=\"\"\r\n                            header6=\"Quantity\"\r\n                            header7=\"Labour Rate\"\r\n                            header8=\"Line Subtotal\"\r\n                            bgColor={ColorPalette.White}\r\n                          />\r\n                        </FlexRowContFullWidth>\r\n                        <StyledHRGreenBreakThick />\r\n                        <StyledHRPropColour border=\"0.5px solid white\" />\r\n                        {(() => {\r\n                          let total = 0;\r\n                          return Quote.Labor.Items.map((o, i) => {\r\n                            total += o.Quant;\r\n                            return (\r\n                              <MobileEstimateQuoteItem\r\n                                key={i}\r\n                                header1=\"Delete\"\r\n                                header2={o.Name}\r\n                                subheader2={o.Notes}\r\n                                header4={decimalHoursToTimeString(o.Quant)}\r\n                                header7={`$${o.UnitPrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`}\r\n                                header8={`$${o.Price.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`}\r\n                              />\r\n                            );\r\n                          }).concat(\r\n                            <MobileEstimateQuoteItem\r\n                              key=\"total\"\r\n                              isHeader\r\n                              header2=\"Estimated Project Length:\"\r\n                              header8={`${total.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )} hr`}\r\n                            />\r\n                          );\r\n                        })()}\r\n                      </div>\r\n                      <div>\r\n                        <br />\r\n                        <br />\r\n                      </div>\r\n                    </AutoSizeOverflowY>\r\n                  </FlexColumnFullWidth>\r\n                </ContentContQuote>\r\n              </FlexRowContAutox100PercentMobileColumn>\r\n            </FlexColumn81vwLightGrey>\r\n            <FixedIconToTop\r\n              src=\"/BackToTopArrowAlt.svg\"\r\n              onClick={() => window.scrollTo(0, 0)}\r\n            />\r\n          </Cont>\r\n        );\r\n      }      \r\n      /////////////////////////// DESKTOP ->>>>>>>>>>>>>\r\n\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <FlexColumn81vwLightGrey id=\"estimate\">\r\n            <TopMentProposalView\r\n              currentPage={\"constructionView\"}\r\n              mobilePageProp={estimateName}\r\n              pageProp={projectName}\r\n              estimateName={estimateName}\r\n              homeownerName={homeownerName}\r\n              projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n              onBack={() => {\r\n                RouteToPrevious(userinfo.Role);\r\n              }}\r\n              scrollinfo={() => {\r\n                scrollToOverview.scrollIntoView();\r\n              }}\r\n              scrollsupply={() => {\r\n                scrollToSupply.scrollIntoView();\r\n              }}\r\n              scrollinstall={() => {\r\n                scrollToInstall.scrollIntoView();\r\n              }}\r\n              scrolldesigns={() => {\r\n                scrollToDesigns.scrollIntoView();\r\n              }}\r\n              scrollcomments={() => {\r\n                scrollToComments.scrollIntoView();\r\n              }}\r\n              scrollconfirmation={() => {\r\n                scrollToConfirm.scrollIntoView();\r\n              }}\r\n            ></TopMentProposalView>\r\n            {/* Approval --------------------------------------------------------------- */}\r\n\r\n            <FlexRowContFlexStartMobileColumn\r\n              height=\"auto\"\r\n              display={\r\n                Quote.QuoteStatus === QuoteStatus.RevisionRequested\r\n                  ? \"none\"\r\n                  : \"flex\"\r\n              }\r\n            >\r\n              <FlexRowCont alignitems=\"stretch\" height=\"auto\"></FlexRowCont>\r\n            </FlexRowContFlexStartMobileColumn>\r\n\r\n            {/* Proposal Overview --------------------------------------------------------------- */}\r\n            <RevisionInstructionsWindow\r\n              open={revisionInstructionDisplay}\r\n              CloseWindow={() => {\r\n                setRevisionInstructionDisplay(false);\r\n              }}\r\n              StartRevising={() => {\r\n                ChangeUIToMakeRevisions();\r\n                setRevisionInstructionDisplay(false);\r\n              }}\r\n            ></RevisionInstructionsWindow>\r\n            <ImageViewWindow\r\n              open={imageGalleryDisplay}\r\n              imgurl={imagePreviewUrl}\r\n              onClose={() => {\r\n                setImageGalleryDisplay(false);\r\n                document.body.style.overflow = \"unset\";\r\n              }}\r\n            ></ImageViewWindow>\r\n            <DuplicateProposalWindow\r\n              quoteObj={Quote}\r\n              onClose={() => {\r\n                setCloneProposalWindowDisplay(false);\r\n              }}\r\n              open={cloneProposalWindowDisplay}\r\n            ></DuplicateProposalWindow>\r\n\r\n            <FlexRowContAutox100PercentMobileColumn\r\n              alignitems=\"baseline\"\r\n              margin=\"0\"\r\n            >\r\n              <ContentContQuote id=\"install\">\r\n                {/* <FlexColumnFullWidth>\r\n                  <FlexDiv>\r\n                    <LeagueSpartanLarge>\r\n                      {estimateName} - Construction View -{\" \"}\r\n                      {decimalHoursToTimeString(projectLength)}\r\n                    </LeagueSpartanLarge>\r\n                    <RegularResponsiveButton\r\n                      id=\"exclude-from-pdf\"\r\n                      display={labourBreakdownDisplay}\r\n                      onClick={downloadPDF}\r\n                    >\r\n                      Download PDF\r\n                    </RegularResponsiveButton>\r\n                  </FlexDiv>\r\n                </FlexColumnFullWidth> */}\r\n\r\n                <FlexColumnFullWidth\r\n                  display={installEstimateDisplay}\r\n                  height=\"auto\"\r\n                  ref={ref2}\r\n                >\r\n                  <AutoSizeOverflowY>\r\n                 \r\n                    {Quote.Tags.map((t, j) => {\r\n  // Process Tagged Materials\r\n  let materialInstallSubSum = 0;\r\n  let materialTimeSum = 0;\r\n  const materialItems = Quote.Material.Items.filter(\r\n    (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n  ).map((o, i) => {\r\n    const workEntry = workEntries[o.Id];\r\n    const installSub = showRelated \r\n      ? o.LaborSubtotal \r\n      : o.LaborSubtotalWithRelatedItems;\r\n    materialInstallSubSum += installSub;\r\n\r\n    // Use the index in the original array for lookups (if required)\r\n    const originalIndex = Quote.Material.Items.findIndex(item => item.Id === o.Id);\r\n\r\n    // Determine the hourly rate as before\r\n    const laborNames = laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n      ? Array.from(laborNamesByProduct[`${o.Name}_${originalIndex}`]).join(\", \")\r\n      : \"\";\r\n    const laborName = laborNames ? laborNames.split(\", \")[0] : \"\";\r\n    const laborItem = Quote.Labor.Items.find(item => item.Name === laborName);\r\n    const hourlyRate = laborItem ? laborItem.UnitPrice : 154;\r\n\r\n    // Compute the time for this item as (installSub / hourlyRate)\r\n    const itemTime = installSub / hourlyRate;\r\n    materialTimeSum += itemTime;\r\n\r\n    return (\r\n      <QuoteItemTimesheet\r\n        noChange={o.NoChange}\r\n        constructionView={true}\r\n        key={`material-${i}`}\r\n        showRelatedItems={showRelated}\r\n        inputheaderposition={headerInputShown}\r\n        OutputValue={(value) => UpdateQuoteItemQuantity(o.Id, value)}\r\n        quoteItemObj={o}\r\n        parentid={o.Parent_Id}\r\n        header1=\"Delete\"\r\n        header2={o.Name}\r\n        subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n        subheader2={o.Description === null ? \"\" : o.Description}\r\n        header3={\r\n          o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n          \" \" + o.DisplayUnit\r\n        }\r\n        RefreshUserInterface={()=>{GetProposalInformation(params.quoteId)}}\r\n        header5={workEntry ? workEntry.quantity_used : null}\r\n        header6={workEntry ? workEntry.time_taken : null}\r\n        isCompleted={workEntry ? workEntry.is_completed : false}\r\n        header4={(installSub / hourlyRate)}\r\n        header8={\r\n          \"$\" + installSub.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n        }\r\n      />\r\n    );\r\n  });\r\n\r\n  // Process Tagged Removals\r\n  let removalInstallSubSum = 0;\r\n  let removalTimeSum = 0;\r\n  const removalItems = Quote.Removal.Items.filter(\r\n    (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n  ).map((o, i) => {\r\n    const workEntry = workEntries[o.Id]; \r\n    const removalInstallSub = showRelated \r\n      ? o.LaborSubtotal \r\n      : o.LaborSubtotalWithRelatedItems;\r\n    removalInstallSubSum += removalInstallSub;\r\n\r\n    const originalIndex = Quote.Removal.Items.findIndex(item => item.Id === o.Id);\r\n    const laborNames = laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n      ? Array.from(laborNamesByProduct[`${o.Name}_${originalIndex}`]).join(\", \")\r\n      : \"\";\r\n    const laborName = laborNames ? laborNames.split(\", \")[0] : \"\";\r\n    const laborItem = Quote.Labor.Items.find(item => item.Name === laborName);\r\n    const hourlyRate = laborItem ? laborItem.UnitPrice : 154;\r\n\r\n    // Compute the time for this removal item as (removalInstallSub / hourlyRate)\r\n    const itemTime = removalInstallSub / hourlyRate;\r\n    removalTimeSum += itemTime;\r\n\r\n    return (\r\n      <QuoteItemTimesheet\r\n        noChange={o.NoChange}\r\n        constructionView={true}\r\n        key={`removal-${i}`}\r\n        showRelatedItems={showRelated}\r\n        inputheaderposition={headerInputShown}\r\n        OutputValue={(value) => UpdateQuoteItemQuantity(o.Id, value)}\r\n        quoteItemObj={o}\r\n        parentid={o.Parent_Id}\r\n        header1=\"Delete\"\r\n        header2={o.Name}\r\n        subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n        subheader2={o.Description === null ? \"\" : o.Description}\r\n        header3={\r\n          o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n          \" \" + o.DisplayUnit\r\n        }\r\n        RefreshUserInterface={()=>{GetProposalInformation(params.quoteId)}}\r\n        header5={workEntry ? workEntry.quantity_used : null}\r\n        header6={workEntry ? workEntry.time_taken : null}\r\n        isCompleted={workEntry ? workEntry.is_completed : false}\r\n        header4={(removalInstallSub / hourlyRate)}\r\n        header8={\r\n          \"$\" + removalInstallSub.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n        }\r\n      />\r\n    );\r\n  });\r\n\r\n  // Combine both arrays and totals\r\n  const combinedItems = [...materialItems, ...removalItems];\r\n  const combinedInstallSub = materialInstallSubSum + removalInstallSubSum;\r\n  const combinedTimeSum = materialTimeSum + removalTimeSum;\r\n\r\n  return (\r\n    <div key={t.Id}>\r\n      {combinedItems.length > 0 && (\r\n        <div>\r\n          <QuoteItemTimesheet\r\n            isHeader={true}\r\n            header2={t.TagName}\r\n            tagobj={t}\r\n            completedTagIds={completedTagIds}\r\n            completedTagNames={completedTagNames}\r\n            header3=\"Quantity\"\r\n            header6=\"Crew\"\r\n            header7=\"Time Allowed\"\r\n            header8=\"Install Subtotal\"\r\n            bgColor={ColorPalette.White}\r\n          />\r\n          <StyledHRGreenBreakThick />\r\n        </div>\r\n      )}\r\n      {combinedItems}\r\n      {combinedItems.length > 0 && (\r\n        <QuoteItemTimesheet\r\n          isHeader={true}\r\n          bgColor={ColorPalette.White}\r\n          header2=\"Subtotal\"\r\n          header4={decimalHoursToTimeString(combinedTimeSum)}\r\n          header8={\r\n            \"$\" +\r\n            combinedInstallSub.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n          }\r\n        />\r\n      )}\r\n    </div>\r\n  );\r\n})}\r\n\r\n\r\n<div>\r\n  {/* Materials Section */}\r\n  {generalMaterialsHeader === \"flex\" && <br />}\r\n  {generalMaterialsHeader === \"flex\" && (\r\n    <QuoteItemTimesheet\r\n      isHeader={true}\r\n      header2=\"General Materials\"\r\n      header3=\"Quantity\"\r\n      header4=\"\"\r\n      header5=\"\"\r\n      header6=\"Crew\"\r\n      header7=\"Time Allowed\"\r\n      header8=\"Install Subtotal\"\r\n      bgColor={ColorPalette.White}\r\n    />\r\n  )}\r\n  <StyledHRGreenBreakThick display={generalMaterialsHeader} />\r\n\r\n  {Quote.Material.Items.map((o, i) => {\r\n    const workEntry = workEntries[o.Id]; \r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      const materialSub = showRelated === true ? o.Price : o.SubtotalWithRelatedItems;\r\n      const installSub = showRelated === true ? o.LaborSubtotal : o.LaborSubtotalWithRelatedItems;\r\n\r\n      // Update overall totals for materials\r\n      MaterialSum += o.Price;\r\n      InstallSum += o.LaborSubtotal;\r\n      TotalSum += o.Price + o.LaborSubtotal;\r\n\r\n      const originalIndex = Quote.Material.Items.findIndex(item => item.Id === o.Id);\r\n      const totalHours = totalHoursByProduct[`${o.Name}_${originalIndex}`] || 0;\r\n      const laborNames = laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n        ? Array.from(laborNamesByProduct[`${o.Name}_${originalIndex}`]).join(\", \")\r\n        : \"\";\r\n      const laborName = laborNames ? laborNames.split(\", \")[0] : \"\";\r\n      const laborItem = Quote.Labor.Items.find(item => item.Name === laborName);\r\n      const hourlyRate = laborItem ? laborItem.UnitPrice : 154;\r\n\r\n      noTagTimeSubtotal += totalHours;\r\n      noTagInstallSubtotal += installSub;\r\n\r\n      return (\r\n        <QuoteItemTimesheet\r\n          showRelatedItems={showRelated}\r\n          constructionView={true}\r\n          onClick={() => setShowRelated(!showRelated)}\r\n          key={i}\r\n          quoteItemObj={o}\r\n          inputheaderposition={headerInputShown}\r\n          OutputValue={(value) => UpdateQuoteItemQuantity(o.Id, value)}\r\n          noChange={o.NoChange}\r\n          parentid={o.Parent_Id}\r\n          header1=\"Delete\"\r\n          header2={o.Name}\r\n          subheader2={o.Description === null ? \"\" : o.Description}\r\n          subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n          header3={\r\n            o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n            \" \" +\r\n            o.DisplayUnit\r\n          }\r\n          header4={(installSub / hourlyRate)}\r\n          RefreshUserInterface={()=>{GetProposalInformation(params.quoteId)}}\r\n          header5={workEntry ? workEntry.quantity_used : null}\r\n          header6={workEntry ? workEntry.time_taken : null}\r\n          isCompleted={workEntry ? workEntry.is_completed : false}\r\n          header8={\r\n            \"$\" +\r\n            installSub.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n          }\r\n        />\r\n      );\r\n    }\r\n    return null;\r\n  })}\r\n\r\n  {(() => {\r\n    let removalMaterialSum = 0;\r\n    let removalInstallSum = 0;\r\n    let removalTotalSum = 0;\r\n    let removalTimeSubtotal = 0;\r\n\r\n    return (\r\n      <>\r\n        {Quote.Removal.Items.map((o, i) => {\r\n          const workEntry = workEntries[o.Id];\r\n          if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n            const removalSub = showRelated === true ? o.Price : o.SubtotalWithRelatedItems;\r\n            const removalInstallSub = showRelated === true\r\n              ? o.LaborSubtotal\r\n              : o.LaborSubtotalWithRelatedItems;\r\n\r\n            removalMaterialSum += o.Price;\r\n            removalInstallSum += o.LaborSubtotal;\r\n            removalTotalSum += o.Price + o.LaborSubtotal;\r\n\r\n            const originalIndex = Quote.Removal.Items.findIndex(item => item.Id === o.Id);\r\n            const totalHours = totalHoursByProduct[`${o.Name}_${originalIndex}`] || 0;\r\n            const laborNames = laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n              ? Array.from(laborNamesByProduct[`${o.Name}_${originalIndex}`]).join(\", \")\r\n              : \"\";\r\n            const laborName = laborNames ? laborNames.split(\", \")[0] : \"\";\r\n            const laborItem = Quote.Labor.Items.find(item => item.Name === laborName);\r\n            const hourlyRate = laborItem ? laborItem.UnitPrice : 154;\r\n\r\n            removalTimeSubtotal += totalHours;\r\n\r\n            return (\r\n              <QuoteItemTimesheet\r\n                showRelatedItems={showRelated}\r\n                constructionView={true}\r\n                onClick={() => setShowRelated(!showRelated)}\r\n                key={`removal-${i}`}\r\n                quoteItemObj={o}\r\n                inputheaderposition={headerInputShown}\r\n                OutputValue={(value) => UpdateQuoteItemQuantity(o.Id, value)}\r\n                noChange={o.NoChange}\r\n                parentid={o.Parent_Id}\r\n                header1=\"Delete\"\r\n                header2={o.Name}\r\n                subheader2={o.Description === null ? \"\" : o.Description}\r\n                subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                header3={\r\n                  o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                  \" \" +\r\n                  o.DisplayUnit\r\n                }\r\n                RefreshUserInterface={()=>{GetProposalInformation(params.quoteId)}}\r\n                header5={workEntry ? workEntry.quantity_used : null}\r\n                header6={workEntry ? workEntry.time_taken : null}\r\n                isCompleted={workEntry ? workEntry.is_completed : false}\r\n                header4={decimalHoursToTimeString(removalInstallSub / hourlyRate)}\r\n                header8={\r\n                  \"$\" +\r\n                  removalInstallSub.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                }\r\n              />\r\n            );\r\n          }\r\n          return null;\r\n        })}\r\n      \r\n      </>\r\n    );\r\n  })()}\r\n</div>\r\n\r\n\r\n\r\n                    {generalMaterialsHeader === \"flex\" ? <br></br> : null}\r\n                    {/* {deliveryHeader === \"flex\" ? (\r\n                      <QuoteItemTimesheet\r\n                        isHeader={true}\r\n                        header2=\"Delivery\"\r\n                        header3=\"Quantity\"\r\n                        header4=\"\"\r\n                        header5=\"\"\r\n                        header6=\"\"\r\n                        header7=\"\"\r\n                        header8=\"Delivery Total\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItemTimesheet>\r\n                    ) : null} */}\r\n                    {/* <StyledHRGreenBreakThick\r\n                      display={deliveryHeader}\r\n                    ></StyledHRGreenBreakThick> */}\r\n                    {/* <>\r\n                      {Object.values(\r\n                        Quote.Delivery.Tools.reduce((acc, curr) => {\r\n                          const price = curr.BasePrice.toFixed(2);\r\n                          if (!acc[price]) {\r\n                            acc[price] = { ...curr, Quant: 0 };\r\n                          }\r\n                          acc[price].Quant += curr.Quant;\r\n                          return acc;\r\n                        }, {})\r\n                      ).map((o, i) => {\r\n                        deliveryPriceSubtotal += o.BasePrice * o.Quant;\r\n                        return (\r\n                          <div key={i}>\r\n                            <QuoteItemTimesheet\r\n                              showRelatedItems={showRelated}\r\n                              onClick={() => {\r\n                                setShowRelated(!showRelated);\r\n                              }}\r\n                              header1=\" \"\r\n                              header2={`$${o.BasePrice.toFixed(2)} Deliveries`}\r\n                              subheader2={`Deliveries at $${o.BasePrice.toFixed(\r\n                                2\r\n                              )} per load`}\r\n                              header3={o.Quant.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )}\r\n                              header5=\"-\"\r\n                              header4=\"-\"\r\n                              header8={\r\n                                \"$\" +\r\n                                (o.BasePrice * o.Quant)\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              }\r\n                            ></QuoteItemTimesheet>\r\n                          </div>\r\n                        );\r\n                      })}\r\n                    </> */}\r\n{/* \r\n                    {deliveryPriceSubtotal > 0 && (\r\n                      <QuoteItemTimesheet\r\n                        isHeader={true}\r\n                        bgColor={ColorPalette.White}\r\n                        header2={`Subtotal`}\r\n                        header8={\r\n                          \"$\" +\r\n                          deliveryPriceSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      ></QuoteItemTimesheet>\r\n                    )} */}\r\n\r\n                    {deliveryHeader === \"flex\" ? <br></br> : null}\r\n                    {/* {removalHeader === \"flex\" ? (\r\n                      <QuoteItemTimesheet\r\n                        isHeader={true}\r\n                        header2=\"Removals\"\r\n                        header3=\"Quantity\"\r\n                        header4=\"\"\r\n                        header5=\"\"\r\n                        header6=\"\"\r\n                        header7=\"\"\r\n                        header8=\"Removal Subtotal\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItemTimesheet>\r\n                    ) : null}\r\n                    <StyledHRGreenBreakThick\r\n                      display={removalHeader}\r\n                    ></StyledHRGreenBreakThick> */}\r\n\r\n                    {/* {Quote.Removal.Items.map((o, i) => {\r\n                      // Find the original index of the removal item in the removalsArray\r\n                      const originalRemovalIndex =\r\n                        Quote.Removal.Items.findIndex(\r\n                          (removal) => removal.Id === o.Id\r\n                        );\r\n                      // Access the total removal time for each removal item using the totalRemovalsByItem object and the original index\r\n                      const removalTime = decimalHoursToTimeString(\r\n                        totalRemovalsByItem[\r\n                          `${o.Name}_${originalRemovalIndex}`\r\n                        ] || 0\r\n                      );\r\n\r\n                      removalTimeSubtotal +=\r\n                        totalRemovalsByItem[\r\n                          `${o.Name}_${originalRemovalIndex}`\r\n                        ] || 0;\r\n                      removalPriceSubtotal += o.Price + o.LaborSubtotal;\r\n\r\n                      return (\r\n                        <div key={i}>\r\n                          <QuoteItemTimesheet\r\n                            header1=\"Delete\"\r\n                            header2={o.Name}\r\n                            subheader2notes={\r\n                              o.Notes == null ? \"\" : o.Notes + \"\"\r\n                            }\r\n                            showRelatedItems={showRelated}\r\n                            onClick={() => {\r\n                              setShowRelated(!showRelated);\r\n                            }}\r\n                            header3={\r\n                              o.Quant.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              ) +\r\n                              \" \" +\r\n                              o.DisplayUnit\r\n                            }\r\n                            // header4={decimalHoursToTimeString(removalTimeSubtotal)}\r\n                            header5=\"\"\r\n                            header6=\"\"\r\n                            header7={removalTime}\r\n                            header8={\r\n                              \"$\" +\r\n                              (o.Price + o.LaborSubtotal)\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                            header9=\"-\"\r\n                          ></QuoteItemTimesheet>\r\n                        </div>\r\n                      );\r\n                    })}\r\n\r\n                    {removalPriceSubtotal > 0 && (\r\n                      <QuoteItemTimesheet\r\n                        isHeader={true}\r\n                        bgColor={ColorPalette.White}\r\n                        header2={`Subtotal`}\r\n                        header4={decimalHoursToTimeString(removalTimeSubtotal)}\r\n                        header8={\r\n                          \"$\" +\r\n                          removalPriceSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      ></QuoteItemTimesheet>\r\n                    )}\r\n\r\n                    {removalHeader === \"flex\" ? (\r\n                      <div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n                    ) : null} */}\r\n\r\n                    {accessDisplay === \"flex\" ? (\r\n                      <QuoteItemTimesheet\r\n                        isHeader={true}\r\n                        header2=\"Access Area\"\r\n                        header3=\"\"\r\n                        header4=\"\"\r\n                        header5=\"\"\r\n                        header6=\"\"\r\n                        header7=\"\"\r\n                        header8=\"Access Total\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItemTimesheet>\r\n                    ) : null}\r\n                    <StyledHRGreenBreakThick\r\n                      display={accessDisplay}\r\n                    ></StyledHRGreenBreakThick>\r\n\r\n                    {Quote.AccessArea.Items.map((o, i) => {\r\n                      accessAreaPriceSubtotal += o.Price;\r\n\r\n                      return (\r\n                        <div key={i}>\r\n                          <QuoteItemTimesheet\r\n                            showRelatedItems={showRelated}\r\n                            onClick={() => {\r\n                              setShowRelated(!showRelated);\r\n                            }}\r\n                            header1=\"Delete\"\r\n                            header2={o.Name}\r\n                            subheader2={o.Notes}\r\n                            header3={\r\n                              o.Quant.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              ) +\r\n                              \" \" +\r\n                              o.DisplayUnit\r\n                            }\r\n                            header4=\"-\"\r\n                            header5=\"-\"\r\n                            header6={\r\n                              \"$\" +\r\n                              o.UnitPrice.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              ) +\r\n                              \"\" +\r\n                              o.DisplayUnit\r\n                            }\r\n                            header7={\r\n                              \"$\" +\r\n                              o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                            header8={\r\n                              \"$\" +\r\n                              o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                          ></QuoteItemTimesheet>\r\n                        </div>\r\n                      );\r\n                    })}\r\n\r\n                    {accessAreaPriceSubtotal > 0 && (\r\n                      <QuoteItemTimesheet\r\n                        isHeader={true}\r\n                        bgColor={ColorPalette.White}\r\n                        header2={`Subtotal`}\r\n                        header8={\r\n                          \"$\" +\r\n                          accessAreaPriceSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      ></QuoteItemTimesheet>\r\n                    )}\r\n\r\n                    {accessDisplay === \"flex\" ? (\r\n                      <div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n                    ) : null}\r\n                    {toolsmachinesHeader === \"flex\" ? (\r\n                      <QuoteItem\r\n                        isHeader={true}\r\n                        header2=\"Tools/Machines\"\r\n                        header3=\"Quantity\"\r\n                        header4=\"Rental Length\"\r\n                        header5=\"\"\r\n                        header6=\"Rental Rate\"\r\n                        header7=\"Move Cost Per Machine\"\r\n                        header8=\"Machine Subtotal\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItem>\r\n                    ) : null}\r\n                    <StyledHRGreenBreakThick\r\n                      display={toolsmachinesHeader}\r\n                    ></StyledHRGreenBreakThick>\r\n\r\n                    {Quote.Tool.Tools.map((o, i) => {\r\n                      if (!o?.ToolName.includes(\"Wheelbarrow\")) {\r\n                        toolsPriceSubtotal += o.Price;\r\n\r\n                        return (\r\n                          <QuoteItem\r\n                            key={i}\r\n                            header1=\"Delete\"\r\n                            header2={o.ToolName}\r\n                            subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                            header6={\r\n                              o.RentalRate > 0\r\n                                ? \"$\" +\r\n                                  o.RentalRate.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                : \"$\" +\r\n                                  o.BasePrice.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                            }\r\n                            itemLink={o.VideoUrl}\r\n                            header3={\r\n                              o.Quant.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              ) + \" day\"\r\n                            }\r\n                            header4={\r\n                              o.RentalLength.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              ) + \" hr\"\r\n                            }\r\n                            header7={\r\n                              o.RentalRate > 0 && o.BasePrice > 0\r\n                                ? \"$\" +\r\n                                  o.BasePrice.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                : \"\"\r\n                            }\r\n                            header8={\r\n                              \"$\" +\r\n                              o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                          ></QuoteItem>\r\n                        );\r\n                      }\r\n                      return null;\r\n                    })}\r\n\r\n                    {/* {toolsPriceSubtotal > 0 && (\r\n                      <QuoteItemTimesheet\r\n                        isHeader={true}\r\n                        bgColor={ColorPalette.White}\r\n                        header2={`Subtotal`}\r\n                        header8={\r\n                          \"$\" +\r\n                          toolsPriceSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      ></QuoteItemTimesheet>\r\n                    )}\r\n                    {toolsmachinesHeader === \"flex\" ? (\r\n                      <div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n                    ) : null}\r\n                    <FlexRowContFullWidth\r\n                      onClick={() => {\r\n                        DisplayLaborBreakdown(laborDetailToggle);\r\n                      }}\r\n                    >\r\n                      <QuoteItemTimesheet\r\n                        isHeader={true}\r\n                        header2=\"Labour Breakdown\"\r\n                        header3=\"\"\r\n                        header4=\"\"\r\n                        header5=\"\"\r\n                        header6=\"Quantity\"\r\n                        header7=\"Labour Rate\"\r\n                        header8=\"Line Subtotal\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItemTimesheet>\r\n                    </FlexRowContFullWidth>\r\n                    <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n                    <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n\r\n                    {(() => {\r\n                      return Quote.Labor.Items.map((o, i) => {\r\n                        total += o.Quant;\r\n                        return (\r\n                          <QuoteItemTimesheet\r\n                            key={i}\r\n                            header1=\"Delete\"\r\n                            header2={o.Name}\r\n                            subheader2={o.Notes}\r\n                            header4={decimalHoursToTimeString(o.Quant)}\r\n                            header7={\r\n                              \"$\" +\r\n                              o.UnitPrice.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                            header8={\r\n                              \"$\" +\r\n                              o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                          ></QuoteItemTimesheet>\r\n                        );\r\n                      }).concat(\r\n                        <QuoteItemTimesheet\r\n                          key=\"total\"\r\n                          isHeader={true}\r\n                          header2=\"Estimated Project Length:\"\r\n                          header8={`${total\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")} hr`}\r\n                        />\r\n                      );\r\n                    })()} */}\r\n                    <div style={{ display: \"none\" }}>\r\n    {toolsPriceSubtotal > 0 && (\r\n      <QuoteItemTimesheet\r\n        isHeader\r\n        bgColor={ColorPalette.White}\r\n        header2=\"Subtotal\"\r\n        header8={`$${toolsPriceSubtotal\r\n          .toFixed(2)\r\n          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n      />\r\n    )}\r\n    {toolsmachinesHeader === \"flex\" && (\r\n      <div>\r\n        <br />\r\n        <br />\r\n      </div>\r\n    )}\r\n    <FlexRowContFullWidth onClick={() => DisplayLaborBreakdown(laborDetailToggle)}>\r\n      <QuoteItemTimesheet\r\n        isHeader\r\n        header2=\"Labour Breakdown\"\r\n        header3=\"\"\r\n        header4=\"\"\r\n        header5=\"\"\r\n        header6=\"Quantity\"\r\n        header7=\"Labour Rate\"\r\n        header8=\"Line Subtotal\"\r\n        bgColor={ColorPalette.White}\r\n      />\r\n    </FlexRowContFullWidth>\r\n    <StyledHRGreenBreakThick />\r\n    <StyledHRPropColour border=\"0.5px solid white\" />\r\n    {(() => {\r\n      let total = 0;\r\n      return Quote.Labor.Items.map((o, i) => {\r\n        total += o.Quant;\r\n        return (\r\n          <QuoteItemTimesheet\r\n            key={i}\r\n            header1=\"Delete\"\r\n            header2={o.Name}\r\n            subheader2={o.Notes}\r\n            header4={decimalHoursToTimeString(o.Quant)}\r\n            header7={`$${o.UnitPrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n            header8={`$${o.Price.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n          />\r\n        );\r\n      }).concat(\r\n        <QuoteItemTimesheet\r\n          key=\"total\"\r\n          isHeader\r\n          header2=\"Estimated Project Length:\"\r\n          header8={`${total\r\n            .toFixed(2)\r\n            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")} hr`}\r\n        />\r\n      );\r\n    })()}\r\n  </div>\r\n                    <div>\r\n                      <br></br>\r\n                      <br></br>\r\n                    </div>\r\n                  </AutoSizeOverflowY>\r\n                </FlexColumnFullWidth>\r\n              </ContentContQuote>\r\n            </FlexRowContAutox100PercentMobileColumn>\r\n          </FlexColumn81vwLightGrey>\r\n          <FixedIconToTop\r\n            src=\"/BackToTopArrowAlt.svg\"\r\n            onClick={() => {\r\n              window.scrollTo(0, 0);\r\n            }}\r\n          ></FixedIconToTop>\r\n        </Cont>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nViewProposalConstructionView.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default ViewProposalConstructionView;\r\n","import React, { useState, useEffect } from 'react';\r\nimport styled from 'styled-components';\r\nimport { GetProduct, GetStoreCategories, GetStoreProducts } from '../../API_Functions/CatProduct_Functions';\r\nimport { useParams } from 'react-router-dom';\r\nimport { CategoryTypes } from '../../StylesheetComps/CategoryTypes';\r\nimport QuoteItemWindow from '../../comps/Windows/QuoteItemWindow';\r\nimport QuoteAddOnSelection from '../../comps/Windows/QuoteAddOnSelection';\r\nimport { ColorPalette } from '../../StylesheetComps/Colors';\r\nimport { LeagueHeader14px } from '../../MobileComponents/Text';\r\nimport { BodyPara } from '../../StylesheetComps/AuthSheet';\r\nimport { RegularResponsiveButton } from '../../StylesheetComps/Components';\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { Icon30x40pxPointer } from '../../StylesheetComps/Imgs/Icons';\r\nimport { LeagueSpartanRegular, RegularGreenText, TinyTextItalics } from '../../StylesheetComps/Titles';\r\nimport { FlexDiv } from '../../StylesheetComps/Cont';\r\nimport { FlexCenterDiv100PercentCenter } from '../../StylesheetComps/Div';\r\nimport axios from \"axios\";\r\nimport { SetHeaderAuthorization } from '../../API_Functions/Utility_Functions';\r\n\r\n// Sample data\r\nconst sampleArray = ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5'];\r\n\r\n// Styled Components\r\nconst PopupBackdrop = styled.div`\r\n  display: ${({visible}) => visible ? 'block' : 'none'};\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  width: 100vw;\r\n  height: 100vh;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  z-index: 999;\r\n`;\r\n\r\nconst PopupContainer = styled.div`\r\n  position: fixed;\r\n  bottom: ${({visible}) => visible ? '0' : '-100%'};\r\n  left: 0;\r\n  width: 47vw;\r\n  border-radius: 25px 25px 0px 0px;\r\n  height: 95%;\r\n  background: #fff;\r\n  padding: 0px 20px 20px 20px;\r\n  transition: bottom 0.3s ease-out;\r\n  z-index: 999;\r\n  overflow: auto;\r\n\r\n  @media (max-width: 1006px) {\r\n  width: 90vw;\r\n}\r\n`;\r\n\r\nconst Input = styled.input`\r\n  width: 92%;\r\n  padding: 10px;\r\n  margin-bottom: 20px;\r\n`;\r\n\r\nconst ListItem = styled.div`\r\n  padding: 10px;\r\n  border-bottom: 1px solid #ddd;\r\n  cursor: pointer;\r\n  \r\n  &:last-child {\r\n    border-bottom: none;\r\n  }\r\n`;\r\n\r\nconst AlertBackdrop = styled.div`\r\n  display: ${({visible}) => visible ? 'block' : 'none'};\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  z-index: 10000;\r\n`;\r\n\r\nconst AlertPopup = styled.div`\r\n  display: ${({visible}) => visible ? 'flex' : 'none'};\r\n  position: fixed;\r\n  top: 50%;\r\n  left: 50%;\r\n  transform: translate(-50%, -50%);\r\n  background: #fff;\r\n  padding: 20px;\r\n  border-radius: 10px;\r\n  z-index: 10001;\r\n  justify-content: center;\r\n  align-items: center;\r\n  flex-direction: column;\r\n  width:250px;\r\n`;\r\n\r\n\r\n// Popup Component\r\nconst AccessItemPopupWindow = ({visible, accessCallback, removalCallback,\r\n    itemCategory, onClose, squareFeetSM, perimeterSM, AddItemToPolygon, shapeData, plottingCallback, iconCount, plottingSelected}) => {\r\n  const [inputValue, setInputValue] = useState('');\r\n  const [accessCat, setAccessCat] = useState([]);\r\n  const params = useParams();\r\n\r\n  const [visibleState, setVisible] = useState(false);\r\n  const [filteredItems, setFilteredItems] = useState(null);\r\n\r\n\r\n  //QuoteItem Popup\r\n  const [showQuoteItem, setShowQuoteItem] = useState(false);\r\n  const [selectedItem, setSelectedItem] = useState(null);\r\n  const [isAddOnsWindowVisible, setIsAddOnsWindowVisible] = useState(false);\r\n\r\n  const [item, setItem] = useState({});\r\n  const [primaryItemEstimateId, setPrimaryItemEstimateId] = useState(0);\r\n  const [removalAlert, setRemovalAlert] = useState(false);\r\n\r\n  const [isLoading, setIsLoading] = useState(false); // Add this state variable to track the loading state\r\n  const [isAddOnPlottingSelected, setIsAddOnPlottingSelected] = useState(false); \r\n  \r\n\r\n\r\n  const FilterItems = (inputValue) => {\r\n    setInputValue(inputValue); // preserve input value\r\n  \r\n    function find(items, text) {\r\n      text = text.toLowerCase().split(\" \");\r\n      return items.filter(function (item) {\r\n        return text.every(function (char) {\r\n          return item.Name.toLowerCase().includes(char);\r\n        });\r\n      });\r\n    }\r\n  \r\n    let newFilteredItems = accessCat.map(item => {\r\n      // If item has 'Products', filter the products\r\n      if (item.Products) {\r\n        return {\r\n          ...item,\r\n          Products: find(item.Products, inputValue)\r\n        };\r\n      } \r\n      // If item doesn't have 'Products', directly filter the items\r\n      else {\r\n        if (item.Name.toLowerCase().includes(inputValue.toLowerCase())) {\r\n          return item;\r\n        }\r\n      }\r\n    }).filter(Boolean); // Remove undefined items from the array (items that didn't pass the filter)\r\n  \r\n    setFilteredItems(newFilteredItems);\r\n  }\r\n  \r\n  const GetItems = async (storeid) => {\r\n    const isAccess = itemCategory === 'Access';\r\n    var data = isAccess ? await GetStoreCategories(storeid) : await GetStoreProducts(storeid);\r\n\r\n    // Add error handling here. If data is undefined, return to prevent errors\r\n    if (!data) return;\r\n\r\n    const filteredItems = isAccess\r\n        ? data.cate.filter((o) => o.CateType === CategoryTypes[itemCategory] && o.Products !== null)\r\n        : data.products.filter((o) => o.CateType === CategoryTypes[itemCategory]);\r\n    console.log(filteredItems)\r\n    setAccessCat(filteredItems);\r\n    setFilteredItems(filteredItems);\r\n};\r\n\r\nconst onListItemClick = (item) => {\r\n    if(itemCategory === 'access') {\r\n        accessCallback(item)\r\n    } else if (plottingSelected == true) {\r\n        setSelectedItem(item); // set the selected item\r\n        plottingCallback()\r\n    } else {\r\n        setSelectedItem(item); // set the selected item\r\n        setShowQuoteItem(true); // set the state to true to show the QuoteItemWindow\r\n    }\r\n  };\r\n\r\n  const CheckIfProductHasAddons = async (item) => {\r\n    setPrimaryItemEstimateId(item.Id); \r\n    const data = await GetProduct(item.Product_Id);\r\n    if (data !== null) {\r\n      if (data.Addons.length > 0) {\r\n        setItem(data)\r\n        setIsAddOnsWindowVisible(true);\r\n      }\r\n      if(data.CateType === CategoryTypes.Removal){\r\n        setRemovalAlert(true);\r\n      }\r\n    }\r\n    setShowQuoteItem(false);\r\n  };\r\n  \r\n\r\n  useEffect(() => {\r\n    if (itemCategory === 'removals' && filteredItems) {\r\n      setVisible(true);\r\n    }\r\n  }, [filteredItems]);\r\n\r\n  useEffect(() => {\r\n    setVisible(visible)\r\n  }, [visible]);\r\n\r\n  useEffect(() => {\r\n    if(iconCount >= 1 && plottingSelected == true) {\r\n      console.log(selectedItem)\r\n      console.log(iconCount)\r\n      console.log(plottingSelected)\r\n      console.log('addons');\r\n      setIsAddOnPlottingSelected(true)\r\n      setIsAddOnsWindowVisible(true)\r\n    } else if (selectedItem !== null && isAddOnPlottingSelected == true){\r\n      setIsAddOnPlottingSelected(true)\r\n      setIsAddOnsWindowVisible(true)\r\n      // setShowQuoteItem(true);\r\n      console.log(selectedItem)\r\n      console.log(iconCount)\r\n      console.log(plottingSelected)\r\n      console.log('addons')\r\n    } else if (selectedItem !== null && isAddOnPlottingSelected == false) {\r\n      setShowQuoteItem(true);\r\n      console.log(selectedItem)\r\n      console.log(iconCount)\r\n      console.log(plottingSelected)\r\n      console.log('none')\r\n    } else {\r\n\r\n    }\r\n  }, [iconCount]);\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization()\r\n    GetItems(params.storeId)\r\n  }, [itemCategory]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  return (\r\n    <>\r\n    <Backdrop style={{ zIndex: 999999 }} open={isLoading} onClick={()=>{setIsLoading(false)}}>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n      {/* <PopupBackdrop visible={visibleState} \r\n      onClick={() => {onClose()}} \r\n      /> */}\r\n      <PopupContainer visible={visibleState}>\r\n        <FlexCenterDiv100PercentCenter>\r\n      <Icon30x40pxPointer onClick={() => {onClose()}}  src='/downarrow.svg'></Icon30x40pxPointer>\r\n      </FlexCenterDiv100PercentCenter>\r\n      <LeagueSpartanRegular>Add New Item</LeagueSpartanRegular>\r\n        <Input\r\n          value={inputValue}\r\n          onChange={e => FilterItems(e.target.value)}\r\n          placeholder=\"Search for Products\"\r\n        />\r\n   {filteredItems && (filteredItems.slice(0, 30)).map((item, index) => {\r\n  let itemsToMap = item.Products ? item.Products : [item];\r\n  return itemsToMap.map((o, i) => (\r\n    <ListItem key={i} onClick={() => {onListItemClick(o); setFilteredItems(accessCat); setInputValue('');}}>\r\n      {o.Name}\r\n    </ListItem>\r\n  ))\r\n})}\r\n{showQuoteItem && <QuoteItemWindow iconCount={iconCount} siteMapper={true} squareFeetSM={squareFeetSM} perimeterSM={perimeterSM} open={showQuoteItem} productobj={selectedItem} itemObj={selectedItem} itemId={0} RefreshItemList={(item)=>{CheckIfProductHasAddons(item); AddItemToPolygon(item); setIsLoading(false); }} onClose={() => { setShowQuoteItem(false); setIsLoading(true); \r\n}} onCloseNoAdd={() => { setShowQuoteItem(false);\r\n}} />}\r\n<QuoteAddOnSelection\r\niconCount={iconCount}\r\nisAddOnPlottingSelected={isAddOnPlottingSelected}\r\nprimaryitemid={primaryItemEstimateId}\r\nsquareFeetSM={squareFeetSM} perimeterSM={perimeterSM}\r\n            open={isAddOnsWindowVisible}\r\n            shapeData={shapeData}\r\n            productObj={item}\r\n            siteMapper={true}\r\n            onClose={() => {\r\n              setIsAddOnsWindowVisible(false);\r\n              setIsAddOnPlottingSelected(false)\r\n            }}\r\n            CloseForPlotting={()=>{\r\n              setIsAddOnsWindowVisible(false)\r\n              setIsAddOnPlottingSelected(true)\r\n              plottingCallback()\r\n            }}\r\n            ></QuoteAddOnSelection>\r\n              <AlertBackdrop visible={removalAlert} \r\n      onClick={() => { setRemovalAlert(false); removalCallback();}} \r\n    />\r\n            <AlertPopup visible={removalAlert}>\r\n      <LeagueHeader14px>Notice:</LeagueHeader14px>\r\n      <br></br>\r\n      <BodyPara>You've just added a removal, we recommend you add the item that you will be installing in its place.</BodyPara>\r\n      <br></br>\r\n      <RegularResponsiveButton onClick={() => {setRemovalAlert(false); removalCallback()}}>OK</RegularResponsiveButton>\r\n    </AlertPopup>\r\n      </PopupContainer>\r\n    </>\r\n  );\r\n}\r\n  \r\nAccessItemPopupWindow.defaultProps = {\r\nvisible:false,\r\nitemCategory: 'Access', // set 'access' as the default category\r\nplottingSelected: false,\r\naccessCallback:()=>{},\r\nremovalCallback:()=>{},\r\nonClose:()=>{},\r\nAddItemToPolygon:()=>{},\r\nplottingCallback:()=>{},\r\nsquareFeetSM: 0,\r\nperimeterSM: 0,\r\nshapeData:{\r\n    perimeter:0,\r\n    area:0\r\n}\r\n}\r\n\r\nexport default AccessItemPopupWindow;\r\n","import React, { useState } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst DialogWrapper = styled.div`\r\n  display: ${(props) => (props.show ? 'flex' : 'none')};\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  width: 100%; /* Cover the full width of the screen */\r\n  height: 100%; /* Cover the full height of the screen */\r\n  z-index: 1000;\r\n  justify-content: center; /* Center horizontally */\r\n  align-items: center; /* Center vertically */\r\n  @media (max-width: 1006px) {\r\n    width: 95vw;\r\n  }\r\n`;\r\n\r\nconst DialogContent = styled.div`\r\n  background: white;\r\n  padding: 20px;\r\n  border-radius: 10px;\r\n  text-align: center;\r\n`;\r\n\r\nconst DialogHeader = styled.h2`\r\n  font-family: 'LeagueSpartan-Bold', sans-serif;\r\n`;\r\n\r\nconst DialogBody = styled.p`\r\n  font-family: 'Avenir', sans-serif;\r\n`;\r\n\r\nconst StyledButton = styled.button`\r\n  margin: 5px;\r\n  padding: 10px;\r\n  cursor: pointer;\r\n  /* You can customize the styling further as needed */\r\n`;\r\n\r\n\r\nconst ConfirmationDialog = ({ show, onCancel, onConfirm }) => (\r\n    <DialogWrapper show={show}>\r\n      <DialogContent>\r\n        <DialogHeader>Confirm Action</DialogHeader>\r\n        <DialogBody>Are you sure you want to save the estimate?</DialogBody>\r\n        <StyledButton onClick={onCancel}>Cancel</StyledButton>\r\n        <StyledButton onClick={onConfirm}>Save</StyledButton>\r\n      </DialogContent>\r\n    </DialogWrapper>\r\n  );\r\n\r\n  ConfirmationDialog.defaultProps = {\r\n\r\n  }\r\n\r\nexport default ConfirmationDialog;\r\n","import React, { useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Icon30px20pxPointer } from '../../../StylesheetComps/Quote';\r\nimport { Icon40x40Percent } from '../../../StylesheetComps/Imgs/Icons';\r\nimport { GreenNavigationButton } from '../../../StylesheetComps/LandscapeForm';\r\nimport { RegularResponsiveButton } from '../../../StylesheetComps/Components';\r\nimport { ColorPalette } from '../../../StylesheetComps/Colors';\r\nimport { FlexDiv } from '../../../StylesheetComps/Cont';\r\nimport IconButton from '../../IconButton';\r\nimport { FlexColumnDiv } from '../../../StylesheetComps/Div';\r\n\r\nconst GridOverlayContainer = styled.div`\r\n  display: ${(props) => (props.isOpen ? 'flex' : 'none')};\r\n  grid-template-columns: repeat(2, 1fr); /* Adjusted to 2 columns for a 2x2 grid */\r\n  grid-gap: 16px;\r\n  position: absolute;\r\n  width: 17.5vw;\r\n  height: auto;\r\n  // background: rgba(0, 0, 0, 0.5);\r\n  z-index: 9999;\r\n  padding: 16px;\r\n  align-items: center;\r\n  justify-items: center;\r\n  justify-content: center;\r\n  // top: -30vh;\r\n  bottom: -97px;\r\n  left: -7px;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  z-Index: 9999;\r\n  padding: 16px;\r\n  align-items: center;\r\n  justify-content: center;\r\n  @media (max-width: 1006px) {\r\n    width: 93.5vw;\r\n  }\r\n`;\r\n\r\nconst GridItem = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  justify-content: center;\r\n  margin: auto; /* Center each grid item */\r\n  background: #f2f2f2;\r\n  border: 1px solid #ccc;\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* Added subtle shadow for depth */\r\n  border-radius: 4px; /* Rounded corners for a modern look */\r\n  padding: 30px; /* Increased padding for better spacing */\r\n  width: calc(50% - 24px); /* Adjust width to fit in grid taking padding and gap into account */\r\n  height: auto; /* Height can be auto to maintain aspect ratio */\r\n  text-align: center;\r\n`;\r\n\r\n// Main GridOverlay functional component\r\nconst GridOverlay = ({ isOpen, onGridClick, showDialog, closeWindow }) => {\r\n\r\n  const [isEstimateShownHere, setIsEstimateShownHere] = useState(false);\r\n\r\n  const [minButtonWidth, setMinButtonWidth] = useState('75px');\r\n\r\n\r\n  return (\r\n    <GridOverlayContainer isOpen={isOpen}>\r\n      <FlexColumnDiv>\r\n        <FlexDiv>\r\n        <IconButton minwidth={'115px'} bgcolor={ColorPalette.PrimaryBlue} src='/texturewhite_plus.svg' onClick={() => {onGridClick('Material')}} text={'Material'}></IconButton>\r\n        <IconButton minwidth={'115px'} bgcolor={ColorPalette.PrimaryRed} src='/texturewhite_minus.svg' onClick={() => {onGridClick('Removal')}} text={'Removals'}></IconButton>\r\n        </FlexDiv>\r\n        <FlexDiv>\r\n        <IconButton minwidth={'115px'} bgcolor={ColorPalette.PrimaryYellow} src='/fencewhite_icon.svg' onClick={() => {onGridClick('Access')}} text={'Access'}></IconButton>\r\n        <IconButton minwidth={'115px'} bgcolor={ColorPalette.PrimaryOrange} src='/customwhite_icon.svg' onClick={() => {onGridClick('Open')}} text={'Custom'}></IconButton>\r\n        </FlexDiv>\r\n        {/* <RegularResponsiveButton onClick={() => {onGridClick('Material')}} minwidth={minButtonWidth}  bgcolor={ColorPalette.PrimaryButtonBlue}>Material</RegularResponsiveButton>\r\n        <RegularResponsiveButton onClick={() => {onGridClick('Removal')}} minwidth={minButtonWidth} bgcolor={ColorPalette.PrimaryRed}>Removals</RegularResponsiveButton>\r\n        <RegularResponsiveButton onClick={() => {onGridClick('Access')}} minwidth={minButtonWidth} bgcolor={ColorPalette.PrimaryYellow}>Access</RegularResponsiveButton>\r\n        <RegularResponsiveButton onClick={() => {onGridClick('Open')}} minwidth={minButtonWidth} bgcolor={ColorPalette.PrimaryOrange}>Custom</RegularResponsiveButton> */}\r\n      </FlexColumnDiv>\r\n    </GridOverlayContainer>\r\n  );\r\n};\r\n\r\nexport default GridOverlay;\r\n","import React, { useState, useRef } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst SliderContainer = styled.div`\r\n  width: ${(props) => (props.width ? props.width : \"85%\")};\r\n  height: 30px;\r\n  position: absolute;\r\n  background-color: #f0f0f5;\r\n  border-radius: 15px;\r\n  margin: 20px 20px 40px 85px;\r\n  box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);\r\n  user-select: none;\r\n  z-index: 999;\r\n  top: ${(props) => (props.top ? props.top : \"0px\")};\r\n  left: ${(props) => (props.left ? props.left : \"\")};\r\n  @media (max-width: 1006px) {\r\n    width: ${(props) => (props.width ? props.width : \"80vw\")};\r\n    margin: ${(props) => (props.margin ? props.margin : \"\")};\r\n    top: ${(props) => (props.top ? props.top : \"0px\")};\r\n  }\r\n`;\r\n\r\nconst Thumb = styled.div`\r\n  position: absolute;\r\n  width: 30px;\r\n  height: 30px;\r\n  background-color: #ffffff;\r\n  border: 1px solid #d1d1d6;\r\n  border-radius: 15px;\r\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\r\n  cursor: pointer;\r\n  transform: translateX(-50%);\r\n  z-index: 999;\r\n`;\r\n\r\n\r\nconst Slider = ({ onValueChange, width, top, left, margin }) => {\r\n  const [value, setValue] = useState(0.5); // Initial position in the middle\r\n  const sliderRef = useRef(null);\r\n\r\n  // Convert the mouse or touch position to a value within the slider's range\r\n  const convertClientXToValue = (clientX) => {\r\n    const rect = sliderRef.current.getBoundingClientRect();\r\n    let position = (clientX - rect.left) / rect.width; // Normalize position (0 to 1)\r\n    position = Math.max(0, Math.min(1, position)); // Ensure position stays within 0 to 1\r\n    const rangeValue = position * (0.000099 - 0.000001) + 0.000001; // Map to range 0.000001 to 0.0001\r\n    return rangeValue;\r\n  };\r\n\r\n  const handleInteractionStart = (event) => {\r\n    document.addEventListener('mousemove', handleInteractionMove);\r\n    document.addEventListener('mouseup', handleInteractionEnd);\r\n    document.addEventListener('touchmove', handleInteractionMove, { passive: false });\r\n    document.addEventListener('touchend', handleInteractionEnd);\r\n    handleInteractionMove(event); // Handle the initial interaction\r\n  };\r\n\r\n  const handleInteractionMove = (event) => {\r\n    event.preventDefault(); // Prevent default to avoid any unwanted page scrolling\r\n    const clientX = event.type.includes('mouse') ? event.clientX : event.touches[0].clientX;\r\n    const newValue = convertClientXToValue(clientX);\r\n    setValue((newValue - 0.000001) / (0.000099 - 0.000001)); // Update slider position based on value\r\n    if (onValueChange) onValueChange(newValue); // Notify parent component of the new value\r\n  };\r\n\r\n  const handleInteractionEnd = () => {\r\n    document.removeEventListener('mousemove', handleInteractionMove);\r\n    document.removeEventListener('mouseup', handleInteractionEnd);\r\n    document.removeEventListener('touchmove', handleInteractionMove);\r\n    document.removeEventListener('touchend', handleInteractionEnd);\r\n  };\r\n\r\n  return (\r\n    <SliderContainer margin={margin} width={width} top={top} left={left} ref={sliderRef} onMouseDown={handleInteractionStart} onTouchStart={handleInteractionStart}>\r\n      <Thumb style={{ left: `${value * 100}%` }} />\r\n    </SliderContainer>\r\n  );\r\n};\r\n\r\nexport default Slider;\r\n","import CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { useEffect, useState } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\nimport {\r\n  AddQuoteItem,\r\n  AddQuoteTool,\r\n  UpdateQuoteItem\r\n} from \"../../../API_Functions/CaseQuote_Functions\";\r\nimport { CategoryTypes } from \"../../../StylesheetComps/CategoryTypes\";\r\nimport {\r\n  FlexDiv\r\n} from \"../../../StylesheetComps/Cont\";\r\n\r\nimport styled from 'styled-components';\r\nimport { GetProduct, GetStoreProducts, GetStoreTools } from \"../../../API_Functions/CatProduct_Functions\";\r\nimport { Icon15x15, Icon30x40pxPointer } from \"../../../StylesheetComps/Imgs/Icons\";\r\nimport QuoteAddOnSelection from \"../QuoteAddOnSelection\";\r\nimport { InputField } from \"../../../StylesheetComps/Inputs\";\r\nimport { Backdrop } from \"@material-ui/core\";\r\nimport CalculatorWindow from \"../Calculators\";\r\nimport { MobileFlexColumnCont } from \"../../../MobileComponents/Divs\";\r\n\r\n// Styled Components\r\nconst LineItemContainer = styled.div`\r\n  display: flex;\r\n  flex-direction: row; // Align items in a row\r\n  align-items: center; // Center-align vertically for equal space above and below\r\n  justify-content: space-evenly; // Align items to the start of the container\r\n  width: 100%;\r\n  border-bottom: 1px solid #ccc;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\nconst InputGroup = styled.div`\r\n  margin: 10px 20px; // Adding 10px top and bottom margin for spacing\r\n  display: flex; // Make it a flex container\r\n  flex-direction: column; // Stack label and input vertically\r\n  align-items: flex-start; // Align to the start to keep labels left-aligned\r\n  max-width: 60%; // Increase this percentage to allow more space\r\n  width: 100%;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    max-width: 100%;\r\n    margin: 0px;\r\n  }\r\n`;\r\n\r\nconst InputLabel = styled.label`\r\ndisplay: block;\r\nmargin-bottom: 10px; // Increasing a bit to provide more space\r\nfont-size: 14px; // Slightly smaller than the input text for a hierarchy\r\ncolor: #333; // Matches the text color in input and textarea\r\nfont-weight: 500; // Slightly bold to differentiate it from the input text\r\nletter-spacing: 0.5px; // Optional, adds a touch of refinement\r\n\r\n`;\r\n\r\nconst ActionIcon = styled.div`\r\n  cursor: pointer;\r\n  margin-right: 10px;\r\n`;\r\n\r\nconst TextAreaField = styled.textarea`\r\nmargin-bottom: 20px;\r\npadding: 8px 8px;\r\nfont-family: Avenir;\r\nfont-size: 16px;\r\nborder: 1px solid #ccc;\r\nborder-radius: 8px;\r\noutline: none;\r\ncolor: #333;\r\nbackground-color: #f9f9f9;\r\ntransition: border-color 0.3s ease;\r\nwidth: 100%;\r\nbox-sizing: border-box;\r\nresize: vertical; // Allows vertical resizing, but you can also set this to 'none' if you don't want resizing\r\n\r\n&:focus {\r\n  border-color: #007aff; // You can adjust this to match your theme color\r\n}\r\n\r\n::placeholder {\r\n  color: #999;\r\n}\r\n\r\n`;\r\n\r\nconst InputWrapper = styled.div`\r\n  position: relative;\r\n  width: 100%;\r\n`;\r\n\r\n\r\nconst ProductList = styled.div`\r\n  position: absolute;\r\n  background: white;\r\n  border: 1px solid #ccc;\r\n  border-radius: 8px;\r\n  padding: 10px;\r\n  max-height: 300px;\r\n  overflow-y: auto;\r\n  z-index: 2; // To make it overlay other elements\r\n  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); // Subtle shadow for a sophisticated look\r\n  width: 100%;\r\n`;\r\n\r\nconst ProductItem = styled.div`\r\n  padding: 10px;\r\n  font-size: 14px;\r\n  border-bottom: 1px solid #eee;\r\n  color: #333;\r\n\r\n  &:hover {\r\n    background-color: #f6f6f6; // Highlighting on hover\r\n    cursor: pointer;\r\n  }\r\n\r\n  &:last-child {\r\n    border-bottom: none;\r\n  }\r\n`;\r\n\r\nconst InputRow = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: row;\r\n  }\r\n`;\r\n\r\nconst InverseInputRow = styled.div`\r\n  display: flex;\r\n  flex-direction: row;\r\n  @media (max-width: 1006px) {\r\n    flex-direction: column;\r\n    width: 100%;\r\n  }\r\n`;\r\n\r\n\r\n// Component\r\nconst QuoteLineItem = ({\r\n   open,\r\n  onClose,\r\n  onCloseNoAdd,\r\n  onPreview,\r\n  itemId,\r\n  quoteid,\r\n  quote,\r\n  RefreshItemList,\r\n  RefreshUpdatedItem,\r\n  siteMapper,\r\n  squareFeetSM,\r\n  perimeterSM,\r\n  Tag_Id,\r\n  addOnSelectedItem\r\n}) => {\r\n    const [squareFeet, setSquareFeet] = useState(0);\r\n    const [depth, setDepth] = useState(0);\r\n    const [productobj, setProductObj] = useState({\r\n      Name:\"\",\r\n      Unit:'',\r\n      CateType:CategoryTypes.Material,\r\n      Price:0, \r\n    });\r\n    const [isProductListVisible, setProductListVisible] = useState(false);\r\n    const [nameInputValue, setNameInputValue] = useState(productobj?.Name || \"\");\r\n    const [cubicFeetTotal, setCubicFeetTotal] = useState(0);\r\n    const [taglist, setTaglist] = useState([]);\r\n    const [primaryEstimateItemId, setPrimaryEstimateItemId] = useState(0);\r\n    const [calculatorsVisible, setCalculatorsVisible] = useState(false);\r\n  \r\n    //Removals\r\n    const [removalArea, setRemovalArea] = useState(siteMapper === true ? squareFeetSM.toFixed(2) : 0);\r\n    const [removalDepth, setRemovalDepth] = useState(0);\r\n  \r\n    const [managerNotes, setManagerNotes] = useState(\"\");\r\n    const [itemObj, setItemObj] = useState({});\r\n    const [addTagWindowVisible, setAddTagWindowVisible] = useState(false);\r\n    const [tagObj, setTagObj] = useState({});\r\n  \r\n    const [inputValue, setInputValue] = useState(siteMapper === true ? squareFeetSM.toFixed(2) : 0);\r\n    const [isUserInput, setIsUserInput] = useState(false);\r\n    const [isAddOnsWindowVisible, setIsAddOnsWindowVisible] = useState(false);\r\n\r\n    const [isLoading, setIsLoading] = useState(false);\r\n  \r\n    useEffect(() => {\r\n      setRemovalArea(siteMapper === true ? squareFeetSM.toFixed(2) : 0);\r\n    }, [siteMapper, squareFeetSM]);\r\n  \r\n    const params = useParams();\r\n  \r\n    useEffect(() => {\r\n      setCubicFeetTotal(squareFeet * (depth / 12));\r\n    }, [depth, squareFeet]);\r\n    \r\n    useEffect(() => {\r\n      setTaglist(quote?.Tags);\r\n    }, [quote]);\r\n  \r\n    const ResetCalculator = async () => {\r\n      setCubicFeetTotal(0);\r\n      setSquareFeet(0);\r\n      setDepth(0);\r\n    };\r\n\r\n    const GetProductInfo = async (product_id) => {\r\n      const data = await GetProduct(product_id)\r\n      console.log(data.Notes)\r\n      setManagerNotes(data.Notes)\r\n    }\r\n  \r\n    const AddNewItemToQuote = async (itemobj) => {\r\n      try {\r\n        const data = await AddQuoteItem(itemobj);\r\n        if (data && data.item) {\r\n          setPrimaryEstimateItemId(data.item.Id)\r\n          CheckIfProductHasAddons(itemobj.Product_Id);\r\n          setIsLoading(false)\r\n          if (siteMapper === true) {\r\n            ResetCalculator();\r\n            onClose();\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error(error);\r\n      }\r\n    };\r\n\r\n    \r\n  const CheckIfProductHasAddons = async (productid) => {\r\n    const data = await GetProduct(productid);\r\n    if (data !== null) {\r\n      setProductObj(data)\r\n      if (data.Addons.length > 0) {\r\n        setIsAddOnsWindowVisible(true);\r\n      } else {\r\n        RefreshItemList(data.item);\r\n      }\r\n    }\r\n    // setItemId(0);\r\n    // setQuoteItemWindowToggle(false);\r\n  };\r\n\r\n  const CheckIfProductHasAddonsEstimateScreen = async (productid) => {\r\n    const data = await GetProduct(productid);\r\n    if (data !== null) {\r\n      setProductObj(data)\r\n      if (data.Addons.length > 0) {\r\n        setIsAddOnsWindowVisible(true);\r\n      } else {\r\n        window.alert('This Product Has No Add-Ons Available')\r\n      }\r\n    }\r\n    // setItemId(0);\r\n    // setQuoteItemWindowToggle(false);\r\n  };\r\n    \r\n    \r\n    const UpdateItemOnQuote = async (itemobj) => {\r\n      try {\r\n        const data = await UpdateQuoteItem(itemobj);\r\n        if (data && data.item) {\r\n          RefreshUpdatedItem(data.item);\r\n          ResetCalculator();\r\n          onClose(true);\r\n        }\r\n      } catch (error) {\r\n        console.error(error);\r\n      }\r\n    };\r\n\r\n    useEffect(() => {\r\n      if(addOnSelectedItem !== null) {\r\n        setPrimaryEstimateItemId(addOnSelectedItem.Id)\r\n        CheckIfProductHasAddonsEstimateScreen(addOnSelectedItem.Product_Id)\r\n      }\r\n    }, [addOnSelectedItem]);\r\n    \r\n  \r\n    // const SaveItem = async (itemobj) => {\r\n    //   if (itemobj) {\r\n    //     if (itemobj.CateType === CategoryTypes.Removal) {\r\n    //       itemObj.Quant = removalArea * (removalDepth / 12);\r\n    //     }\r\n    //     if (itemobj.Id === 0) {\r\n    //       if(siteMapper === true && itemobj.CateType === CategoryTypes.Material) {\r\n    //         setInputValue(squareFeetSM.toFixed(2));\r\n    //         var value = (squareFeetSM.toFixed(2))\r\n    //         itemObj.Quant = value;\r\n    //       }\r\n    //       AddNewItemToQuote(itemObj);\r\n    //     } else {\r\n    //       UpdateItemOnQuote(itemObj);\r\n    //     }\r\n    //   }\r\n    // };\r\n  \r\n    const SaveItem = async (productobj) => {\r\n      setIsLoading(true);\r\n      if(productobj.RUnit !== undefined){\r\n        productobj.Quote_Id = params.quoteId\r\n        productobj.Case_Id = params.caseId\r\n        let toolobj = {}\r\n        toolobj.Quote_Id = Number(params.quoteId)\r\n        toolobj.Quant = Number(productobj.Quant)\r\n        toolobj.Tool_Id = productobj.Id\r\n        toolobj.RentalLength = Number(productobj.RentalLength)\r\n       const data = await AddQuoteTool(toolobj)\r\n       if(data !== null) {\r\n        RefreshItemList(data.Tool)\r\n        setIsLoading(false);\r\n       }\r\n      } else {\r\n      productobj.Quote_Id = params.quoteId\r\n      productobj.Case_Id = params.caseId\r\n      productobj.Tag_Id = Tag_Id\r\n      productobj.Product_Id = productobj.Id\r\n      productobj.Id = 0\r\n      productobj.Name = nameInputValue\r\n      setIsLoading(true); // Start loading\r\n      if (productobj) {\r\n        if (productobj.CateType === CategoryTypes.Removal) {\r\n          productobj.Quant = removalArea * (removalDepth / 12);\r\n          productobj.Notes = `Area:${removalArea} SqFt., Depth: ${removalDepth} Inches`\r\n        }\r\n        if (productobj.Id === 0) {\r\n          if(siteMapper === true && productobj.CateType === CategoryTypes.Material && !isUserInput) {\r\n            setInputValue(squareFeetSM.toFixed(2));\r\n            var value = (squareFeetSM.toFixed(2))\r\n            productobj.Quant = value;\r\n          }\r\n          AddNewItemToQuote(productobj);\r\n        } \r\n      }\r\n    }\r\n      setInputValue(0);\r\n      // setIsLoading(true); // Stop loading once done\r\n      setIsUserInput(false); // Reset the isUserInput state for the next input\r\n    };\r\n  \r\n    // useEffect(() => {\r\n    //   if (itemId === 0) {\r\n    //     itemObj.Name = productobj?.Name;\r\n    //     itemObj.CateType = productobj?.CateType;\r\n    //     itemObj.Product_Id = productobj?.Id;\r\n    //     itemObj.UnitPrice = productobj?.UnitPrice;\r\n    //     itemObj.Unit = productobj?.Unit;\r\n    //     itemObj.Quote_Id = params.quoteId;\r\n    //   }\r\n    // }, [productobj]); // eslint-disable-line react-hooks/exhaustive-deps\r\n  \r\n    // useEffect(() => {\r\n    //   if (productobj !== undefined) {\r\n    //     if (params.quoteId !== undefined) {\r\n    //       GetQuoteTaglist(params.quoteId);\r\n    //     } else {\r\n    //       GetQuoteTaglist(quoteid);\r\n    //     }\r\n    //     setManagerNotes(productobj?.Notes);\r\n    //     GetItem(itemId);\r\n    //   }\r\n    // }, [productobj]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n    const [unfilteredProducts, setUnfilteredProducts] = useState([]);\r\n    const [products, setProducts] = useState([]);\r\n    const [first30Products, setFirst30Products] = useState();\r\n\r\n\r\n    const GetAllProducts = async (storeId) => {\r\n      try {\r\n        const productsData = await GetStoreProducts(storeId)\r\n        const toolsData = await GetStoreTools(storeId)\r\n\r\n        const combinedData = [...(productsData?.products || []), ...(toolsData?.tools || [])]; // Merging products and tools. This assumes the tools are in a 'tools' property of the toolsData.\r\n\r\n          setUnfilteredProducts(combinedData)\r\n        \r\n      } catch (error) {\r\n        console.error(\"Error fetching products or tools:\", error);\r\n      }\r\n    }\r\n  \r\n    // const FilterProducts = (productlist, text) => {\r\n    //   function find(productlist, text) {\r\n    //     text = text.toLowerCase().split(\" \");\r\n    //     return productlist.filter(function (word) {\r\n    //       return text.every(function (char) {\r\n    //         return word.Name.toLowerCase().includes(char);\r\n    //       });\r\n    //     });\r\n    //   }\r\n  \r\n    //   const output = find(productlist, text);\r\n    //   setProducts(output);\r\n    // };\r\n\r\n    // const FilterProducts = (productlist, text) => {\r\n    //   function find(productlist, text) {\r\n    //     const lowerCaseText = text.toLowerCase();\r\n    \r\n    //     // Check if any part of the text contains a substring of 'access'\r\n    //     const isAccessCategory = lowerCaseText.includes('acc') ||\r\n    //                               lowerCaseText.includes('cce') ||\r\n    //                               lowerCaseText.includes('ces') ||\r\n    //                               lowerCaseText.includes('ess');\r\n    \r\n    //     return productlist.filter(function (product) {\r\n    //       // If any part of 'access' is in the text, only return items of that CategoryType\r\n    //       if (isAccessCategory && product.CateType === CategoryTypes.Access) {\r\n    //         return true;\r\n    //       }\r\n    \r\n    //       // Otherwise, go ahead with the original text-based filter\r\n    //       const textArray = lowerCaseText.split(\" \");\r\n    //       return textArray.every(function (char) {\r\n    //         return product.Name.toLowerCase().includes(char);\r\n    //       });\r\n    //     });\r\n    //   }\r\n    \r\n    //   // Get filtered products and update state\r\n    //   const output = find(productlist, text);\r\n    //   setProducts(output);\r\n    // };\r\n\r\n    const FilterProducts = (productlist, text) => {\r\n      function find(productlist, text) {\r\n        const lowerCaseText = text.toLowerCase();\r\n    \r\n        // Check if any part of the text contains a substring of 'access'\r\n        const isAccessCategory = lowerCaseText.includes('acc') ||\r\n                                  lowerCaseText.includes('cce') ||\r\n                                  lowerCaseText.includes('ces') ||\r\n                                  lowerCaseText.includes('ess');\r\n    \r\n        return productlist.filter(function (product) {\r\n          // Exclude products with 'DNU' in uppercase in their name\r\n          if (product.Name.includes('DNU')) {\r\n            return false;\r\n          }\r\n    \r\n          // If any part of 'access' is in the text, only return items of that CategoryType\r\n          if (isAccessCategory && product.CateType === CategoryTypes.Access) {\r\n            return true;\r\n          }\r\n    \r\n          // Otherwise, go ahead with the original text-based filter\r\n          const textArray = lowerCaseText.split(\" \");\r\n          return textArray.every(function (char) {\r\n            return product.Name.toLowerCase().includes(char);\r\n          });\r\n        });\r\n      }\r\n    \r\n      // Get filtered products and update state\r\n      const output = find(productlist, text);\r\n      setProducts(output);\r\n    };\r\n    \r\n    \r\n    \r\n    \r\n  \r\n    useEffect(() => {\r\n      GetAllProducts(params.storeId)\r\n    }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n  \r\n    useEffect(() => {\r\n      setFirst30Products(products?.slice(0, 30))\r\n    }, [products]); // eslint-disable-line react-hooks/exhaustive-deps\r\n  \r\n\r\n  return (\r\n  //   isLoading === true ? (\r\n  //     <Backdrop style={{ zIndex: 1000 }} open>\r\n  //     <CircularProgress color=\"inherit\" />\r\n  //   </Backdrop>\r\n  // ) : \r\n  <div>\r\n    <LineItemContainer>\r\n<InputGroup>\r\n  <FlexDiv>\r\n  <InputLabel>Name:</InputLabel>\r\n  <Icon15x15 onClick={()=>{setCalculatorsVisible(true)}} src='/Calculator_Icon.svg'></Icon15x15>\r\n  <CalculatorWindow isVisible={calculatorsVisible} onClose={()=>{setCalculatorsVisible(false)}} ></CalculatorWindow>\r\n  </FlexDiv>\r\n  <InputWrapper>\r\n    <InputField\r\n     value={nameInputValue}\r\n     onChange={(e) => {\r\n       const value = e.target.value;\r\n       setNameInputValue(value);\r\n       itemObj.Name = value;\r\n       FilterProducts(unfilteredProducts, value);\r\n       setProductListVisible(true); // Show the product list\r\n     }}   \r\n    />\r\n    {isProductListVisible && first30Products && first30Products.length > 0 ? (\r\n      <ProductList>\r\n        {first30Products.map((product, i) => (\r\n          <ProductItem key={i}\r\n          onClick={() => {\r\n            const { Notes, ...restOfProduct } = product; // Exclude Notes from product\r\n        setProductObj(restOfProduct); // Set productObj to remaining properties\r\n        setNameInputValue(product.Name);\r\n        setProductListVisible(false); // Hide the product list\r\n        GetProductInfo(product.Id)\r\n          }}        \r\n          >\r\n           {\r\n    product.RUnit !== undefined ? \r\n    `${product.Name}` \r\n    :\r\n    `${product.Name} - $${parseFloat(product.UnitPrice).toFixed(2)} ${product.Unit}` \r\n    \r\n}\r\n\r\n          </ProductItem>\r\n        ))}\r\n      </ProductList>\r\n    ) : null}\r\n  </InputWrapper>\r\n</InputGroup>\r\n<p>{managerNotes}</p>\r\n\r\n {productobj.CateType === CategoryTypes.Material ||\r\n              productobj.CateType === CategoryTypes.Open ||\r\n              productobj.CateType === CategoryTypes.Addon ||productobj.CateType === CategoryTypes.Access || productobj.ToolKit_Id !== undefined ?\r\n(\r\n  <InputGroup>\r\n  <InputLabel>Quantity ({productobj?.Unit}) of Item:</InputLabel>\r\n  <InputField\r\n    value={inputValue}\r\n    key={siteMapper === true ? squareFeetSM : ''}\r\n    onChange={(e) => {\r\n      const value = e.target.value;\r\n      setInputValue(value);\r\n      // Create a new object that has all the same properties as productObj, but with the updated Quant value\r\n      setProductObj((prevProductObj) => ({\r\n        ...prevProductObj,\r\n        Quant: value\r\n      }));\r\n      setIsUserInput(true); // User has entered input\r\n    }}  \r\n  />\r\n</InputGroup> ) : null}\r\n\r\n{productobj.ToolKit_Id !== undefined ?\r\n(\r\n  <InputGroup>\r\n  <InputLabel>Rental Length:</InputLabel>\r\n  <InputField\r\n    onChange={(e) => {\r\n      const value = e.target.value;\r\n      // setInputValue(value);\r\n      // Create a new object that has all the same properties as productObj, but with the updated Quant value\r\n      setProductObj((prevProductObj) => ({\r\n        ...prevProductObj,\r\n        RentalLength: value\r\n      }));\r\n      setIsUserInput(true); // User has entered input\r\n    }}  \r\n  />\r\n</InputGroup> ) : null}\r\n\r\n    {productobj?.CateType === CategoryTypes.Removal ? (\r\n      <FlexDiv>\r\n        <InputGroup>\r\n          <InputLabel>Area (SqFt)*:</InputLabel>\r\n          <InputField\r\n            value={removalArea}\r\n            key={siteMapper === true ? squareFeetSM : ''}\r\n            onChange={(e) => {\r\n              setRemovalArea(e.target.value);\r\n            }}\r\n          />\r\n        </InputGroup>\r\n        <InputGroup>\r\n          <InputLabel>Depth (Inches)*:</InputLabel>\r\n          <InputField\r\n            onChange={(e) => {\r\n              setRemovalDepth(e.target.value);\r\n            }}\r\n          />\r\n        </InputGroup>\r\n      </FlexDiv>\r\n    ) : null}\r\n\r\n    {productobj?.CateType === CategoryTypes.Labor ? (\r\n      <InputGroup>\r\n        <InputLabel>Hours:</InputLabel>\r\n        <InputField\r\n          onChange={(e) => \r\n            {\r\n              const value = e.target.value;\r\n            setProductObj((prevProductObj) => ({\r\n              ...prevProductObj,\r\n              Quant: value\r\n            }));\r\n          }}\r\n        />\r\n      </InputGroup>\r\n    ) : null}\r\n\r\n    {productobj?.CateType === CategoryTypes.Open ? (\r\n      <InverseInputRow>\r\n        <InputGroup>\r\n          <InputLabel>Unit:</InputLabel>\r\n          <InputField\r\n            defaultValue={productobj?.Unit}\r\n            onChange={(e) => {\r\n              const value = e.target.value;\r\n              setProductObj((prevProductObj) => ({\r\n                ...prevProductObj,\r\n                Unit: value\r\n              }));\r\n            }}\r\n          />\r\n        </InputGroup>\r\n        <InputGroup>\r\n          <InputLabel>Product Price:</InputLabel>\r\n          <InputField\r\n            defaultValue={productobj?.UnitPrice}\r\n            onChange={(e) => {\r\n              const value = e.target.value;\r\n              setProductObj((prevProductObj) => ({\r\n                ...prevProductObj,\r\n                UnitPrice: value\r\n              }));\r\n            }}\r\n          />\r\n        </InputGroup>\r\n      </InverseInputRow>\r\n    ) : null}\r\n\r\n    {productobj.RUnit === undefined ?\r\n\r\n    <InputGroup>\r\n      <InputLabel>Notes:</InputLabel>\r\n      <TextAreaField\r\n        onChange={(e) => {\r\n          const value = e.target.value;\r\n          setProductObj((prevProductObj) => ({\r\n            ...prevProductObj,\r\n            Notes: value\r\n          }));\r\n        }}\r\n      />\r\n    </InputGroup>\r\n    : null }\r\n      {/* Repeat for other inputs */}\r\n      <InputRow>\r\n      <ActionIcon onClick={() => {SaveItem(productobj); setNameInputValue('');}}>\r\n        <Icon30x40pxPointer src='/Green Button.svg' />\r\n      </ActionIcon>\r\n      <ActionIcon\r\n        onClick={() => {\r\n          onClose()\r\n          ResetCalculator();\r\n        }}\r\n      >\r\n        <Icon30x40pxPointer src='/Close.svg' />\r\n      </ActionIcon>\r\n      </InputRow>\r\n    </LineItemContainer>\r\n    <QuoteAddOnSelection\r\n    primaryitemid={primaryEstimateItemId}\r\n    open={isAddOnsWindowVisible}\r\n    RefreshQuoteItems={(item, itemid) => {\r\n      RefreshItemList();\r\n    }}\r\n    productObj={productobj}\r\n    onClose={() => {\r\n      setIsAddOnsWindowVisible(false);\r\n      onClose(true);\r\n      RefreshItemList();\r\n    }}\r\n  ></QuoteAddOnSelection>\r\n  </div>\r\n  );\r\n};\r\n\r\nQuoteLineItem.defaultProps = {\r\n  onChange: () => {},\r\n  onPreview: () => {},\r\n  onFormComplete: () => {},\r\n  RefreshItemList: () => {},\r\n  RefreshUpdatedItem: () => {},\r\n  defaultName: \"\",\r\n  unitForProduct: \"\",\r\n  GetQuoteInfoById:() => {},\r\n  onCloseNoAdd:() => {},\r\n  onClose:() => {},\r\n  Tag_Id:0,\r\n  addOnSelectedItem:null\r\n};\r\n\r\nexport default QuoteLineItem;","import React, { useState } from \"react\";\r\nimport { Checkbox } from \"@material-ui/core\";\r\nimport { ColorPalette } from \"../../../StylesheetComps/Colors\";\r\nimport { RegularResponsiveButton } from \"../../../StylesheetComps/Components\";\r\nimport {\r\n  FlexDiv,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowContFlexStart,\r\n  LeftItemWindowFixed,\r\n} from \"../../../StylesheetComps/Cont\";\r\nimport {\r\n  TextAreaLarge,\r\n  TextInputReusable,\r\n} from \"../../../StylesheetComps/LandscapeForm\";\r\nimport { FlexColumnCont } from \"../../../StylesheetComps/Menu\";\r\nimport { FixedOverlay200vh } from \"../../../StylesheetComps/OverlayCont\";\r\nimport { RegularText, RegularTextBold } from \"../../../StylesheetComps/Titles\";\r\nimport { FlexDivSpaceBetween } from \"../../../StylesheetComps/Div\";\r\n\r\nconst EmailWindow = ({\r\n  open,\r\n  onClose,\r\n  confirmtext,\r\n  leftbuttontext,\r\n  rightbuttontext,\r\n  leftbuttoncolor,\r\n  rightbuttoncolor,\r\n  left,\r\n  LeftFunction,\r\n  closeWindow,\r\n  RightFunction,\r\n  width,\r\n  top,\r\n  projectEmail,\r\n  estimatorEmail,\r\n  projectName,\r\n  onSendEmail,\r\n}) => {\r\n  const [from, setFrom] = useState(\"\");\r\n  const [to, setTo] = useState(projectEmail);\r\n  const [cc, setCc] = useState(\"\");\r\n  const [bcc, setBcc] = useState(\"\");\r\n  const [subject, setSubject] = useState(`NRC Project Estimate ${projectName}`);\r\n  const [link, setLink] = useState(false);\r\n  const [signature, setSignature] = useState(\"blank\");\r\n  const [text, setText] = useState(`\r\nThank you for reaching out to New Rhodes for your project!\r\n\r\nPlease see the following link to view your online estimate.\r\n\r\nIf you have any questions, please feel free to contact our team.\r\n\r\n`);\r\n\r\n  const handleSendEmail = () => {\r\n    onSendEmail(\r\n      from,\r\n      to,\r\n      cc,\r\n      bcc,\r\n      subject,\r\n      link ? true : false,\r\n      text,\r\n      signature\r\n    );\r\n  };\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <FixedOverlay200vh>\r\n      <FlexRowContFlexStart>\r\n        <LeftItemWindowFixed left={left} top={top} width={width}>\r\n          <FlexDivSpaceBetween>\r\n            <RegularTextBold>From:</RegularTextBold>\r\n            <TextInputReusable\r\n              value={from}\r\n              onChange={(e) => setFrom(e.target.value)}\r\n            />\r\n          </FlexDivSpaceBetween>\r\n\r\n          <FlexDivSpaceBetween>\r\n            <RegularTextBold>To:</RegularTextBold>\r\n            <TextInputReusable\r\n              value={to}\r\n              onChange={(e) => setTo(e.target.value)}\r\n            />\r\n          </FlexDivSpaceBetween>\r\n\r\n          <FlexDivSpaceBetween>\r\n            <RegularTextBold>CC:</RegularTextBold>\r\n            <TextInputReusable\r\n              value={cc}\r\n              onChange={(e) => setCc(e.target.value)}\r\n            />\r\n          </FlexDivSpaceBetween>\r\n\r\n          <FlexDivSpaceBetween>\r\n            <RegularTextBold>BCC:</RegularTextBold>\r\n            <TextInputReusable\r\n              value={bcc}\r\n              onChange={(e) => setBcc(e.target.value)}\r\n            />\r\n          </FlexDivSpaceBetween>\r\n\r\n          <FlexDivSpaceBetween>\r\n            <RegularTextBold>Subject:</RegularTextBold>\r\n            <TextInputReusable\r\n              value={subject}\r\n              onChange={(e) => setSubject(e.target.value)}\r\n            />\r\n          </FlexDivSpaceBetween>\r\n\r\n          <FlexDiv>\r\n            <RegularTextBold>Include Sharable Estimate Link?</RegularTextBold>\r\n            <Checkbox\r\n              checked={link}\r\n              onChange={(e) => setLink(e.target.checked)}\r\n            />\r\n          </FlexDiv>\r\n          {/* <RegularText>Hello,</RegularText> */}\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <RegularTextBold></RegularTextBold>\r\n            <TextAreaLarge\r\n            height='200px'\r\n              value={text}\r\n              onChange={(e) => setText(e.target.value)}\r\n            />\r\n          </FlexRowCont100PercentSpaceBetween>\r\n          <RegularText>{confirmtext}</RegularText>\r\n          {/* <FlexDivSpaceBetween>\r\n            <RegularTextBold>Signature:</RegularTextBold>\r\n            <TextInputReusable\r\n              value={signature}\r\n              onChange={(e) => setSignature(e.target.value)}\r\n            />\r\n          </FlexDivSpaceBetween> */}\r\n          <FlexRowCont100PercentSpaceBetween>\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryRed}\r\n              onClick={() => {\r\n                closeWindow();\r\n              }}\r\n            >\r\n              Cancel\r\n            </RegularResponsiveButton>{\" \"}\r\n            <RegularResponsiveButton\r\n              bgcolor={ColorPalette.PrimaryButtonBlue}\r\n              onClick={() => {\r\n                if (\r\n                  window.confirm(\"Are you sure you want to send this email?\")\r\n                ) {\r\n                  handleSendEmail();\r\n                }\r\n              }}\r\n            >\r\n              Send\r\n            </RegularResponsiveButton>\r\n          </FlexRowCont100PercentSpaceBetween>\r\n\r\n          <FlexColumnCont></FlexColumnCont>\r\n        </LeftItemWindowFixed>\r\n      </FlexRowContFlexStart>\r\n    </FixedOverlay200vh>\r\n  );\r\n};\r\n\r\nEmailWindow.defaultProps = {\r\n  RightFunction: () => {},\r\n  closeWindow: () => {},\r\n  onSendEmail: () => {},\r\n  rightbuttoncolor: ColorPalette.PrimaryButtonBlue,\r\n  leftbuttoncolor: ColorPalette.PrimaryButtonBlue,\r\n  left: \"40%\",\r\n  top: \"5%\",\r\n};\r\n\r\nexport default EmailWindow;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { animated } from \"react-spring\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { StyledHRGreyBreak, TinyTextItalics } from \"../../StylesheetComps/Titles\";\r\n\r\nconst ProgressBarContainer = styled.div`\r\n  display: flex;\r\n  width: 50vw;\r\n  height: 30px;\r\n  background-color: #e0e0e0;\r\n  border-radius: 5px;\r\n  overflow: hidden;\r\n  margin-bottom: 20px;\r\n`;\r\n\r\nconst ProgressBar = styled(animated.div)`\r\n  width: ${(props) => props.width || \"0%\"};\r\n  height: 100%;\r\n  background-color: ${ColorPalette.PrimaryButtonBlue};\r\n  transition: width 2s;\r\n  box-shadow: ${(props) =>\r\n    props.isActive ? `0px 0px 10px ${ColorPalette.PrimaryButtonBlue}` : \"none\"};\r\n`;\r\n\r\nconst ProgressText = styled.div`\r\n  margin-top: 10px;\r\n  font-size: 14px;\r\n  color: ${ColorPalette.PrimaryButtonBlue};\r\n  text-align: center;\r\n  font-family: LeagueSpartan-Bold;\r\n`;\r\n\r\nconst ProgressWindow = styled.div`\r\n  position: fixed;\r\n  top: 50%;\r\n  left: 55%;\r\n  transform: translate(-50%, -50%);\r\n  width: 50%;\r\n  background: white;\r\n  padding: 20px;\r\n  border-radius: 10px;\r\n  box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);\r\n  display: flex;\r\n  flex-direction: column;\r\n  align-items: center;\r\n  z-index: 1001; /* Higher than the overlay */\r\n`;\r\n\r\nconst Overlay = styled.div`\r\n  position: fixed;\r\n  top: 0;\r\n  left: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  background: rgba(0, 0, 0, 0.5);\r\n  z-index: 1000;\r\n`;\r\n\r\nconst DuplicateProgress = ({ currentStage, stageText, open}) => {\r\n  const stages = [\r\n    \"Starting\",\r\n    \"Retrieving Case\",\r\n    \"Finding Proposal\",\r\n    \"Retrieving Quote\",\r\n    \"Identifying Add-ons\",\r\n    \"Duplicating Estimate\",\r\n    \"Adding Add-ons\",\r\n    \"Creating Relationships\",\r\n    \"Completed\",\r\n  ];\r\n\r\n  const progressPercentage = ((currentStage + 1) / stages.length) * 100;\r\n\r\n  if (!open) return null;\r\n  return (\r\n    <>\r\n      <Overlay />\r\n      <ProgressWindow>\r\n        <ProgressBarContainer>\r\n          <ProgressBar width={`${progressPercentage}%`} isActive={true} />\r\n        </ProgressBarContainer>\r\n        <ProgressText>{stages[currentStage]}</ProgressText>\r\n        <StyledHRGreyBreak></StyledHRGreyBreak>\r\n        <TinyTextItalics>{stageText}</TinyTextItalics>\r\n      </ProgressWindow>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default DuplicateProgress;\r\n","//  React Imports ---------------------------------------\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport html2canvas from \"html2canvas\";\r\nimport jsPDF from \"jspdf\";\r\nimport axios from \"axios\";\r\nimport styled from \"styled-components\";\r\nimport pdfMake from \"pdfmake/build/pdfmake\";\r\nimport pdfFonts from \"pdfmake/build/vfs_fonts\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport moment from \"moment\";\r\nimport {\r\n  AddItemRelation,\r\n  AddQuoteItem,\r\n  AddQuoteRevision,\r\n  DeleteQuoteItemByEstimator,\r\n  DeleteQuotePhoto,\r\n  DeleteQuoteTag,\r\n  DeleteQuoteTool,\r\n  GetCaseById,\r\n  GetQuoteById,\r\n  GetQuoteByIdForUserDisplay,\r\n  GetQuoteItem,\r\n  GetQuoteTag,\r\n  QuoteStatus,\r\n  ReverseQuant_QuoteItem,\r\n  SetCaseTo_Processed,\r\n  SetQuoteTo_Buy,\r\n  SetQuoteTo_Buy_Install,\r\n  SetQuoteTo_Notify,\r\n  UpdateQuote,\r\n  UpdateQuoteItem,\r\n  UpdateQuote_AccessArea,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  AddImageToCloud,\r\n  decimalHoursToTimeString,\r\n  GetCurrentTime,\r\n  MakeStripePay,\r\n  SetHeaderAuthorization,\r\n  UploadFileToCloud,\r\n} from \"../../API_Functions/Utility_Functions\";\r\n//  Imported Components ---------------------------------\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport TopMentProposalView from \"../../comps/MenuComps/TopMenuProposalView\";\r\nimport ImageViewWindow from \"../../comps/Windows/ImageEnlargementWindow\";\r\nimport RevisionInstructionsWindow from \"../../comps/Windows/RevisionInstructions\";\r\nimport DuplicateProposalWindow from \"../../comps/Windows/SaveRevisionGuide\";\r\nimport MobileEstimateQuoteItem from \"../../MobileComponents/MobileEstimateQuoteItem\";\r\nimport { Stored_Values } from \"../../Stored_Values\";\r\nimport { CaseStatus } from \"../../StylesheetComps/CaseStatus\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  BackTopTopArrow,\r\n  FixedIconToTop,\r\n  RegularResponsiveButton,\r\n} from \"../../StylesheetComps/Components\";\r\n// Imported Styled Components ---------------------------\r\nimport { GetTaxesForMetro } from \"../../API_Functions/Store_Functions\";\r\nimport QuoteItemEstimator from \"../../comps/QuoteItemEstimator\";\r\nimport DeleteConfirmWindow from \"../../comps/Windows/DeleteProduct\";\r\nimport QuoteLineItem from \"../../comps/Windows/QuoteLineItem\";\r\nimport QuotePhotoUploadPreviewWindow from \"../../comps/Windows/QuotePhotoUpload\";\r\nimport TagWindow from \"../../comps/Windows/Tag\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport {\r\n  AutoSizeOverflowY,\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexColumnCont98xAutoFlexEnd,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnFullWidth,\r\n  FlexColumnFullWidthMargins,\r\n  FlexContFullWidthHeightJustifyCenter,\r\n  FlexDiv,\r\n  FlexRowCont,\r\n  FlexRowCont100PercentFlexEnd,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont60PercentSpaceEvenly,\r\n  FlexRowContAutox100PercentMobileColumn,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFlexStartMobileColumn,\r\n  FlexRowContFullWidth,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexColumnDiv,\r\n  FlexContainerItem,\r\n  FlexContainerPhotos,\r\n  FlexDivCenter,\r\n  FlexDivFlexEnd,\r\n  FlexDivMargins,\r\n  FlexDivSpaceAround,\r\n  GridContainer3Wide,\r\n  SummaryContainer,\r\n  SummaryContainerItems,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Icon200x200,\r\n  RelativeIconBottom70Percent,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  Image40x40px,\r\n  OverrideEmbedDiv,\r\n  OverrideEmbedImage,\r\n} from \"../../StylesheetComps/Imgs/Images\";\r\nimport { InputField } from \"../../StylesheetComps/Inputs\";\r\nimport {\r\n  Image375px,\r\n  TextAreaAutoResize,\r\n  TextAreaMobile,\r\n  TextAreaRegular,\r\n  TextInputRegular,\r\n  TextInputReusable,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { SmallHeader, StickyTopMenuCont } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  Cont,\r\n  ContentCont44Percent,\r\n  ContentCont77vw,\r\n  ContentContQuote,\r\n} from \"../../StylesheetComps/Projects\";\r\nimport { Icon30px20pxPointer, Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LargeText,\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanLarge,\r\n  LeagueSpartanRegular,\r\n  MediumHeader,\r\n  RegularText,\r\n  StyledHRGreenBreak,\r\n  StyledHRGreenBreakThick,\r\n  StyledHRGreyBreak,\r\n  StyledHRPropColour,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\nimport { SmallTextInput, TextInputProp } from \"../../StylesheetComps/AuthSheet\";\r\nimport Dropdown from \"../../comps/DropdownMenu\";\r\nimport LoadingIndicator from \"../../comps/InteractiveLoadingBar\";\r\nimport EmailWindow from \"../../comps/Windows/EmailWindow\";\r\nimport {\r\n  GetCategory,\r\n  GetProduct,\r\n} from \"../../API_Functions/CatProduct_Functions\";\r\nimport DuplicateProgress from \"../../comps/DuplicateProgress\";\r\nimport { FlexDivSpaceBetween } from \"../../StylesheetComps/Div\";\r\nimport IconButton from \"../../comps/IconButton\";\r\n\r\nconst InputContainer = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  margin-right: 16px;\r\n`;\r\n\r\n// Container for the radio buttons\r\nconst RadioContainer = styled.div`\r\n  // display: flex;\r\n  margin-right: 16px;\r\n`;\r\n\r\n// Container for the bottom button\r\nconst ButtonContainer = styled.div`\r\n  display: flex;\r\n  align-items: center;\r\n`;\r\n\r\n\r\npdfMake.vfs = pdfFonts.pdfMake.vfs;\r\n\r\nconst ViewProposalEstimatorView = ({\r\n  hideMenu,\r\n  contWidth,\r\n  scrollToItem,\r\n  onResetScrollToItem,\r\n  refreshEstimate,\r\n  refreshEstimateFinished,\r\n}) => {\r\n  // React-router variables\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  // Data variables\r\n  const [Quote, setProposal] = useState({});\r\n  const [Case, setCase] = useState({});\r\n  const [curTime, setCurTime] = useState(\"\");\r\n  var MaterialSum = 0;\r\n  var InstallSum = 0;\r\n  var TotalSum = 0;\r\n  var materialSub = 0;\r\n  var installSub = 0;\r\n\r\n  // Totals\r\n  const [supplyTotal, setSupplyTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n  const [installTotal, setInstallTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n  const [projectSubtotal, setProjectSubtotal] = useState(0);\r\n  const [deposit, setDeposit] = useState(0);\r\n  const [projectGrandTotal, setProjectGrandTotal] = useState(0);\r\n  const [deliveryTotal, setDeliveryTotal] = useState(0);\r\n  const [accessTotal, setAccessTotal] = useState(0);\r\n\r\n  // Display control for headers\r\n  const [toolsmachinesHeader, setToolsMachinesHeader] = useState(\"flex\");\r\n  const [removalHeader, setRemovalHeader] = useState(\"none\");\r\n  const [accessDisplay, setAccessDisplay] = useState(\"none\");\r\n  const [generalMaterialsHeader, setGeneralMaterialsHeader] = useState(\"flex\");\r\n  const [deliveryHeader, setDeliveryHeader] = useState(\"none\");\r\n\r\n  // Display control for various elements\r\n  const [installEstimateDisplay, setInstallEstimateDisplay] = useState(\"flex\");\r\n  const [laborDetailView, setLaborDetailView] = useState(\"none\");\r\n  const [showGenerateInovice, setShowGenerateInvoice] = useState(\"none\");\r\n  const [laborDetailToggleView, setLaborDetailToggleView] = useState(\"none\");\r\n  const [laborDetailArrow, setLaborDetailArrow] = useState(\"/downarrow.svg\");\r\n  const [discardButtonDisplay, setDiscardButtonDisplay] = useState(\"none\");\r\n  const [makeRevisionsButtonDisplay, setMakeRevisionsButtonDisplay] =\r\n    useState(\"block\");\r\n  const [saveRevisionsButtonDisplay, setSaveRevisionsButtonDisplay] =\r\n    useState(\"none\");\r\n  const [cloneProposalButtonDisplay, setCloneProposalButtonDisplay] =\r\n    useState(\"none\");\r\n  const [showDepositButton, setShowDepositButton] = useState(\"block\");\r\n  const [labourBreakdownDisplay, setShowLabourBreakdown] = useState(\"none\");\r\n  const [showRelated, setShowRelated] = useState(false);\r\n  const [laborDetailToggle, setLaborDetailToggle] = useState(false);\r\n\r\n  // UI controls for image preview\r\n  const [imagePreviewUrl, setImagePreviewUrl] = useState(\"\");\r\n  const [imageGalleryDisplay, setImageGalleryDisplay] = useState(false);\r\n  const [cloneProposalWindowDisplay, setCloneProposalWindowDisplay] =\r\n    useState(false);\r\n\r\n  // Revision instruction window\r\n  const [revisionInstructionDisplay, setRevisionInstructionDisplay] =\r\n    useState(false);\r\n  const [revisionAcceptDisplay, setRevisionAcceptDisplay] = useState(\"none\");\r\n  const [revisionDeclineDisplay, setRevisionDeclineDisplay] = useState(\"none\");\r\n\r\n  // Deletion state\r\n  const [deleteState, setDeleteState] = useState(false);\r\n\r\n  // Header input state\r\n  const [headerInputShown, setHeaderInputShown] = useState(0);\r\n\r\n  // Opacity control\r\n  const [supplyTotalOpacity, setSupplyTotalOpacity] = useState(\"100%\");\r\n  const [installTotalOpacity, setInstallTotalOpacity] = useState(\"100%\");\r\n\r\n  // Naming\r\n  const [projectName, setProjectName] = useState(\"\");\r\n  const [estimateName, setEstimateName] = useState(\"\");\r\n  const [homeownerName, setHomeownerName] = useState(\"\");\r\n  const [projectCaseNumber, setProjectCaseNumber] = useState(0);\r\n\r\n  // File naming\r\n  const [invoicefileMaterial, setInvoicefileMaterial] = useState(\r\n    \"invoice_material.pdf\"\r\n  );\r\n  const [invoicefileInstall, setInvoicefileInstall] = useState(\r\n    \"invoice_install.pdf\"\r\n  );\r\n\r\n  // Totals for untagged items\r\n  const [untaggedMaterialSubtotal, setUntaggedMaterialSubtotal] = useState(0);\r\n  const [untaggedInstallSubtotal, setUntaggedInstallSubtotal] = useState(0);\r\n  const [untaggedTotalSubtotal, setUntaggedTotalSubtotal] = useState(0);\r\n\r\n  // Error handling\r\n  const [errorAgreementText, setErrorAgreementText] = useState(\"\");\r\n\r\n  // Supply control\r\n  const [supplyOnlySelected, setSupplyOnlySelected] = useState(false);\r\n\r\n  const [showAccessAdjustment, setShowAccessAdjustment] = useState(false);\r\n\r\n  // Taxation\r\n  const [storeTaxes, setStoreTaxes] = useState(false);\r\n\r\n  // Scrolling control\r\n  const scrollToOverview = document.getElementById(\"overview\");\r\n  const scrollToSupply = document.getElementById(\"supply\");\r\n  const scrollToInstall = document.getElementById(\"install\");\r\n  const scrollToDesigns = document.getElementById(\"designs\");\r\n  const scrollToComments = document.getElementById(\"comments\");\r\n  const scrollToConfirm = document.getElementById(\"confirmation\");\r\n\r\n  // Case status\r\n  const [caseStatus, setCaseStatus] = useState(0);\r\n\r\n  // Button reference\r\n  const buttonRef = React.useRef(null);\r\n  const [displayStatus, setDisplayStatus] = useState({});\r\n  const [deliveryDisplayStatus, setDeliveryDisplayStatus] = useState(false);\r\n  const [removalDisplayStatus, setRemovalDisplayStatus] = useState(false);\r\n\r\n  let removalsHeader7Subtotal = 0;\r\n  let [removalsHeader8Subtotal, setRemovalsHeader8Subtotal] = useState(0);\r\n  let toolsHeader7Subtotal = 0;\r\n  let toolsHeader8Subtotal = 0;\r\n  let removalPriceSubtotal = 0;\r\n  let removalTimeSubtotal = 0;\r\n  const [projectInstallSubtotal, setProjectInstallSubtotal] = useState(0);\r\n\r\n  //Edit Tag Variables\r\n  const [tagObj, setTagObj] = useState(null);\r\n  const [tagWindowDisplay, setTagWindowDisplay] = useState(false);\r\n\r\n  // Delete Tag Variables\r\n\r\n  const [deleteTagId, setDeleteTagId] = useState(0);\r\n  const [deleteTagConfirmDisplay, setDeleteTagConfirmDisplay] = useState(false);\r\n\r\n  //Add Blank Item\r\n  const [newQuoteItem, setNewQuoteItem] = useState({});\r\n\r\n  const GetBlankQuoteItem = async () => {\r\n    const data = await GetQuoteItem(0);\r\n  };\r\n\r\n  const [sharableLink, setSharableLink] = useState(\"\");\r\n  const [sharableLinkInputDisplay, setSharableLinkInputDisplay] =\r\n    useState(\"none\");\r\n\r\n  const [showEstimateEmail, setShowEstimateEmail] = useState(false);\r\n\r\n  const [extraItemName, setExtraItemName] = useState('');\r\n  const [extraSelected, setExtraSelected] = useState('budgeted'); // default value\r\n  const [extraNotes, setExtraNotes] = useState('');\r\n  const [extraImageUrl, setExtraImageUrl] = useState('');\r\n  const [extraObjects, setExtraObjects] = useState([]);\r\n  const [openAddExtra, setOpenAddExtra] = useState(false);\r\n\r\n  function generateRandomString(length) {\r\n    const characters =\r\n      \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\r\n    let result = \"\";\r\n    const charactersLength = characters.length;\r\n    for (let i = 0; i < length; i++) {\r\n      result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n    }\r\n    return result;\r\n  }\r\n\r\n  const handleLockInEstimate = () => {\r\n    let text =\r\n      \"WARNING: You are about to lock in the values of this estimate!\\nEither OK or Cancel.\";\r\n    if (window.confirm(text) === true) {\r\n      LockInEstimate(params.quoteId);\r\n    } else {\r\n    }\r\n  };\r\n\r\n  const handleDeleteLockedEstimate = () => {\r\n    let text =\r\n      \"WARNING: You are about to delete the locked-in estimate!\\nEither OK or Cancel.\";\r\n    if (window.confirm(text) === true) {\r\n      DeleteLockedEstimate(params.quoteId);\r\n    } else {\r\n    }\r\n  };\r\n\r\n  const LockInEstimate = async (estimateId) => {\r\n    // Define headers once to avoid repetition\r\n    const headers = {\r\n      apikey: window.$POLYGONAPIKEY,\r\n      authorization: window.$POLYGONAUTHKEY,\r\n    };\r\n\r\n    try {\r\n      // Check if the estimate already exists\r\n      const checkResponse = await axios.get(\r\n        `${window.$LOCKINURL}?estimateId=eq.${estimateId}`,\r\n        { headers }\r\n      );\r\n\r\n      // Assuming the API returns an array, check its length directly\r\n      if (Array.isArray(checkResponse.data) && checkResponse.data.length > 0) {\r\n        window.alert(\"This Estimate Has Been Locked-In Already!\");\r\n      } else {\r\n        setIsLoading(true);\r\n\r\n        const quoteDataToSend = {\r\n          quote: Quote, // Make sure 'Quote' is correctly sourced\r\n          estimateId: estimateId,\r\n          caseId: params.caseId,\r\n        };\r\n\r\n        // Attempt to create a new estimate\r\n        const createResponse = await axios.post(\r\n          window.$LOCKINURL,\r\n          [quoteDataToSend],\r\n          { headers }\r\n        );\r\n\r\n        if (createResponse.status === 200 || createResponse.status === 201) {\r\n          console.log(\"Estimate added!\", createResponse.data);\r\n        } else {\r\n          // This else block might be unnecessary if all errors are caught by catch block\r\n          console.log(\"Response status not OK:\", createResponse.status);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error during estimate operation:\", error);\r\n      window.alert(\"Issue Locking-In Estimate\");\r\n    } finally {\r\n      setIsLoading(false); // Ensure this is always executed\r\n    }\r\n  };\r\n\r\n  const DeleteLockedEstimate = async (estimateId) => {\r\n    // Define headers once to avoid repetition\r\n    const headers = {\r\n      apikey: window.$POLYGONAPIKEY,\r\n      authorization: window.$POLYGONAUTHKEY,\r\n    };\r\n\r\n    try {\r\n      // Check if the estimate already exists\r\n      const checkResponse = await axios.get(\r\n        `${window.$LOCKINURL}?estimateId=eq.${estimateId}`,\r\n        { headers }\r\n      );\r\n\r\n      // Assuming the API returns an array, check its length directly\r\n      if (Array.isArray(checkResponse.data) && checkResponse.data.length > 0) {\r\n        const deleteEstimate = await axios.delete(\r\n          `${window.$LOCKINURL}?estimateId=eq.${estimateId}`,\r\n          { headers }\r\n        );\r\n        window.alert(\"Locked Estimate Deleted\");\r\n      } else {\r\n        window.alert(\"No Estimate Currently Locked In!\");\r\n      }\r\n    } finally {\r\n      setIsLoading(false); // Ensure this is always executed\r\n    }\r\n  };\r\n\r\n  // const CreateSharableLink = async () => {\r\n  //   // Generate a random string for 'viewonly'\r\n  //   const viewonly = generateRandomString(32);\r\n\r\n  //   // Extract other parameters\r\n  //   const { Id, storeId, caseId, quoteId, numberofquotes, lastrevision } =\r\n  //     params;\r\n\r\n  //   // Construct the URL\r\n  //   const baseUrl = window.location.origin;\r\n  //   const path = `/viewestimate/${Id}/${storeId}/${caseId}/${quoteId}/0/0/${viewonly}`;\r\n  //   const shareableLink = baseUrl + path;\r\n\r\n  //   // Set the link in the text input and make it visible\r\n  //   const linkText = document.getElementById(\"linkText\"); // Or use ref if you have set it up\r\n  //   linkText.value = shareableLink;\r\n\r\n  //   // Select the link text\r\n  //   linkText.select();\r\n  //   linkText.setSelectionRange(0, 99999); // For mobile devices\r\n\r\n  //   // Copy the text inside the text field\r\n  //   try {\r\n  //     await navigator.clipboard.writeText(linkText.value);\r\n  //     // Alert the copied text\r\n  //     alert(\"Sharable Link Copied To Clipboard!\");\r\n  //     return linkText.value;\r\n  //   } catch (err) {\r\n  //     console.error(\"Error copying text: \", err);\r\n  //   }\r\n  // };\r\n\r\n  const CreateSharableLink = async () => {\r\n    // Generate a random string for 'viewonly' (this now serves as your tracking code)\r\n    const viewonly = generateRandomString(32);\r\n  \r\n    // Extract other parameters\r\n    const { Id, storeId, caseId, quoteId, numberofquotes, lastrevision } = params;\r\n  \r\n    // Construct the URL\r\n    const baseUrl = window.location.origin;\r\n    const path = `/viewestimate/${Id}/${storeId}/${caseId}/${quoteId}/0/0/${viewonly}`;\r\n    const shareableLink = baseUrl + path;\r\n  \r\n    // Set the link in the text input and make it visible\r\n    const linkText = document.getElementById(\"linkText\"); // Or use a ref if you have one\r\n    linkText.value = shareableLink;\r\n    linkText.select();\r\n    linkText.setSelectionRange(0, 99999); // For mobile devices\r\n  \r\n    // Copy the text inside the text field\r\n    try {\r\n      await navigator.clipboard.writeText(linkText.value);\r\n      alert(\"Sharable Link Copied To Clipboard!\");\r\n    } catch (err) {\r\n      console.error(\"Error copying text: \", err);\r\n    }\r\n  \r\n    // Send tracking info to your backend (using your API keys)\r\n    try {\r\n      const response = await fetch('https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/shareable_links', {\r\n        method: 'POST',\r\n        headers: {\r\n           'Content-Type': 'application/json',\r\n           'apikey': window.$POLYGONAPIKEY,\r\n           'Authorization': window.$POLYGONAUTHKEY\r\n        },\r\n        body: JSON.stringify({\r\n          tracking_code: viewonly,\r\n          estimate_id: quoteId,      // Use the appropriate identifier for your estimate\r\n          project_id: caseId    // Use the correct field for your project number\r\n        })\r\n      });\r\n      const result = await response.json();\r\n      console.log('Tracking record created:', result);\r\n    } catch (error) {\r\n      console.error(\"Error creating tracking record: \", error);\r\n    }\r\n  \r\n    return shareableLink;\r\n  };\r\n  \r\n\r\n  const formattedDateTime = async () => {\r\n    const now = new Date();\r\n    const day = now.getDate();\r\n    const month = now.toLocaleString(\"default\", { month: \"short\" });\r\n    const year = now.getFullYear();\r\n    let hour = now.getHours();\r\n    const ampm = hour >= 12 ? \"PM\" : \"AM\";\r\n    hour = hour % 12;\r\n    hour = hour ? hour : 12;\r\n    const minute = now.getMinutes().toString().padStart(2, \"0\");\r\n    return `${day} ${month} ${year}, ${hour}:${minute} ${ampm}`;\r\n  };\r\n\r\n  function formatDate(isoString) {\r\n    const date = new Date(isoString);\r\n    const options = {\r\n      year: \"numeric\",\r\n      month: \"long\",\r\n      day: \"numeric\",\r\n      hour: \"2-digit\",\r\n      minute: \"2-digit\",\r\n      hour12: true,\r\n    };\r\n    return date.toLocaleString(\"en-US\", options);\r\n  }\r\n\r\n  const downloadPDF = async () => {\r\n    const timestamp = await formattedDateTime();\r\n    const input = document.getElementById(\"estimate\");\r\n\r\n    const includeElement = document.getElementById(\"include-on-pdf\");\r\n    const originalDisplayStyle = includeElement.style.display;\r\n    includeElement.style.display = \"flex\";\r\n\r\n    html2canvas(input, {\r\n      useCss: true,\r\n      scale: 1, // Reduce the size of the canvas\r\n      ignoreElements: (element) => {\r\n        return element.id === \"exclude-from-pdf\";\r\n      },\r\n    }).then((canvas) => {\r\n      includeElement.style.display = originalDisplayStyle;\r\n\r\n      const imgData = canvas.toDataURL(\"image/jpeg\", 1); // Use JPEG with 50% quality\r\n      const pdf = new jsPDF(\"p\", \"mm\", \"a4\"); // set the PDF to A4 size\r\n      const pageWidth = pdf.internal.pageSize.getWidth();\r\n      const pageHeight = pdf.internal.pageSize.getHeight();\r\n      const imgProps = pdf.getImageProperties(imgData);\r\n      const pdfWidth = pageWidth;\r\n      const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;\r\n      let pdfPages = Math.ceil(pdfHeight / pageHeight);\r\n\r\n      for (let i = 0; i < pdfPages; i++) {\r\n        if (i !== 0) {\r\n          pdf.addPage();\r\n        }\r\n        pdf.addImage(imgData, \"PNG\", 0, -(i * pageHeight), pdfWidth, pdfHeight);\r\n      }\r\n\r\n      pdf.save(`${timestamp} ${Case?.Street}.pdf`);\r\n    });\r\n  };\r\n\r\n  const DisplayImageInGallery = async (url) => {\r\n    if (!url) return;\r\n\r\n    setImagePreviewUrl(url);\r\n    setImageGalleryDisplay(true);\r\n    document.body.style.overflow = \"hidden\";\r\n  };\r\n\r\n  const DisplayLaborBreakdown = async (toggle) => {\r\n    if (toggle) {\r\n      setLaborDetailArrow(\"/downarrow.svg\");\r\n      setLaborDetailToggleView(\"none\");\r\n      setLaborDetailToggle(false);\r\n    } else {\r\n      setLaborDetailToggle(true);\r\n      setLaborDetailArrow(\"/uparrow.svg\");\r\n      setLaborDetailToggleView(\"flex\");\r\n    }\r\n  };\r\n\r\n  const toggleDisplay = (id) => {\r\n    setDisplayStatus((prevStatus) => ({\r\n      ...prevStatus,\r\n      [id]: !prevStatus[id],\r\n    }));\r\n  };\r\n\r\n  const toggleRemovalDisplay = (id) => {\r\n    setRemovalDisplayStatus((prevStatus) => ({\r\n      ...prevStatus,\r\n      [id]: !prevStatus[id],\r\n    }));\r\n  };\r\n\r\n  const GetProjectInformation = async (caseId) => {\r\n    const data = await GetCaseById(caseId);\r\n    const { Case } = data || {};\r\n\r\n    if (!Case) return;\r\n\r\n    const { Name, Tittle, CaseNumber, Street, City, CaseStatus } = Case;\r\n\r\n    setCase(Case);\r\n\r\n    if (Name) setHomeownerName(Name);\r\n    if (Tittle) setProjectName(Tittle);\r\n    if (CaseNumber) setProjectCaseNumber(CaseNumber);\r\n\r\n    if (Street && City) {\r\n      const ext = `${Street}-${City}`;\r\n      setInvoicefileInstall(`invoice_install_${ext}.pdf`);\r\n      setInvoicefileMaterial(`invoice_material_${ext}.pdf`);\r\n    }\r\n\r\n    if (\r\n      [\r\n        CaseStatus.Closed,\r\n        CaseStatus.Canceled,\r\n        CaseStatus.CancelRequested,\r\n        CaseStatus.Drafted,\r\n      ].includes(CaseStatus)\r\n    ) {\r\n      setMakeRevisionsButtonDisplay(\"none\");\r\n    }\r\n\r\n    setCaseStatus(CaseStatus);\r\n  };\r\n\r\n  const DisplayDepositButton = async () => {\r\n    if (caseStatus === CaseStatus.Construction) {\r\n      setShowDepositButton(\"none\");\r\n    } else setShowDepositButton(\"block\");\r\n  };\r\n\r\n  const [estimateGST, setEstimateGST] = useState(0);\r\n  const [estimatePST, setEstimatePST] = useState(0);\r\n\r\n  const GetProposalInformation = async (quoteid) => {\r\n    const data = await GetQuoteByIdForUserDisplay(quoteid);\r\n    if (!data || !data.quote) return;\r\n\r\n    const { quote } = data;\r\n\r\n    let removalsHeader7Subtotal = 0;\r\n    let removalsHeader8Subtotal = 0;\r\n\r\n    quote?.Removal?.Items.forEach((o) => {\r\n      removalsHeader7Subtotal += Number((o.Price + o.LaborSubtotal).toFixed(2));\r\n      removalsHeader8Subtotal += Number((o.Price + o.LaborSubtotal).toFixed(2));\r\n    });\r\n\r\n    let projectInstallSubtotal = 0;\r\n\r\n    quote?.Tags?.forEach((t) => {\r\n      const primaryItems = quote?.Material?.Items.filter(\r\n        (item) => item.Tag_Id === t.Id && item.Parent_Id === 0\r\n      );\r\n\r\n      primaryItems.forEach((o) => {\r\n        const installSub =\r\n          showRelated === true\r\n            ? o.LaborSubtotal\r\n            : o.LaborSubtotalWithRelatedItems;\r\n        projectInstallSubtotal += installSub;\r\n      });\r\n    });\r\n\r\n    quote?.Material?.Items.forEach((o) => {\r\n      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n        const installSub =\r\n          showRelated === true\r\n            ? o.LaborSubtotal\r\n            : o.LaborSubtotalWithRelatedItems;\r\n        projectInstallSubtotal += installSub;\r\n      }\r\n    });\r\n\r\n    setProjectInstallSubtotal(projectInstallSubtotal);\r\n    setProposal(quote);\r\n    setDeliveryTotal(\r\n      quote?.Delivery?.Tools?.reduce(\r\n        (accumulator, tool) => accumulator + tool.Price,\r\n        0\r\n      ) || 0\r\n    );\r\n    setAccessTotal(\r\n      quote?.AccessArea?.Items?.reduce(\r\n        (accumulator, items) => accumulator + items.Price,\r\n        0\r\n      ) || 0\r\n    );\r\n    UpdateUIBasedOnStatus(quote);\r\n\r\n    const materialSubtotal = quote?.Material?.Total?.Subtotal || 0;\r\n    const deliverySubtotal = quote?.Delivery?.Total?.Subtotal || 0;\r\n    const toolSubtotal = quote?.Tool?.Total?.Subtotal || 0;\r\n    const accessAreaSubtotal = quote?.AccessArea?.Total?.Subtotal || 0;\r\n    const installSubtotal =\r\n      Number(projectInstallSubtotal) > Stored_Values.MIN_LABOR\r\n        ? Number(projectInstallSubtotal)\r\n        : Stored_Values?.MIN_LABOR;\r\n\r\n    supplyTotal.Subtotal = (materialSubtotal + deliverySubtotal).toFixed(2);\r\n    installTotal.Subtotal = (\r\n      installSubtotal +\r\n      toolSubtotal +\r\n      removalsHeader7Subtotal +\r\n      accessAreaSubtotal\r\n    ).toFixed(2);\r\n\r\n    const subtotal =\r\n      Number(supplyTotal.Subtotal) + Number(installTotal.Subtotal);\r\n    setProjectSubtotal(\r\n      subtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n    );\r\n\r\n    if (quote.Tittle) {\r\n      setEstimateName(quote.Tittle);\r\n    }\r\n\r\n    const storeTaxArray = await GetTaxesForMetro(params.Id);\r\n    setStoreTaxes(storeTaxArray);\r\n\r\n    let gstTax = 0;\r\n    // let pstTax = 0;\r\n\r\n    const taxitems = [\r\n      { type: \"Material\", subtotal: materialSubtotal },\r\n      { type: \"Delivery\", subtotal: deliverySubtotal },\r\n      { type: \"Labor\", subtotal: installSubtotal },\r\n      { type: \"Removal\", subtotal: removalsHeader7Subtotal },\r\n      { type: \"AccessArea\", subtotal: accessAreaSubtotal },\r\n      { type: \"Tool\", subtotal: toolSubtotal },\r\n    ];\r\n\r\n    const gst = storeTaxArray.find((tax) => tax.TaxCode === \"Gst\");\r\n    // const pst = storeTaxArray.find(tax => tax.TaxCode === 'PST');\r\n\r\n    if (gst) {\r\n      taxitems.forEach((item) => {\r\n        const { type, subtotal } = item;\r\n\r\n        if (type === \"Material\") {\r\n          gstTax += (gst.Rate / 100) * subtotal;\r\n          // pstTax += (pst.Rate / 100) * subtotal;\r\n        } else {\r\n          gstTax += (gst.Rate / 100) * subtotal;\r\n        }\r\n      });\r\n    }\r\n\r\n    gstTax = gstTax.toFixed(2);\r\n    // pstTax = pstTax.toFixed(2);\r\n\r\n    // setEstimatePST(pstTax);\r\n    setEstimateGST(gstTax);\r\n\r\n    computeTotalHours(data.quote.Material.Items, data.quote.Labor.Items);\r\n    computeRemovalsTotal(data.quote.Removal.Items, data.quote.Labor.Items);\r\n    const grandTotal = Number(gstTax) + Number(subtotal.toFixed(2));\r\n    setProjectGrandTotal(grandTotal);\r\n    setDeposit(grandTotal * 0.1);\r\n\r\n    fetchExtras();\r\n\r\n  };\r\n\r\n  const fetchExtras = async () => {\r\n    try {\r\n      const response = await fetch(`https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/extras?estimate_number=eq.${params.quoteId}&select=*`, {\r\n        method: 'GET',\r\n        headers: {\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY,\r\n          'Content-Type': 'application/json'\r\n        }\r\n      });\r\n      const data = await response.json();\r\n      setExtraObjects(data);\r\n    } catch (error) {\r\n      console.error('Error fetching extras:', error);\r\n    }\r\n  };\r\n\r\n  const addExtra = async () => {\r\n    // Build the new extra item using the state variable names\r\n    const newExtra = {\r\n      item_name: extraItemName,\r\n      budget_status: extraSelected, // using extraSelected here\r\n      notes: extraNotes,\r\n      image_url: extraImageUrl,\r\n      project_number: params.caseId,\r\n      estimate_number: params.quoteId,\r\n    };\r\n  \r\n    try {\r\n      const response = await fetch('https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/extras', {\r\n        method: 'POST',\r\n        headers: {\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY,\r\n          'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(newExtra),\r\n      });\r\n  \r\n      // Assuming the response returns an array with the inserted record\r\n      if (response.status === 200 || response.status === 201) {\r\n        fetchExtras();\r\n      }\r\n    } catch (error) {\r\n      console.error('Error adding extra:', error);\r\n    }\r\n  };\r\n\r\n  const fileInputRef = useRef(null);\r\n\r\nconst handleIconClick = () => {\r\n  // Trigger the click on the hidden file input when the icon is clicked\r\n  if (fileInputRef.current) {\r\n    fileInputRef.current.click();\r\n  }\r\n};\r\n\r\nconst handleFileUpload = async (event) => {\r\n  const file = event.target.files[0];\r\n  if (file) {\r\n    // Create a FormData object and append the file\r\n    // const formData = new FormData();\r\n    // formData.append('file', file);\r\n\r\n    try {\r\n      // Pass the FormData to your UploadFileToCloud function, which returns the image URL\r\n      const imageUrl = await UploadFileToCloud(file);\r\n      // Update the state with the returned image URL\r\n      setExtraImageUrl(imageUrl);\r\n    } catch (error) {\r\n      console.error('Error uploading file:', error);\r\n    }\r\n  }\r\n};\r\n\r\n\r\nconst deleteExtra = async (id) => {\r\n  try {\r\n    const response = await fetch(`https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/extras?id=eq.${id}`, {\r\n      method: 'DELETE',\r\n      headers: {\r\n        apikey: window.$POLYGONAPIKEY,\r\n        Authorization: window.$POLYGONAUTHKEY,\r\n        'Content-Type': 'application/json',\r\n      },\r\n    });\r\n    \r\n    if (response.ok) {\r\n      // Remove the deleted item from state\r\n      setExtraObjects(prev => prev.filter(item => item.id !== id));\r\n    } else {\r\n      console.error('Failed to delete extra:', response.statusText);\r\n    }\r\n  } catch (error) {\r\n    console.error('Error deleting extra:', error);\r\n  }\r\n};\r\n\r\n\r\n\r\n\r\n  const UpdateUIBasedOnStatus = async (quoteobj) => {\r\n    const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n    if (userInfo.Role === UserRole.Manager) {\r\n      if (quoteobj.QuoteStatus === QuoteStatus.RevisionRequested) {\r\n        setRevisionDeclineDisplay(\"block\");\r\n        setRevisionAcceptDisplay(\"block\");\r\n      }\r\n      setCloneProposalButtonDisplay(\"block\");\r\n    } else if (userInfo.Role === UserRole.Estimator) {\r\n      setCloneProposalButtonDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const ChangeUIToMakeRevisions = async () => {\r\n    setHeaderInputShown(3);\r\n    setMakeRevisionsButtonDisplay(\"none\");\r\n    setDiscardButtonDisplay(\"block\");\r\n    setSaveRevisionsButtonDisplay(\"block\");\r\n  };\r\n\r\n  const UpdateQuoteItemQuantity = async (itemid, itemquantity) => {\r\n    var reverseQuantity = await ReverseQuant_QuoteItem(itemid, itemquantity);\r\n    Quote.Material.Items.find(function (o, i) {\r\n      if (o.Id === itemid) {\r\n        o.Quant = itemquantity;\r\n        o.Price = reverseQuantity * o.UnitPrice;\r\n        setSupplyTotalOpacity(\"40%\");\r\n        setInstallTotalOpacity(\"40%\");\r\n      }\r\n      return null;\r\n    });\r\n    //Change Delete State to force a rerender in React\r\n    setDeleteState(!deleteState);\r\n  };\r\n\r\n  const ValidateAgreement = async (supplyonly, caseid, quoteid) => {\r\n    if (supplyonly === true) {\r\n      var databuy = await SetQuoteTo_Buy(quoteid);\r\n      if (databuy !== null) {\r\n        PushToPayment(deposit.toFixed(2), caseid, quoteid);\r\n      } else setErrorAgreementText(\"Please try again!\");\r\n    } else {\r\n      var databuyinstall = await SetQuoteTo_Buy_Install(quoteid);\r\n      if (databuyinstall !== null) {\r\n        var depositSelect =\r\n          deposit < Stored_Values.MIN_DEPOSIT\r\n            ? Stored_Values.MIN_DEPOSIT\r\n            : deposit;\r\n        PushToPayment(depositSelect.toFixed(2), caseid, quoteid);\r\n      } else setErrorAgreementText(\"Please try again!\");\r\n    }\r\n  };\r\n\r\n  const [totalHoursByProduct, setTotalHoursByProduct] = useState({});\r\n  const [totalRemovalsByItem, setTotalRemovalsByItem] = useState({});\r\n  const [laborNamesByProduct, setLaborNamesByProduct] = useState({});\r\n\r\n  function computeTotalHours(productsArray, labourArray) {\r\n    const totalHoursByProduct = {};\r\n    const laborNamesByProduct = {};\r\n\r\n    productsArray.forEach((product, productIndex) => {\r\n      if (product.Parent_Id === 0) {\r\n        let totalHours = 0;\r\n\r\n        labourArray.forEach((labour) => {\r\n          if (\r\n            (labour.Notes === `Install ${product.Name}` ||\r\n              labour.Notes === product.Name) &&\r\n            labour.Parent_Id === product.Id\r\n          ) {\r\n            totalHours += labour.Quant;\r\n            if (!laborNamesByProduct[`${product.Name}_${productIndex}`]) {\r\n              laborNamesByProduct[`${product.Name}_${productIndex}`] =\r\n                new Set();\r\n            }\r\n            laborNamesByProduct[`${product.Name}_${productIndex}`].add(\r\n              labour.Name\r\n            );\r\n          }\r\n        });\r\n\r\n        productsArray.forEach((relatedProduct) => {\r\n          if (relatedProduct.Parent_Id === product.Id) {\r\n            labourArray.forEach((labour) => {\r\n              if (\r\n                (labour.Notes === `Install ${relatedProduct.Name}` ||\r\n                  labour.Notes === relatedProduct.Name) &&\r\n                labour.Parent_Id === relatedProduct.Id\r\n              ) {\r\n                totalHours += labour.Quant;\r\n              }\r\n            });\r\n          }\r\n        });\r\n\r\n        totalHoursByProduct[`${product.Name}_${productIndex}`] = totalHours;\r\n      }\r\n    });\r\n\r\n    setTotalHoursByProduct(totalHoursByProduct);\r\n    setLaborNamesByProduct(laborNamesByProduct);\r\n  }\r\n\r\n  function computeRemovalsTotal(removalsArray, labourArray) {\r\n    const totalRemovalsByItem = {};\r\n    const assignedLabours = new Set();\r\n\r\n    removalsArray.forEach((removal, removalIndex) => {\r\n      let totalRemovals = 0;\r\n\r\n      labourArray.forEach((labour) => {\r\n        if (assignedLabours.has(labour.Id)) return; // Skip already assigned labours\r\n\r\n        const removalMatch = removalsArray.reduce((closest, r) => {\r\n          if (\r\n            labour.Notes.includes(\"Removals\") &&\r\n            labour.Notes.split(\"-\").some((part) => r.Name.includes(part.trim()))\r\n          ) {\r\n            const currentDiff = Math.abs(\r\n              r.Price + r.LaborSubtotal - labour.Price\r\n            );\r\n            const closestDiff = closest\r\n              ? Math.abs(closest.Price + closest.LaborSubtotal - labour.Price)\r\n              : Infinity;\r\n\r\n            return currentDiff < closestDiff ? r : closest;\r\n          }\r\n          return closest;\r\n        }, null);\r\n\r\n        if (\r\n          removalMatch &&\r\n          (removalMatch.Id === removal.Id ||\r\n            removalMatch.Parent_Id === removal.Id)\r\n        ) {\r\n          totalRemovals += labour.Quant;\r\n          assignedLabours.add(labour.Id); // Mark the labour as assigned\r\n        }\r\n      });\r\n\r\n      totalRemovalsByItem[`${removal.Name}_${removalIndex}`] = totalRemovals;\r\n    });\r\n\r\n    setTotalRemovalsByItem(totalRemovalsByItem);\r\n  }\r\n\r\n  const PushToPayment = async (amount, caseid, quoteid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data !== null) {\r\n      if (data.Case !== null) {\r\n        var token = axios.defaults.headers.common[\"Authorization\"];\r\n        if (token) {\r\n          var tokenRef = token.substring(6);\r\n        } else {\r\n          tokenRef = \"am9zaHRlc3QxMDU6QWExMjM0NTY3OCQ=\";\r\n        }\r\n        var name =\r\n          data.Case.Name +\r\n          \", \" +\r\n          data.Case.Street +\r\n          \",\" +\r\n          data.Case.City +\r\n          \" on Project # \" +\r\n          data.Case.CaseNumber;\r\n        var transactionid = data.Case.CaseNumber;\r\n        var paymenturl = await MakeStripePay(\r\n          amount,\r\n          \"CAD\",\r\n          name,\r\n          transactionid,\r\n          quoteid,\r\n          data.Case.Store_Id,\r\n          tokenRef,\r\n          0\r\n        );\r\n        if (paymenturl !== null) {\r\n          window.open(paymenturl, \"_blank\");\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const SetCurrentTime = async () => {\r\n    var curtime = await GetCurrentTime();\r\n    setCurTime(curtime);\r\n  };\r\n\r\n  const ref = React.createRef();\r\n  const ref2 = React.createRef();\r\n  const options = {\r\n    orientation: \"portrait\",\r\n    unit: \"in\",\r\n    format: [12, 40],\r\n  };\r\n\r\n  var userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n  const sendEmail = async (\r\n    from,\r\n    to,\r\n    cc,\r\n    bcc,\r\n    subject,\r\n    link,\r\n    text,\r\n    signature\r\n  ) => {\r\n    if (link === true) {\r\n      const linkValue = await CreateSharableLink();\r\n      try {\r\n        const payload = {\r\n          from: from,\r\n          to: to,\r\n          cc: cc,\r\n          bcc: bcc,\r\n          subject: subject,\r\n          link: linkValue,\r\n          text: text,\r\n          signature: signature,\r\n        };\r\n        const resp = await axios.post(\r\n          `${window.$DBURL}users/ForwardEmailToZapier`,\r\n          payload,\r\n          {\r\n            headers: {\r\n              \"Content-Type\": \"application/json\",\r\n            },\r\n          }\r\n        );\r\n        if (resp.status === 200) {\r\n          setShowEstimateEmail(false);\r\n          window.alert(\"Email Sent Successfully!\");\r\n          const respquote = await SetQuoteTo_Notify(params.quoteId);\r\n        } else {\r\n          console.log(\"Failed to send email:\", resp.status, resp.statusText);\r\n          window.alert(\"Email Send Failed! Please Try Again Later\");\r\n        }\r\n      } catch (error) {\r\n        console.error(\"Error sending email:\", error);\r\n        window.alert(\"Email Send Failed! Please Try Again Later\");\r\n      }\r\n    } else {\r\n      try {\r\n        const payload = {\r\n          from: from,\r\n          to: to,\r\n          cc: cc,\r\n          bcc: bcc,\r\n          subject: subject,\r\n          link: \"\",\r\n          text: text,\r\n          signature: signature,\r\n        };\r\n        const resp = await axios.post(\r\n          `${window.$DBURL}users/ForwardEmailToZapier`,\r\n          payload,\r\n          {\r\n            headers: {\r\n              \"Content-Type\": \"application/json\",\r\n            },\r\n          }\r\n        );\r\n        if (resp.status === 200) {\r\n          setShowEstimateEmail(false);\r\n          window.alert(\"Email Sent Successfully!\");\r\n          const respquote = await SetQuoteTo_Notify(params.quoteId);\r\n          const respcase = await SetCaseTo_Processed(params.caseId);\r\n        } else {\r\n          console.log(\"Failed to send email:\", resp.status, resp.statusText);\r\n          window.alert(\"Email Send Failed! Please Try Again Later\");\r\n        }\r\n      } catch (error) {\r\n        console.error(\"Error sending email:\", error);\r\n        window.alert(\"Email Send Failed! Please Try Again Later\");\r\n      }\r\n    }\r\n  };\r\n\r\n  const SetQuoteDisplay = async (quote) => {\r\n    if (!quote) return;\r\n\r\n    const { Role } = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n    if (\r\n      Role === UserRole.Installer ||\r\n      Role === UserRole.Manager ||\r\n      Role === UserRole.Estimator\r\n    ) {\r\n      setLaborDetailView(\"block\");\r\n    }\r\n\r\n    if (\r\n      Role === UserRole.Manager ||\r\n      Role === UserRole.Estimator ||\r\n      Role === UserRole.Accountant\r\n    ) {\r\n      setShowGenerateInvoice(\"block\");\r\n      setShowLabourBreakdown(\"flex\");\r\n    }\r\n\r\n    if (quote.Delivery?.Tools?.length > 0) setDeliveryHeader(\"flex\");\r\n\r\n    if (quote.Tool?.Tools?.length > 0) setToolsMachinesHeader(\"flex\");\r\n\r\n    if (quote.Removal?.Items?.length > 0) setRemovalHeader(\"flex\");\r\n\r\n    if (quote.AccessArea?.Items?.length > 0) setAccessDisplay(\"flex\");\r\n  };\r\n\r\n  const RouteToPrevious = async (role) => {\r\n    if (role === UserRole.Manager || role === UserRole.Estimator) {\r\n      history.push(\r\n        \"/viewcase/\" + params.Id + \"/\" + params.storeId + \"/\" + params.caseId\r\n      );\r\n    } else {\r\n      history.push(\r\n        \"/viewcaseuser/\" +\r\n          params.Id +\r\n          \"/\" +\r\n          params.storeId +\r\n          \"/\" +\r\n          params.caseId\r\n      );\r\n    }\r\n  };\r\n\r\n  const DeleteTagOnQuote = async (tag_id, quote_id) => {\r\n    // Invoke the DeleteQuoteTag function and wait for the promise to resolve\r\n    const data = await DeleteQuoteTag(tag_id);\r\n\r\n    // Check if the data variable is null\r\n    if (data === null) {\r\n      // If the data variable is null, invoke the GetQuoteInfoById function\r\n      GetProposalInformation(quote_id);\r\n    }\r\n  };\r\n\r\n  //Project Comment Files\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n  const [previewImageWindowDisplay, setPreviewImageWindowDisplay] =\r\n    useState(false);\r\n  const inputFile = useRef(null);\r\n  const [photo, setPhoto] = useState(\"\");\r\n\r\n  const AddPhotoButtonClick = () => {\r\n    inputFile.current.click();\r\n  };\r\n\r\n  const handleUpload = (event) => {\r\n    setPhoto(event.target.files[0]);\r\n  };\r\n\r\n  let formdata = new FormData();\r\n\r\n  const OpenUploadImageWindow = async (photo) => {\r\n    // We want to use the try-catch pattern here to handle any errors that\r\n    // may occur when making the API call to AddImageToCloud\r\n    try {\r\n      // Check if we have a photo\r\n      if (photo !== null) {\r\n        // Add the photo to the form data\r\n        formdata.append(\"Quote Photo\", photo);\r\n\r\n        // Make the API call and store the result in a variable\r\n        const uploadedImage = await AddImageToCloud(formdata);\r\n\r\n        // If we have a result, set the preview image and open the window\r\n        if (uploadedImage !== null) {\r\n          setPreviewImage(uploadedImage);\r\n          setPreviewImageWindowDisplay(true);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      // Handle any errors that occurred during the API call\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const ResetImage = async (imgurl) => {\r\n    DeleteImageFromCloud(imgurl);\r\n    setPreviewImageWindowDisplay(false);\r\n  };\r\n\r\n  const DeleteImageFromQuoteAndCloud = async (imgurl, photoid, quoteobj) => {\r\n    DeleteImageFromCloud(imgurl);\r\n    if (photoid === 0) {\r\n      var index1 = quoteobj.Images.indexOf(imgurl);\r\n      quoteobj.Images.splice(index1, 1);\r\n    } else {\r\n      var deleteQuotePhoto = await DeleteQuotePhoto(photoid);\r\n      if (deleteQuotePhoto !== null) {\r\n      }\r\n    }\r\n    var index2 = quoteobj.Photos.indexOf(imgurl);\r\n    quoteobj.Photos.splice(index2, 1);\r\n    var data = await UpdateQuote(quoteobj);\r\n    if (data !== null) {\r\n      setProposal(data.quote);\r\n    }\r\n  };\r\n\r\n  const DeleteImageFromCloud = async (imgUrl) => {\r\n    try {\r\n      await axios.delete(`${window.$DBURL}utilities/image`, {\r\n        data: { Url: imgUrl },\r\n      });\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (photo !== \"\") {\r\n      OpenUploadImageWindow(photo);\r\n    }\r\n  }, [photo]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const previousHighlightedRef = useRef(null);\r\n\r\n  useEffect(() => {\r\n    if (scrollToItem?.id !== null && scrollToItem?.id !== undefined) {\r\n      const elementId = scrollToItem.id; // Ensure this matches the ID\r\n      const element = document.getElementById(elementId);\r\n\r\n      if (element) {\r\n        // Scroll to the element to center it in the viewport\r\n        const elementRect = element.getBoundingClientRect();\r\n        const absoluteElementTop = elementRect.top + window.pageYOffset;\r\n        const middle =\r\n          absoluteElementTop - window.innerHeight / 2 + elementRect.height / 2;\r\n\r\n        window.scrollTo({\r\n          top: middle,\r\n          behavior: \"smooth\",\r\n        });\r\n\r\n        // Apply initial highlight\r\n        element.style.border = `2px solid ${ColorPalette.PrimaryButtonBlue}`;\r\n\r\n        // Fade the border away after a short delay\r\n        setTimeout(() => {\r\n          // Step 2 & 3: Initiate the transition to fade the border color\r\n          element.style.transition = \"border-color 3s ease-out\";\r\n          element.style.borderColor = \"transparent\";\r\n        }, 1000); // Adjust the delay as needed to ensure the blue is visible before fading\r\n\r\n        // Optionally clear the style completely after the transition ends\r\n        setTimeout(() => {\r\n          element.style.border = \"\"; // Remove the border style if desired\r\n          element.style.transition = \"\"; // Clear any transition properties\r\n        }, 4000); // This timeout should be the sum of the initial delay and the transition duration\r\n\r\n        // Update ref to the currently highlighted element\r\n        previousHighlightedRef.current = element;\r\n\r\n        // Reset scrollToItem after the operation\r\n        if (onResetScrollToItem) {\r\n          onResetScrollToItem();\r\n        }\r\n      }\r\n    }\r\n  }, [scrollToItem, onResetScrollToItem]);\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetProposalInformation(params.quoteId);\r\n    GetProjectInformation(params.caseId);\r\n    DisplayDepositButton();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    if (refreshEstimate == true) {\r\n      GetProposalInformation(params.quoteId);\r\n      refreshEstimateFinished();\r\n    }\r\n  }, [refreshEstimate]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    let header7Subtotal = 0;\r\n    let header8Subtotal = 0;\r\n\r\n    Quote?.Removal?.Items.forEach((o) => {\r\n      header7Subtotal += o.Price + o.LaborSubtotal;\r\n      header8Subtotal += o.Price + o.LaborSubtotal;\r\n    });\r\n\r\n    setRemovalsHeader8Subtotal(header8Subtotal);\r\n  }, [Quote?.Removal?.Items]);\r\n\r\n  useEffect(() => {\r\n    if (params.numberofquotes === 0) {\r\n      setMakeRevisionsButtonDisplay(\"none\");\r\n      // setHideProjectConfirmationDisplay(\"none\");\r\n    }\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    let newUntaggedMaterialSubtotal = 0;\r\n    let newUntaggedInstallSubtotal = 0;\r\n    let newUntaggedTotalSubtotal = 0;\r\n\r\n    Quote?.Material?.Items.forEach((o) => {\r\n      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n        const materialSub = o.SubtotalWithRelatedItems;\r\n        const installSub = o.LaborSubtotalWithRelatedItems;\r\n\r\n        newUntaggedMaterialSubtotal += materialSub;\r\n        newUntaggedInstallSubtotal += installSub;\r\n        newUntaggedTotalSubtotal += materialSub + installSub;\r\n      }\r\n    });\r\n\r\n    setUntaggedMaterialSubtotal(newUntaggedMaterialSubtotal);\r\n    setUntaggedInstallSubtotal(newUntaggedInstallSubtotal);\r\n    setUntaggedTotalSubtotal(newUntaggedTotalSubtotal);\r\n  }, [Quote?.Material?.Items]);\r\n\r\n  useEffect(() => {\r\n    SetCurrentTime();\r\n    SetQuoteDisplay(Quote);\r\n  }, [Quote]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  var observe;\r\n  if (window.attachEvent) {\r\n    observe = function (element, event, handler) {\r\n      element?.attachEvent(\"on\" + event, handler);\r\n    };\r\n  } else {\r\n    observe = function (element, event, handler) {\r\n      element?.addEventListener(event, handler, false);\r\n    };\r\n  }\r\n  function init() {\r\n    var text = document.getElementById(\"text\");\r\n    if (text !== null) {\r\n      function resize() {\r\n        text.style.height = \"auto\";\r\n        text.style.height = text.scrollHeight + \"px\";\r\n      }\r\n      /* 0-timeout to get the already changed text */\r\n      function delayedResize() {\r\n        window.setTimeout(resize, 0);\r\n      }\r\n      observe(text, \"change\", resize);\r\n      observe(text, \"cut\", delayedResize);\r\n      observe(text, \"paste\", delayedResize);\r\n      observe(text, \"drop\", delayedResize);\r\n      observe(text, \"keydown\", delayedResize);\r\n\r\n      resize();\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    init();\r\n  }, [Quote.Notes]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  function convertHoursToTimeString(businessHours) {\r\n    const HOURS_IN_DAY = 8; // Business hours in a day\r\n\r\n    if (businessHours < HOURS_IN_DAY) {\r\n      return \"Less than 1 Business Day\";\r\n    } else {\r\n      // Calculate the lower and upper bounds for business days\r\n      let lowerDayBound = Math.floor(businessHours / HOURS_IN_DAY);\r\n      let upperDayBound = Math.ceil(businessHours / HOURS_IN_DAY);\r\n\r\n      // If the upper and lower bounds are the same, it means it's exactly that many days\r\n      if (lowerDayBound === upperDayBound) {\r\n        return `${lowerDayBound} Business Day(s)`;\r\n      } else {\r\n        // Provide a range of days\r\n        return `${lowerDayBound}-${upperDayBound} Business Days`;\r\n      }\r\n    }\r\n  }\r\n\r\n  let totalAggregatedDeliveryCost = 0;\r\n  let DeliveryItemsNoTag = [];\r\n\r\n  const primaryItemsDeliveryItems = Quote?.Material?.Items?.filter(\r\n    (item) => item.Tag_Id === 0 && item.Parent_Id === 0\r\n  );\r\n\r\n  primaryItemsDeliveryItems?.forEach((o) => {\r\n    Quote.Delivery.Tools.forEach((tool) => {\r\n      if (o.Id === tool.Item_Id) {\r\n        DeliveryItemsNoTag.push(tool);\r\n      }\r\n    });\r\n\r\n    // Process related items\r\n    if (o.RelatedItems && o.RelatedItems.length > 0) {\r\n      addRelatedDeliveryItems(o.RelatedItems, Quote.Delivery.Tools);\r\n    }\r\n  });\r\n\r\n  function addRelatedDeliveryItems(relatedItems, tools) {\r\n    relatedItems.forEach((relatedItem) => {\r\n      tools.forEach((tool) => {\r\n        if (relatedItem.Id === tool.Item_Id) {\r\n          DeliveryItemsNoTag.push(tool);\r\n        }\r\n      });\r\n\r\n      // Process sub-related items\r\n      if (relatedItem.RelatedItems && relatedItem.RelatedItems.length > 0) {\r\n        addRelatedDeliveryItems(relatedItem.RelatedItems, tools);\r\n      }\r\n    });\r\n  }\r\n\r\n  primaryItemsDeliveryItems?.forEach((o) => {\r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      // Check deliveries for the untagged item itself\r\n      Quote.Delivery.Tools.forEach((tool) => {\r\n        if (o.Id === tool.Item_Id) {\r\n          totalAggregatedDeliveryCost += tool.Price;\r\n        }\r\n      });\r\n\r\n      // Check deliveries for the related items of the untagged item\r\n      if (o.RelatedItems && o.RelatedItems.length > 0) {\r\n        addRelatedItemsDeliveryCost(o.RelatedItems, Quote.Delivery.Tools);\r\n      }\r\n    }\r\n\r\n    // For items that aren't untagged but have related items\r\n    if (o.RelatedItems && o.Parent_Id !== 0) {\r\n      addRelatedItemsDeliveryCost(o.RelatedItems, Quote.Delivery.Tools);\r\n    }\r\n  });\r\n\r\n  function addRelatedItemsDeliveryCost(relatedItems, tools) {\r\n    relatedItems.forEach((relatedItem) => {\r\n      tools.forEach((tool) => {\r\n        if (relatedItem.Id === tool.Item_Id) {\r\n          totalAggregatedDeliveryCost += tool.Price;\r\n        }\r\n      });\r\n\r\n      // Check for sub-related items\r\n      if (relatedItem.RelatedItems && relatedItem.RelatedItems.length > 0) {\r\n        addRelatedItemsDeliveryCost(relatedItem.RelatedItems, tools);\r\n      }\r\n    });\r\n  }\r\n\r\n  let removalsMaterialTotal = 0;\r\n  let removalsLaborTotal = 0;\r\n\r\n  Quote?.Removal?.Items?.filter(\r\n    (removalItem) => removalItem.Tag_Id === 0\r\n  ).forEach((o) => {\r\n    removalsMaterialTotal += o.Price;\r\n    removalsLaborTotal += o.LaborSubtotal;\r\n  });\r\n\r\n  const finalUntaggedMaterialSubtotal =\r\n    untaggedMaterialSubtotal +\r\n    totalAggregatedDeliveryCost +\r\n    removalsMaterialTotal;\r\n  const finalUntaggedInstallSubtotal =\r\n    untaggedInstallSubtotal + totalAggregatedDeliveryCost + removalsLaborTotal;\r\n  const finalUntaggedTotalSubtotal =\r\n    untaggedTotalSubtotal +\r\n    totalAggregatedDeliveryCost +\r\n    removalsMaterialTotal +\r\n    removalsLaborTotal;\r\n\r\n  //General Time\r\n\r\n  // Declare variables to accumulate the total time in decimal hours\r\n  let totalInstallTimeInDecimalHours = 0;\r\n  let totalRemovalTimeInDecimalHours = 0;\r\n\r\n  // Iterate through the material items to accumulate the installation time\r\n  Quote?.Material?.Items?.forEach((o) => {\r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      const laborName = laborNamesByProduct[`${o.Name}_${o.Id}`] || \"\";\r\n      const laborItem = Quote.Labor.Items.find(\r\n        (item) => item.Name === laborName\r\n      );\r\n      const hourlyRate = laborItem ? laborItem.UnitPrice : 154;\r\n      const installSub =\r\n        displayStatus[o.Id] === true\r\n          ? o.LaborSubtotal\r\n          : o.LaborSubtotalWithRelatedItems;\r\n      totalInstallTimeInDecimalHours += installSub / hourlyRate;\r\n    }\r\n  });\r\n\r\n  // Iterate through the removal items to accumulate the removal time\r\n  Quote?.Removal?.Items?.forEach((o) => {\r\n    const removalTime = totalRemovalsByItem[`${o.Name}_${o.Id}`] || 0;\r\n    totalRemovalTimeInDecimalHours += removalTime;\r\n  });\r\n\r\n  // Use `totalTimeString` in the subtotal section to display the total time\r\n\r\n  const RemovalItemsNoTag =\r\n    Quote?.Removal?.Items?.filter(\r\n      (removalItem) => removalItem.Tag_Id === 0\r\n    ).map((item) => {\r\n      const originalRemovalIndex = Quote.Removal.Items.findIndex(\r\n        (removal) => removal.Id === item.Id\r\n      );\r\n      const removalTime =\r\n        totalRemovalsByItem[`${item.Name}_${originalRemovalIndex}`] || 0;\r\n      return {\r\n        ...item,\r\n        removalTime: decimalHoursToTimeString(removalTime), // Add the time property\r\n      };\r\n    }) || []; // Default to an empty array if undefined\r\n\r\n  // Calculate the total removal cost, quantity, etc.\r\n  const totalRemovalCost = RemovalItemsNoTag.reduce(\r\n    (sum, item) => sum + item.Price + item.LaborSubtotal,\r\n    0\r\n  );\r\n  const totalRemovalQuantity = RemovalItemsNoTag.reduce(\r\n    (sum, item) => sum + item.Quant,\r\n    0\r\n  );\r\n  const totalRemovalTime = RemovalItemsNoTag.reduce((sum, item) => {\r\n    const originalRemovalIndex = Quote.Removal.Items.findIndex(\r\n      (removal) => removal.Id === item.Id\r\n    );\r\n    return (\r\n      sum + (totalRemovalsByItem[`${item.Name}_${originalRemovalIndex}`] || 0)\r\n    );\r\n  }, 0);\r\n\r\n  const [selectedTagId, setSelectedTagId] = useState(null);\r\n  const [showQuoteLineItem, setShowQuoteLineItem] = useState(false);\r\n  const [showToolLineItem, setShowToolLineItem] = useState(false);\r\n\r\n  const [addOnSelectedItem, setAddOnSelectedItem] = useState({});\r\n\r\n  const [deleteItemConfirmDisplay, setDeleteItemConfirmDisplay] =\r\n    useState(false);\r\n  const [deleteItemId, setDeleteItemId] = useState(0);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n\r\n  // Calculate the total time and convert it to a displayable format\r\n  const totalTimeInDecimalHours =\r\n    totalInstallTimeInDecimalHours + totalRemovalTimeInDecimalHours;\r\n  const totalTimeString = decimalHoursToTimeString(\r\n    totalTimeInDecimalHours + totalRemovalTime\r\n  );\r\n\r\n  const handleClick = (index) => {\r\n    const element = document.querySelector(`[data-scroll-id=\"${index}\"]`);\r\n    if (element) {\r\n      element.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\r\n    }\r\n  };\r\n\r\n  const SaveAndSendEstimate = async () => {\r\n    setIsLoading(true);\r\n    try {\r\n      const data = await UpdateQuote(Quote);\r\n      if (data !== null) {\r\n        const notify = await SetQuoteTo_Notify(params.quoteId);\r\n        if (notify !== null) {\r\n          window.alert(\"Homeowner Notified\");\r\n        }\r\n      }\r\n    } catch (error) {\r\n      setIsLoading(false);\r\n      window.alert(error);\r\n    }\r\n    setIsLoading(false);\r\n  };\r\n\r\n  const SaveEstimateText = async () => {\r\n    setIsLoading(true);\r\n    try {\r\n      var accessObj = {\r\n        Id: Quote.AccessArea.Id,\r\n        Width: Quote.AccessArea.Width,\r\n        Length: Quote.AccessArea.Length,\r\n        Obstruct: Quote.AccessArea.Obstruct,\r\n        Elevation: Quote.AccessArea.Elevation,\r\n      };\r\n      const accessData = await UpdateQuote_AccessArea(accessObj);\r\n      const data = await UpdateQuote(Quote);\r\n      if (data !== null && accessData !== null) {\r\n        GetProposalInformation(params.quoteId);\r\n        // setSaveEstimate(false)\r\n      }\r\n    } catch (error) {\r\n      setIsLoading(false);\r\n    }\r\n    setIsLoading(false);\r\n  };\r\n\r\n  const buildMaterialTableBody = () => {\r\n    const tableBody = [\r\n      [\r\n        {\r\n          text: \"DESCRIPTION\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"QTY\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"MAT. RATE\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"INST. RATE\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"INST. TIME\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"AMOUNT\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n      ],\r\n    ];\r\n\r\n    // Function to handle undefined values\r\n    const safeValue = (value, defaultValue = \"N/A\") =>\r\n      value !== undefined && value !== null ? value : defaultValue;\r\n\r\n    // Function to add item rows to the table body\r\n    const addItemRows = (items) => {\r\n      items.forEach((o) => {\r\n        const materialSub = safeValue(\r\n          displayStatus[o.Id] === true ? o.Price : o.SubtotalWithRelatedItems,\r\n          0\r\n        );\r\n        const installSub = safeValue(\r\n          displayStatus[o.Id] === true\r\n            ? o.LaborSubtotal\r\n            : o.LaborSubtotalWithRelatedItems,\r\n          0\r\n        );\r\n\r\n        // Perform necessary calculations\r\n        const itemName = o.Name || \"\";\r\n        const quantity =\r\n          Number(safeValue(o?.Quant, 0))\r\n            ?.toFixed(2)\r\n            ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n          \" \" +\r\n          safeValue(o.DisplayUnit, \"\");\r\n        const materialRate =\r\n          o?.Quant !== 0\r\n            ? (materialSub / o?.Quant).toFixed(4)\r\n            : materialSub.toFixed(2);\r\n        const installRate =\r\n          o?.Quant !== 0\r\n            ? (installSub / o?.Quant).toFixed(4)\r\n            : installSub.toFixed(2);\r\n        const subtotal = (\r\n          parseFloat(materialSub.toFixed(2)) + parseFloat(installSub.toFixed(2))\r\n        ).toFixed(2);\r\n        const originalIndex = Quote?.Material?.Items.findIndex(\r\n          (item) => item.Id === o.Id\r\n        );\r\n        const laborNames = laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n          ? Array.from(laborNamesByProduct[`${o.Name}_${originalIndex}`]).join(\r\n              \", \"\r\n            )\r\n          : \"\";\r\n        const laborName = laborNames ? laborNames.split(\", \")[0] : \"\"; // Adjust as needed if multiple names\r\n        const laborItem = Quote?.Labor?.Items?.find(\r\n          (item) => item.Name === laborName\r\n        );\r\n        const hourlyRate = laborItem ? laborItem.UnitPrice : 154;\r\n\r\n        tableBody.push([\r\n          { text: itemName, margin: [0, 5, 0, 5], fontSize: 10 },\r\n          { text: quantity, alignment: \"center\", fontSize: 10 },\r\n          { text: `$${materialRate}`, alignment: \"center\", fontSize: 10 },\r\n          { text: `$${installRate}`, alignment: \"center\", fontSize: 10 },\r\n          {\r\n            text:\r\n              installSub === 0 ||\r\n              installSub === undefined ||\r\n              installSub === null\r\n                ? \"0\"\r\n                : decimalHoursToTimeString(installSub / hourlyRate),\r\n            alignment: \"center\",\r\n            fontSize: 10,\r\n          },\r\n          {\r\n            text: `$${subtotal.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n            alignment: \"center\",\r\n            fontSize: 10,\r\n          },\r\n        ]);\r\n      });\r\n    };\r\n\r\n    // Function to add removal items to the table body\r\n    const addRemovalRows = (removalItems) => {\r\n      removalItems.forEach((o) => {\r\n        const itemName = o.Name || \"\";\r\n        const quantity =\r\n          Number(safeValue(o?.Quant, 0))\r\n            ?.toFixed(2)\r\n            ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n          \" \" +\r\n          safeValue(o.DisplayUnit, \"\");\r\n        const removalTotal = o.Price + o.LaborSubtotal;\r\n        const installSub = o.LaborSubtotal || 0;\r\n        const originalIndex = Quote.Material.Items.findIndex(\r\n          (item) => item.Id === o.Id\r\n        );\r\n        const laborNames = laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n          ? Array.from(laborNamesByProduct[`${o.Name}_${originalIndex}`]).join(\r\n              \", \"\r\n            )\r\n          : \"\";\r\n        const laborName = laborNames ? laborNames.split(\", \")[0] : \"\"; // Adjust as needed if multiple names\r\n        const laborItem = Quote.Labor.Items.find(\r\n          (item) => item.Name === laborName\r\n        );\r\n        const hourlyRate = laborItem ? laborItem.UnitPrice : 154;\r\n\r\n        tableBody.push([\r\n          { text: itemName, margin: [0, 5, 0, 5], fontSize: 10 },\r\n          { text: quantity, alignment: \"center\", fontSize: 10 },\r\n          { text: \"\", alignment: \"center\", fontSize: 10 }, // Assuming no material rate for removals\r\n          { text: \"\", alignment: \"center\", fontSize: 10 }, // Assuming no install rate for removals\r\n          {\r\n            text:\r\n              installSub === 0 ||\r\n              installSub === undefined ||\r\n              installSub === null\r\n                ? \"0\"\r\n                : decimalHoursToTimeString(installSub / hourlyRate),\r\n            alignment: \"center\",\r\n            fontSize: 10,\r\n          },\r\n          {\r\n            text: `$${removalTotal\r\n              .toFixed(2)\r\n              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n            alignment: \"center\",\r\n            fontSize: 10,\r\n          },\r\n        ]);\r\n      });\r\n    };\r\n\r\n    // Function to add a single delivery row with aggregated totals\r\n    const addAggregatedDeliveryRow = (deliveries, tagId) => {\r\n      const totalQuantity = deliveries.reduce(\r\n        (sum, tool) => sum + (tool.Quant || 0),\r\n        0\r\n      );\r\n      const totalCost = deliveries.reduce((sum, tool) => sum + tool.Price, 0);\r\n\r\n      if (totalCost > 0) {\r\n        tableBody.push([\r\n          { text: \"Deliveries\", margin: [0, 5, 0, 5], fontSize: 10 },\r\n          {\r\n            text:\r\n              totalQuantity.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n              \" \" +\r\n              (deliveries[0]?.DisplayUnit || \"\"),\r\n            alignment: \"center\",\r\n            fontSize: 10,\r\n          },\r\n          { text: \"\", alignment: \"center\", fontSize: 10 }, // Assuming no material rate for deliveries\r\n          { text: \"\", alignment: \"center\", fontSize: 10 }, // Assuming no install rate for deliveries\r\n          { text: \"\", alignment: \"center\", fontSize: 10 }, // Assuming no install time for deliveries\r\n          {\r\n            text: `$${totalCost\r\n              .toFixed(2)\r\n              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n            alignment: \"center\",\r\n            fontSize: 10,\r\n          },\r\n        ]);\r\n      }\r\n    };\r\n\r\n    // Add items for each tag\r\n    const tags = safeValue(Quote?.Tags, []);\r\n    tags.forEach((tag) => {\r\n      const tagItems = safeValue(\r\n        Quote?.Material?.Items.filter(\r\n          (o) => o.Tag_Id === tag.Id && o.Parent_Id === 0\r\n        ),\r\n        []\r\n      );\r\n      const tagRemovals = safeValue(\r\n        Quote?.Removal?.Items.filter((o) => o.Tag_Id === tag.Id),\r\n        []\r\n      );\r\n      const matchedDeliveries = [];\r\n\r\n      function checkDeliveries(item) {\r\n        // Check for deliveries related to the item itself\r\n        Quote.Delivery.Tools.forEach((tool) => {\r\n          if (item.Id === tool.Item_Id) {\r\n            matchedDeliveries.push({\r\n              ...tool,\r\n              Tag_Id: item.Tag_Id,\r\n            });\r\n          }\r\n        });\r\n\r\n        // If the item has related items, check for deliveries related to those as well\r\n        if (item.RelatedItems && item.RelatedItems.length > 0) {\r\n          item.RelatedItems.forEach((relatedItem) => {\r\n            checkDeliveries(relatedItem); // Recursive call for nested related items\r\n          });\r\n        }\r\n      }\r\n\r\n      tagItems.forEach((primaryItem) => {\r\n        checkDeliveries(primaryItem);\r\n      });\r\n\r\n      if (\r\n        tagItems.length > 0 ||\r\n        tagRemovals.length > 0 ||\r\n        matchedDeliveries.length > 0\r\n      ) {\r\n        tableBody.push([\r\n          {\r\n            text: safeValue(tag.TagName),\r\n            colSpan: 6,\r\n            alignment: \"left\",\r\n            bold: true,\r\n            fillColor: \"#f0f0f0\",\r\n            fontSize: 10,\r\n          },\r\n          {},\r\n          {},\r\n          {},\r\n          {},\r\n          {},\r\n        ]);\r\n\r\n        // Add items under this tag\r\n        addItemRows(tagItems);\r\n\r\n        // Add removal items under this tag\r\n        addRemovalRows(tagRemovals);\r\n\r\n        // Add a single aggregated delivery row under this tag\r\n        addAggregatedDeliveryRow(matchedDeliveries, tag.Id);\r\n      }\r\n    });\r\n\r\n    // Add primary items (no tag) under \"General Materials\"\r\n    const primaryItems = safeValue(\r\n      Quote?.Material?.Items.filter((o) => o.Parent_Id === 0 && o.Tag_Id === 0),\r\n      []\r\n    );\r\n    const generalRemovals = safeValue(\r\n      Quote?.Removal?.Items.filter((o) => o.Tag_Id === 0),\r\n      []\r\n    );\r\n    const generalDeliveries = [];\r\n\r\n    function checkGeneralDeliveries(item) {\r\n      // Check for deliveries related to the item itself\r\n      Quote.Delivery.Tools.forEach((tool) => {\r\n        if (item.Id === tool.Item_Id) {\r\n          generalDeliveries.push({\r\n            ...tool,\r\n            Tag_Id: item.Tag_Id,\r\n          });\r\n        }\r\n      });\r\n\r\n      // If the item has related items, check for deliveries related to those as well\r\n      if (item.RelatedItems && item.RelatedItems.length > 0) {\r\n        item.RelatedItems.forEach((relatedItem) => {\r\n          checkGeneralDeliveries(relatedItem); // Recursive call for nested related items\r\n        });\r\n      }\r\n    }\r\n\r\n    primaryItems.forEach((primaryItem) => {\r\n      checkGeneralDeliveries(primaryItem);\r\n    });\r\n\r\n    let totalAggregatedDeliveryCost = generalDeliveries.reduce(\r\n      (sum, tool) => sum + tool.Price,\r\n      0\r\n    );\r\n\r\n    if (\r\n      primaryItems.length > 0 ||\r\n      generalRemovals.length > 0 ||\r\n      totalAggregatedDeliveryCost > 0\r\n    ) {\r\n      tableBody.push([\r\n        {\r\n          text: \"General Materials\",\r\n          colSpan: 6,\r\n          alignment: \"left\",\r\n          bold: true,\r\n          fillColor: \"#f0f0f0\",\r\n          fontSize: 10,\r\n        },\r\n        {},\r\n        {},\r\n        {},\r\n        {},\r\n        {},\r\n      ]);\r\n      addItemRows(primaryItems);\r\n      addRemovalRows(generalRemovals);\r\n      addAggregatedDeliveryRow(generalDeliveries, 0);\r\n    }\r\n\r\n    return tableBody;\r\n  };\r\n\r\n  const buildMachinesTableBody = () => {\r\n    const tableBody = [\r\n      [\r\n        {\r\n          text: \"Machines, Disposals, & Access\",\r\n          colSpan: 6,\r\n          alignment: \"left\",\r\n          bold: true,\r\n          fillColor: \"#f0f0f0\",\r\n          fontSize: 10,\r\n        },\r\n        {},\r\n        {},\r\n        {},\r\n        {},\r\n        {},\r\n      ],\r\n      [\r\n        {\r\n          text: \"DESCRIPTION\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"QTY\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"RENTAL\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"MOB. COST\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"RATE\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"AMOUNT\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n      ],\r\n    ];\r\n\r\n    // Function to handle undefined values\r\n    const safeValue = (value, defaultValue = \"\") =>\r\n      value !== undefined && value !== null ? value : defaultValue;\r\n\r\n    // Ensure both Tools and AccessArea are arrays\r\n    const tools = Array.isArray(Quote?.Tool?.Tools) ? Quote?.Tool?.Tools : [];\r\n    const accessItems = Array.isArray(Quote?.AccessArea?.Items)\r\n      ? Quote?.AccessArea?.Items\r\n      : [];\r\n\r\n    // Combine Tools and AccessArea items\r\n    const toolsAndAccessItems = [...tools, ...accessItems];\r\n\r\n    toolsAndAccessItems.forEach((o) => {\r\n      const itemName = o.ToolName || o.Name || \"\";\r\n      const quantity =\r\n        Number(safeValue(o?.Quant, 0))\r\n          ?.toFixed(2)\r\n          ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n        \" \" +\r\n        safeValue(o.DisplayUnit, \"\");\r\n      const rentalPrice =\r\n        o.RentalRate > 0\r\n          ? `$${o.RentalRate.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`\r\n          : \"\";\r\n      const moveCost =\r\n        o.BasePrice > 0\r\n          ? `$${o.BasePrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`\r\n          : \"\";\r\n      const rentalRate =\r\n        o.RentalRate > 0\r\n          ? `$${o.RentalRate.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`\r\n          : \"\";\r\n      const subtotal = `$${o.Price.toFixed(2).replace(\r\n        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n        \",\"\r\n      )}`;\r\n\r\n      tableBody.push([\r\n        { text: itemName, margin: [0, 5, 0, 5], fontSize: 10 },\r\n        { text: quantity, alignment: \"center\", fontSize: 10 },\r\n        { text: rentalPrice, alignment: \"center\", fontSize: 10 },\r\n        { text: moveCost, alignment: \"center\", fontSize: 10 },\r\n        { text: rentalRate, alignment: \"center\", fontSize: 10 },\r\n        { text: subtotal, alignment: \"center\", fontSize: 10 },\r\n      ]);\r\n    });\r\n\r\n    return tableBody;\r\n  };\r\n\r\n  //Start of the PDF\r\n\r\n  const dd = {\r\n    content: [\r\n      {\r\n        columns: [\r\n          {\r\n            image:\r\n              \"data:image/png;base64,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\",\r\n            width: 100,\r\n            margin: [0, 0, 0, 10],\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        columns: [\r\n          {\r\n            text: \"New Rhodes Construction\\n12306 McTavish Road\\nPitt Meadows BC V3Y1Z1\\n+1 (778-657-5944)\\noffice@newrhodesconstruction.com\\nwww.newrhodesconstruction.com\\nGST/HST Registration No. 781153283RT0001\",\r\n            margin: [0, 0, 0, 20],\r\n            fontSize: 8, // Reduced font size\r\n          },\r\n          {\r\n            text: \".\",\r\n            alignment: \"right\",\r\n            margin: [0, 0, 0, 20],\r\n            fontSize: 8, // Reduced font size\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        text: \"ESTIMATE\",\r\n        style: \"header\",\r\n        alignment: \"left\",\r\n        color: \"#169ADB\",\r\n        fontSize: 16,\r\n      },\r\n      {\r\n        columns: [\r\n          {\r\n            text: [\r\n              { text: \"SENT TO\\n\", bold: true, fontSize: 10 },\r\n              `${homeownerName}\\n${Case?.Email}\\n${Case?.Street}\\n${Case?.City}\\n${Case?.Phone}\\n\\n`,\r\n\r\n              { text: \"PROJECT NAME\\n\", bold: true, fontSize: 10 },\r\n              `${estimateName}\\n`,\r\n            ],\r\n            margin: [0, 20, 0, 20],\r\n            fontSize: 10, // Reduced font size\r\n          },\r\n          {\r\n            columns: [\r\n              {\r\n                width: \"auto\",\r\n                stack: [\r\n                  { text: \"ESTIMATE # \", bold: true, fontSize: 10 },\r\n                  { text: \"DATE \", bold: true, fontSize: 10 },\r\n                  { text: \"TERMS \", bold: true, fontSize: 10 },\r\n                ],\r\n                margin: [125, 20, 0, 20],\r\n              },\r\n              {\r\n                width: \"auto\",\r\n                stack: [\r\n                  { text: `${params.quoteId}\\n`, fontSize: 10 },\r\n                  {\r\n                    text: `${moment(Quote?.EditTime).format(\"ll\")}\\n`,\r\n                    fontSize: 10,\r\n                  },\r\n                  { text: \"Due on receipt\\n\", fontSize: 10 },\r\n                ],\r\n                margin: [10, 20, 0, 20], // Adds some spacing between the columns\r\n              },\r\n            ],\r\n            alignment: \"left\",\r\n            margin: [0, 20, 0, 20],\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        table: {\r\n          headerRows: 1,\r\n          widths: [\"30%\", \"15%\", \"15%\", \"15%\", \"15%\", \"15%\"],\r\n          body: buildMaterialTableBody(),\r\n        },\r\n        layout: {\r\n          hLineWidth: function (i, node) {\r\n            return 0; // No horizontal lines\r\n          },\r\n          vLineWidth: function (i, node) {\r\n            return 0; // No vertical lines\r\n          },\r\n        },\r\n      },\r\n      {\r\n        table: {\r\n          headerRows: 1,\r\n          widths: [\"30%\", \"15%\", \"15%\", \"15%\", \"15%\", \"15%\"],\r\n          body: buildMachinesTableBody(),\r\n        },\r\n        layout: {\r\n          hLineWidth: function (i, node) {\r\n            return 0; // No horizontal lines\r\n          },\r\n          vLineWidth: function (i, node) {\r\n            return 0; // No vertical lines\r\n          },\r\n        },\r\n      },\r\n\r\n      {\r\n        columns: [\r\n          {\r\n            width: \"*\",\r\n            text: \"\",\r\n          },\r\n          {\r\n            width: \"auto\",\r\n            table: {\r\n              body: [\r\n                [\r\n                  { text: \"Materials\", alignment: \"right\", fontSize: 10 },\r\n                  {\r\n                    text: `$${Quote?.Material?.Total?.Subtotal?.toFixed(\r\n                      2\r\n                    ).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  { text: \"Delivery\", alignment: \"right\", fontSize: 10 },\r\n                  {\r\n                    text: `$${Quote?.Delivery?.Total?.Subtotal?.toFixed(\r\n                      2\r\n                    ).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  { text: \"Labour\", alignment: \"right\", fontSize: 10 },\r\n                  {\r\n                    text: `$${Number(\r\n                      projectInstallSubtotal + removalsHeader8Subtotal\r\n                    )\r\n                      .toFixed(2)\r\n                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                ...(Number(projectInstallSubtotal + removalsHeader8Subtotal) <=\r\n                525\r\n                  ? [\r\n                      [\r\n                        {\r\n                          text: \"Minimum Labour Fee\",\r\n                          alignment: \"right\",\r\n                          fontSize: 10,\r\n                        },\r\n                        {\r\n                          text: `$${Stored_Values?.MIN_LABOR?.toFixed(2)}`,\r\n                          alignment: \"right\",\r\n                          fontSize: 10,\r\n                        },\r\n                      ],\r\n                    ]\r\n                  : []),\r\n                [\r\n                  {\r\n                    text: \"Machines, Disposals, Access\",\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                  {\r\n                    text: `$${(\r\n                      parseFloat(\r\n                        Quote?.Tool?.Total?.Subtotal?.toFixed(2).replace(\r\n                          /,/g,\r\n                          \"\"\r\n                        )\r\n                      ) +\r\n                      parseFloat(\r\n                        Quote?.AccessArea?.Total?.Subtotal?.toFixed(2).replace(\r\n                          /,/g,\r\n                          \"\"\r\n                        )\r\n                      )\r\n                    )\r\n                      .toFixed(2)\r\n                      .toString()\r\n                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  {\r\n                    colSpan: 2,\r\n                    stack: [\r\n                      {\r\n                        canvas: [\r\n                          {\r\n                            type: \"line\",\r\n                            x1: 0,\r\n                            y1: 0,\r\n                            x2: 250,\r\n                            y2: 0,\r\n                            lineWidth: 1,\r\n                            lineColor: \"#169ADB\",\r\n                          },\r\n                        ],\r\n                        margin: [0, 5, 0, 5],\r\n                      },\r\n                    ],\r\n                    alignment: \"right\",\r\n                  },\r\n                  {},\r\n                ],\r\n                [\r\n                  { text: \"Subtotal\", alignment: \"right\", fontSize: 10 },\r\n                  {\r\n                    text: `$${projectSubtotal}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  {\r\n                    text: `${storeTaxes[0]?.TaxCode} (${storeTaxes[0]?.Rate}%)`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                  {\r\n                    text: `$${estimateGST\r\n                      .toString()\r\n                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  {\r\n                    colSpan: 2,\r\n                    stack: [\r\n                      {\r\n                        canvas: [\r\n                          {\r\n                            type: \"line\",\r\n                            x1: 0,\r\n                            y1: 0,\r\n                            x2: 250,\r\n                            y2: 0,\r\n                            lineWidth: 1,\r\n                            lineColor: \"#169ADB\",\r\n                          },\r\n                        ],\r\n                        margin: [0, 5, 0, 5],\r\n                      },\r\n                    ],\r\n                    alignment: \"right\",\r\n                  },\r\n                  {},\r\n                ],\r\n                [\r\n                  {\r\n                    text: \"Total\",\r\n                    bold: true,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                  {\r\n                    text: `$${projectGrandTotal\r\n                      .toFixed(2)\r\n                      .toString()\r\n                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    bold: true,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  {\r\n                    text: \"Projected Timeline\",\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                  {\r\n                    text: `${convertHoursToTimeString(\r\n                      Quote?.Labor?.Items?.reduce(\r\n                        (total, o) => total + o?.Quant,\r\n                        0\r\n                      )\r\n                    )}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n              ],\r\n            },\r\n            layout: \"noBorders\",\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        text: \"We appreciate your business and hope you consider us for any future projects!\",\r\n        margin: [0, 20, 0, 20],\r\n        fontSize: 10,\r\n        alignment: \"right\",\r\n      },\r\n    ],\r\n    styles: {\r\n      header: {\r\n        fontSize: 18,\r\n        bold: true,\r\n        margin: [0, 10, 0, 10],\r\n      },\r\n      tableHeader: {\r\n        bold: true,\r\n        fontSize: 10,\r\n        color: \"white\",\r\n      },\r\n    },\r\n  };\r\n\r\n  const downloadpdfmake = async () => {\r\n    var date = Date.now();\r\n    var estimateDateString = moment(date).format(\"ll\");\r\n    pdfMake\r\n      .createPdf(dd)\r\n      .download(`${estimateDateString}, ${Case?.Street} Estimate.pdf`);\r\n  };\r\n\r\n  //End of the PDF\r\n  const [duplicatePopupOpen, setDuplicatePopupOpen] = useState(false);\r\n  const [currentStage, setCurrentStage] = useState(0);\r\n  const [stageText, setStageText] = useState(\"Starting duplication process...\");\r\n\r\n  const DuplicateProposal = async (quoteobj, quoteId) => {\r\n    try {\r\n      setDuplicatePopupOpen(true);\r\n      setCurrentStage(0);\r\n      setStageText(\"Starting duplication process...\");\r\n\r\n      // Retrieve the case by ID\r\n      setCurrentStage(1);\r\n      setStageText(`Retrieving case with ID: ${quoteobj.Case_Id}`);\r\n      const data = await GetCaseById(quoteobj.Case_Id);\r\n\r\n      if (data != null) {\r\n        setStageText(\"Case data retrieved successfully.\");\r\n\r\n        const quotes = data.Case.Quotes;\r\n        let proposal = 0;\r\n\r\n        // Find the highest proposal number in the case\r\n        setCurrentStage(2);\r\n        setStageText(\"Finding the highest proposal number...\");\r\n        quotes.forEach((q) => {\r\n          if (q.Proposal > proposal) {\r\n            proposal = q.Proposal;\r\n          }\r\n        });\r\n        setStageText(`Highest proposal number found: ${proposal}`);\r\n\r\n        // Retrieve the current quote by ID\r\n        setCurrentStage(3);\r\n        setStageText(`Retrieving current quote with ID: ${quoteId}`);\r\n        const currentQuote = await GetQuoteById(quoteId);\r\n\r\n        if (currentQuote && currentQuote.quote) {\r\n          setStageText(\"Current quote retrieved successfully.\");\r\n\r\n          if (\r\n            currentQuote.quote.Material &&\r\n            currentQuote.quote.Material.Items &&\r\n            currentQuote.quote.Material.Items.length > 0\r\n          ) {\r\n            setStageText(\"Current quote items found.\");\r\n\r\n            const addOnItems = [];\r\n\r\n            // Identify and log 'Add-on' items\r\n            setCurrentStage(4);\r\n            setStageText(\"Identifying 'Add-on' items in the current quote...\");\r\n            for (const item of currentQuote.quote.Material.Items) {\r\n              if (item.Parent_Id === 0 && item.CateType !== 2) {\r\n                // Check for primary items that are not labor\r\n                const productAddons = await GetProductAddons(item.Product_Id);\r\n\r\n                if (productAddons && productAddons.length > 0) {\r\n                  for (const addon of productAddons) {\r\n                    const category = await GetCategory(addon.Category_Id);\r\n\r\n                    for (const product of category.Products) {\r\n                      for (const relatedItem of currentQuote.quote.Material\r\n                        .Items) {\r\n                        if (\r\n                          relatedItem.Parent_Id === item.Id &&\r\n                          relatedItem.Product_Id === product.Id\r\n                        ) {\r\n                          addOnItems.push({ relatedItem, parentItem: item });\r\n                        }\r\n                      }\r\n                    }\r\n                  }\r\n                }\r\n              }\r\n            }\r\n\r\n            // Duplicate the estimate and get the new quote\r\n            setCurrentStage(5);\r\n            setStageText(\"Duplicating the estimate...\");\r\n            quoteobj.AddTime = await GetCurrentTime();\r\n            const newQuote = await AddProposal(quoteobj);\r\n            const newQuoteId = newQuote.Id;\r\n\r\n            // Add add-on items to the new estimate\r\n            setCurrentStage(6);\r\n            setStageText(\"Adding add-on items...\");\r\n            for (const { relatedItem, parentItem } of addOnItems) {\r\n              const itemData = await GetItem(relatedItem.Id);\r\n\r\n              if (itemData && itemData.item) {\r\n                itemData.item.Quote_Id = newQuoteId;\r\n                const newItemResp = await AddNewItemToQuote(itemData.item);\r\n                const newItem = newItemResp.item;\r\n\r\n                // Find the new parent item in the new estimate based on characteristics\r\n                const newParentItem = await FindNewParentItem(\r\n                  newQuoteId,\r\n                  parentItem\r\n                );\r\n\r\n                // Create the relationship between the new parent item and the new add-on item\r\n                if (newParentItem) {\r\n                  setCurrentStage(7);\r\n                  setStageText(\r\n                    `Creating relationships for ${relatedItem.Name}...`\r\n                  );\r\n                  await CreateNewQuoteAddOnItem(\r\n                    newParentItem.Id,\r\n                    newItem,\r\n                    newQuoteId\r\n                  );\r\n                }\r\n              }\r\n            }\r\n          } else {\r\n            setStageText(\"No items found in the current quote.\");\r\n          }\r\n        } else {\r\n          setStageText(\"No current quote data found.\");\r\n        }\r\n\r\n        setCurrentStage(8);\r\n        setStageText(\"Duplication process completed.\");\r\n        setDuplicatePopupOpen(false);\r\n      } else {\r\n        setStageText(\"No case data found.\");\r\n      }\r\n    } catch (error) {\r\n      setStageText(\"Error duplicating proposal:\");\r\n      console.error(\"Error duplicating proposal:\", error);\r\n    }\r\n  };\r\n\r\n  // Helper function to get product add-ons\r\n  const GetProductAddons = async (productid) => {\r\n    const data = await GetProduct(productid);\r\n    if (data !== null) {\r\n      return data.Addons;\r\n    } else {\r\n      return [];\r\n    }\r\n  };\r\n\r\n  // Helper function to get item data\r\n  const GetItem = async (itemid) => {\r\n    try {\r\n      const data = await GetQuoteItem(itemid);\r\n      return data;\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  // Helper function to add new item to quote\r\n  const AddNewItemToQuote = async (itemobj) => {\r\n    try {\r\n      const data = await AddQuoteItem(itemobj);\r\n      return data;\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  // Helper function to get tag name by ID\r\n  const GetTagNameById = async (tagId) => {\r\n    const data = await GetQuoteTag(tagId);\r\n    return data ? data.TagName : null;\r\n  };\r\n\r\n  // Helper function to find the new parent item in the new estimate based on characteristics and tag name\r\n  const FindNewParentItem = async (quoteId, oldParentItem) => {\r\n    const oldTagName = await GetTagNameById(oldParentItem.Tag_Id);\r\n    const newQuote = await GetQuoteById(quoteId);\r\n\r\n    if (\r\n      newQuote &&\r\n      newQuote.quote &&\r\n      newQuote.quote.Material &&\r\n      newQuote.quote.Material.Items\r\n    ) {\r\n      const matchedItems = newQuote.quote.Material.Items.filter(\r\n        (item) =>\r\n          item.Product_Id === oldParentItem.Product_Id &&\r\n          item.Name === oldParentItem.Name &&\r\n          item.UnitPrice === oldParentItem.UnitPrice &&\r\n          item.Unit === oldParentItem.Unit &&\r\n          item.Notes === oldParentItem.Notes &&\r\n          item.Description === oldParentItem.Description &&\r\n          item.CateType === oldParentItem.CateType &&\r\n          item.Combine === oldParentItem.Combine &&\r\n          item.CombineName === oldParentItem.CombineName &&\r\n          item.Price === oldParentItem.Price // Added price as a criterion\r\n      );\r\n\r\n      for (const item of matchedItems) {\r\n        const newTagName = await GetTagNameById(item.Tag_Id);\r\n        if (newTagName === oldTagName) {\r\n          return item;\r\n        }\r\n      }\r\n    }\r\n    return null;\r\n  };\r\n\r\n  // Helper function to create a new quote add-on item\r\n  const CreateNewQuoteAddOnItem = async (\r\n    primaryitemid,\r\n    relateditem,\r\n    newquoteid\r\n  ) => {\r\n    const description = \"Add-On Item\";\r\n    try {\r\n      const relationdata = await AddItemRelation(\r\n        primaryitemid,\r\n        relateditem.Id,\r\n        description\r\n      );\r\n      if (relationdata !== null) {\r\n        console.log(\"Relationship created successfully\");\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  // AddProposal function\r\n  const AddProposal = async (quoteobj) => {\r\n    try {\r\n      const resp = await AddQuoteRevision(quoteobj);\r\n      return resp.quote; // Assuming resp.quote is the newly created quote object\r\n    } catch (error) {\r\n      console.error(\"Error while adding quote revision:\", error);\r\n    }\r\n  };\r\n\r\n  if (Quote !== null && Quote !== undefined) {\r\n    if (Quote.Material !== null && Quote.Material !== undefined) {\r\n      if (window.$ISMOBILE === true) {\r\n        return (\r\n          <Cont position=''>\r\n\r\n            <LeftCont>\r\n              <Menu> </Menu>\r\n              <LoadingIndicator></LoadingIndicator>\r\n            </LeftCont>\r\n            <FlexColumn81vwLightGrey position='' minheightmobile='100vh'> \r\n              <StickyTopMenuCont>\r\n              <TopMentProposalView\r\n                mobilePageProp={estimateName}\r\n                currentPage={\"estimatorView\"}\r\n                pageProp={projectName}\r\n                estimateName={estimateName}\r\n                homeownerName={homeownerName}\r\n                projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n                scrollinfo={() => {\r\n                  scrollToOverview.scrollIntoView();\r\n                }}\r\n                scrollsupply={() => {\r\n                  scrollToSupply.scrollIntoView();\r\n                }}\r\n                scrollinstall={() => {\r\n                  scrollToInstall.scrollIntoView();\r\n                }}\r\n                scrolldesigns={() => {\r\n                  scrollToDesigns.scrollIntoView();\r\n                }}\r\n                scrollcomments={() => {\r\n                  scrollToComments.scrollIntoView();\r\n                }}\r\n                scrollconfirmation={() => {\r\n                  scrollToConfirm.scrollIntoView();\r\n                }}\r\n                onBack={() => {\r\n                  RouteToPrevious(userinfo.Role);\r\n                }}\r\n                saveAndSend={() => {\r\n                  SaveAndSendEstimate();\r\n                }}\r\n                saveEstimate={() => {\r\n                  SaveEstimateText();\r\n                }}\r\n                handleLockInEstimate={() => {\r\n                  handleLockInEstimate();\r\n                }}\r\n                handleDeleteLockedEstimate={() => {\r\n                  handleDeleteLockedEstimate();\r\n                }}\r\n                downloadPDF={() => {\r\n                  downloadpdfmake();\r\n                }}\r\n                CreateSharableLink={() => {\r\n                  CreateSharableLink();\r\n                }}\r\n                OpenEstimateEmail={() => {\r\n                  setShowEstimateEmail(true);\r\n                }}\r\n                duplicateEstimate={() => {\r\n                  DuplicateProposal(Quote, params.quoteId);\r\n                }}\r\n              ></TopMentProposalView>\r\n              </StickyTopMenuCont>\r\n              <DuplicateProgress\r\n                currentStage={currentStage}\r\n                stageText={stageText}\r\n                open={duplicatePopupOpen}\r\n              ></DuplicateProgress>\r\n              <EmailWindow\r\n                open={showEstimateEmail}\r\n                projectName={estimateName}\r\n                estimatorEmail={Case.Estimator_Email}\r\n                projectEmail={Case.Email}\r\n                closeWindow={() => {\r\n                  setShowEstimateEmail(false);\r\n                }}\r\n                onSendEmail={(\r\n                  from,\r\n                  to,\r\n                  cc,\r\n                  bcc,\r\n                  subject,\r\n                  link,\r\n                  text,\r\n                  signature\r\n                ) => {\r\n                  sendEmail(from, to, cc, bcc, subject, link, text, signature);\r\n                }}\r\n              ></EmailWindow>\r\n              <FlexRowContFlexStartMobileColumn\r\n                height=\"auto\"\r\n                display={\r\n                  Quote.QuoteStatus === QuoteStatus.RevisionRequested\r\n                    ? \"none\"\r\n                    : \"flex\"\r\n                }\r\n              ></FlexRowContFlexStartMobileColumn>\r\n                            <BackTopTopArrow onClick={()=>{window.scrollTo(0, 0)}} src='/uparrowblack_icon.svg'></BackTopTopArrow>\r\n\r\n              {/* Proposal Overview --------------------------------------------------------------- */}\r\n              <RevisionInstructionsWindow\r\n                open={revisionInstructionDisplay}\r\n                CloseWindow={() => {\r\n                  setRevisionInstructionDisplay(false);\r\n                }}\r\n                StartRevising={() => {\r\n                  ChangeUIToMakeRevisions();\r\n                  setRevisionInstructionDisplay(false);\r\n                }}\r\n              ></RevisionInstructionsWindow>\r\n\r\n              <DuplicateProposalWindow\r\n                quoteObj={Quote}\r\n                onClose={() => {\r\n                  setCloneProposalWindowDisplay(false);\r\n                }}\r\n                open={cloneProposalWindowDisplay}\r\n              ></DuplicateProposalWindow>\r\n              <ImageViewWindow\r\n                open={imageGalleryDisplay}\r\n                imgurl={imagePreviewUrl}\r\n                onClose={() => {\r\n                  setImageGalleryDisplay(false);\r\n                  document.body.style.overflow = \"unset\";\r\n                }}\r\n              ></ImageViewWindow>\r\n\r\n<ContentCont44Percent mobilepaddingbottom='0' height=\"auto\" justifycontent=\"space-around\">\r\n                <FlexColumnFullWidthMargins height=\"100%\">\r\n                  <br></br>\r\n                  <FlexRowContFlexStart height=\"auto\">\r\n                  \r\n                  </FlexRowContFlexStart>\r\n                  <SummaryContainer mobileWidth='90vw' height=\"100%\" justifycontent=\"space-around\">\r\n                  <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                      <RegularText>Estimate Breakdown:</RegularText>\r\n                   \r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader color={ColorPalette.LightBlack}>Materials:</MediumHeader>\r\n                      <MediumHeader>\r\n                        {\" \"}\r\n                        $\r\n                        {Quote?.Material?.Total?.Subtotal?.toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Delivery?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader color={ColorPalette.LightBlack}>Deliveries:</MediumHeader>\r\n                      <MediumHeader>\r\n                        {\" \"}\r\n                        $\r\n                        {Quote?.Delivery?.Total?.Subtotal?.toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Number(projectInstallSubtotal).toFixed(2) >\r\n                        Stored_Values.MIN_LABOR\r\n                          ? \"flex\"\r\n                          : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader color={ColorPalette.LightBlack}>Labour:</MediumHeader>\r\n                      <MediumHeader>\r\n                        $\r\n                        {Number(\r\n                          projectInstallSubtotal + removalsHeader8Subtotal\r\n                        )\r\n                          .toFixed(2)\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Number(projectInstallSubtotal).toFixed(2) >\r\n                        Stored_Values.MIN_LABOR\r\n                          ? \"none\"\r\n                          : \"flex\"\r\n                      }\r\n                    >\r\n                      <MediumHeader color={ColorPalette.LightBlack}>Minimum Labour Fee:</MediumHeader>\r\n                      <MediumHeader>\r\n                        ${Stored_Values?.MIN_LABOR?.toFixed(2)}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems>\r\n                      <MediumHeader color={ColorPalette.LightBlack}>\r\n                        Machines, Disposals, Site Access\r\n                      </MediumHeader>\r\n\r\n                      <MediumHeader>\r\n                        ${\" \"}\r\n                        {(\r\n                          parseFloat(\r\n                            Quote?.Tool?.Total?.Subtotal?.toFixed(2).replace(\r\n                              /,/g,\r\n                              \"\"\r\n                            )\r\n                          ) +\r\n                          parseFloat(\r\n                            Quote?.AccessArea?.Total?.Subtotal?.toFixed(\r\n                              2\r\n                            ).replace(/,/g, \"\")\r\n                          )\r\n                        )\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    <StyledHRPropColour\r\n                      border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                    ></StyledHRPropColour>\r\n                    <SummaryContainerItems>\r\n                      <LeagueSpartanHeaderSmall>\r\n                        Subtotal:\r\n                      </LeagueSpartanHeaderSmall>\r\n                      <MediumHeader>\r\n                        $\r\n                        {\r\n                          projectSubtotal\r\n                          // .toFixed(2)\r\n                          // .toString()\r\n                          // .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    <SummaryContainerItems>\r\n                    <MediumHeader color={ColorPalette.LightBlack}>\r\n  {storeTaxes[0]?.TaxCode ? storeTaxes[0].TaxCode.toUpperCase() : \"\"} ({storeTaxes[0]?.Rate || 0}%)\r\n</MediumHeader>\r\n\r\n                      <MediumHeader>\r\n                        $\r\n                        {estimateGST\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    <StyledHRGreenBreak></StyledHRGreenBreak>\r\n\r\n                    <SummaryContainerItems>\r\n                      <LeagueSpartanHeaderSmall>\r\n                        Total:\r\n                      </LeagueSpartanHeaderSmall>\r\n                      <MediumHeader>\r\n                        $\r\n                        {projectGrandTotal\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems>\r\n                    <MediumHeader>Estimated Length:</MediumHeader>\r\n                    <MediumHeader>\r\n                      {convertHoursToTimeString(\r\n                          Quote.Labor.Items.reduce(\r\n                            (total, o) => total + o?.Quant,\r\n                            0\r\n                          )\r\n                        )}\r\n                        </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    <br></br>\r\n\r\n                    {/* <SummaryContainerItems>\r\n                      <LeagueSpartanRegular>\r\n                        Project Total:\r\n                      </LeagueSpartanRegular>\r\n                      <LeagueSpartanRegular>\r\n                        {\" \"}\r\n                        $\r\n                        {projectGrandTotal\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </LeagueSpartanRegular>\r\n                    </SummaryContainerItems> */}\r\n                    {/* <SummaryContainerItems>\r\n                      <LeagueSpartanRegular>\r\n                        Projected Project Length:\r\n                      </LeagueSpartanRegular>\r\n                      <LeagueSpartanRegular>\r\n                        {convertHoursToTimeString(\r\n                          Quote.Labor.Items.reduce(\r\n                            (total, o) => total + o?.Quant,\r\n                            0\r\n                          )\r\n                        )}\r\n                      </LeagueSpartanRegular>\r\n                    </SummaryContainerItems> */}\r\n                    <FlexColumnContCenterAlign>\r\n                      {/* <RegularResponsiveButton\r\n                        fontsize=\"14px\"\r\n                        lineheight=\"30px\"\r\n                        width=\"95%\"\r\n                        height=\"30px\"\r\n                        display={showDepositButton}\r\n                        onClick={() => {\r\n                          ValidateAgreement(\r\n                            supplyOnlySelected,\r\n                            params.caseId,\r\n                            params.quoteId\r\n                          );\r\n                        }}\r\n                      >\r\n                        Pay Deposit $\r\n                        {deposit < Stored_Values.MIN_DEPOSIT\r\n                          ? Stored_Values.MIN_DEPOSIT.toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          : deposit\r\n                              .toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}{\" \"}\r\n                      </RegularResponsiveButton> */}\r\n\r\n                      {/* <TinyTextItalics color={ColorPalette.DarkGrey}>\r\n                        Project deposit is non-refundable. By paying the\r\n                        deposit, you have agreed that you have read and\r\n                        understood our{\" \"}\r\n                        <span>\r\n                          {\" \"}\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href=\"https://newrhodesconstruction.com/rl-terms-of-service/\"\r\n                            target=\"_blank\"\r\n                          >\r\n                            {\" \"}\r\n                            Terms of Service{\" \"}\r\n                          </a>{\" \"}\r\n                        </span>{\" \"}\r\n                      </TinyTextItalics> */}\r\n                    </FlexColumnContCenterAlign>\r\n                  </SummaryContainer>\r\n                </FlexColumnFullWidthMargins>\r\n              </ContentCont44Percent>\r\n\r\n              <ContentCont77vw paddingTop='0px' height=\"auto\" width=\"75vw\" mobilepaddingbottom='0vh' mobilemargin='0'>\r\n                {isLoading === true ? (\r\n                  <Backdrop style={{ zIndex: 1000 }} open>\r\n                    <CircularProgress color=\"inherit\" />\r\n                  </Backdrop>\r\n                ) : (\r\n                  <div>\r\n                    <FlexDiv>\r\n                      <TinyTextItalics margintop='auto' marginbottom='auto'>Estimate Name</TinyTextItalics>\r\n                    </FlexDiv>\r\n                    <br />\r\n                    <InputField\r\n                      width='88vw'\r\n                      defaultValue={Quote?.Tittle}\r\n                      onChange={(e) => {\r\n                        Quote.Tittle = e.target.value;\r\n                      }}\r\n                    ></InputField>\r\n                      <br></br>\r\n                      <FlexDiv>\r\n                      <TinyTextItalics margintop='auto' marginbottom='auto'>Message For Homeowner</TinyTextItalics>\r\n                      </FlexDiv>\r\n\r\n                      <br></br>\r\n                      <TextAreaMobile\r\n                        defaultValue={Quote.Notes}\r\n                        onChange={(e) => {\r\n                          Quote.Notes = e.target.value;\r\n                        }}\r\n                      ></TextAreaMobile>\r\n                    <br />\r\n                  </div>\r\n                )}\r\n                <FlexDivFlexEnd width='88vw'>\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    setIsLoading(true);\r\n                    SaveEstimateText(Quote);\r\n                  }}\r\n                  width=\"20%\"\r\n                >\r\n                  Save Changes\r\n                </RegularResponsiveButton>\r\n                </FlexDivFlexEnd>\r\n            \r\n              </ContentCont77vw>\r\n\r\n          \r\n\r\n              <ContentCont77vw mobilepaddingbottom='0'>\r\n                <FlexColumnFullWidth>\r\n                  <FlexRowContFlexStart>\r\n                    <RegularText marginTopMobile='auto' marginBottomMobile='auto'>Construction Plans</RegularText>\r\n                    <Icon30px20pxPointer\r\n                      src=\"/Green Button.svg\"\r\n                      onClick={() => {\r\n                        AddPhotoButtonClick();\r\n                      }}\r\n                    ></Icon30px20pxPointer>\r\n                    <input\r\n                      style={{ display: \"none\" }}\r\n                      ref={inputFile}\r\n                      type=\"file\"\r\n                      onChange={handleUpload}\r\n                    />\r\n                  </FlexRowContFlexStart>\r\n                  <QuotePhotoUploadPreviewWindow\r\n                    quoteObj={Quote}\r\n                    open={previewImageWindowDisplay}\r\n                    previewsrc={previewImage}\r\n                    CancelUpload={() => {\r\n                      ResetImage(previewImage);\r\n                    }}\r\n                    CloseWindow={() => {\r\n                      setPreviewImageWindowDisplay(false);\r\n                    }}\r\n                    UploadSuccessful={() => {\r\n                      GetProposalInformation(params.quoteId);\r\n                    }}\r\n                  ></QuotePhotoUploadPreviewWindow>\r\n                  <br></br>\r\n                  <GridContainer3Wide>\r\n                    {Quote.Photos.map((o, i) => {\r\n                      return o.File?.includes(\".pdf\") ||\r\n                        o.File?.includes(\".PDF\") ? (\r\n                        <FlexContainerPhotos key={i}>\r\n                          <a\r\n                            id={i}\r\n                            rel=\"noreferrer\"\r\n                            href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                            target={\"_blank\"}\r\n                            style={{ textDecoration: \"none\", color: \"black\" }}\r\n                          >\r\n                            <FlexDiv>\r\n                              <embed\r\n                                target={\"_blank\"}\r\n                                src={\"/pdficon.png\"}\r\n                                width={\"150px\"}\r\n                                style={{ backgroundColor: \"white\" }}\r\n                                height={\"200px\"}\r\n                              ></embed>\r\n                              <Icon30px30pxPointer\r\n                                onClick={() => {\r\n                                  DeleteImageFromQuoteAndCloud(\r\n                                    o.File,\r\n                                    o.Id,\r\n                                    Quote\r\n                                  );\r\n                                }}\r\n                                src=\"/Garbage_Icon.svg\"\r\n                              ></Icon30px30pxPointer>\r\n                            </FlexDiv>\r\n                            <FlexContFullWidthHeightJustifyCenter>\r\n                              <LargeText>{o.Caption}</LargeText>\r\n                            </FlexContFullWidthHeightJustifyCenter>\r\n                          </a>\r\n                        </FlexContainerPhotos>\r\n                      ) : (\r\n                        <FlexContainerPhotos key={i}>\r\n                          <FlexDiv>\r\n                            <Image375px\r\n                              onClick={() => {\r\n                                DisplayImageInGallery(o.File);\r\n                              }}\r\n                              src={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                            ></Image375px>\r\n                            <Icon30px30pxPointer\r\n                              onClick={() => {\r\n                                DeleteImageFromQuoteAndCloud(\r\n                                  o.File,\r\n                                  o.Id,\r\n                                  Quote\r\n                                );\r\n                              }}\r\n                              src=\"/Garbage_Icon.svg\"\r\n                            ></Icon30px30pxPointer>\r\n                          </FlexDiv>\r\n                          <FlexContFullWidthHeightJustifyCenter>\r\n                            <LargeText>{o.Caption}</LargeText>\r\n                          </FlexContFullWidthHeightJustifyCenter>\r\n                        </FlexContainerPhotos>\r\n                      );\r\n                    })}\r\n                  </GridContainer3Wide>\r\n                  <StyledHRGreyBreak></StyledHRGreyBreak>\r\n                </FlexColumnFullWidth>\r\n              </ContentCont77vw>\r\n\r\n              <FlexRowContAutox100PercentMobileColumn\r\n                alignitems=\"baseline\"\r\n                margin=\"0\"\r\n              >\r\n                <ContentContQuote id=\"install\">\r\n                  <FlexColumnFullWidth>\r\n                    <FlexRowCont100PercentSpaceBetween mobileflexdirection=\"column\">\r\n                      <FlexColumnFullWidth mobilewidth=\"90vw\">\r\n                        <FlexRowContFlexStart>\r\n                        <FlexDivSpaceBetween width='90vw'>\r\n                        <RegularText marginTopMobile='auto' marginBottomMobile='auto'>Estimate</RegularText>\r\n                          <IconButton  onClick={async () => {\r\n                              var tag = await GetQuoteTag(0);\r\n                              setTagObj(tag);\r\n                              setTagWindowDisplay(true);\r\n                            }} text={'New Tag'} src='/Tree_Icon.svg'></IconButton>\r\n                          <TagWindow\r\n                            tagObj={tagObj}\r\n                            quoteid={Quote.Id}\r\n                            open={tagWindowDisplay}\r\n                            RefreshTaglist={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            onClose={() => {\r\n                              setTagWindowDisplay(false);\r\n                            }}\r\n                          ></TagWindow>\r\n                                                    </FlexDivSpaceBetween>\r\n                        </FlexRowContFlexStart>\r\n                      </FlexColumnFullWidth>\r\n                    </FlexRowCont100PercentSpaceBetween>\r\n                  </FlexColumnFullWidth>\r\n\r\n                  <FlexColumnFullWidth\r\n                  mobilewidth='100vw'\r\n                    display={installEstimateDisplay}\r\n                    height=\"auto\"\r\n                    ref={ref2}\r\n                  >\r\n                    <AutoSizeOverflowY>\r\n                      <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n\r\n                      {Quote.Tags.map((t, j) => {\r\n                        let MaterialSum = 0;\r\n                        let InstallSum = 0;\r\n                        let TotalSum = 0;\r\n                        let sumHourlyRate = 0;\r\n                        let countItems = 0;\r\n                        let installSubSumByTag = {};\r\n                        let timeSumByTag = {};\r\n                        let removalTimeSubtotal = 0;\r\n\r\n                        const RemovalItemsWithTag = Quote.Removal.Items.filter(\r\n                          (removalItem) => removalItem.Tag_Id === t.Id\r\n                        ).map((item) => {\r\n                          const originalRemovalIndex =\r\n                            Quote.Removal.Items.findIndex(\r\n                              (removal) => removal.Id === item.Id\r\n                            );\r\n                          const removalTime =\r\n                            totalRemovalsByItem[\r\n                              `${item.Name}_${originalRemovalIndex}`\r\n                            ] || 0;\r\n                          return {\r\n                            ...item,\r\n                            removalTime: decimalHoursToTimeString(removalTime), // Add the time property\r\n                          };\r\n                        });\r\n                        // Calculate the total removal cost, quantity, and time for the current tag\r\n                        const totalRemovalCost = RemovalItemsWithTag.reduce(\r\n                          (sum, item) => sum + item.Price + item.LaborSubtotal,\r\n                          0\r\n                        );\r\n                        const totalRemovalTime = RemovalItemsWithTag.reduce(\r\n                          (sum, item) => {\r\n                            const originalRemovalIndex =\r\n                              Quote.Removal.Items.findIndex(\r\n                                (removal) => removal.Id === item.Id\r\n                              );\r\n                            return (\r\n                              sum +\r\n                              (totalRemovalsByItem[\r\n                                `${item.Name}_${originalRemovalIndex}`\r\n                              ] || 0)\r\n                            );\r\n                          },\r\n                          0\r\n                        );\r\n\r\n                        const primaryItems = Quote.Material.Items.filter(\r\n                          (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                        );\r\n\r\n                        const matchedDeliveries = [];\r\n\r\n                        function checkDeliveries(item) {\r\n                          // Check for deliveries related to the item itself\r\n                          Quote.Delivery.Tools.forEach((tool) => {\r\n                            if (item.Id === tool.Item_Id) {\r\n                              matchedDeliveries.push({\r\n                                ...tool,\r\n                                Tag_Id: item.Tag_Id,\r\n                              });\r\n                            }\r\n                          });\r\n\r\n                          // If the item has related items, check for deliveries related to those as well\r\n                          if (\r\n                            item.RelatedItems &&\r\n                            item.RelatedItems.length > 0\r\n                          ) {\r\n                            item.RelatedItems.forEach((relatedItem) => {\r\n                              checkDeliveries(relatedItem); // Recursive call for nested related items\r\n                            });\r\n                          }\r\n                        }\r\n\r\n                        primaryItems.forEach((primaryItem) => {\r\n                          checkDeliveries(primaryItem);\r\n                        });\r\n\r\n                        let totalAggregatedDeliveryCostWithTagId = 0;\r\n\r\n                        function aggregateDeliveryCost(item) {\r\n                          // Check deliveries for the item itself\r\n                          Quote.Delivery.Tools.forEach((tool) => {\r\n                            if (item.Id === tool.Item_Id) {\r\n                              totalAggregatedDeliveryCostWithTagId +=\r\n                                tool.Price;\r\n                            }\r\n                          });\r\n\r\n                          // If the item has related items, check deliveries for those as well\r\n                          if (\r\n                            item.RelatedItems &&\r\n                            item.RelatedItems.length > 0\r\n                          ) {\r\n                            item.RelatedItems.forEach((relatedItem) => {\r\n                              aggregateDeliveryCost(relatedItem); // Recursive call for nested related items\r\n                            });\r\n                          }\r\n                        }\r\n\r\n                        primaryItems.forEach((primaryItem) => {\r\n                          aggregateDeliveryCost(primaryItem);\r\n                        });\r\n\r\n                        primaryItems.forEach((o) => {\r\n                          const materialSub = o.SubtotalWithRelatedItems;\r\n                          const installSub = o.LaborSubtotalWithRelatedItems;\r\n                          const originalIndex = Quote.Material.Items.findIndex(\r\n                            (item) => item.Id === o.Id\r\n                          );\r\n                          const laborName = laborNamesByProduct[\r\n                            `${o.Name}_${originalIndex}`\r\n                          ]\r\n                            ? Array.from(\r\n                                laborNamesByProduct[\r\n                                  `${o.Name}_${originalIndex}`\r\n                                ]\r\n                              )\r\n                                .join(\", \")\r\n                                .split(\", \")[0]\r\n                            : \"\";\r\n                          const laborItem = Quote.Labor.Items.find(\r\n                            (item) => item.Name === laborName\r\n                          );\r\n                          const hourlyRate = laborItem\r\n                            ? laborItem.UnitPrice\r\n                            : 154;\r\n\r\n                          sumHourlyRate += hourlyRate;\r\n                          countItems++;\r\n\r\n                          MaterialSum += materialSub;\r\n                          InstallSum += installSub;\r\n                          TotalSum += materialSub + installSub;\r\n                        });\r\n\r\n                        Quote.Removal.Items.filter(\r\n                          (removalItem) => removalItem.Tag_Id === t.Id\r\n                        ).forEach((o) => {\r\n                          const removalTotal = o.Price + o.LaborSubtotal;\r\n                          MaterialSum += removalTotal; // Assuming removals are treated as material costs\r\n                          TotalSum += removalTotal;\r\n                        });\r\n\r\n                        MaterialSum += totalAggregatedDeliveryCostWithTagId;\r\n                        TotalSum += totalAggregatedDeliveryCostWithTagId;\r\n\r\n                        const averageHourlyRate =\r\n                          countItems > 0 ? sumHourlyRate / countItems : 0;\r\n\r\n                        return (\r\n                          <div style={{width: '96vw'}}>\r\n                            <br></br>\r\n                            <DeleteConfirmWindow\r\n                              closeDel={() => {\r\n                                setDeleteTagConfirmDisplay(false);\r\n                              }}\r\n                              onDeleteFunction={() => {\r\n                                DeleteTagOnQuote(deleteTagId, params.quoteId);\r\n                              }}\r\n                              deleteOpen={deleteTagConfirmDisplay}\r\n                            ></DeleteConfirmWindow>\r\n                            <DeleteConfirmWindow\r\n                              closeDel={() => {\r\n                                setDeleteItemConfirmDisplay(false);\r\n                              }}\r\n                              onDeleteFunction={async () => {\r\n                                setIsLoading(true);\r\n                                const data = await DeleteQuoteItemByEstimator(\r\n                                  deleteItemId\r\n                                );\r\n                                if (data === null) {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }\r\n                              }}\r\n                              deleteOpen={deleteItemConfirmDisplay}\r\n                            ></DeleteConfirmWindow>\r\n\r\n                            <MobileEstimateQuoteItem\r\n                              isHeader={true}\r\n                              header2={t.TagName}\r\n                              ShowItemSelection={() => {\r\n                                setSelectedTagId(t.Id);\r\n                                setShowQuoteLineItem(true);\r\n                                handleClick(t.Id);\r\n                              }}\r\n                              EditTag={() => {\r\n                                setTagObj(t);\r\n                                setTagWindowDisplay(true);\r\n                              }}\r\n                              DeleteTag={() => {\r\n                                setDeleteTagId(t.Id);\r\n                                setDeleteTagConfirmDisplay(true);\r\n                              }}\r\n                              bgColor={ColorPalette.White}\r\n                              header8={\r\n                                \"$\" +\r\n                                TotalSum.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                            ></MobileEstimateQuoteItem>\r\n\r\n                            <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n\r\n                            {selectedTagId === t.Id && showQuoteLineItem ? (\r\n                              <QuoteLineItem\r\n                                data-scroll-id={t.Id}\r\n                                onClose={() => {\r\n                                  setShowQuoteLineItem(false);\r\n                                  setSelectedTagId(0);\r\n                                  setAddOnSelectedItem(null);\r\n                                }}\r\n                                RefreshItemList={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                Tag_Id={t.Id}\r\n                                addOnSelectedItem={addOnSelectedItem}\r\n                              ></QuoteLineItem>\r\n                            ) : null}\r\n\r\n                            {primaryItems.map((o, i) => {\r\n                              const materialSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.Price\r\n                                  : o.SubtotalWithRelatedItems;\r\n                              const installSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.LaborSubtotal\r\n                                  : o.LaborSubtotalWithRelatedItems;\r\n\r\n                              const originalIndex =\r\n                                Quote.Material.Items.findIndex(\r\n                                  (item) => item.Id === o.Id\r\n                                );\r\n\r\n                              // Get the total labor hours for this item's name\r\n                              const totalHours =\r\n                                totalHoursByProduct[\r\n                                  `${o.Name}_${originalIndex}`\r\n                                ] || 0;\r\n\r\n                              timeSumByTag[o.Tag_Id] +=\r\n                                totalHoursByProduct[\r\n                                  `${o.Name}_${originalIndex}`\r\n                                ];\r\n                              const laborNames = laborNamesByProduct[\r\n                                `${o.Name}_${originalIndex}`\r\n                              ]\r\n                                ? Array.from(\r\n                                    laborNamesByProduct[\r\n                                      `${o.Name}_${originalIndex}`\r\n                                    ]\r\n                                  ).join(\", \")\r\n                                : \"\";\r\n                              // Extract the labor name(s) from the laborNames variable\r\n                              const laborName = laborNames\r\n                                ? laborNames.split(\", \")[0]\r\n                                : \"\"; // Adjust as needed if multiple names\r\n\r\n                              // Find the corresponding labor item in Quote.Labor.Items\r\n                              const laborItem = Quote.Labor.Items.find(\r\n                                (item) => item.Name === laborName\r\n                              );\r\n\r\n                              // Get the price from the labor item, or default to 175 if not found\r\n                              const hourlyRate = laborItem\r\n                                ? laborItem.UnitPrice\r\n                                : 154;\r\n                              sumHourlyRate += hourlyRate;\r\n                              countItems++;\r\n\r\n                              return (\r\n                                <MobileEstimateQuoteItem\r\n                                  noChange={o.NoChange}\r\n                                  key={i}\r\n                                  showRelatedItems={displayStatus[o.Id]}\r\n                                  onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                                  RefreshComponentState={() => {\r\n                                    GetProposalInformation(params.quoteId);\r\n                                  }}\r\n                                  inputheaderposition={headerInputShown}\r\n                                  OutputValue={(value) => {\r\n                                    UpdateQuoteItemQuantity(o.Id, value);\r\n                                  }}\r\n                                  showAddOnsSelection={() => {\r\n                                    setShowQuoteLineItem(true);\r\n                                    setSelectedTagId(t.Id);\r\n                                    setAddOnSelectedItem(o);\r\n                                  }}\r\n                                  deleteItemFromEstimate={(itemId) => {\r\n                                    if (itemId) {\r\n                                      setDeleteItemId(itemId);\r\n                                    } else {\r\n                                      setDeleteItemId(o.Id);\r\n                                    }\r\n                                    setDeleteItemConfirmDisplay(true);\r\n                                  }}\r\n                                  quoteItemObj={o}\r\n                                  parentid={o.Parent_Id}\r\n                                  header1=\"Delete\"\r\n                                  header2={o?.Name}\r\n                                  subheader2notes={\r\n                                    o?.Notes == null ? \"\" : o?.Notes + \"\"\r\n                                  }\r\n                                  subheader2={\r\n                                    o?.Description === null\r\n                                      ? \"\"\r\n                                      : o?.Description\r\n                                  }\r\n                                  header3={\r\n                                    Number(o?.Quant)\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                                    \" \" +\r\n                                    o.DisplayUnit\r\n                                  }\r\n                                  header4={\r\n                                    \"$\" +\r\n                                    (o?.Quant !== 0\r\n                                      ? (materialSub / o?.Quant).toFixed(4)\r\n                                      : materialSub\r\n                                          .toFixed(2)\r\n                                          .replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          ))\r\n                                  }\r\n                                  header5={\r\n                                    \"$\" +\r\n                                    (o?.Quant !== 0\r\n                                      ? (installSub / o?.Quant).toFixed(4)\r\n                                      : installSub\r\n                                          .toFixed(2)\r\n                                          .replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          ))\r\n                                  }\r\n                                  header7={decimalHoursToTimeString(\r\n                                    installSub / hourlyRate\r\n                                  )}\r\n                                  hourlyRate={hourlyRate}\r\n                                  header8={\r\n                                    \"$\" +\r\n                                    (\r\n                                      parseFloat(materialSub.toFixed(2)) +\r\n                                      parseFloat(installSub.toFixed(2))\r\n                                    )\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header3title=\"Quantity\"\r\n                                  header4title=\"Material Rate\"\r\n                                  header5title=\"Install Rate\"\r\n                                  header7title=\"Install Time\"\r\n                                ></MobileEstimateQuoteItem>\r\n                              );\r\n                            })}\r\n\r\n                            {RemovalItemsWithTag.length > 0 ? (\r\n                              <div key={`removal-tag`}>\r\n                                <MobileEstimateQuoteItem\r\n                                  CategoryType={CategoryTypes.Removal}\r\n                                  header1=\"Delete\"\r\n                                  header2=\"Removal\"\r\n                                  RemovalItems={RemovalItemsWithTag}\r\n                                  showRelatedItems={removalDisplayStatus[t.Id]}\r\n                                  RefreshComponentState={() => {\r\n                                    GetProposalInformation(params.quoteId);\r\n                                  }}\r\n                                  deleteItemFromEstimate={(itemId) => {\r\n                                    if (itemId) {\r\n                                      setDeleteItemId(itemId);\r\n                                    } else {\r\n                                    }\r\n                                    setDeleteItemConfirmDisplay(true);\r\n                                  }}\r\n                                  onToggleDisplay={() =>\r\n                                    toggleRemovalDisplay(t.Id)\r\n                                  }\r\n                                  header7={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : \"$\" +\r\n                                        totalRemovalCost\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header9={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : decimalHoursToTimeString(\r\n                                          totalRemovalTime\r\n                                        )\r\n                                  }\r\n                                  header8={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : \"$\" +\r\n                                        totalRemovalCost\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                ></MobileEstimateQuoteItem>\r\n                              </div>\r\n                            ) : null}\r\n\r\n                            {totalAggregatedDeliveryCostWithTagId > 0 ? (\r\n                              <MobileEstimateQuoteItem\r\n                                key={`tagged-aggregated-delivery`}\r\n                                quoteItemObj={{\r\n                                  Price: totalAggregatedDeliveryCostWithTagId,\r\n                                }}\r\n                                showRelatedItems={displayStatus[t.Id]}\r\n                                RefreshComponentState={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                deleteItemFromEstimate={async (item_id) => {\r\n                                  setIsLoading(true);\r\n                                  await DeleteQuoteTool(item_id);\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }}\r\n                                CategoryType={\"Delivery\"}\r\n                                onToggleDisplay={() => toggleDisplay(t.Id)}\r\n                                DeliveryItems={matchedDeliveries}\r\n                                header1=\"Delete\"\r\n                                header2=\"Deliveries\"\r\n                                header3=\"\"\r\n                                header4=\"\"\r\n                                header8={\r\n                                  displayStatus[t.Id] === true\r\n                                    ? \"\"\r\n                                    : \"$\" +\r\n                                      totalAggregatedDeliveryCostWithTagId\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                }\r\n                              ></MobileEstimateQuoteItem>\r\n                            ) : null}\r\n                              <MobileEstimateQuoteItem\r\n                              isHeader={true}\r\n                              header2={'Subtotal'}\r\n                              ShowItemSelection={() => {\r\n                                setSelectedTagId(t.Id);\r\n                                setShowQuoteLineItem(true);\r\n                                handleClick(t.Id);\r\n                              }}\r\n                              EditTag={() => {\r\n                                setTagObj(t);\r\n                                setTagWindowDisplay(true);\r\n                              }}\r\n                              DeleteTag={() => {\r\n                                setDeleteTagId(t.Id);\r\n                                setDeleteTagConfirmDisplay(true);\r\n                              }}\r\n                              bgColor={ColorPalette.White}\r\n                              header8={\r\n                                \"$\" +\r\n                                TotalSum.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                            ></MobileEstimateQuoteItem>\r\n                          </div>\r\n                          \r\n                        );\r\n                        \r\n                      })}\r\n\r\n                      <div>\r\n                        <br></br>\r\n\r\n                        {generalMaterialsHeader === \"flex\" ? (\r\n                          <MobileEstimateQuoteItem\r\n                            isHeader={true}\r\n                            header2=\"General Materials\"\r\n                            ShowItemSelection={() => {\r\n                              setShowQuoteLineItem(true);\r\n                              setSelectedTagId(0);\r\n                            }}\r\n                            bgColor={ColorPalette.White}\r\n                            header8={`$${finalUntaggedTotalSubtotal\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          ></MobileEstimateQuoteItem>\r\n                        ) : null}\r\n\r\n                        <StyledHRGreenBreakThick\r\n                          display={generalMaterialsHeader}\r\n                        ></StyledHRGreenBreakThick>\r\n\r\n                        {selectedTagId === 0 && showQuoteLineItem ? (\r\n                          <QuoteLineItem\r\n                            data-scroll-id={0}\r\n                            onClose={() => {\r\n                              setShowQuoteLineItem(false);\r\n                              setSelectedTagId(0);\r\n                              setAddOnSelectedItem(null);\r\n                            }}\r\n                            RefreshItemList={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            Tag_Id={0}\r\n                            addOnSelectedItem={addOnSelectedItem}\r\n                          ></QuoteLineItem>\r\n                        ) : null}\r\n\r\n                        {Quote?.Material?.Items.map((o, i) => {\r\n                          if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n                            const materialSub =\r\n                              displayStatus[o.Id] === true\r\n                                ? o.Price\r\n                                : o.SubtotalWithRelatedItems;\r\n                            const installSub =\r\n                              displayStatus[o.Id] === true\r\n                                ? o.LaborSubtotal\r\n                                : o.LaborSubtotalWithRelatedItems;\r\n\r\n                            const matchedDeliveries = [];\r\n                            Quote.Delivery.Tools.forEach((tool) => {\r\n                              if (o.Id === tool.Item_Id) {\r\n                                matchedDeliveries.push({\r\n                                  ...tool,\r\n                                  Tag_Id: o.Tag_Id,\r\n                                });\r\n                              }\r\n                            });\r\n\r\n                            let totalDeliveryCost = 0;\r\n                            Quote.Delivery.Tools.forEach((tool) => {\r\n                              if (o.Id === tool.Item_Id) {\r\n                                totalDeliveryCost += tool.Price;\r\n                              }\r\n                            });\r\n\r\n                            const originalIndex =\r\n                              Quote.Material.Items.findIndex(\r\n                                (item) => item.Id === o.Id\r\n                              );\r\n                            const totalHours =\r\n                              totalHoursByProduct[\r\n                                `${o.Name}_${originalIndex}`\r\n                              ] || 0;\r\n                            const laborNames = laborNamesByProduct[\r\n                              `${o.Name}_${originalIndex}`\r\n                            ]\r\n                              ? Array.from(\r\n                                  laborNamesByProduct[\r\n                                    `${o.Name}_${originalIndex}`\r\n                                  ]\r\n                                ).join(\", \")\r\n                              : \"\";\r\n                            const laborName = laborNames\r\n                              ? laborNames.split(\", \")[0]\r\n                              : \"\";\r\n                            const laborItem = Quote.Labor.Items.find(\r\n                              (item) => item.Name === laborName\r\n                            );\r\n                            const hourlyRate = laborItem\r\n                              ? laborItem.UnitPrice\r\n                              : 154;\r\n\r\n                            return (\r\n                              <MobileEstimateQuoteItem\r\n                                showRelatedItems={displayStatus[o.Id]}\r\n                                onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                                RefreshComponentState={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                key={i}\r\n                                quoteItemObj={o}\r\n                                inputheaderposition={headerInputShown}\r\n                                OutputValue={(value) =>\r\n                                  UpdateQuoteItemQuantity(o.Id, value)\r\n                                }\r\n                                showAddOnsSelection={() => {\r\n                                  setShowQuoteLineItem(true);\r\n                                  setSelectedTagId(0);\r\n                                  setAddOnSelectedItem(o);\r\n                                }}\r\n                                deleteItemFromEstimate={(itemId) => {\r\n                                  if (itemId) {\r\n                                    setDeleteItemId(itemId);\r\n                                  } else {\r\n                                    setDeleteItemId(o.Id);\r\n                                  }\r\n                                  setDeleteItemConfirmDisplay(true);\r\n                                }}\r\n                                noChange={o.NoChange}\r\n                                parentid={o.Parent_Id}\r\n                                header1=\"Delete\"\r\n                                header2={o.Name}\r\n                                subheader2={o.Description || \"\"}\r\n                                subheader2notes={o.Notes || \"\"}\r\n                                header3={\r\n                                  Number(o?.Quant)\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                                  \" \" +\r\n                                  o.DisplayUnit\r\n                                }\r\n                                header4={\r\n                                  \"$\" +\r\n                                  (o?.Quant !== 0\r\n                                    ? (materialSub / o?.Quant).toFixed(4)\r\n                                    : materialSub\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"))\r\n                                }\r\n                                header5={\r\n                                  \"$\" +\r\n                                  (o?.Quant !== 0\r\n                                    ? (installSub / o?.Quant).toFixed(4)\r\n                                    : installSub\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"))\r\n                                }\r\n                                header7={\r\n                                  installSub === 0 ||\r\n                                  installSub === undefined ||\r\n                                  installSub === null\r\n                                    ? 0\r\n                                    : decimalHoursToTimeString(\r\n                                        installSub / hourlyRate\r\n                                      )\r\n                                }\r\n                                header8={\r\n                                  \"$\" +\r\n                                  (\r\n                                    parseFloat(materialSub.toFixed(2)) +\r\n                                    parseFloat(installSub.toFixed(2))\r\n                                  )\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                }\r\n                                hourlyRate={hourlyRate}\r\n                                header3title=\"Quantity\"\r\n                                header4title=\"Material Rate\"\r\n                                header5title=\"Install Rate\"\r\n                                header7title=\"Install Time\"\r\n                              ></MobileEstimateQuoteItem>\r\n                            );\r\n                          }\r\n\r\n                          return null;\r\n                        }).concat(\r\n                          <div key={`removal-no-tag`}>\r\n                            <MobileEstimateQuoteItem\r\n                              CategoryType={CategoryTypes.Removal}\r\n                              deleteItemFromEstimate={(itemId) => {\r\n                                if (itemId) {\r\n                                  setDeleteItemId(itemId);\r\n                                } else {\r\n                                  // setDeleteItemId(o.Id);\r\n                                }\r\n                                setDeleteItemConfirmDisplay(true);\r\n                              }}\r\n                              RefreshComponentState={() => {\r\n                                GetProposalInformation(params.quoteId);\r\n                              }}\r\n                              header1=\"Delete\"\r\n                              header2=\"Removal\"\r\n                              RemovalItems={RemovalItemsNoTag}\r\n                              showRelatedItems={removalDisplayStatus}\r\n                              onToggleDisplay={() => {\r\n                                setRemovalDisplayStatus(!removalDisplayStatus);\r\n                              }}\r\n                              header9={\r\n                                removalDisplayStatus === true\r\n                                  ? decimalHoursToTimeString(totalRemovalTime)\r\n                                  : \"\"\r\n                              }\r\n                              header8={\r\n                                removalDisplayStatus === true\r\n                                  ? \"$\" +\r\n                                    totalRemovalCost\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  : \"\"\r\n                              }\r\n                            ></MobileEstimateQuoteItem>\r\n                          </div>,\r\n                          totalAggregatedDeliveryCost > 0 ? (\r\n                            <MobileEstimateQuoteItem\r\n                              key={`total-aggregated-delivery`}\r\n                              quoteItemObj={{\r\n                                Price: totalAggregatedDeliveryCost,\r\n                              }}\r\n                              DeliveryItems={DeliveryItemsNoTag}\r\n                              CategoryType={\"Delivery\"}\r\n                              RefreshComponentState={() => {\r\n                                GetProposalInformation(params.quoteId);\r\n                              }}\r\n                              showRelatedItems={deliveryDisplayStatus}\r\n                              onToggleDisplay={() => {\r\n                                setDeliveryDisplayStatus(\r\n                                  !deliveryDisplayStatus\r\n                                );\r\n                              }}\r\n                              header1=\"Delete\"\r\n                              header2=\"Deliveries\"\r\n                              header3=\"\"\r\n                              header4=\"\"\r\n                              header8={\r\n                                deliveryDisplayStatus === false\r\n                                  ? \"$\" +\r\n                                    totalAggregatedDeliveryCost\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  : \"\"\r\n                              }\r\n                            ></MobileEstimateQuoteItem>\r\n                          ) : null\r\n                        )}\r\n                      </div>\r\n\r\n                      {generalMaterialsHeader === \"flex\" ? (\r\n                          <MobileEstimateQuoteItem\r\n                            isHeader={true}\r\n                            header2=\"Subtotal\"\r\n                            ShowItemSelection={() => {\r\n                              setShowQuoteLineItem(true);\r\n                              setSelectedTagId(0);\r\n                            }}\r\n                            bgColor={ColorPalette.White}\r\n                            header8={`$${finalUntaggedTotalSubtotal\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          ></MobileEstimateQuoteItem>\r\n                        ) : null}\r\n\r\n                      {toolsmachinesHeader === \"flex\" ? (\r\n                        <div>\r\n                          <MobileEstimateQuoteItem\r\n                            adjustAccess={() => {\r\n                              setShowAccessAdjustment(!showAccessAdjustment);\r\n                            }}\r\n                            isHeader={true}\r\n                            ShowItemSelection={() => {\r\n                              setSelectedTagId(0);\r\n                              setShowToolLineItem(true);\r\n                            }}\r\n                            header2=\"Machines, Disposals, & Access\"\r\n                            header7=\"Move Cost Per Machine\"\r\n                            header8={\r\n                              \"$\" +\r\n                              (\r\n                                parseFloat(\r\n                                  Quote?.Tool?.Total?.Subtotal?.toFixed(\r\n                                    2\r\n                                  ).replace(/,/g, \"\")\r\n                                ) +\r\n                                parseFloat(\r\n                                  Quote?.AccessArea?.Total?.Subtotal?.toFixed(\r\n                                    2\r\n                                  ).replace(/,/g, \"\")\r\n                                )\r\n                              )\r\n                                .toFixed(2)\r\n                                .toString()\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                            bgColor={ColorPalette.White}\r\n                          ></MobileEstimateQuoteItem>\r\n                          <FlexColumnCont100xAutoPercent>\r\n                            {showAccessAdjustment === true ? (\r\n                              <div>\r\n                                <FlexColumnDiv>\r\n                                  <TinyTextItalics>Length</TinyTextItalics>\r\n                                  <InputField\r\n                                    defaultValue={Quote?.AccessArea?.Length}\r\n                                    onChange={(e) => {\r\n                                      setProposal((prevQuote) => ({\r\n                                        ...prevQuote,\r\n                                        AccessArea: {\r\n                                          ...prevQuote.AccessArea,\r\n                                          Length: e.target.value,\r\n                                        },\r\n                                      }));\r\n                                    }}\r\n                                  />\r\n                                </FlexColumnDiv>\r\n                                <FlexColumnDiv>\r\n                                  <TinyTextItalics>Width</TinyTextItalics>\r\n                                  <InputField\r\n                                    defaultValue={Quote?.AccessArea?.Width}\r\n                                    onChange={(e) => {\r\n                                      setProposal((prevQuote) => ({\r\n                                        ...prevQuote,\r\n                                        AccessArea: {\r\n                                          ...prevQuote.AccessArea,\r\n                                          Width: e.target.value,\r\n                                        },\r\n                                      }));\r\n                                    }}\r\n                                  />\r\n                                </FlexColumnDiv>\r\n                                <FlexColumnDiv>\r\n                                  <TinyTextItalics>Elevation</TinyTextItalics>\r\n                                  <InputField\r\n                                    defaultValue={Quote?.AccessArea?.Elevation}\r\n                                    onChange={(e) => {\r\n                                      setProposal((prevQuote) => ({\r\n                                        ...prevQuote,\r\n                                        AccessArea: {\r\n                                          ...prevQuote.AccessArea,\r\n                                          Elevation: e.target.value,\r\n                                        },\r\n                                      }));\r\n                                    }}\r\n                                  />\r\n                                </FlexColumnDiv>\r\n                                <FlexColumnDiv>\r\n                                  <TinyTextItalics>Obstruction</TinyTextItalics>\r\n                                  <div>\r\n                                    <label>\r\n                                      <input\r\n                                        type=\"radio\"\r\n                                        name=\"obstruct\"\r\n                                        value=\"true\"\r\n                                        checked={\r\n                                          Quote?.AccessArea?.Obstruct === true\r\n                                        }\r\n                                        onChange={() => {\r\n                                          setProposal((prevQuote) => ({\r\n                                            ...prevQuote,\r\n                                            AccessArea: {\r\n                                              ...prevQuote.AccessArea,\r\n                                              Obstruct: true,\r\n                                            },\r\n                                          }));\r\n                                        }}\r\n                                      />\r\n                                      True\r\n                                    </label>\r\n                                    <label>\r\n                                      <input\r\n                                        type=\"radio\"\r\n                                        name=\"obstruct\"\r\n                                        value=\"false\"\r\n                                        checked={\r\n                                          Quote?.AccessArea?.Obstruct === false\r\n                                        }\r\n                                        onChange={() => {\r\n                                          setProposal((prevQuote) => ({\r\n                                            ...prevQuote,\r\n                                            AccessArea: {\r\n                                              ...prevQuote.AccessArea,\r\n                                              Obstruct: false,\r\n                                            },\r\n                                          }));\r\n                                        }}\r\n                                      />\r\n                                      False\r\n                                    </label>\r\n                                  </div>\r\n                                </FlexColumnDiv>\r\n                                <br></br>\r\n\r\n                                <RegularResponsiveButton\r\n                                  onClick={() => {\r\n                                    setIsLoading(true);\r\n                                    SaveEstimateText(Quote);\r\n                                  }}\r\n                                  width=\"20%\"\r\n                                >\r\n                                  Save Changes\r\n                                </RegularResponsiveButton>\r\n\r\n                                <br></br>\r\n                              </div>\r\n                            ) : null}\r\n                          </FlexColumnCont100xAutoPercent>\r\n                        </div>\r\n                      ) : null}\r\n\r\n                      {selectedTagId === 0 && showToolLineItem ? (\r\n                        <QuoteLineItem\r\n                          onClose={() => {\r\n                            setShowToolLineItem(false);\r\n                            setSelectedTagId(0);\r\n                            setAddOnSelectedItem(null);\r\n                          }}\r\n                          RefreshItemList={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          Tag_Id={0}\r\n                          addOnSelectedItem={addOnSelectedItem}\r\n                        ></QuoteLineItem>\r\n                      ) : null}\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        mobiledisplay={toolsmachinesHeader}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      {Quote.Tool.Tools.map((o, i) => {\r\n                        if (!o?.ToolName.includes(\"Wheelbarrow\")) {\r\n                          if (o.RentalRate > 0 && o.BasePrice > 0) {\r\n                            toolsHeader7Subtotal += o.BasePrice;\r\n                          }\r\n                          toolsHeader8Subtotal += o.Price;\r\n                        }\r\n\r\n                        return (\r\n                          <MobileEstimateQuoteItem\r\n                            key={i}\r\n                            CategoryType={\"Tool\"}\r\n                            RefreshComponentState={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            header1=\"Delete\"\r\n                            header2={o.ToolName}\r\n                            subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                            header4={\r\n                              o.RentalRate > 0\r\n                                ? \"$\" +\r\n                                  (o.RentalRate * o.RentalLength + o.BasePrice)\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                : \"$\" +\r\n                                  o.BasePrice.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                            }\r\n                            deleteItemFromEstimate={async (itemId) => {\r\n                              if (itemId) {\r\n                                setIsLoading(true);\r\n                                setDeleteItemId(itemId);\r\n                                const data = await DeleteQuoteTool(itemId);\r\n                                if (data === null) {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }\r\n                              } else {\r\n                                setDeleteItemId(o.Id);\r\n                                const data = await DeleteQuoteTool(o.Id);\r\n                                if (data === null) {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }\r\n                              }\r\n                            }}\r\n                            quoteItemObj={o}\r\n                            header5={o.RentalLength}\r\n                            itemLink={o.VideoUrl}\r\n                            header3={Number(o?.Quant)\r\n                              ?.toFixed(2)\r\n                              ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                            header8={\r\n                              \"$\" +\r\n                              o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                            header3title={\"Quantity\"}\r\n                            header4title={\"Rental Rate\"}\r\n                            header5title={\"Rental Hours\"}\r\n                          ></MobileEstimateQuoteItem>\r\n                        );\r\n                      })}\r\n\r\n                      {Quote.AccessArea.Items.map((o, i) => (\r\n                        <div>\r\n                          <MobileEstimateQuoteItem\r\n                            key={i}\r\n                            showRelatedItems={showRelated}\r\n                            onClick={() => {\r\n                              setShowRelated(!showRelated);\r\n                            }}\r\n                            RefreshComponentState={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            deleteItemFromEstimate={(itemId) => {\r\n                              if (itemId) {\r\n                                setDeleteItemId(itemId);\r\n                              } else {\r\n                                setDeleteItemId(o.Id);\r\n                              }\r\n                              setDeleteItemConfirmDisplay(true);\r\n                            }}\r\n                            quoteItemObj={o}\r\n                            CategoryType={CategoryTypes.Access}\r\n                            header1=\"Delete\"\r\n                            header2={o.Name}\r\n                            subheader2={o.Notes}\r\n                            header3={\r\n                              Number(o?.Quant)\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                              \" \" +\r\n                              o.DisplayUnit\r\n                            }\r\n                            header5=\"\"\r\n                            header4=\"\"\r\n                            header8={\r\n                              \"$\" +\r\n                              o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                            header3title={\"Quantity\"}\r\n                          ></MobileEstimateQuoteItem>\r\n\r\n\r\n                        </div>\r\n                        \r\n                      ))}\r\n                      {toolsmachinesHeader === \"flex\" ? (\r\n\r\n<MobileEstimateQuoteItem\r\n                            adjustAccess={() => {\r\n                              setShowAccessAdjustment(!showAccessAdjustment);\r\n                            }}\r\n                            isHeader={true}\r\n                            ShowItemSelection={() => {\r\n                              setSelectedTagId(0);\r\n                              setShowToolLineItem(true);\r\n                            }}\r\n                            header2=\"Subtotal\"\r\n                            header7=\"Move Cost Per Machine\"\r\n                            header8={\r\n                              \"$\" +\r\n                              (\r\n                                parseFloat(\r\n                                  Quote?.Tool?.Total?.Subtotal?.toFixed(\r\n                                    2\r\n                                  ).replace(/,/g, \"\")\r\n                                ) +\r\n                                parseFloat(\r\n                                  Quote?.AccessArea?.Total?.Subtotal?.toFixed(\r\n                                    2\r\n                                  ).replace(/,/g, \"\")\r\n                                )\r\n                              )\r\n                                .toFixed(2)\r\n                                .toString()\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                            bgColor={ColorPalette.White}\r\n                          ></MobileEstimateQuoteItem>\r\n                      ) : null }\r\n\r\n                      <LeagueSpartanRegular display={laborDetailToggleView}>\r\n                        Labour Breakdown (Staff Only)\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        mobiledisplay={laborDetailToggleView}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n\r\n                      {laborDetailToggleView === \"flex\"\r\n                        ? Quote.Labor.Items.map((o, i) => (\r\n                            <MobileEstimateQuoteItem\r\n                              key={i}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2={o.Notes}\r\n                              header6={\r\n                                Number(o?.Quant)\r\n                                  ?.toFixed(2)\r\n                                  ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                                \" hr\"\r\n                              }\r\n                              header7={\r\n                                \"$\" +\r\n                                o.UnitPrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header8={\r\n                                \"$\" +\r\n                                o.Price.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                            ></MobileEstimateQuoteItem>\r\n                          ))\r\n                        : null}\r\n\r\n                      <br></br>\r\n                    </AutoSizeOverflowY>\r\n                  </FlexColumnFullWidth>\r\n                </ContentContQuote>\r\n              </FlexRowContAutox100PercentMobileColumn>\r\n            </FlexColumn81vwLightGrey>\r\n\r\n            <FixedIconToTop\r\n              src=\"/BackToTopArrowAlt.svg\"\r\n              onClick={() => {\r\n                window.scrollTo(0, 0);\r\n              }}\r\n            ></FixedIconToTop>\r\n          </Cont>\r\n        );\r\n      }\r\n      /////////////////////////// MOBILE ->>>>>>>>>>>>>\r\n\r\n      /////////////////////////// DESKTOP ->>>>>>>>>>>>>\r\n\r\n      return (\r\n        <Cont width={hideMenu === true ? \"40vw\" : \"\"}>\r\n          <LeftCont\r\n            display={hideMenu === true ? \"none\" : \"flex\"}\r\n            id=\"exclude-from-pdf\"\r\n          >\r\n            <Menu> </Menu>\r\n            <LoadingIndicator></LoadingIndicator>\r\n          </LeftCont>\r\n          <FlexColumn81vwLightGrey\r\n            width={window.$ISMOBILE === true ? \"\" : contWidth}\r\n            minheight=\"auto\"\r\n            height=\"fit-content\"\r\n            id=\"estimate\"\r\n          >\r\n            {/* <div id='exclude-from-pdf' style={{height: \"100%\", position: \"relative\"}}> */}\r\n            <TopMentProposalView\r\n              id=\"exclude-from-pdf\"\r\n              quoteObj={Quote}\r\n              currentPage={\"estimatorView\"}\r\n              mobilePageProp={estimateName}\r\n              pageProp={projectName}\r\n              estimateName={estimateName}\r\n              homeownerName={homeownerName}\r\n              projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n              onBack={() => {\r\n                RouteToPrevious(userinfo.Role);\r\n              }}\r\n              saveAndSend={() => {\r\n                SaveAndSendEstimate();\r\n              }}\r\n              saveEstimate={() => {\r\n                SaveEstimateText();\r\n              }}\r\n              scrollinfo={() => {\r\n                scrollToOverview.scrollIntoView();\r\n              }}\r\n              scrollsupply={() => {\r\n                scrollToSupply.scrollIntoView();\r\n              }}\r\n              scrollinstall={() => {\r\n                scrollToInstall.scrollIntoView();\r\n              }}\r\n              scrolldesigns={() => {\r\n                scrollToDesigns.scrollIntoView();\r\n              }}\r\n              scrollcomments={() => {\r\n                scrollToComments.scrollIntoView();\r\n              }}\r\n              scrollconfirmation={() => {\r\n                scrollToConfirm.scrollIntoView();\r\n              }}\r\n              handleLockInEstimate={() => {\r\n                handleLockInEstimate();\r\n              }}\r\n              handleDeleteLockedEstimate={() => {\r\n                handleDeleteLockedEstimate();\r\n              }}\r\n              downloadPDF={() => {\r\n                downloadpdfmake();\r\n              }}\r\n              CreateSharableLink={() => {\r\n                CreateSharableLink();\r\n              }}\r\n              OpenEstimateEmail={() => {\r\n                setShowEstimateEmail(true);\r\n              }}\r\n              duplicateEstimate={() => {\r\n                DuplicateProposal(Quote, params.quoteId);\r\n              }}\r\n            ></TopMentProposalView>\r\n            <DuplicateProgress\r\n              currentStage={currentStage}\r\n              stageText={stageText}\r\n              open={duplicatePopupOpen}\r\n            ></DuplicateProgress>\r\n            <EmailWindow\r\n              open={showEstimateEmail}\r\n              projectName={estimateName}\r\n              estimatorEmail={Case.Estimator_Email}\r\n              projectEmail={Case.Email}\r\n              closeWindow={() => {\r\n                setShowEstimateEmail(false);\r\n              }}\r\n              onSendEmail={(\r\n                from,\r\n                to,\r\n                cc,\r\n                bcc,\r\n                subject,\r\n                link,\r\n                text,\r\n                signature\r\n              ) => {\r\n                sendEmail(from, to, cc, bcc, subject, link, text, signature);\r\n              }}\r\n            ></EmailWindow>\r\n            {/* </div> */}\r\n            {/* Approval --------------------------------------------------------------- */}\r\n            <FlexRowContFlexStartMobileColumn\r\n              height=\"auto\"\r\n              display={\r\n                Quote.QuoteStatus === QuoteStatus.RevisionRequested\r\n                  ? \"none\"\r\n                  : \"flex\"\r\n              }\r\n            >\r\n              <FlexRowCont alignitems=\"stretch\" height=\"auto\" width=\"100%\">\r\n                <ContentCont77vw\r\n                  height=\"auto\"\r\n                  width=\"75vw\"\r\n                  id=\"exclude-from-pdf\"\r\n                >\r\n                  <div>\r\n                    <FlexDiv>\r\n                      <LeagueSpartanLarge>Estimate Name</LeagueSpartanLarge>\r\n                    </FlexDiv>\r\n                    <br />\r\n                    <InputField\r\n                      defaultValue={Quote?.Tittle}\r\n                      onChange={(e) => {\r\n                        Quote.Tittle = e.target.value;\r\n                      }}\r\n                    ></InputField>\r\n                    <FlexColumnFullWidthMargins>\r\n                      <br></br>\r\n                      <FlexRowContFlexStart height=\"auto\">\r\n                        <LeagueSpartanLarge>\r\n                          Estimate Details\r\n                        </LeagueSpartanLarge>\r\n                      </FlexRowContFlexStart>\r\n\r\n                      <br></br>\r\n                      <TextAreaAutoResize\r\n                        id=\"text\"\r\n                        defaultValue={Quote.Notes}\r\n                        onChange={(e) => {\r\n                          Quote.Notes = e.target.value;\r\n                        }}\r\n                      ></TextAreaAutoResize>\r\n                    </FlexColumnFullWidthMargins>\r\n                    <br />\r\n                  </div>\r\n                </ContentCont77vw>\r\n                <ContentCont77vw\r\n                  display=\"none\"\r\n                  id=\"include-on-pdf\"\r\n                  width=\"75vw\"\r\n                  height=\"auto\"\r\n                  justifycontent=\"space-between\"\r\n                >\r\n                  <FlexColumnFullWidthMargins\r\n                    height=\"auto\"\r\n                    justifycontent=\"flex-start\"\r\n                  >\r\n                    <Icon200x200 src=\"/NRCLogoRegularBlack.png\"></Icon200x200>\r\n                    <div>\r\n                      <SmallHeader>New Rhodes Construction</SmallHeader>\r\n                      <SmallHeader>\r\n                        12306 McTavish Road Pitt Meadows BC V3Y1Z1\r\n                      </SmallHeader>\r\n                      <SmallHeader>+1 (778-657-5944)</SmallHeader>\r\n                      <SmallHeader>ar@newrhodesconstruction.com</SmallHeader>\r\n                      <SmallHeader>www.newrhodesconstruction.com</SmallHeader>\r\n                      <SmallHeader>\r\n                        GST/HST Registration No. 781153283RT0001\r\n                      </SmallHeader>\r\n                    </div>\r\n                  </FlexColumnFullWidthMargins>\r\n\r\n                  <FlexColumnFullWidthMargins\r\n                    height=\"auto\"\r\n                    justifycontent=\"flex-start\"\r\n                  >\r\n                    <div>\r\n                      <SmallHeader>\r\n                        <b> BILL TO: </b> {Case?.Name}\r\n                      </SmallHeader>\r\n                      <SmallHeader>{Case?.Email}</SmallHeader>\r\n                      <SmallHeader>\r\n                        {Case?.Street} {\", \"}\r\n                        {Case?.City}\r\n                      </SmallHeader>\r\n                      <SmallHeader>{Case?.Phone}</SmallHeader>\r\n                      <SmallHeader>\r\n                        Date: {formatDate(Quote?.EditTime)}\r\n                      </SmallHeader>\r\n                      <br></br>\r\n                      <TinyTextItalics color={ColorPalette.DarkGrey}>\r\n                        Project deposit is non-refundable. By paying the\r\n                        deposit, you have agreed that you have read and\r\n                        understood our{\" \"}\r\n                        <span>\r\n                          {\" \"}\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href=\"https://newrhodesconstruction.com/rl-terms-of-service/\"\r\n                            target=\"_blank\"\r\n                          >\r\n                            {\" \"}\r\n                            Terms of Service{\" \"}\r\n                          </a>{\" \"}\r\n                        </span>{\" \"}\r\n                      </TinyTextItalics>\r\n                    </div>\r\n                  </FlexColumnFullWidthMargins>\r\n                </ContentCont77vw>\r\n                <ContentCont77vw\r\n                  width=\"75vw\"\r\n                  height=\"auto\"\r\n                  justifycontent=\"space-around\"\r\n                >\r\n                  <FlexColumnFullWidthMargins height=\"100%\">\r\n                    <br></br>\r\n                    <FlexRowContFlexStart height=\"auto\">\r\n                      <LeagueSpartanLarge>Summary</LeagueSpartanLarge>\r\n                    </FlexRowContFlexStart>\r\n\r\n                    <SummaryContainer\r\n                      height=\"100%\"\r\n                      justifycontent=\"space-around\"\r\n                    >\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Materials:</MediumHeader>\r\n                        <MediumHeader>\r\n                          {\" \"}\r\n                          $\r\n                          {Quote?.Material?.Total?.Subtotal?.toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Delivery?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Delivery:</MediumHeader>\r\n                        <MediumHeader>\r\n                          {\" \"}\r\n                          $\r\n                          {Quote?.Delivery?.Total?.Subtotal?.toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Number(projectInstallSubtotal).toFixed(2) >\r\n                          Stored_Values.MIN_LABOR\r\n                            ? \"flex\"\r\n                            : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Labour:</MediumHeader>\r\n                        <MediumHeader key={removalsHeader8Subtotal}>\r\n                          $\r\n                          {Number(\r\n                            projectInstallSubtotal + removalsHeader8Subtotal\r\n                          )\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Number(projectInstallSubtotal).toFixed(2) >\r\n                          Stored_Values.MIN_LABOR\r\n                            ? \"none\"\r\n                            : \"flex\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Minimum Labour Fee:</MediumHeader>\r\n                        <MediumHeader>\r\n                          ${Stored_Values?.MIN_LABOR?.toFixed(2)}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems>\r\n                        <MediumHeader>\r\n                          Machines, Disposals, Site Access\r\n                        </MediumHeader>\r\n\r\n                        <MediumHeader>\r\n                          ${\" \"}\r\n                          {(\r\n                            parseFloat(\r\n                              Quote?.Tool?.Total?.Subtotal?.toFixed(2).replace(\r\n                                /,/g,\r\n                                \"\"\r\n                              )\r\n                            ) +\r\n                            parseFloat(\r\n                              Quote?.AccessArea?.Total?.Subtotal?.toFixed(\r\n                                2\r\n                              ).replace(/,/g, \"\")\r\n                            )\r\n                          )\r\n                            .toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n\r\n                      <StyledHRPropColour\r\n                        border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                      ></StyledHRPropColour>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanHeaderSmall>\r\n                          Project Subtotal:\r\n                        </LeagueSpartanHeaderSmall>\r\n                        <MediumHeader>${projectSubtotal}</MediumHeader>\r\n                      </SummaryContainerItems>\r\n\r\n                      <SummaryContainerItems>\r\n                        <MediumHeader>\r\n                          {storeTaxes[0]?.TaxCode} ({storeTaxes[0]?.Rate}%)\r\n                        </MediumHeader>\r\n                        <MediumHeader>\r\n                          $\r\n                          {estimateGST\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n\r\n                      <StyledHRGreenBreak></StyledHRGreenBreak>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanRegular>\r\n                          Project Total:\r\n                        </LeagueSpartanRegular>\r\n                        <LeagueSpartanRegular>\r\n                          {\" \"}\r\n                          $\r\n                          {projectGrandTotal\r\n                            .toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </LeagueSpartanRegular>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanRegular>\r\n                          Projected Project Length:\r\n                        </LeagueSpartanRegular>\r\n                        <LeagueSpartanRegular>\r\n                          {convertHoursToTimeString(\r\n                            Quote.Labor.Items.reduce(\r\n                              (total, o) => total + o?.Quant,\r\n                              0\r\n                            )\r\n                          )}\r\n                        </LeagueSpartanRegular>\r\n                      </SummaryContainerItems>\r\n                      <FlexColumnContCenterAlign id=\"exclude-from-pdf\"></FlexColumnContCenterAlign>\r\n                    </SummaryContainer>\r\n                  </FlexColumnFullWidthMargins>\r\n                </ContentCont77vw>\r\n              </FlexRowCont>\r\n            </FlexRowContFlexStartMobileColumn>\r\n\r\n            {/* Proposal Overview --------------------------------------------------------------- */}\r\n            <RevisionInstructionsWindow\r\n              open={revisionInstructionDisplay}\r\n              CloseWindow={() => {\r\n                setRevisionInstructionDisplay(false);\r\n              }}\r\n              StartRevising={() => {\r\n                ChangeUIToMakeRevisions();\r\n                setRevisionInstructionDisplay(false);\r\n              }}\r\n            ></RevisionInstructionsWindow>\r\n\r\n            <ImageViewWindow\r\n              open={imageGalleryDisplay}\r\n              imgurl={imagePreviewUrl}\r\n              onClose={() => {\r\n                setImageGalleryDisplay(false);\r\n                document.body.style.overflow = \"unset\";\r\n              }}\r\n            ></ImageViewWindow>\r\n            <DuplicateProposalWindow\r\n              quoteObj={Quote}\r\n              onClose={() => {\r\n                setCloneProposalWindowDisplay(false);\r\n              }}\r\n              open={cloneProposalWindowDisplay}\r\n            ></DuplicateProposalWindow>\r\n\r\n            <ContentCont77vw\r\n              id=\"exclude-from-pdf\"\r\n              width={window.$ISMOBILE === true ? \"\" : contWidth}\r\n            >\r\n              <FlexColumnFullWidth>\r\n                <FlexRowContFlexStart>\r\n                  <LeagueSpartanLarge>Construction Plans</LeagueSpartanLarge>\r\n                  <Icon30px30pxPointer\r\n                    src=\"/Green Button.svg\"\r\n                    onClick={() => {\r\n                      AddPhotoButtonClick();\r\n                    }}\r\n                  ></Icon30px30pxPointer>\r\n                  <input\r\n                    style={{ display: \"none\" }}\r\n                    ref={inputFile}\r\n                    type=\"file\"\r\n                    onChange={handleUpload}\r\n                  />\r\n                  <QuotePhotoUploadPreviewWindow\r\n                    quoteObj={Quote}\r\n                    open={previewImageWindowDisplay}\r\n                    previewsrc={previewImage}\r\n                    CancelUpload={() => {\r\n                      ResetImage(previewImage);\r\n                    }}\r\n                    CloseWindow={() => {\r\n                      setPreviewImageWindowDisplay(false);\r\n                    }}\r\n                    UploadSuccessful={() => {\r\n                      GetProposalInformation(params.quoteId);\r\n                    }}\r\n                  ></QuotePhotoUploadPreviewWindow>\r\n                </FlexRowContFlexStart>\r\n\r\n                <br></br>\r\n                <FlexRowCont60PercentSpaceEvenly\r\n                  alignitems=\"baseline\"\r\n                  width=\"100%\"\r\n                  flexwrap=\"wrap\"\r\n                >\r\n                  {Quote.Photos.map((o, i) => {\r\n                    return o.File?.includes(\".pdf\") ||\r\n                      o.File?.includes(\".PDF\") ? (\r\n                      <FlexContainerItem key={i}>\r\n                        <a\r\n                          id={i}\r\n                          rel=\"noreferrer\"\r\n                          href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                          target={\"_blank\"}\r\n                          style={{\r\n                            textDecoration: \"none\",\r\n                            color: \"black\",\r\n                          }}\r\n                        >\r\n                          <FlexDiv>\r\n                            <embed\r\n                              target={\"_blank\"}\r\n                              href={\r\n                                o.File !== \"\" ? window.$IMGURL + o.File : \"\"\r\n                              }\r\n                              src={\r\n                                o.File !== \"\"\r\n                                  ? window.$IMGURL +\r\n                                    o.File +\r\n                                    \"#toolbar=0&navpanes=0&scrollbar=0\"\r\n                                  : \"\"\r\n                              }\r\n                              width={\"350px\"}\r\n                              style={{ backgroundColor: \"white\" }}\r\n                              height={\"200px\"}\r\n                            ></embed>\r\n                            <Icon30px30pxPointer\r\n                              onClick={() => {\r\n                                DeleteImageFromQuoteAndCloud(\r\n                                  o.File,\r\n                                  o.Id,\r\n                                  Quote\r\n                                );\r\n                              }}\r\n                              src=\"/Garbage_Icon.svg\"\r\n                            ></Icon30px30pxPointer>\r\n                          </FlexDiv>\r\n\r\n                          <OverrideEmbedDiv>\r\n                            <OverrideEmbedImage></OverrideEmbedImage>\r\n                          </OverrideEmbedDiv>\r\n                          <FlexContFullWidthHeightJustifyCenter>\r\n                            <LargeText>{o.Caption}</LargeText>\r\n                          </FlexContFullWidthHeightJustifyCenter>\r\n                        </a>\r\n                      </FlexContainerItem>\r\n                    ) : (\r\n                      <FlexContainerItem key={i}>\r\n                        <FlexDiv>\r\n                          <Image375px\r\n                            onClick={() => {\r\n                              DisplayImageInGallery(o.File);\r\n                            }}\r\n                            src={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                          ></Image375px>\r\n                          <Icon30px30pxPointer\r\n                            onClick={() => {\r\n                              DeleteImageFromQuoteAndCloud(o.File, o.Id, Quote);\r\n                            }}\r\n                            src=\"/Garbage_Icon.svg\"\r\n                          ></Icon30px30pxPointer>\r\n                        </FlexDiv>\r\n\r\n                        <FlexContFullWidthHeightJustifyCenter>\r\n                          <LargeText>{o.Caption}</LargeText>\r\n                        </FlexContFullWidthHeightJustifyCenter>\r\n                      </FlexContainerItem>\r\n                    );\r\n                  })}\r\n                </FlexRowCont60PercentSpaceEvenly>\r\n              </FlexColumnFullWidth>\r\n            </ContentCont77vw>\r\n\r\n            <FlexRowContAutox100PercentMobileColumn\r\n              alignitems=\"baseline\"\r\n              margin=\"0\"\r\n            >\r\n              <ContentContQuote id=\"install\">\r\n                <FlexColumnFullWidth\r\n                  display={installEstimateDisplay}\r\n                  height=\"auto\"\r\n                  ref={ref2}\r\n                >\r\n                  <AutoSizeOverflowY>\r\n                    <FlexDivMargins>\r\n                      <LeagueSpartanRegular marginright=\"10px\">\r\n                        Project Estimate\r\n                      </LeagueSpartanRegular>\r\n                      <RegularResponsiveButton\r\n                        onClick={async () => {\r\n                          var tag = await GetQuoteTag(0);\r\n                          setTagObj(tag);\r\n                          setTagWindowDisplay(true);\r\n                        }}\r\n                      >\r\n                        New Tag\r\n                      </RegularResponsiveButton>\r\n                    </FlexDivMargins>\r\n\r\n                    <TagWindow\r\n                      tagObj={tagObj}\r\n                      quoteid={Quote.Id}\r\n                      open={tagWindowDisplay}\r\n                      RefreshTaglist={() => {\r\n                        GetProposalInformation(params.quoteId);\r\n                      }}\r\n                      onClose={() => {\r\n                        setTagWindowDisplay(false);\r\n                      }}\r\n                    ></TagWindow>\r\n\r\n                    {Quote.Tags.map((t, j) => {\r\n                      let MaterialSum = 0;\r\n                      let InstallSum = 0;\r\n                      let LaborSum = 0;\r\n                      let TotalSum = 0;\r\n                      let sumHourlyRate = 0;\r\n                      let countItems = 0;\r\n                      let installSubSumByTag = {};\r\n                      let timeSumByTag = {};\r\n                      let removalTimeSubtotal = 0;\r\n\r\n                      // Filter removal items for the current tag\r\n                      const RemovalItemsWithTag = Quote.Removal.Items.filter(\r\n                        (removalItem) => removalItem.Tag_Id === t.Id\r\n                      ).map((item) => {\r\n                        const originalRemovalIndex =\r\n                          Quote.Removal.Items.findIndex(\r\n                            (removal) => removal.Id === item.Id\r\n                          );\r\n                        const removalTime =\r\n                          totalRemovalsByItem[\r\n                            `${item.Name}_${originalRemovalIndex}`\r\n                          ] || 0;\r\n                        return {\r\n                          ...item,\r\n                          removalTime: decimalHoursToTimeString(removalTime), // Add the time property\r\n                        };\r\n                      });\r\n                      // Calculate the total removal cost, quantity, and time for the current tag\r\n                      const totalRemovalCost = RemovalItemsWithTag.reduce(\r\n                        (sum, item) => sum + item.Price + item.LaborSubtotal,\r\n                        0\r\n                      );\r\n                      const totalRemovalTime = RemovalItemsWithTag.reduce(\r\n                        (sum, item) => {\r\n                          const originalRemovalIndex =\r\n                            Quote.Removal.Items.findIndex(\r\n                              (removal) => removal.Id === item.Id\r\n                            );\r\n                          return (\r\n                            sum +\r\n                            (totalRemovalsByItem[\r\n                              `${item.Name}_${originalRemovalIndex}`\r\n                            ] || 0)\r\n                          );\r\n                        },\r\n                        0\r\n                      );\r\n\r\n                      const primaryItems = Quote.Material.Items.filter(\r\n                        (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                      );\r\n\r\n                      const matchedDeliveries = [];\r\n\r\n                      function checkDeliveries(item) {\r\n                        // Check for deliveries related to the item itself\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (item.Id === tool.Item_Id) {\r\n                            matchedDeliveries.push({\r\n                              ...tool,\r\n                              Tag_Id: item.Tag_Id,\r\n                            });\r\n                          }\r\n                        });\r\n\r\n                        // If the item has related items, check for deliveries related to those as well\r\n                        if (item.RelatedItems && item.RelatedItems.length > 0) {\r\n                          item.RelatedItems.forEach((relatedItem) => {\r\n                            checkDeliveries(relatedItem); // Recursive call for nested related items\r\n                          });\r\n                        }\r\n                      }\r\n\r\n                      primaryItems.forEach((primaryItem) => {\r\n                        checkDeliveries(primaryItem);\r\n                      });\r\n\r\n                      let totalAggregatedDeliveryCostWithTagId = 0;\r\n\r\n                      // primaryItems.forEach(primaryItem => {\r\n                      //   // Check deliveries for the primary item\r\n                      //   Quote.Delivery.Tools.forEach(tool => {\r\n                      //     if (primaryItem.Id === tool.Item_Id) {\r\n                      //       totalAggregatedDeliveryCostWithTagId += tool.Price;\r\n                      //     }\r\n                      //   });\r\n\r\n                      //   // Check deliveries for the related items of the primary item\r\n                      //   if (primaryItem.RelatedItems) {\r\n                      //     primaryItem.RelatedItems.forEach(relatedItem => {\r\n                      //       Quote.Delivery.Tools.forEach(tool => {\r\n                      //         if (relatedItem.Id === tool.Item_Id) {\r\n                      //           totalAggregatedDeliveryCostWithTagId += tool.Price;\r\n                      //         }\r\n                      //       });\r\n                      //     });\r\n                      //   }\r\n                      // });\r\n\r\n                      function aggregateDeliveryCost(item) {\r\n                        // Check deliveries for the item itself\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (item.Id === tool.Item_Id) {\r\n                            totalAggregatedDeliveryCostWithTagId += tool.Price;\r\n                          }\r\n                        });\r\n\r\n                        // If the item has related items, check deliveries for those as well\r\n                        if (item.RelatedItems && item.RelatedItems.length > 0) {\r\n                          item.RelatedItems.forEach((relatedItem) => {\r\n                            aggregateDeliveryCost(relatedItem); // Recursive call for nested related items\r\n                          });\r\n                        }\r\n                      }\r\n\r\n                      primaryItems.forEach((primaryItem) => {\r\n                        aggregateDeliveryCost(primaryItem);\r\n                      });\r\n\r\n                      primaryItems.forEach((o) => {\r\n                        const materialSub = o.SubtotalWithRelatedItems;\r\n                        const installSub = o.LaborSubtotalWithRelatedItems;\r\n                        const originalIndex = Quote.Material.Items.findIndex(\r\n                          (item) => item.Id === o.Id\r\n                        );\r\n                        const laborName = laborNamesByProduct[\r\n                          `${o.Name}_${originalIndex}`\r\n                        ]\r\n                          ? Array.from(\r\n                              laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n                            )\r\n                              .join(\", \")\r\n                              .split(\", \")[0]\r\n                          : \"\";\r\n                        const laborItem = Quote.Labor.Items.find(\r\n                          (item) => item.Name === laborName\r\n                        );\r\n                        const hourlyRate = laborItem\r\n                          ? laborItem.UnitPrice\r\n                          : 154;\r\n                        const laborSub = installSub / hourlyRate\r\n                        sumHourlyRate += hourlyRate;\r\n                        countItems++;\r\n\r\n                        MaterialSum += materialSub;\r\n                        InstallSum += installSub;\r\n                        LaborSum += laborSub;\r\n                        TotalSum += materialSub + installSub;\r\n                      });\r\n\r\n                      Quote.Removal.Items.filter(\r\n                        (removalItem) => removalItem.Tag_Id === t.Id\r\n                      ).forEach((o) => {\r\n                        const removalTotal = o.Price + o.LaborSubtotal;\r\n                        MaterialSum += removalTotal; // Assuming removals are treated as material costs\r\n                        TotalSum += removalTotal;\r\n                      });\r\n\r\n                      MaterialSum += totalAggregatedDeliveryCostWithTagId;\r\n                      TotalSum += totalAggregatedDeliveryCostWithTagId;\r\n\r\n                      const averageHourlyRate =\r\n                        countItems > 0 ? sumHourlyRate / countItems : 0;\r\n\r\n                      return (\r\n                        <div key={j}>\r\n                          <div>\r\n                            <DeleteConfirmWindow\r\n                              closeDel={() => {\r\n                                setDeleteTagConfirmDisplay(false);\r\n                              }}\r\n                              onDeleteFunction={() => {\r\n                                DeleteTagOnQuote(deleteTagId, params.quoteId);\r\n                              }}\r\n                              deleteOpen={deleteTagConfirmDisplay}\r\n                            ></DeleteConfirmWindow>\r\n                            <QuoteItemEstimator\r\n                              isHeader={true}\r\n                              header2={t.TagName}\r\n                              ShowItemSelection={() => {\r\n                                setSelectedTagId(t.Id);\r\n                                setShowQuoteLineItem(true);\r\n                                handleClick(t.Id);\r\n                              }}\r\n                              EditTag={() => {\r\n                                setTagObj(t);\r\n                                setTagWindowDisplay(true);\r\n                              }}\r\n                              DeleteTag={() => {\r\n                                setDeleteTagId(t.Id);\r\n                                setDeleteTagConfirmDisplay(true);\r\n                              }}\r\n                              bgColor={ColorPalette.White}\r\n                            ></QuoteItemEstimator>\r\n\r\n                            <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n\r\n                            {selectedTagId === t.Id && showQuoteLineItem ? (\r\n                              <QuoteLineItem\r\n                                data-scroll-id={t.Id}\r\n                                onClose={() => {\r\n                                  setShowQuoteLineItem(false);\r\n                                  setSelectedTagId(0);\r\n                                  setAddOnSelectedItem(null);\r\n                                }}\r\n                                RefreshItemList={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                Tag_Id={t.Id}\r\n                                addOnSelectedItem={addOnSelectedItem}\r\n                              ></QuoteLineItem>\r\n                            ) : null}\r\n\r\n                            {primaryItems.map((o, i) => {\r\n                              const materialSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.Price\r\n                                  : o.SubtotalWithRelatedItems;\r\n                              const installSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.LaborSubtotal\r\n                                  : o.LaborSubtotalWithRelatedItems;\r\n\r\n                              const originalIndex =\r\n                                Quote.Material.Items.findIndex(\r\n                                  (item) => item.Id === o.Id\r\n                                );\r\n\r\n                              // Get the total labor hours for this item's name\r\n                              const totalHours =\r\n                                totalHoursByProduct[\r\n                                  `${o.Name}_${originalIndex}`\r\n                                ] || 0;\r\n\r\n                              timeSumByTag[o.Tag_Id] +=\r\n                                totalHoursByProduct[\r\n                                  `${o.Name}_${originalIndex}`\r\n                                ];\r\n                              const laborNames = laborNamesByProduct[\r\n                                `${o.Name}_${originalIndex}`\r\n                              ]\r\n                                ? Array.from(\r\n                                    laborNamesByProduct[\r\n                                      `${o.Name}_${originalIndex}`\r\n                                    ]\r\n                                  ).join(\", \")\r\n                                : \"\";\r\n                              // Extract the labor name(s) from the laborNames variable\r\n                              const laborName = laborNames\r\n                                ? laborNames.split(\", \")[0]\r\n                                : \"\"; // Adjust as needed if multiple names\r\n\r\n                              // Find the corresponding labor item in Quote.Labor.Items\r\n                              const laborItem = Quote.Labor.Items.find(\r\n                                (item) => item.Name === laborName\r\n                              );\r\n\r\n                              // Get the price from the labor item, or default to 175 if not found\r\n                              const hourlyRate = laborItem\r\n                                ? laborItem.UnitPrice\r\n                                : 154;\r\n                              sumHourlyRate += hourlyRate;\r\n                              countItems++;\r\n\r\n                              return (\r\n                                <QuoteItemEstimator\r\n                                  id={`item-${o.Id}`}\r\n                                  noChange={o.NoChange}\r\n                                  key={i}\r\n                                  showRelatedItems={displayStatus[o.Id]}\r\n                                  onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                                  RefreshComponentState={() => {\r\n                                    GetProposalInformation(params.quoteId);\r\n                                  }}\r\n                                  inputheaderposition={headerInputShown}\r\n                                  OutputValue={(value) => {\r\n                                    UpdateQuoteItemQuantity(o.Id, value);\r\n                                  }}\r\n                                  showAddOnsSelection={() => {\r\n                                    setShowQuoteLineItem(true);\r\n                                    setSelectedTagId(t.Id);\r\n                                    setAddOnSelectedItem(o);\r\n                                  }}\r\n                                  deleteItemFromEstimate={(itemId) => {\r\n                                    if (itemId) {\r\n                                      setDeleteItemId(itemId);\r\n                                    } else {\r\n                                      setDeleteItemId(o.Id);\r\n                                    }\r\n                                    setDeleteItemConfirmDisplay(true);\r\n                                  }}\r\n                                  quoteItemObj={o}\r\n                                  parentid={o.Parent_Id}\r\n                                  header1=\"Delete\"\r\n                                  header2={o.Name}\r\n                                  subheader2notes={\r\n                                    o.Notes == null ? \"\" : o.Notes + \"\"\r\n                                  }\r\n                                  subheader2={\r\n                                    o.Description === null ? \"\" : o.Description\r\n                                  }\r\n                                  header3={\r\n                                    Number(o?.Quant)\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                                    \" \" +\r\n                                    o.DisplayUnit\r\n                                  }\r\n                                  header4={\r\n                                    \"$\" +\r\n                                    (o?.Quant !== 0\r\n                                      ? (materialSub / o?.Quant).toFixed(4)\r\n                                      : materialSub\r\n                                          .toFixed(2)\r\n                                          .replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          ))\r\n                                  }\r\n                                  header5={\r\n                                    \"$\" +\r\n                                    materialSub\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header6={\r\n                                    \"$\" +\r\n                                    (o?.Quant !== 0\r\n                                      ? (installSub / o?.Quant).toFixed(4)\r\n                                      : installSub\r\n                                          .toFixed(2)\r\n                                          .replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          ))\r\n                                  }\r\n                                  header7={\r\n                                    \"$\" +\r\n                                    installSub\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header8={laborNames ? ` ${laborNames}` : \"\"}\r\n                                  header9={decimalHoursToTimeString(\r\n                                    installSub / hourlyRate\r\n                                  )}\r\n                                  hourlyRate={hourlyRate}\r\n                                  // header9={decimalHoursToTimeString(totalHours)}\r\n                                  header10={\r\n                                    \"$\" +\r\n                                    (\r\n                                      parseFloat(materialSub.toFixed(2)) +\r\n                                      parseFloat(installSub.toFixed(2))\r\n                                    )\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                ></QuoteItemEstimator>\r\n                              );\r\n                            })}\r\n\r\n                            {RemovalItemsWithTag.length > 0 ? (\r\n                              <div key={`removal-tag`}>\r\n                                <QuoteItemEstimator\r\n                                  CategoryType={CategoryTypes.Removal}\r\n                                  header1=\"Delete\"\r\n                                  header2=\"Removal\"\r\n                                  header3={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : `${\r\n                                          parseFloat(\r\n                                            RemovalItemsWithTag.reduce(\r\n                                              (accumulator, item) =>\r\n                                                accumulator + item?.Quant,\r\n                                              0\r\n                                            )\r\n                                          ).toFixed(2) || \"0.00\"\r\n                                        } ${RemovalItemsWithTag[0].DisplayUnit}`\r\n                                  }\r\n                                  RemovalItems={RemovalItemsWithTag}\r\n                                  showRelatedItems={removalDisplayStatus[t.Id]}\r\n                                  RefreshComponentState={() => {\r\n                                    GetProposalInformation(params.quoteId);\r\n                                  }}\r\n                                  deleteItemFromEstimate={(itemId) => {\r\n                                    if (itemId) {\r\n                                      setDeleteItemId(itemId);\r\n                                    } else {\r\n                                    }\r\n                                    setDeleteItemConfirmDisplay(true);\r\n                                  }}\r\n                                  onToggleDisplay={() =>\r\n                                    toggleRemovalDisplay(t.Id)\r\n                                  }\r\n                                  header7={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : \"$\" +\r\n                                        totalRemovalCost\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header9={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : decimalHoursToTimeString(\r\n                                          totalRemovalTime\r\n                                        )\r\n                                  }\r\n                                  header10={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : \"$\" +\r\n                                        totalRemovalCost\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                ></QuoteItemEstimator>\r\n                              </div>\r\n                            ) : null}\r\n\r\n                            {totalAggregatedDeliveryCostWithTagId > 0 ? (\r\n                              <QuoteItemEstimator\r\n                                key={`tagged-aggregated-delivery`}\r\n                                quoteItemObj={{\r\n                                  Price: totalAggregatedDeliveryCostWithTagId,\r\n                                }}\r\n                                showRelatedItems={displayStatus[t.Id]}\r\n                                RefreshComponentState={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                deleteItemFromEstimate={async (item_id) => {\r\n                                  setIsLoading(true);\r\n                                  await DeleteQuoteTool(item_id);\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }}\r\n                                CategoryType={\"Delivery\"}\r\n                                onToggleDisplay={() => toggleDisplay(t.Id)}\r\n                                DeliveryItems={matchedDeliveries}\r\n                                header1=\"Delete\"\r\n                                header2=\"Deliveries\"\r\n                                // header3=\"\"\r\n                                header3={\r\n                                  matchedDeliveries.reduce(\r\n                                    (accumulator, tool) =>\r\n                                      accumulator + tool?.Quant,\r\n                                    0\r\n                                  ) || 0\r\n                                }\r\n                                header10={\r\n                                  displayStatus[t.Id] === true\r\n                                    ? \"\"\r\n                                    : \"$\" +\r\n                                      totalAggregatedDeliveryCostWithTagId\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                }\r\n                              ></QuoteItemEstimator>\r\n                            ) : null}\r\n\r\n                            {primaryItems.length > 0 ||\r\n                            RemovalItemsWithTag.length > 0 ? (\r\n                              <QuoteItemEstimator\r\n                                isHeader={true}\r\n                                header2=\"Subtotal\"\r\n                                header5={\r\n                                  \"$\" +\r\n                                  MaterialSum.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                }\r\n                                header7={\r\n                                  \"$\" +\r\n                                  InstallSum.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                }\r\n                                header9={\r\n                                  InstallSum === 0 || averageHourlyRate === 0\r\n                                    ? decimalHoursToTimeString(totalRemovalTime)\r\n                                    : \r\n                                    decimalHoursToTimeString(\r\n                                        (LaborSum +\r\n                                        totalRemovalTime\r\n                                      ))\r\n                                }\r\n                                header10={\r\n                                  \"$\" +\r\n                                  TotalSum.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                }\r\n                                bgColor={ColorPalette.White}\r\n                              ></QuoteItemEstimator>\r\n                            ) : null}\r\n                          </div>\r\n                        </div>\r\n                      );\r\n                      Object.keys(timeSumByTag).forEach((tagId) => {\r\n                        timeSumByTag[tagId] = decimalHoursToTimeString(\r\n                          timeSumByTag[tagId]\r\n                        );\r\n                      });\r\n                    })}\r\n\r\n                    {generalMaterialsHeader === \"flex\" ? <br></br> : null}\r\n\r\n                    {generalMaterialsHeader === \"flex\" ? (\r\n                      <QuoteItemEstimator\r\n                        isHeader={true}\r\n                        header2=\"General Materials\"\r\n                        ShowItemSelection={() => {\r\n                          setShowQuoteLineItem(true);\r\n                          setSelectedTagId(0);\r\n                        }}\r\n                        // header3=\"Quantity\"\r\n                        // header4=\"Material Rate\"\r\n                        // header5=\"Material Subtotal\"\r\n                        // header6=\"Install Rate\"\r\n                        // header7=\"Install Subtotal\"\r\n                        // header8=\"Line Subtotal\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItemEstimator>\r\n                    ) : null}\r\n\r\n                    <StyledHRGreenBreakThick\r\n                      display={generalMaterialsHeader}\r\n                    ></StyledHRGreenBreakThick>\r\n                    {selectedTagId === 0 && showQuoteLineItem ? (\r\n                      <QuoteLineItem\r\n                        onClose={() => {\r\n                          setShowQuoteLineItem(false);\r\n                          setSelectedTagId(0);\r\n                          setAddOnSelectedItem(null);\r\n                        }}\r\n                        RefreshItemList={() => {\r\n                          GetProposalInformation(params.quoteId);\r\n                        }}\r\n                        Tag_Id={0}\r\n                        addOnSelectedItem={addOnSelectedItem}\r\n                      ></QuoteLineItem>\r\n                    ) : null}\r\n                    {Quote?.Material?.Items.map((o, i) => {\r\n                      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n                        const materialSub =\r\n                          displayStatus[o.Id] === true\r\n                            ? o.Price\r\n                            : o.SubtotalWithRelatedItems;\r\n                        const installSub =\r\n                          displayStatus[o.Id] === true\r\n                            ? o.LaborSubtotal\r\n                            : o.LaborSubtotalWithRelatedItems;\r\n                        // const installSub =  o.LaborSubtotalWithRelatedItems;\r\n                        // const installSub = display[o.Id] === true ? ('Labour Subtotal no related with wheelbarrow for item') : ('Labour subtotal with related items + hauling')\r\n\r\n                        const matchedDeliveries = [];\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (o.Id === tool.Item_Id) {\r\n                            matchedDeliveries.push({\r\n                              ...tool,\r\n                              Tag_Id: o.Tag_Id,\r\n                            });\r\n                          }\r\n                        });\r\n\r\n                        let totalDeliveryCost = 0;\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (o.Id === tool.Item_Id) {\r\n                            totalDeliveryCost += tool.Price;\r\n                          }\r\n                        });\r\n\r\n                        // Get the index of the item in the original array\r\n                        const originalIndex = Quote.Material.Items.findIndex(\r\n                          (item) => item.Id === o.Id\r\n                        );\r\n\r\n                        // Get the total labor hours for this item's name\r\n                        const totalHours =\r\n                          totalHoursByProduct[`${o.Name}_${originalIndex}`] ||\r\n                          0;\r\n\r\n                        const laborNames = laborNamesByProduct[\r\n                          `${o.Name}_${originalIndex}`\r\n                        ]\r\n                          ? Array.from(\r\n                              laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n                            ).join(\", \")\r\n                          : \"\";\r\n\r\n                        const laborName = laborNames\r\n                          ? laborNames.split(\", \")[0]\r\n                          : \"\"; // Adjust as needed if multiple names\r\n\r\n                        // Find the corresponding labor item in Quote.Labor.Items\r\n                        const laborItem = Quote.Labor.Items.find(\r\n                          (item) => item.Name === laborName\r\n                        );\r\n\r\n                        // Get the price from the labor item, or default to 175 if not found\r\n                        const hourlyRate = laborItem\r\n                          ? laborItem.UnitPrice\r\n                          : 154;\r\n\r\n                        return (\r\n                          <div id={o.Id}>\r\n                            <QuoteItemEstimator\r\n                              id={o.Id}\r\n                              showRelatedItems={displayStatus[o.Id]}\r\n                              onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                              RefreshComponentState={() => {\r\n                                GetProposalInformation(params.quoteId);\r\n                              }}\r\n                              key={i}\r\n                              quoteItemObj={o}\r\n                              inputheaderposition={headerInputShown}\r\n                              OutputValue={(value) => {\r\n                                UpdateQuoteItemQuantity(o.Id, value);\r\n                              }}\r\n                              showAddOnsSelection={() => {\r\n                                setShowQuoteLineItem(true);\r\n                                setSelectedTagId(0);\r\n                                setAddOnSelectedItem(o);\r\n                              }}\r\n                              deleteItemFromEstimate={(itemId) => {\r\n                                if (itemId) {\r\n                                  setDeleteItemId(itemId);\r\n                                } else {\r\n                                  setDeleteItemId(o.Id);\r\n                                }\r\n                                setDeleteItemConfirmDisplay(true);\r\n                              }}\r\n                              noChange={o.NoChange}\r\n                              parentid={o.Parent_Id}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2={\r\n                                o.Description === null ? \"\" : o.Description\r\n                              }\r\n                              subheader2notes={\r\n                                o.Notes == null ? \"\" : o.Notes + \"\"\r\n                              }\r\n                              header3={\r\n                                Number(o?.Quant)\r\n                                  ?.toFixed(2)\r\n                                  ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                                \" \" +\r\n                                o.DisplayUnit\r\n                              }\r\n                              header4={\r\n                                \"$\" +\r\n                                (o?.Quant !== 0\r\n                                  ? (materialSub / o?.Quant).toFixed(4)\r\n                                  : materialSub\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"))\r\n                              }\r\n                              header5={\r\n                                \"$\" +\r\n                                materialSub\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              }\r\n                              header6={\r\n                                \"$\" +\r\n                                (o?.Quant !== 0\r\n                                  ? (installSub / o?.Quant).toFixed(4)\r\n                                  : installSub\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"))\r\n                              }\r\n                              header7={\r\n                                \"$\" +\r\n                                installSub\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              }\r\n                              header8={laborNames ? ` ${laborNames}` : \"\"}\r\n                              header9={\r\n                                installSub === 0 ||\r\n                                installSub === undefined ||\r\n                                installSub === null\r\n                                  ? 0\r\n                                  : decimalHoursToTimeString(\r\n                                      installSub / hourlyRate\r\n                                    )\r\n                              }\r\n                              hourlyRate={hourlyRate}\r\n                              header10={\r\n                                \"$\" +\r\n                                (\r\n                                  parseFloat(materialSub.toFixed(2)) +\r\n                                  parseFloat(installSub.toFixed(2))\r\n                                )\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              }\r\n                            ></QuoteItemEstimator>\r\n                          </div>\r\n                        );\r\n                      }\r\n                      return null;\r\n                    }).concat(\r\n                      <div key={`removal-no-tag`}>\r\n                        <QuoteItemEstimator\r\n                          CategoryType={CategoryTypes.Removal}\r\n                          deleteItemFromEstimate={(itemId) => {\r\n                            if (itemId) {\r\n                              setDeleteItemId(itemId);\r\n                            } else {\r\n                              // setDeleteItemId(o.Id);\r\n                            }\r\n                            setDeleteItemConfirmDisplay(true);\r\n                          }}\r\n                          RefreshComponentState={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          header1=\"Delete\"\r\n                          header2=\"Removal\"\r\n                          header3={\r\n                            removalDisplayStatus === true\r\n                              ? \"\"\r\n                              : `${\r\n                                  parseFloat(\r\n                                    RemovalItemsNoTag.reduce(\r\n                                      (accumulator, item) =>\r\n                                        accumulator + item?.Quant,\r\n                                      0\r\n                                    )\r\n                                  ).toFixed(2) || \"0.00\"\r\n                                } ${\r\n                                  RemovalItemsNoTag.length > 0\r\n                                    ? RemovalItemsNoTag[0].DisplayUnit\r\n                                    : \"\"\r\n                                }`\r\n                          }\r\n                          RemovalItems={RemovalItemsNoTag}\r\n                          showRelatedItems={removalDisplayStatus}\r\n                          onToggleDisplay={() => {\r\n                            setRemovalDisplayStatus(!removalDisplayStatus);\r\n                          }}\r\n                          // header3={totalRemovalQuantity.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          // header6={removalDisplayStatus === false ?  \"$\" + (totalRemovalCost / totalRemovalQuantity).toFixed(4): ''}\r\n                          header7={\r\n                            removalDisplayStatus === false\r\n                              ? \"$\" +\r\n                                totalRemovalCost\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              : \"\"\r\n                          }\r\n                          header9={\r\n                            removalDisplayStatus === false\r\n                              ? decimalHoursToTimeString(totalRemovalTime)\r\n                              : \"\"\r\n                          }\r\n                          header10={\r\n                            removalDisplayStatus === false\r\n                              ? \"$\" +\r\n                                totalRemovalCost\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              : \"\"\r\n                          }\r\n                        ></QuoteItemEstimator>\r\n                      </div>,\r\n                      totalAggregatedDeliveryCost > 0 ? (\r\n                        <QuoteItemEstimator\r\n                          key={`total-aggregated-delivery`}\r\n                          quoteItemObj={{ Price: totalAggregatedDeliveryCost }}\r\n                          DeliveryItems={DeliveryItemsNoTag}\r\n                          CategoryType={\"Delivery\"}\r\n                          RefreshComponentState={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          deleteItemFromEstimate={async (item_id) => {\r\n                            setIsLoading(true);\r\n                            await DeleteQuoteTool(item_id);\r\n                            GetProposalInformation(params.quoteId);\r\n                            setIsLoading(false);\r\n                          }}\r\n                          showRelatedItems={deliveryDisplayStatus}\r\n                          onToggleDisplay={() => {\r\n                            setDeliveryDisplayStatus(!deliveryDisplayStatus);\r\n                          }}\r\n                          header1=\"Delete\"\r\n                          header2=\"Deliveries\"\r\n                          header3={\r\n                            DeliveryItemsNoTag.reduce(\r\n                              (accumulator, tool) => accumulator + tool?.Quant,\r\n                              0\r\n                            ) || 0\r\n                          }\r\n                          header4=\"\"\r\n                          header10={\r\n                            deliveryDisplayStatus === false\r\n                              ? \"$\" +\r\n                                totalAggregatedDeliveryCost\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              : \"\"\r\n                          }\r\n                        ></QuoteItemEstimator>\r\n                      ) : null,\r\n\r\n                      generalMaterialsHeader === \"flex\" ? (\r\n                        <QuoteItemEstimator\r\n                          isHeader={true}\r\n                          key={\"untagged_subtotals\"}\r\n                          header2={\"Subtotal\"}\r\n                          bgColor={\"White\"}\r\n                          header5={`$${finalUntaggedMaterialSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          header7={`$${finalUntaggedInstallSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          header9={totalTimeString}\r\n                          header10={`$${finalUntaggedTotalSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                        />\r\n                      ) : null\r\n                    )}\r\n\r\n                    {removalHeader === \"flex\" ? (\r\n                      <div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n                    ) : null}\r\n\r\n                    {toolsmachinesHeader === \"flex\" ? (\r\n                      <div>\r\n                        <QuoteItemEstimator\r\n                          isHeader={true}\r\n                          ShowItemSelection={() => {\r\n                            setSelectedTagId(0);\r\n                            setShowToolLineItem(true);\r\n                          }}\r\n                          header2=\"Machines, Disposals, & Access\"\r\n                          // header3=\"Quantity\"\r\n                          header4=\"\"\r\n                          header5=\"\"\r\n                          // header6=\"Rental Rate\"\r\n                          header7=\"Move Cost Per Machine\"\r\n                          header8=\"Line Subtotal\"\r\n                          bgColor={ColorPalette.White}\r\n                        ></QuoteItemEstimator>\r\n                        <FlexRowCont100PercentSpaceBetween>\r\n                          <FlexColumnDiv>\r\n                            <TinyTextItalics>Length</TinyTextItalics>\r\n                            <InputField\r\n                              defaultValue={Quote?.AccessArea?.Length}\r\n                              onChange={(e) => {\r\n                                setProposal((prevQuote) => ({\r\n                                  ...prevQuote,\r\n                                  AccessArea: {\r\n                                    ...prevQuote.AccessArea,\r\n                                    Length: e.target.value,\r\n                                  },\r\n                                }));\r\n                              }}\r\n                            />\r\n                          </FlexColumnDiv>\r\n                          <FlexColumnDiv>\r\n                            <TinyTextItalics>Width</TinyTextItalics>\r\n                            <InputField\r\n                              defaultValue={Quote?.AccessArea?.Width}\r\n                              onChange={(e) => {\r\n                                setProposal((prevQuote) => ({\r\n                                  ...prevQuote,\r\n                                  AccessArea: {\r\n                                    ...prevQuote.AccessArea,\r\n                                    Width: e.target.value,\r\n                                  },\r\n                                }));\r\n                              }}\r\n                            />\r\n                          </FlexColumnDiv>\r\n                          <FlexColumnDiv>\r\n                            <TinyTextItalics>Elevation</TinyTextItalics>\r\n                            <InputField\r\n                              defaultValue={Quote?.AccessArea?.Elevation}\r\n                              onChange={(e) => {\r\n                                setProposal((prevQuote) => ({\r\n                                  ...prevQuote,\r\n                                  AccessArea: {\r\n                                    ...prevQuote.AccessArea,\r\n                                    Elevation: e.target.value,\r\n                                  },\r\n                                }));\r\n                              }}\r\n                            />\r\n                          </FlexColumnDiv>\r\n                          <FlexColumnDiv>\r\n                            <TinyTextItalics>Obstruction</TinyTextItalics>\r\n                            <div>\r\n                              <label>\r\n                                <input\r\n                                  type=\"radio\"\r\n                                  name=\"obstruct\"\r\n                                  value=\"true\"\r\n                                  checked={Quote?.AccessArea?.Obstruct === true}\r\n                                  onChange={() => {\r\n                                    setProposal((prevQuote) => ({\r\n                                      ...prevQuote,\r\n                                      AccessArea: {\r\n                                        ...prevQuote.AccessArea,\r\n                                        Obstruct: true,\r\n                                      },\r\n                                    }));\r\n                                  }}\r\n                                />\r\n                                True\r\n                              </label>\r\n                              <label>\r\n                                <input\r\n                                  type=\"radio\"\r\n                                  name=\"obstruct\"\r\n                                  value=\"false\"\r\n                                  checked={\r\n                                    Quote?.AccessArea?.Obstruct === false\r\n                                  }\r\n                                  onChange={() => {\r\n                                    setProposal((prevQuote) => ({\r\n                                      ...prevQuote,\r\n                                      AccessArea: {\r\n                                        ...prevQuote.AccessArea,\r\n                                        Obstruct: false,\r\n                                      },\r\n                                    }));\r\n                                  }}\r\n                                />\r\n                                False\r\n                              </label>\r\n                            </div>\r\n                          </FlexColumnDiv>\r\n                        </FlexRowCont100PercentSpaceBetween>\r\n                      </div>\r\n                    ) : null}\r\n                    <StyledHRGreenBreakThick\r\n                      display={toolsmachinesHeader}\r\n                    ></StyledHRGreenBreakThick>\r\n\r\n                    {selectedTagId === 0 && showToolLineItem ? (\r\n                      <QuoteLineItem\r\n                        onClose={() => {\r\n                          setShowToolLineItem(false);\r\n                          setSelectedTagId(0);\r\n                          setAddOnSelectedItem(null);\r\n                        }}\r\n                        RefreshItemList={() => {\r\n                          GetProposalInformation(params.quoteId);\r\n                        }}\r\n                        Tag_Id={0}\r\n                        addOnSelectedItem={addOnSelectedItem}\r\n                      ></QuoteLineItem>\r\n                    ) : null}\r\n\r\n                    {Quote.Tool.Tools.sort((a, b) =>\r\n                      a.ToolName.localeCompare(b.ToolName)\r\n                    ).map((o, i) => {\r\n                      if (!o?.ToolName.includes(\"Wheelbarrow\")) {\r\n                        if (o.RentalRate > 0 && o.BasePrice > 0) {\r\n                          toolsHeader7Subtotal += o.BasePrice;\r\n                        }\r\n                        toolsHeader8Subtotal += o.Price;\r\n                      }\r\n\r\n                      return (\r\n                        <QuoteItemEstimator\r\n                          key={i}\r\n                          CategoryType={\"Tool\"}\r\n                          RefreshComponentState={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          header1=\"Delete\"\r\n                          header2={o.ToolName}\r\n                          subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                          header4={\r\n                            o.RentalRate > 0\r\n                              ? `$${o.RentalRate.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`\r\n                              : null\r\n                          }\r\n                          header6={\r\n                            o.BasePrice > 0\r\n                              ? `$${o.BasePrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`\r\n                              : null\r\n                          }\r\n                          // o.RentalRate > 0\r\n                          //   ? \"$\" +\r\n                          //     ((o.RentalRate * o.RentalLength) + o.BasePrice).toFixed(2).replace(\r\n                          //       /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                          //       \",\"\r\n                          //     )\r\n                          //   : \"$\" +\r\n                          //     o.BasePrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n\r\n                          deleteItemFromEstimate={async (itemId) => {\r\n                            if (itemId) {\r\n                              setIsLoading(true);\r\n                              setDeleteItemId(itemId);\r\n                              const data = await DeleteQuoteTool(itemId);\r\n                              if (data === null) {\r\n                                GetProposalInformation(params.quoteId);\r\n                                setIsLoading(false);\r\n                              }\r\n                            } else {\r\n                              setDeleteItemId(o.Id);\r\n                              const data = await DeleteQuoteTool(o.Id);\r\n                              if (data === null) {\r\n                                GetProposalInformation(params.quoteId);\r\n                                setIsLoading(false);\r\n                              }\r\n                            }\r\n                          }}\r\n                          quoteItemObj={o}\r\n                          header9={o.RentalLength > 0 ? o.RentalLength : null}\r\n                          itemLink={o.VideoUrl}\r\n                          header3={Number(o?.Quant)\r\n                            ?.toFixed(2)\r\n                            ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          header8={\r\n                            o.RentalRate > 0 && o.BasePrice > 0\r\n                              ? \"$\" +\r\n                                o.BasePrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              : \"\"\r\n                          }\r\n                          header10={\r\n                            \"$\" +\r\n                            o.Price.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            )\r\n                          }\r\n                        ></QuoteItemEstimator>\r\n                      );\r\n                    })}\r\n\r\n                    {Quote.AccessArea.Items.map((o, i) => (\r\n                      <div>\r\n                        <QuoteItemEstimator\r\n                          key={i}\r\n                          showRelatedItems={showRelated}\r\n                          onClick={() => {\r\n                            setShowRelated(!showRelated);\r\n                          }}\r\n                          RefreshComponentState={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          deleteItemFromEstimate={(itemId) => {\r\n                            if (itemId) {\r\n                              setDeleteItemId(itemId);\r\n                            } else {\r\n                              setDeleteItemId(o.Id);\r\n                            }\r\n                            setDeleteItemConfirmDisplay(true);\r\n                          }}\r\n                          quoteItemObj={o}\r\n                          CategoryType={CategoryTypes.Access}\r\n                          header1=\"Delete\"\r\n                          header2={o.Name}\r\n                          subheader2={o.Notes}\r\n                          header3={\r\n                            Number(o?.Quant)\r\n                              ?.toFixed(2)\r\n                              ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                            \" \" +\r\n                            o.DisplayUnit\r\n                          }\r\n                          header5=\"\"\r\n                          header4=\"\"\r\n                          header6={\r\n                            \"$\" +\r\n                            o.UnitPrice.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            ) +\r\n                            \"\" +\r\n                            o.DisplayUnit\r\n                          }\r\n                          header7={\r\n                            \"$\" +\r\n                            o.Price.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            )\r\n                          }\r\n                          header10={\r\n                            \"$\" +\r\n                            o.Price.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            )\r\n                          }\r\n                        ></QuoteItemEstimator>\r\n                      </div>\r\n                    ))}\r\n\r\n                    \r\n\r\n                    {(toolsHeader7Subtotal > 0 || toolsHeader8Subtotal > 0) && (\r\n                      <QuoteItemEstimator\r\n                        isHeader={true}\r\n                        bgColor={ColorPalette.White}\r\n                        header2={`Subtotal`}\r\n                        header7={\r\n                          \"$\" +\r\n                          (toolsHeader7Subtotal + accessTotal)\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                        header10={\r\n                          \"$\" +\r\n                          (toolsHeader8Subtotal + accessTotal)\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      ></QuoteItemEstimator>\r\n                    )}\r\n                    {toolsmachinesHeader === \"flex\" ? (\r\n                      <div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n                    ) : null}\r\n                    <FlexRowContFullWidth\r\n                      id=\"exclude-from-pdf\"\r\n                      onClick={() => {\r\n                        DisplayLaborBreakdown(laborDetailToggle);\r\n                      }}\r\n                    ></FlexRowContFullWidth>\r\n\r\n                    \r\n<div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n\r\n                <QuoteItemEstimator\r\n                        isHeader={true}\r\n                        header2=\"Extras (NOT EWO) - These items will NOT be visible to homeowners or affect the estimate.\"\r\n                        ShowItemSelection={() => {\r\n                          setOpenAddExtra(true)\r\n                        }}\r\n                        // header3=\"Quantity\"\r\n                        // header4=\"Material Rate\"\r\n                        // header5=\"Material Subtotal\"\r\n                        // header6=\"Install Rate\"\r\n                        // header7=\"Install Subtotal\"\r\n                        // header8=\"Line Subtotal\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItemEstimator>\r\n                     <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n\r\n\r\n                     {openAddExtra && (\r\n      <div\r\n        style={{\r\n          position: 'fixed',\r\n          top: 0,\r\n          left: 0,\r\n          width: '100vw',\r\n          height: '100vh',\r\n          backgroundColor: 'rgba(0,0,0,0.5)',\r\n          display: 'flex',\r\n          justifyContent: 'center',\r\n          alignItems: 'center',\r\n          zIndex: 1000,\r\n          padding: '10px',\r\n        }}\r\n      >\r\n        <div\r\n          style={{\r\n            background: '#fff',\r\n            padding: '20px',\r\n            borderRadius: '8px',\r\n            width: '100%',\r\n            maxWidth: '600px',\r\n            boxSizing: 'border-box',\r\n          }}\r\n        >\r\n          <div style={{ display: 'flex', flexDirection: 'column', gap: '15px' }}>\r\n            <FlexRowCont100PercentFlexEnd>\r\n            <Icon30px20pxPointer onClick={()=>{setOpenAddExtra(false)}} src='/Close.svg'></Icon30px20pxPointer>\r\n            </FlexRowCont100PercentFlexEnd>\r\n            {/* Item Name Field */}\r\n            <div style={{ display: 'flex', flexDirection: 'column' }}>\r\n              <span style={{ fontStyle: 'italic', marginBottom: '5px' }}>Item Name</span>\r\n              <input\r\n                type=\"text\"\r\n                placeholder=\"Enter item name\"\r\n                onChange={(e) => setExtraItemName(e.target.value)}\r\n                style={{\r\n                  width: '96%',\r\n                  padding: '10px',\r\n                  fontSize: '16px',\r\n                  border: '1px solid #ccc',\r\n                  borderRadius: '4px',\r\n                }}\r\n              />\r\n            </div>\r\n\r\n            {/* Budget Status Buttons */}\r\n            <div style={{ display: 'flex', justifyContent: 'center', gap: '10px' }}>\r\n              <button\r\n                type=\"button\"\r\n                onClick={() => setExtraSelected('budgeted')}\r\n                style={\r\n                  extraSelected === 'budgeted'\r\n                    ? {\r\n                        padding: '10px 20px',\r\n                        backgroundColor: ColorPalette.PrimaryButtonBlue,\r\n                        color: '#fff',\r\n                        border: 'none',\r\n                        borderRadius: '4px',\r\n                        fontSize: '16px',\r\n                        flex: 1,\r\n                      }\r\n                    : {\r\n                        padding: '10px 20px',\r\n                        backgroundColor: ColorPalette.LightGrey,\r\n                        color: ColorPalette.DarkGrey,\r\n                        border: 'none',\r\n                        borderRadius: '4px',\r\n                        fontSize: '16px',\r\n                        flex: 1,\r\n                      }\r\n                }\r\n              >\r\n                Budgeted\r\n              </button>\r\n              <button\r\n                type=\"button\"\r\n                onClick={() => setExtraSelected('unbudgeted')}\r\n                style={\r\n                  extraSelected === 'unbudgeted'\r\n                    ? {\r\n                        padding: '10px 20px',\r\n                        backgroundColor: ColorPalette.PrimaryButtonBlue,\r\n                        color: '#fff',\r\n                        border: 'none',\r\n                        borderRadius: '4px',\r\n                        fontSize: '16px',\r\n                        flex: 1,\r\n                      }\r\n                    : {\r\n                        padding: '10px 20px',\r\n                        backgroundColor: ColorPalette.LightGrey,\r\n                        color: ColorPalette.DarkGrey,\r\n                        border: 'none',\r\n                        borderRadius: '4px',\r\n                        fontSize: '16px',\r\n                        flex: 1,\r\n                      }\r\n                }\r\n              >\r\n                Unbudgeted\r\n              </button>\r\n            </div>\r\n\r\n            {/* Notes Field */}\r\n            <div style={{ display: 'flex', flexDirection: 'column' }}>\r\n              <span style={{ fontStyle: 'italic', marginBottom: '5px' }}>Notes</span>\r\n              <textarea\r\n                placeholder=\"Enter notes\"\r\n                onChange={(e) => setExtraNotes(e.target.value)}\r\n                rows=\"4\"\r\n                style={{\r\n                  width: '97%',\r\n                  padding: '10px',\r\n                  fontSize: '16px',\r\n                  border: '1px solid #ccc',\r\n                  borderRadius: '4px',\r\n                  resize: 'vertical',\r\n                }}\r\n              ></textarea>\r\n            </div>\r\n\r\n            {/* File Upload and Preview */}\r\n            <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\r\n              <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\r\n                <img\r\n                  src=\"/camera_icon_black.svg\"\r\n                  alt=\"Upload\"\r\n                  onClick={handleIconClick}\r\n                  style={{ width: '40px', height: '40px', cursor: 'pointer' }}\r\n                />\r\n                {/* Hidden file input */}\r\n                <input\r\n                  type=\"file\"\r\n                  ref={fileInputRef}\r\n                  style={{ display: 'none' }}\r\n                  onChange={handleFileUpload}\r\n                />\r\n              </div>\r\n              <br></br>\r\n              <div>\r\n                {extraImageUrl ? (\r\n                  <img\r\n                    src={`${window.$IMGURL}${extraImageUrl}`}\r\n                    alt=\"Preview\"\r\n                    style={{ width: '80px', height: '80px', objectFit: 'cover', borderRadius: '4px' }}\r\n                  />\r\n                ) : (\r\n                  <div\r\n                    style={{\r\n                      width: '80px',\r\n                      height: '80px',\r\n                      backgroundColor: '#eee',\r\n                      borderRadius: '4px',\r\n                      display: 'flex',\r\n                      alignItems: 'center',\r\n                      justifyContent: 'center',\r\n                      fontSize: '12px',\r\n                      color: '#999',\r\n                    }}\r\n                  >\r\n                    No Image\r\n                  </div>\r\n                )}\r\n              </div>\r\n            </div>\r\n\r\n            {/* Add Extra Button */}\r\n            <div style={{ display: 'flex', justifyContent: 'center' }}>\r\n              <button\r\n                onClick={()=>{addExtra(); setOpenAddExtra(false)}}\r\n                style={{\r\n                  padding: '10px 20px',\r\n                  backgroundColor: ColorPalette.PrimaryGreen,\r\n                  color: '#fff',\r\n                  border: 'none',\r\n                  borderRadius: '4px',\r\n                  fontSize: '16px',\r\n                  width: '100%',\r\n                  maxWidth: '200px',\r\n                }}\r\n              >\r\n                Add Extra\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    )}\r\n\r\n                     <div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n                    \r\n      {extraObjects.map((o,i) => {\r\n        return (\r\n          <div>\r\n          {/* <StyledHRGreyBreak margintop='0' marginbottom='auto'></StyledHRGreyBreak> */}\r\n          <FlexDivSpaceBetween width='96%' key={i} margintop='0' marginbottom='0'>\r\n            <FlexDiv>\r\n          <Icon30px20pxPointer src='/Extra_Work_Icon.svg'></Icon30px20pxPointer>\r\n          <p> {o?.item_name} <br/></p>\r\n          </FlexDiv>\r\n          <p> {o?.budget_status} <br/></p>\r\n          <p> {o?.notes} <br/></p>\r\n          <Image40x40px src={`${window.$IMGURL}${o?.image_url}`} alt=\"Image Preview\"></Image40x40px>\r\n          <Icon30px20pxPointer\r\n  src='/Garbage_Icon.svg'\r\n  onClick={() => {\r\n    if (window.confirm('Are you sure you want to delete this?')) {\r\n      deleteExtra(o.id);\r\n    }\r\n  }}\r\n/>\r\n          </FlexDivSpaceBetween>\r\n                    <StyledHRGreyBreak></StyledHRGreyBreak>\r\n                    </div>\r\n        )\r\n      })}\r\n\r\n                  </AutoSizeOverflowY>\r\n                </FlexColumnFullWidth>\r\n              </ContentContQuote>\r\n            </FlexRowContAutox100PercentMobileColumn>\r\n          </FlexColumn81vwLightGrey>\r\n\r\n          <FixedIconToTop\r\n            src=\"/BackToTopArrowAlt.svg\"\r\n            onClick={() => {\r\n              window.scrollTo(0, 0);\r\n            }}\r\n          ></FixedIconToTop>\r\n\r\n          <DeleteConfirmWindow\r\n            closeDel={() => {\r\n              setDeleteItemConfirmDisplay(false);\r\n            }}\r\n            onDeleteFunction={async () => {\r\n              setIsLoading(true);\r\n              const data = await DeleteQuoteItemByEstimator(deleteItemId);\r\n              if (data === null) {\r\n                GetProposalInformation(params.quoteId);\r\n                setIsLoading(false);\r\n              }\r\n            }}\r\n            deleteOpen={deleteItemConfirmDisplay}\r\n          ></DeleteConfirmWindow>\r\n        </Cont>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nViewProposalEstimatorView.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n  refreshEstimateFinished: () => {},\r\n};\r\n\r\nexport default ViewProposalEstimatorView;\r\n","import { Circle, GoogleMap, InfoWindow, LoadScript, Marker, OverlayView, Polygon, Polyline, Rectangle, GroundOverlay  } from '@react-google-maps/api';\r\nimport React, { useEffect, useLayoutEffect, useRef, useState, useMemo } from 'react';\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport html2canvas from 'html2canvas';\r\nimport { jsPDF } from 'jspdf';\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport axios from 'axios';\r\n\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport styled, { css } from \"styled-components\";\r\nimport { AddQuote, DeleteQuoteItemByEstimator, GetCaseById, GetQuoteByIdForUserDisplay, GetQuoteItem, GetQuoteObject, UpdateQuoteItem } from '../../API_Functions/CaseQuote_Functions';\r\nimport { GetTaxesForMetro } from '../../API_Functions/Store_Functions';\r\nimport { SetHeaderAuthorization } from '../../API_Functions/Utility_Functions';\r\nimport { Stored_Values } from '../../Stored_Values';\r\nimport { RegularResponsiveButton } from '../../StylesheetComps/Components';\r\nimport { FlexDiv } from '../../StylesheetComps/Cont';\r\nimport { FlexColumnDiv, FlexDivSpaceAround, FlexDivSpaceBetween } from '../../StylesheetComps/Div';\r\nimport { GreenNavigationButton, LandscapePara, TextAreaRegular } from '../../StylesheetComps/LandscapeForm';\r\nimport { Icon30px20pxPointer, Icon30px30pxPointer } from '../../StylesheetComps/Quote';\r\nimport { LeagueSpartanHeaderSmall, StyledHRGreenBreakDashed, StyledHRGreyBreak, TinyTextItalics } from '../../StylesheetComps/Titles';\r\nimport { UserRole } from '../../StylesheetComps/UserRoles';\r\nimport AreaInputPopup from '../../sitemappercomps/accessPopup';\r\nimport AccessItemPopupWindow from '../../sitemappercomps/itempopup';\r\nimport ConfirmationDialog from '../Windows/ConfirmationDialog';\r\nimport GridOverlay from '../Windows/GridOverlay';\r\nimport ConfirmWindow from '../Windows/ConfirmWIndow';\r\nimport Slider from '../DraggableSlider';\r\nimport ViewProposalEstimatorView from '../../UserProjectPages/ViewProposalEstimate';\r\nimport { TextAreaAutoResize } from '../../StylesheetComps/LandscapeForm';\r\nimport IconButton from '../IconButton';\r\nimport ProjectPhotoUploadPreviewWindow from '../ProjectPhotoUploadPreviewWindow';\r\nimport { TextInputSmall } from '../../StylesheetComps/Inputs';\r\n\r\nconst CircleSelection = styled.div`\r\n  width: 30px;\r\n  height: 30px;\r\n  border-radius: 50%;\r\n  margin: 5px;\r\n  transition: opacity 0.5s ease;\r\n  opacity: ${props => props.fade ? 1 : 0};\r\n  pointer-events: none;\r\n\r\n  ${props =>\r\n    props.visible &&\r\n    css`\r\n      opacity: 1;\r\n      pointer-events: auto;\r\n    `}\r\n`;\r\n\r\nconst DeletePopupContainer = styled.div`\r\n  position: fixed;\r\n  bottom: ${({visible}) => visible ? '0' : '-100%'};\r\n  left: -10;\r\n  width: 300px;\r\n  border-radius: 25px 25px 25px 25px;\r\n  height: auto;\r\n  background: #fff;\r\n  padding: 20px;\r\n  transition: bottom 0.3s ease-out;\r\n  z-index: 1001;\r\n  overflow: auto;\r\n`;\r\n\r\nconst BottomSection = styled.div`\r\n  position: absolute;\r\n  bottom: 0;\r\n  width: 100vw;\r\n  height: 7vh; // 10% of the viewport height\r\n  background-color: rgba(0, 0, 0, 0.8);\r\n  display: flex;\r\n  justify-content: ${(props) => (props.justifyContent ? props.justifyContent : \"flex-start\")};\r\n  padding-left: 7px;\r\n  align-items: center;\r\n  padding-bottom: 28px;\r\n  z-index: 998; // This should be high enough to float above the map\r\n  @media (max-width: 1006px) {\r\n    justify-content: flex-start;\r\n  }\r\n`;\r\n\r\nconst TextSection = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  width:30%;\r\n`;\r\n\r\nconst ButtonSection = styled.div`\r\n  display: ${(props) => (props.display ? props.display : \"flex\")};\r\n  justify-content: ${(props) => (props.justifyContent ? props.justifyContent : \"flex-start\")};\r\n  width: ${(props) => (props.width ? props.width : \"100px\")};\r\n  @media (max-width: 1006px) {\r\n    justify-content: flex-start\r\n  }\r\n`;\r\n\r\nconst TopRightIcon = styled.img`\r\n  position: absolute;\r\n  top: 10px;  // Adjust these values to fit your needs\r\n  right: 50px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  height: 40px; // Set icon height\r\n  width: 40px; // Set icon width\r\n  z-index: 1000; // This should be high enough to float above the map\r\n`;\r\n\r\nconst DeleteTopRightIcon = styled.img`\r\n  position: absolute;\r\n  top: 10px;  // Adjust these values to fit your needs\r\n  right: 10px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  height: 40px; // Set icon height\r\n  width: 40px; // Set icon width\r\n  z-index: 999; // This should be high enough to float above the map\r\n`;\r\n\r\nconst DownloadTopRightIcon = styled.img`\r\n  position: absolute;\r\n  top: 10px;  // Adjust these values to fit your needs\r\n  right: 90px;\r\n  display: ${(props) => (props.display ? props.display : \"block\")};\r\n  height: 40px; // Set icon height\r\n  width: 40px; // Set icon width\r\n  z-index: 999; // This should be high enough to float above the map\r\n`;\r\n\r\nconst ZoomImage = styled.img`\r\n  position: absolute;\r\n  top: 10px;\r\n  width:50px;\r\n  height:50px;\r\n  left: 10px;\r\n`;\r\n\r\nconst LengthButton = styled.img`\r\n  position: absolute;\r\n  top: 10px;\r\n  width:50px;\r\n  height:50px;\r\n  left:195px;\r\n`;\r\n\r\nconst libraries = [\"places\", \"geometry\"]; // Define the libraries array outside of your component\r\n\r\nconst SiteMapper = ({contWidth, ScrollToItemOnEstimate, DeselectIcon, RefreshEstimate}) => {\r\n\r\n  const [scale, setScale] = useState(1);\r\n  const MemoizedViewProposalEstimatorView = React.memo(ViewProposalEstimatorView);\r\n  const newScale = 1 / scale; // The inverse of the scale will decrease as scale increases\r\n\r\n  const containerStyle = {\r\n    width: window.$ISMOBILE === true ? '100%' : contWidth,\r\n    height: '90vh',\r\n    position: 'relative',\r\n    top: `calc(50% - (45vh * ${scale} / 2))`,\r\n    transform: `scale(${scale})`,\r\n    transformOrigin: 'center'\r\n  };\r\n\r\n  const [isEstimateShown, setIsEstimateShown] = useState(false);\r\n  const [eyeDisplay, setEyeDisplay] = useState('/white_eye.svg');\r\n\r\n  const [showRelated, setShowRelated] = useState(false);\r\n  const [projectInstallSubtotal, setProjectInstallSubtotal] = useState(0);\r\n  const [Quote, setProposal] = useState({});\r\n  const [deliveryTotal, setDeliveryTotal] = useState(0);\r\n  const [accessTotal, setAccessTotal] = useState(0);\r\n  const [supplyTotal, setSupplyTotal] = useState({ Subtotal: 0, Tax: [], Total: 0 });\r\n  const [installTotal, setInstallTotal] = useState({ Subtotal: 0, Tax: [], Total: 0 });\r\n  const [projectSubtotal, setProjectSubtotal] = useState(0);\r\n  const [estimateName, setEstimateName] = useState(\"\");\r\n  const params = useParams();\r\n  const [storeTaxes, setStoreTaxes] = useState(false);\r\n  const [estimateGST, setEstimateGST] = useState(0)\r\n  const [estimatePST, setEstimatePST] = useState(0)\r\n  const [projectGrandTotal, setProjectGrandTotal] = useState(0);\r\n  const [deposit, setDeposit] = useState(0);\r\n  const [Case, setCase] = useState({});\r\n  const [homeownerName, setHomeownerName] = useState(\"\");\r\n  const [projectCaseNumber, setProjectCaseNumber] = useState(0);\r\n  const [projectName, setProjectName] = useState(\"\");\r\n  const [invoicefileMaterial, setInvoicefileMaterial] = useState(\"invoice_material.pdf\");\r\n  const [invoicefileInstall, setInvoicefileInstall] = useState(\"invoice_install.pdf\");\r\n  const [makeRevisionsButtonDisplay, setMakeRevisionsButtonDisplay] = useState(\"block\");\r\n  const [caseStatus, setCaseStatus] = useState(0);\r\n\r\n  const [addNotes, setAddNotes] = useState(false);\r\n  // const [itemNotes, setItemNotes] = useState(\"\");\r\n  // const [itemNoteId, setItemNoteId] = useState(0);\r\n  const [itemNoteId, setItemNoteId] = useState(null); // Use state for itemNoteId\r\n  const [itemNotes, setItemNotes] = useState(''); // Use state for itemNotes\r\n\r\n//Snapping\r\n  const [snappingOn, setSnappingOn] = useState(false);\r\n\r\n//Display Lengths\r\n  const [showLengths, setShowLengths] = useState(true);\r\n  const [individualLabelVisibility, setIndividualLabelVisibility] = React.useState({}); // Track visibility per shape\r\n\r\n  const toggleIndividualLabel = (index) => {\r\n    setIndividualLabelVisibility((prevState) => ({\r\n      ...prevState,\r\n      [index]: !prevState[index],\r\n    }));\r\n  };  \r\n\r\n  const GetProposalInformation = async (quoteid) => {\r\n    const data = await GetQuoteByIdForUserDisplay(quoteid);\r\n    if (!data || !data.quote) return;\r\n  \r\n    const { quote } = data;\r\n  \r\n    let removalsHeader7Subtotal = 0;\r\n    let removalsHeader8Subtotal = 0;\r\n  \r\n    quote?.Removal?.Items.forEach((o) => {\r\n      removalsHeader7Subtotal += Number((o.Price + o.LaborSubtotal).toFixed(2));\r\n      removalsHeader8Subtotal += Number((o.Price + o.LaborSubtotal).toFixed(2));\r\n    });\r\n\r\n    let projectInstallSubtotal = 0;\r\n  \r\n  quote?.Tags?.forEach((t) => {\r\n    const primaryItems = quote?.Material?.Items.filter(\r\n      (item) => item.Tag_Id === t.Id && item.Parent_Id === 0\r\n    );\r\n\r\n    primaryItems.forEach((o) => {\r\n      const installSub = showRelated === true ? o.LaborSubtotal : o.LaborSubtotalWithRelatedItems;\r\n      projectInstallSubtotal += installSub;\r\n    });\r\n  });\r\n\r\n  quote?.Material?.Items.forEach((o) => {\r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      const installSub = showRelated === true ? o.LaborSubtotal : o.LaborSubtotalWithRelatedItems;\r\n      projectInstallSubtotal += installSub;\r\n    }\r\n  });\r\n\r\n    setProjectInstallSubtotal(projectInstallSubtotal)\r\n    setProposal(quote);\r\n    setDeliveryTotal(quote?.Delivery?.Tools?.reduce((accumulator, tool) => accumulator + tool.Price, 0) || 0);\r\n    setAccessTotal(quote?.AccessArea?.Items?.reduce((accumulator, items) => accumulator + items.Price, 0) || 0);\r\n    // UpdateUIBasedOnStatus(quote);\r\n  \r\n    const materialSubtotal = quote?.Material?.Total?.Subtotal || 0;\r\n    const deliverySubtotal = quote?.Delivery?.Total?.Subtotal || 0;\r\n    const toolSubtotal = quote?.Tool?.Total?.Subtotal || 0;\r\n    const accessAreaSubtotal = quote?.AccessArea?.Total?.Subtotal || 0;\r\n    const installSubtotal = Number(projectInstallSubtotal) > Stored_Values.MIN_LABOR \r\n      ? Number(projectInstallSubtotal) \r\n      : Stored_Values?.MIN_LABOR;\r\n  \r\n    supplyTotal.Subtotal = (materialSubtotal + deliverySubtotal).toFixed(2);\r\n    installTotal.Subtotal = (installSubtotal + toolSubtotal + removalsHeader7Subtotal + accessAreaSubtotal).toFixed(2);\r\n    \r\n    const subtotal = Number(supplyTotal.Subtotal) + Number(installTotal.Subtotal);\r\n    setProjectSubtotal(subtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"));\r\n  \r\n    if (quote.Tittle) {\r\n      setEstimateName(quote.Tittle);\r\n    }\r\n  \r\n    const storeTaxArray = await GetTaxesForMetro(params.Id);\r\n    setStoreTaxes(storeTaxArray);\r\n  \r\n    let gstTax = 0;\r\n    let pstTax = 0;\r\n  \r\n    const taxitems = [\r\n      { type: 'Material', subtotal: materialSubtotal },\r\n      { type: 'Delivery', subtotal: deliverySubtotal },\r\n      { type: 'Labor', subtotal: installSubtotal },\r\n      { type: 'Removal', subtotal: removalsHeader7Subtotal },\r\n      { type: 'AccessArea', subtotal: accessAreaSubtotal },\r\n      { type: 'Tool', subtotal: toolSubtotal },\r\n    ];\r\n\r\n    \r\n    const gst = storeTaxArray.find(tax => tax.TaxCode === 'Gst');\r\n    // const pst = storeTaxArray.find(tax => tax.TaxCode === 'PST');\r\n  \r\n    if (gst) {\r\n      taxitems.forEach((item) => {\r\n        const { type, subtotal } = item;\r\n    \r\n        if (type === 'Material') {\r\n          gstTax += (gst.Rate / 100) * subtotal;\r\n          // pstTax += (pst.Rate / 100) * subtotal;\r\n        } else {\r\n          gstTax += (gst.Rate / 100) * subtotal;\r\n        }\r\n      });\r\n    }\r\n  \r\n    gstTax = gstTax.toFixed(2);\r\n    // pstTax = pstTax.toFixed(2);\r\n  \r\n    // setEstimatePST(pstTax);\r\n    setEstimateGST(gstTax);\r\n\r\n    const grandTotal = Number(gstTax) + Number(subtotal.toFixed(2));\r\n    setProjectGrandTotal(grandTotal);\r\n    setDeposit(grandTotal * 0.1);\r\n  };\r\n\r\n  const history = useHistory();\r\n\r\n  const CreateEstimate = async (accessObj) => {\r\n    const quoteobj = await GetQuoteObject(0)\r\n    quoteobj.AccessArea.Obstruct = accessObj.obstruction;\r\n    quoteobj.AccessArea.Width = accessObj.width;\r\n    quoteobj.AccessArea.Length = accessObj.length;\r\n    quoteobj.AccessArea.Elevation = accessObj.elevation;\r\n    quoteobj.AccessArea.Case_Id = params.caseId\r\n    quoteobj.Case_Id = params.caseId\r\n    quoteobj.Tittle = `Site Visit Budget`\r\n    AddNewQuote(quoteobj, params.caseId);\r\n  };\r\n\r\n    const GetNewQuoteProposalNumber = async (caseid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data != null) {\r\n      if (data.Case?.Quotes?.length > 0) {\r\n        var proposal = 0;\r\n        data.Case.Quotes.forEach((element) => {\r\n          if (element.Proposal > proposal) proposal = element.Proposal;\r\n        });\r\n        proposal++;\r\n        return proposal;\r\n      } else return 0;\r\n    } else return 0;\r\n  };\r\n\r\n  const AddNewQuote = async (quoteobj, caseid) => {\r\n    var proposal = await GetNewQuoteProposalNumber(caseid);\r\n    quoteobj.Proposal = proposal;\r\n    var data = await AddQuote(quoteobj);\r\n  \r\n    if (data !== null) {\r\n      setEstimateId(data.quote.Id);\r\n      GetProposalInformation(data.quote.Id);\r\n      for (let index = 0; index < shapes.length; index++) {\r\n        AddShapeToDatabase(shapes[index], data.quote.Id);\r\n      }\r\n      \r\n      // Add 1-second delay for the history pushes\r\n      setTimeout(() => {\r\n        history.push(`/viewcase/${params.Id}/${params.storeId}/${params.caseId}`);\r\n        if(window.$ISMOBILE === true){\r\n          history.push(`/sitemapper/${params.Id}/${params.storeId}/${params.caseId}/${data.quote.Id}`);\r\n        } else {\r\n          history.push(`/sitemapper/${params.Id}/${params.storeId}/${params.caseId}/${data.quote.Id}`);\r\n        }\r\n      }, 1000); // 1000 milliseconds = 1 second\r\n    }\r\n  };  \r\n\r\n  const GetProjectInformation = async (caseId) => {\r\n    const data = await GetCaseById(caseId);\r\n    const { Case } = data || {};\r\n  \r\n    if (!Case) return;\r\n  \r\n    const {\r\n      Name,\r\n      Tittle,\r\n      CaseNumber,\r\n      Street,\r\n      City,\r\n      CaseStatus,\r\n    } = Case;\r\n\r\n    setCase(Case)\r\n  \r\n    if (Name) setHomeownerName(Name);\r\n    if (Tittle) setProjectName(Tittle);\r\n    if (CaseNumber) setProjectCaseNumber(CaseNumber);\r\n  \r\n    if (Street && City) {\r\n      const ext = `${Street}-${City}`;\r\n      setInvoicefileInstall(`invoice_install_${ext}.pdf`);\r\n      setInvoicefileMaterial(`invoice_material_${ext}.pdf`);\r\n    }\r\n  \r\n    if (\r\n      [CaseStatus.Closed, CaseStatus.Canceled, CaseStatus.CancelRequested, CaseStatus.Drafted]\r\n      .includes(CaseStatus)\r\n    ) {\r\n      setMakeRevisionsButtonDisplay(\"none\");\r\n    }\r\n    \r\n    setCaseStatus(CaseStatus);\r\n    geocodeAddress(`${Case.Street}, ${Case.City}`)\r\n  };\r\n\r\n  const [isUploadProjectPhotosOpen, setIsUploadProjectPhotosOpen] = useState(false);\r\n\r\n  //Polygon Variables\r\n  const [shapes, setShapes] = useState([]);\r\n  const [temporaryShapesArray, setTemporaryShapesArray] = useState([]);\r\n  const [center, setCenter] = useState({ lat: 49.2734, lng: 123.1038 });  // default coordinates\r\n  const [polylines, setPolylines] = useState([]);\r\n  const [drawnPolyline, setDrawnPolylines] = useState([]);\r\n  const [selectedAccessShape, setSelectedAccessShape] = useState([]);\r\n\r\n  const [currentColor, setCurrentColor] = useState();\r\n  const [currentVertices, setCurrentVertices] = useState([]);\r\n  const [obstructions, setObstructions] = useState([]);\r\n  const [utilities, setUtilities] = useState([]);\r\n  const [drawing, setDrawing] = useState(true);\r\n  const [currentDistance, setCurrentDistance] = useState(0);\r\n  const [isDrawingPolygon, setIsDrawingPolygon] = useState(false);\r\n\r\n  //Selecting on Map\r\n  const [selectedShape, setSelectedShape] = useState(null);\r\n  const [selectedShapeObject, setSelectedShapeObject] = useState(null);\r\n  const [selectedObstruction, setSelectedObstruction] = useState(null);\r\n  const [selectedUtility, setSelectedUtility] = useState(null);\r\n\r\n  const [mousePosition, setMousePosition] = useState(null)\r\n  const [targetPosition, setTargetPosition] = useState(center);\r\n  const [map, setMap] = useState(null);\r\n\r\n  //Select Color Variables\r\n  const [showColorCircles, setShowColorCircles] = useState(true);\r\n  const [fade, setFade] = useState(false);\r\n\r\n  //Animation\r\n  const [dashArray, setDashArray] = useState([10, 2]);\r\n  const [isDragging, setIsDragging] = useState(false);\r\n\r\n  //Text Markups\r\n  const [textMarkups, setTextMarkups] = useState([]);\r\n  const [selectedText, setSelectedText] = useState(null);\r\n  const [inputVisible, setInputVisible] = useState(false);\r\n  const [inputValue, setInputValue] = useState('');\r\n  const [isTextToolSelected, setIsTextToolSelected] = useState(false);\r\n\r\n  const [apiKey, setApiKey] = useState('AIzaSyAwFxJFlGK9eIRsKjHCw34NzS6CCPM8AEc');\r\n\r\n  const inputRef = useRef(null);\r\n\r\n  //Plotting Variables\r\n  const [shapePlotterOpen, setShapePlotterOpen] = useState(false);\r\n  const [isPlottingToolSelected, setIsPlottingToolSelected] = useState(false);\r\n  \r\n  const [draggingPolygonPosition, setDraggingPolygonPosition] = useState(false);\r\n\r\n\r\n  //Access Area Window\r\n  const [accessWindowVisible, setAccessWindowVisible] = useState(params.quoteId == 0 ? true : false);\r\n  const [showAccessItemWindow, setShowAccessItemWindow] = useState(false);\r\n\r\n  \r\n  const [accessObject, setAccessObject] = useState({\r\n    length: 0,\r\n    width: 0,\r\n    elevation: 0,\r\n    obstruction: false\r\n  });\r\n  const [accessAreaItems, setAccessAreaItems] = useState([]);\r\n  const [itemCategory, setItemCategory] = useState(params.quoteId === '0' ? 'Access' : 'Removal');\r\n  \r\n  //Shape Data\r\n  const [currentShapeData, setCurrentShapeData] = useState({});\r\n  const [activeSquareFeet, setActiveSquareFeet] = useState(0);\r\n  const [activePerimeter, setActivePerimeter] = useState(0);\r\n\r\n  //Info Window for Polygon Info\r\n  const [infoWindow, setInfoWindow] = useState({\r\n    isOpen: false,\r\n    position: null,\r\n    content: null\r\n  });\r\n  const [deleteWindow, setDeleteWindow] = useState({isOpen: false, item: null});\r\n  const [selectedIcon, setSelectedIcon] = useState('polygon');\r\n  const [showText, setShowText] = useState(false);\r\n  const [fadeText, setFadeText] = useState(false);\r\n\r\n  const [estimateId, setEstimateId] = useState(0);\r\n\r\n  //Obstruction Window Popup\r\n  const [obstructionWindowPopup, setObstructionWindowPopup] = useState(false);\r\n\r\n  //Save Confirmation\r\n  const [showDialog, setShowDialog] = useState(false);\r\n\r\n  const handleSave = () => {\r\n    history.push(`/viewestimatestaff/${params.Id}/${params.storeId}/${params.caseId}/${params.quoteId}/0/0`);\r\n    setShowDialog(false); // Close the dialog after saving\r\n  };\r\n\r\n  const geocodeAddress = (address) => {\r\n    // initialize the geocoder\r\n    const geocoder = new window.google.maps.Geocoder();\r\n\r\n    geocoder.geocode({ address }, (results, status) => {\r\n      if (status === \"OK\") {\r\n        const { lat, lng } = results[0].geometry.location;\r\n        if (typeof lat === 'function' && typeof lng === 'function') {\r\n          setCenter({ lat: lat(), lng: lng() });\r\n        } else {\r\n          alert(\"Failed to get valid coordinates for the location: \" + address);\r\n        }\r\n      } else {\r\n        alert(\"Geocode was not successful for the following reason: \" + status);\r\n      }\r\n    });\r\n  };\r\n\r\n  const formattedDateTime = async () => {\r\n    const now = new Date();\r\n    const day = now.getDate();\r\n    const month = now.toLocaleString('default', { month: 'short' });\r\n    const year = now.getFullYear();\r\n    let hour = now.getHours();\r\n    const ampm = hour >= 12 ? 'PM' : 'AM';\r\n    hour = hour % 12;\r\n    hour = hour ? hour : 12;\r\n    const minute = now.getMinutes().toString().padStart(2, '0');\r\n    return (`${day} ${month} ${year}, ${hour}:${minute} ${ampm}`);\r\n  };\r\n\r\n  \r\n\r\n  \r\n  // const downloadPDF = async () => {\r\n  //   const newContainerStyle = {\r\n  //     ...containerStyle,\r\n  //     width: '180%',\r\n  //     height: '120vh',\r\n  //     transform: `scale(0.9)`\r\n  //   };\r\n  \r\n  //   const mapContainer = document.getElementById('map');\r\n  //   Object.assign(mapContainer.style, newContainerStyle);\r\n  \r\n  //   const timestamp = await formattedDateTime();\r\n  //   const input = document.getElementById('map');\r\n  \r\n  //   html2canvas(input, {\r\n  //     useCORS: true,\r\n  //     logging: true,\r\n  //     scale: 1,\r\n  //   })\r\n  //     .then((canvas) => {\r\n  //       const imgData = canvas.toDataURL('image/png');\r\n  \r\n  //       const pdf = new jsPDF('p', 'in', [8.5, 11]); // 'p' for portrait mode, 'in' for inches\r\n  \r\n  //       // Convert the dimensions from pixels to inches (1 inch = 72 pixels)\r\n  //       const imgWidth = canvas.width / 72;\r\n  //       const imgHeight = canvas.height / 72;\r\n  \r\n  //       pdf.addImage(\r\n  //         imgData, \r\n  //         'PNG', \r\n  //         0, // x position\r\n  //         0, // y position\r\n  //         imgWidth, // width in inches\r\n  //         imgHeight // height in inches\r\n  //       );\r\n  \r\n  //       pdf.save(`${timestamp} On-Site Estimate.pdf`);\r\n  //       // Revert styles back to original state\r\n  //       Object.assign(mapContainer.style, containerStyle);\r\n  //     })\r\n  //     .catch((error) => {\r\n  //       // console.error('Error generating PDF:', error);\r\n  //     });\r\n  // };\r\n\r\n  const downloadPDF = async () => {\r\n    const newContainerStyle = {\r\n      ...containerStyle,\r\n      width: '180%',\r\n      height: '120vh',\r\n      transform: `scale(0.9)`\r\n    };\r\n  \r\n    const mapContainer = document.getElementById('map');\r\n    Object.assign(mapContainer.style, newContainerStyle);\r\n  \r\n    const timestamp = await formattedDateTime();\r\n    const input = document.getElementById('map');\r\n  \r\n    html2canvas(input, {\r\n      useCORS: true,\r\n      logging: true,\r\n      scale: 1,\r\n    })\r\n      .then((canvas) => {\r\n        const imgData = canvas.toDataURL('image/png');\r\n  \r\n        const pdf = new jsPDF('p', 'in', [8.5, 11]); // 'p' for portrait mode, 'in' for inches\r\n  \r\n        // Convert the dimensions from pixels to inches (1 inch = 72 pixels)\r\n        const imgWidth = canvas.width / 72;\r\n        const imgHeight = canvas.height / 72;\r\n  \r\n        pdf.addImage(\r\n          imgData, \r\n          'PNG', \r\n          0, // x position\r\n          0, // y position\r\n          imgWidth, // width in inches\r\n          imgHeight // height in inches\r\n        );\r\n  \r\n        // Create a Blob from the PDF data and trigger the download\r\n        const pdfBlob = pdf.output('blob');\r\n        const link = document.createElement('a');\r\n        link.href = URL.createObjectURL(pdfBlob);\r\n        link.download = `${timestamp} On-Site Estimate.pdf`;\r\n        link.click();\r\n        URL.revokeObjectURL(link.href);\r\n  \r\n        // Revert styles back to original state\r\n        Object.assign(mapContainer.style, containerStyle);\r\n      })\r\n      .catch((error) => {\r\n        // console.error('Error generating PDF:', error);\r\n      });\r\n  };\r\n  \r\n  \r\n\r\n  const [zoom, setZoom] = useState(21); // adjust initial zoom level as needed\r\n  const mapRef = useRef();\r\n\r\n  const zoomIn = () => {\r\n    setScale(prevScale => prevScale + 0.5);\r\n    setZoom(21);\r\n  };\r\n  \r\n\r\n  const zoomOut = () => {\r\n  if(scale === 1) {\r\n    setScale(1)\r\n  } else {\r\n    setScale(prevScale => prevScale - 0.5);\r\n  }\r\n  setZoom(21);\r\n  };\r\n\r\n  // function addVertex() {\r\n  //   if (!drawing && !isDrawingPolygon) return;\r\n\r\n  //   const newVertex = targetPosition;\r\n  //   setCurrentVertices(currentVertices => [...currentVertices, newVertex]);\r\n  //   if (currentVertices.length > 0) {\r\n  //     const lastVertex = currentVertices[currentVertices.length - 1];\r\n  //     const distanceInMeters = window.google.maps.geometry.spherical.computeDistanceBetween(\r\n  //       new window.google.maps.LatLng(lastVertex), \r\n  //       new window.google.maps.LatLng(newVertex)\r\n  //     );\r\n  //     const distanceInFeet = distanceInMeters * 3.28084; // Convert from meters to feet\r\n  //     setCurrentDistance(distanceInFeet.toFixed(2));\r\n  //     setPolylines(polylines => [...polylines, [lastVertex, newVertex]]);\r\n  //   }\r\n  // }\r\n\r\n  function addVertex() {\r\n    if (!drawing && !isDrawingPolygon) return;\r\n  \r\n    // Add the targetPosition directly without rounding lat/lng\r\n    const newVertex = targetPosition;\r\n    setCurrentVertices(currentVertices => [...currentVertices, newVertex]);\r\n  \r\n    if (currentVertices.length > 0) {\r\n      const lastVertex = currentVertices[currentVertices.length - 1];\r\n      const distanceInMeters = window.google.maps.geometry.spherical.computeDistanceBetween(\r\n        new window.google.maps.LatLng(lastVertex), \r\n        new window.google.maps.LatLng(newVertex)\r\n      );\r\n      const distanceInFeet = distanceInMeters * 3.28084; // Convert from meters to feet\r\n  \r\n      // Round the distance for display only\r\n      const roundedDistanceInFeet = Math.round(distanceInFeet * 2) / 2;\r\n      setCurrentDistance(roundedDistanceInFeet.toFixed(2));\r\n  \r\n      setPolylines(polylines => [...polylines, [lastVertex, newVertex]]);\r\n    }\r\n  }\r\n  \r\n  \r\n  \r\n\r\n  // function addVertex() {\r\n  //   if (!drawing) return;\r\n  \r\n  //   const newVertex = targetPosition; // This should be updated based on mouse position\r\n  \r\n  //   if (currentVertices.length > 0) {\r\n  //     const lastVertex = currentVertices[currentVertices.length - 1];\r\n  \r\n  //     // Calculate the angle between the last vertex and the new vertex\r\n  //     let angle = Math.atan2(newVertex.lat - lastVertex.lat, newVertex.lng - lastVertex.lng) * (180 / Math.PI);\r\n  //     angle = (angle + 360) % 360; // Normalize angle to be between 0 and 360\r\n  \r\n  //     // Snap angle to nearest 45 degrees\r\n  //     const snappedAngle = Math.round(angle / 45) * 45;\r\n  \r\n  //     // Calculate distance for maintaining the length\r\n  //     const distanceInMeters = window.google.maps.geometry.spherical.computeDistanceBetween(\r\n  //       new window.google.maps.LatLng(lastVertex), \r\n  //       new window.google.maps.LatLng(newVertex)\r\n  //     );\r\n  \r\n  //     // Calculate new vertex position based on snapped angle and distance\r\n  //     const radians = snappedAngle * (Math.PI / 180);\r\n  //     const newLat = lastVertex.lat + distanceInMeters * Math.sin(radians) / 111319.9; // Convert meters to degrees latitude\r\n  //     const newLng = lastVertex.lng + distanceInMeters * Math.cos(radians) / (111319.9 * Math.cos(lastVertex.lat * (Math.PI / 180))); // Adjust for longitude\r\n  \r\n  //     const snappedVertex = { lat: newLat, lng: newLng };\r\n  \r\n  //     // Update your vertices and polylines state with the snapped vertex\r\n  //     setCurrentVertices(currentVertices => [...currentVertices, snappedVertex]);\r\n  //     setPolylines(polylines => [...polylines, [lastVertex, snappedVertex]]);\r\n  \r\n  //     // Update distance if needed\r\n  //     const distanceInFeet = distanceInMeters * 3.28084; // Convert from meters to feet\r\n  //     setCurrentDistance(distanceInFeet.toFixed(2));\r\n  //   } else {\r\n  //     // If it's the first vertex, just add it without snapping\r\n  //     setCurrentVertices(currentVertices => [...currentVertices, newVertex]);\r\n  //   }\r\n  // }\r\n  \r\n\r\n  function updateDistance() {\r\n    const newVertex = targetPosition;\r\n    if (currentVertices.length > 0) {\r\n      const lastVertex = currentVertices[currentVertices.length - 1];\r\n      const distanceInMeters = window.google.maps.geometry.spherical.computeDistanceBetween(\r\n        new window.google.maps.LatLng(lastVertex), \r\n        new window.google.maps.LatLng(newVertex)\r\n      );\r\n      const distanceInFeet = distanceInMeters * 3.28084; // Convert from meters to feet\r\n      setCurrentDistance(distanceInFeet.toFixed(2));\r\n    }\r\n}\r\n\r\n  function cancelDrawing() {\r\n    setCurrentVertices([]);\r\n    setPolylines([]);  // clear the polylines state\r\n    setDrawing(false);\r\n  }\r\n\r\n  function finishDrawing() {\r\n    // Determine if user is drawing a polygon or polyline\r\n    const dataCalculator = isDrawingPolygon ? calculatePolygonData : calculatePolylineData;\r\n  \r\n    const shapeData = dataCalculator(currentVertices);\r\n    setCurrentShapeData(shapeData)\r\n    if(shapeData?.area){\r\n      setActiveSquareFeet(shapeData?.area)\r\n    }\r\n    if(shapeData?.perimeter){\r\n      setActivePerimeter(shapeData?.perimeter)\r\n    }\r\n    setShapes([...shapes, { color: currentColor, vertices: currentVertices, data: shapeData, name: 'Shape Name' }]);\r\n    setCurrentVertices([]);\r\n    setPolylines([]);  // clear the polylines state\r\n    setCurrentDistance(0); // Reset distance\r\n  }\r\n\r\n  function calculatePolygonData(vertices) {\r\n    let distance = 0;\r\n    let distances = [];\r\n\r\n    for (let i = 0; i < vertices.length; i++) {\r\n        const start = vertices[i];\r\n        const end = vertices[i + 1] || vertices[0];\r\n        const segmentDistance = window.google.maps.geometry.spherical.computeDistanceBetween(new window.google.maps.LatLng(start), new window.google.maps.LatLng(end));\r\n        distance += segmentDistance;\r\n        distances.push(segmentDistance);\r\n    }\r\n\r\n    const area = window.google.maps.geometry.spherical.computeArea(vertices.map(vertex => new window.google.maps.LatLng(vertex)));\r\n\r\n    // Convert to feet and square feet\r\n    distances = distances.map(d => d * 3.28084);\r\n    distance = roundToNearestHalf(distance * 3.28084);\r\n    const areaInSqFt = roundToNearestHalf(area * 10.7639);\r\n\r\n    return {\r\n        distances,\r\n        perimeter: distance,\r\n        area: areaInSqFt,\r\n    };\r\n}\r\n\r\n  \r\nfunction calculatePolylineData(vertices) {\r\n  let distance = 0;\r\n  let distances = [];\r\n\r\n  for (let i = 0; i < vertices.length; i++) {\r\n    const start = vertices[i];\r\n    const end = vertices[i + 1]; // No need to close the polyline\r\n    if (end) {\r\n      const segmentDistance = window.google.maps.geometry.spherical.computeDistanceBetween(\r\n        new window.google.maps.LatLng(start), \r\n        new window.google.maps.LatLng(end)\r\n      );\r\n      distance += segmentDistance;\r\n      distances.push(segmentDistance);\r\n    }\r\n  }\r\n  // Convert to feet\r\n  distances = distances.map(d => d * 3.28084);\r\n  distance = roundToNearestHalf(distance * 3.28084);\r\n\r\n  return {\r\n    distances,\r\n    perimeter: distance,\r\n  };\r\n}\r\n\r\n\r\n  function addMarker(event) {\r\n    if (currentColor === 'red') {\r\n      setObstructions([...obstructions, { position: { lat: event.latLng.lat(), lng: event.latLng.lng() }, name: 'Obstruction Name' }]);\r\n    } else if (currentColor === 'blue') {\r\n      setUtilities([...utilities, { position: { lat: event.latLng.lat(), lng: event.latLng.lng() }, name: 'Utility Name' }]);\r\n    }\r\n  }\r\n\r\n  // function undoLastVertex() {\r\n  //   setCurrentDistance(0); // Reset distance\r\n  //   setCurrentVertices(currentVertices => {\r\n  //     const newVertices = [...currentVertices];\r\n  //     newVertices.pop();\r\n  \r\n  //     // pop polylines at the same time\r\n  //     setPolylines(polylines => {\r\n  //       const newPolylines = [...polylines];\r\n  //       newPolylines.pop();\r\n  //       return newPolylines;\r\n  //     });\r\n  \r\n  //     return newVertices;\r\n  //   });\r\n  \r\n  //   // If there is only one vertex left, update targetPosition to center of the map\r\n  //   if (currentVertices.length === 1) {\r\n  //     setTargetPosition(targetPosition => {\r\n  //       const newTargetPosition = { lat: map.getCenter().lat(), lng: map.getCenter().lng() };\r\n  //       return newTargetPosition;\r\n  //     });\r\n  //   }\r\n\r\n  //   setCurrentVertices(currentVertices => {\r\n  //     const newVertices = [...currentVertices];\r\n  //     newVertices.pop();\r\n  \r\n  //     // pop polylines at the same time\r\n  //     setPolylines(polylines => {\r\n  //       const newPolylines = [...polylines];\r\n  //       newPolylines.pop();\r\n  //       return newPolylines;\r\n  //     });\r\n  \r\n  //     return newVertices;\r\n  //   });\r\n  \r\n  //   // If there is only one vertex left, update targetPosition to center of the map\r\n  //   if (currentVertices.length === 1) {\r\n  //     setTargetPosition(targetPosition => {\r\n  //       const newTargetPosition = { lat: map.getCenter().lat(), lng: map.getCenter().lng() };\r\n  //       return newTargetPosition;\r\n  //     });\r\n  //   }\r\n  // }\r\n\r\n  function undoLastVertex() {\r\n    // Reset any distance display\r\n    setCurrentDistance(0);\r\n    \r\n    setCurrentVertices((prevVertices) => {\r\n      // If there are no vertices, do nothing\r\n      if (prevVertices.length === 0) {\r\n        return prevVertices;\r\n      }\r\n      \r\n      // Create a copy and remove the last vertex\r\n      const newVertices = [...prevVertices];\r\n      newVertices.pop();\r\n      \r\n      // Remove the last polyline as well\r\n      setPolylines((prevPolylines) => {\r\n        if (prevPolylines.length === 0) {\r\n          return prevPolylines;\r\n        }\r\n        const newPolylines = [...prevPolylines];\r\n        newPolylines.pop();\r\n        return newPolylines;\r\n      });\r\n  \r\n      // If only one vertex remains after popping, recenter the map\r\n      if (newVertices.length === 1) {\r\n        setTargetPosition({\r\n          lat: map.getCenter().lat(),\r\n          lng: map.getCenter().lng(),\r\n        });\r\n      }\r\n      \r\n      return newVertices;\r\n    });\r\n  }\r\n  \r\n  \r\n  useEffect(() => {\r\n    if (currentVertices.length > 0) {\r\n      const lastVertex = currentVertices[currentVertices.length - 1];\r\n      setTargetPosition({ lat: lastVertex.lat, lng: lastVertex.lng });\r\n    }\r\n    console.log('Set Vertices')\r\n  }, [currentVertices]);\r\n  \r\n  function savePDF() {\r\n    const input = document.getElementById('map');\r\n    html2canvas(input)\r\n      .then((canvas) => {\r\n        const imgData = canvas.toDataURL('image/png');\r\n        const pdf = new jsPDF();\r\n        pdf.addImage(imgData, 'PNG', 0, 0);\r\n        pdf.save(\"download.pdf\"); \r\n      });\r\n  }\r\n\r\n  function selectPolygon(index) {\r\n    setSelectedShape(index);\r\n    setSelectedObstruction(null);\r\n    setSelectedUtility(null);\r\n  }\r\n\r\n  function selectObstruction(index) {\r\n    setSelectedObstruction(index);\r\n    setSelectedShape(null);\r\n    setSelectedUtility(null);\r\n  }\r\n\r\n  function selectUtility(index) {\r\n    setSelectedUtility(index);\r\n    setSelectedShape(null);\r\n    setSelectedObstruction(null);\r\n  }\r\n\r\n  function circleToggle(showColorCircles) {\r\n    if(showColorCircles) {\r\n      setFade(false);\r\n      setShowColorCircles(false);\r\n    } else {\r\n      setFade(true);\r\n      setShowColorCircles(true);\r\n    }\r\n  }\r\n\r\n function deleteEntity() {\r\n    if (selectedShape !== null) {\r\n      setShapes(shapes.filter((polygon, index) => index !== selectedShape));\r\n      setSelectedShape(null);\r\n    } else if (selectedObstruction !== null) {\r\n      setObstructions(obstructions.filter((obstruction, index) => index !== selectedObstruction));\r\n      setSelectedObstruction(null);\r\n    } else if (selectedUtility !== null) {\r\n      setUtilities(utilities.filter((utility, index) => index !== selectedUtility));\r\n      setSelectedUtility(null);\r\n    } else if (selectedText !== null) {\r\n      setTextMarkups(textMarkups.filter((_, index) => index !== selectedText));\r\n      setSelectedText(null);\r\n  }\r\n  DeleteShapeFromDatabase(selectedShapeObject.id)\r\n  }\r\n\r\n  const DeleteShapeFromDatabase = async (shapeindex) => {  \r\n    const response = await axios.delete(`${window.$POLYGONURL}?id=eq.${shapeindex}`, {\r\n      headers: {\r\n        apikey: window.$POLYGONAPIKEY,\r\n          authorization: window.$POLYGONAUTHKEY\r\n      }\r\n    })\r\n    .then(response => {\r\n      console.log('Data deleted successfully:', response.data);\r\n    })\r\n    .catch(error => {\r\n      console.error('Error deleting data:', error);\r\n    });\r\n  }\r\n\r\n//   const AddItemToPolygon = async (item) => {\r\n//     if (shapes.length > 0) { // Checking if there is any shape drawn\r\n//       const lastShapeIndex = shapes.length - 1; // Get the index of the last shape in the shapes array\r\n\r\n//       // Create a copy of the shapes array\r\n//       const updatedShapes = [...shapes];\r\n      \r\n//       // If the 'items' property doesn't exist on a polygon object yet, add it.\r\n//       if (!updatedShapes[lastShapeIndex].hasOwnProperty('items')) {\r\n//         updatedShapes[lastShapeIndex].items = [];\r\n//       }\r\n\r\n//       // Push the new item data into the 'items' property of the last shape\r\n//       updatedShapes[lastShapeIndex].items.push({ id: item.Id, name: item.Name });\r\n//       // Update the shapes state with the new array\r\n//       setShapes(updatedShapes);\r\n//   }\r\n// }\r\n\r\nconst [itemAddedPopup, setItemAddedPopup] = useState(false)\r\n\r\nconst AddItemToPolygon = async (item) => {\r\n  \r\n  if (shapes.length > 0) { // Checking if there is any shape drawn\r\n    // Determine the target shape's index: the selected shape if there is one, or the last shape otherwise\r\n    const targetShapeIndex = selectedShape !== null ? selectedShape : shapes.length - 1;\r\n    \r\n    // Create a copy of the shapes array\r\n    const updatedShapes = [...shapes];\r\n\r\n    // If the 'items' property doesn't exist on the target polygon object yet, add it.\r\n    if (!updatedShapes[targetShapeIndex].hasOwnProperty('items')) {\r\n      updatedShapes[targetShapeIndex].items = [];\r\n    }\r\n\r\n    // Push the new item data into the 'items' property of the target shape\r\n    updatedShapes[targetShapeIndex].items.push({ id: item.Id, name: item.Name });\r\n    // Update the shapes state with the new array\r\n    setShapes(updatedShapes);\r\n\r\n    AddShapeToDatabase(updatedShapes[targetShapeIndex], params.quoteId)\r\n    RefreshEstimate()\r\n  }\r\n\r\n  setItemAddedPopup(true)\r\n};\r\n\r\n\r\n\r\n// const AddShapeToDatabase = async (shapedata, quoteId) => {  \r\n//   const shapeDataToSend = {\r\n//     ...shapedata,\r\n//     estimateId: quoteId, // Assuming params.quoteId is passed as quoteId\r\n//     type: shapedata.data.area == 0 ? 'Polyline' : 'Polygon' // Example value for type\r\n//   };\r\n//   if(quoteId !== 0 && quoteId !== '0') {\r\n//   const resp = await axios.post(`${window.$POLYGONURL}`, [shapeDataToSend], {\r\n//     headers: {\r\n//       apikey: window.$POLYGONAPIKEY,\r\n//         authorization: window.$POLYGONAUTHKEY\r\n//     }\r\n//   })\r\n//   .then(response => {\r\n//     console.log('Data inserted successfully:', response.data);\r\n//   })\r\n//   .catch(error => {\r\n//     console.error('Error inserting data:', error);\r\n//   });\r\n// }\r\n// }\r\n\r\nconst axios = require('axios'); // Ensure axios is imported\r\n\r\nconst AddShapeToDatabase = async (shapeData, quoteId) => {\r\n  const shapeDataToSend = {\r\n    ...shapeData,\r\n    estimateId: quoteId, // Assuming params.quoteId is passed as quoteId\r\n    type: shapeData.data.area === 0 ? 'Polyline' : 'Polygon' // Determine type based on area\r\n  };\r\n\r\n  if (quoteId !== 0 && quoteId !== '0') {\r\n    try {\r\n      // Adjust the URL and data payload according to how your API can search for an existing polygon\r\n      const response = await axios.get(`${window.$POLYGONURL}?data=eq.${encodeURIComponent(JSON.stringify(shapeDataToSend.data))}`, {\r\n        headers: {\r\n          apikey: window.$POLYGONAPIKEY,\r\n          authorization: window.$POLYGONAUTHKEY\r\n        }\r\n      });\r\n\r\n      if (response.status === 200 && response.data.length > 0) {\r\n        // Assuming the response includes details about the found shape(s)\r\n        console.log('Shape already exists, updating');\r\n        const existingShapeId = response.data[0].id; // Example: grabbing the ID of the first match\r\n\r\n        // Perform an update operation here using existingShapeId\r\n        // The URL and payload might need to be adjusted based on your API's requirements\r\n        const updateResponse = await axios.patch(`${window.$POLYGONURL}?id=eq.${existingShapeId}`, shapeDataToSend, {\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            authorization: window.$POLYGONAUTHKEY\r\n          }\r\n        });\r\n\r\n        console.log('Shape updated successfully:', updateResponse.data);\r\n      } else {\r\n        // Shape does not exist, create a new one\r\n        const createResponse = await axios.post(`${window.$POLYGONURL}`, [shapeDataToSend], {\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            authorization: window.$POLYGONAUTHKEY\r\n          }\r\n        });\r\n\r\n        console.log('Shape created successfully:', createResponse.data);\r\n      }\r\n    } catch (error) {\r\n      console.error('Error accessing the database:', error);\r\n    }\r\n  }\r\n};\r\n\r\nconst [color, setColor] = useState(\"#000000\");\r\nconst [isColorChanged, setIsColorChanged] = useState(false);\r\n\r\nconst handleColorChange = (newColor) => {\r\n\r\n  if (typeof newColor !== \"string\" || newColor.trim() === \"\") {\r\n    console.error(\"Invalid color value:\", newColor);\r\n    return;\r\n  }\r\n  setColor(newColor);\r\n  setIsColorChanged(true);\r\n};\r\n\r\nuseEffect(() => {\r\n  if (selectedShapeObject?.color) {\r\n    setColor(selectedShapeObject.color);\r\n  }\r\n}, [selectedShapeObject]);\r\n\r\nconst saveColorChange = () => {\r\n  shapes[selectedShape].color = color  \r\n  console.log(shapes[selectedShape].color)\r\n  // Save updated shapes and perform any API actions\r\n  SaveUpdatedPolygonPosition(selectedShape);\r\n  setIsColorChanged(false);\r\n  setTimeout(() => {\r\n    GetShapeData(params.quoteId);\r\n  }, 2500);\r\n};\r\n\r\nconst AddPlottedShapeToDatabase = async (item, quoteId) => {\r\n  const itemDataToSend = {\r\n    ...item,\r\n    estimateId: quoteId\r\n  }\r\n  if(quoteId !== 0 && quoteId !== '0'){\r\n  const resp = await axios.post(`${window.$PLOTICONURL}`, [itemDataToSend], {\r\n    headers: {\r\n      apikey: window.$POLYGONAPIKEY,\r\n        authorization: window.$POLYGONAUTHKEY\r\n    }\r\n  })\r\n  .then(response => {\r\n    console.log('Data inserted successfully:', response.data);\r\n  })\r\n  .catch(error => {\r\n    console.error('Error inserting data:', error);\r\n  });\r\n}\r\n}\r\n  \r\n  const handleMapClick = (event) => {\r\n    // Get the click position\r\n    const clickPosition = {\r\n      lat: event.latLng.lat(),\r\n      lng: event.latLng.lng(),\r\n    };\r\n  \r\n    // If a markup is selected, do nothing\r\n    if (selectedText !== null) {\r\n      setSelectedText(null);\r\n      return;\r\n    }\r\n  \r\n    if (inputVisible) {\r\n      if (inputValue) {\r\n        // If the input is visible and there's a value, add the markup to the array and hide the input\r\n        setTextMarkups((prevMarkups) =>\r\n          prevMarkups.map((markup) =>\r\n            markup.isEditing\r\n              ? { ...markup, text: inputValue, isEditing: false, color: currentColor }\r\n              : markup\r\n          )\r\n        );\r\n        setInputVisible(false);\r\n        setInputValue(\"\");\r\n      } else {\r\n        // If the input is visible but there's no value, just hide the input\r\n        setInputVisible(false);\r\n      }\r\n    } else if (!inputVisible) {\r\n      // If the input is not visible, set the input to visible and add a new editing markup\r\n      setTextMarkups((prevMarkups) => [\r\n        ...prevMarkups.map(markup => ({ ...markup, isEditing: false })),\r\n        { id: prevMarkups.length, position: clickPosition, isEditing: true, color: currentColor},\r\n      ]);\r\n      setInputVisible(true);\r\n      inputRef.current && inputRef.current.focus();\r\n    }\r\n  };\r\n\r\nconst [loading, setLoading] = useState(false); // Track loading state\r\nconst iconSize = window.$ISMOBILE ? '40px' : '50px';\r\n\r\nconst handlePolygonClick = (shape, index) => {\r\n  setSelectedShape(index);\r\n  setSelectedShapeObject(shape);\r\n\r\n  console.log(shape, index)\r\n  if (selectedShape === index) \r\n    {\r\n    setInfoWindow({\r\n      isOpen: true,\r\n      position: shape.vertices[0], // Assuming the first vertex is the desired position\r\n      content: createInfoWindowContent(shape, index),\r\n    });\r\n  }\r\n};\r\n\r\nuseEffect(() => {\r\n  if (selectedShapeObject) {\r\n    setInfoWindow(prev => ({\r\n      ...prev,\r\n      content: createInfoWindowContent(selectedShapeObject, selectedShape),\r\n    }));\r\n  }\r\n  console.log('updatedNotes')\r\n}, [itemNoteId, itemNotes, addNotes, isColorChanged]);\r\n\r\nconst createInfoWindowContent = (shape, index) => (\r\n  <div key={index}>\r\n    <FlexDivSpaceBetween>\r\n        <TinyTextItalics>SqFt: {shape?.data?.area?.toFixed(2)}</TinyTextItalics>\r\n        <TinyTextItalics>Perimeter: {shape?.data?.perimeter?.toFixed(2)}</TinyTextItalics>\r\n    </FlexDivSpaceBetween>\r\n    <FlexDiv>\r\n      \r\n        <IconButton fontsize={'10px'} minwidth={'25px'} onClick={() => setShowAccessItemWindow(true)} text='' src='/Green Button.svg'></IconButton>\r\n        <IconButton fontsize={'10px'} minwidth={'25px'}  onClick={() => {\r\n            setTemporaryShapesArray(shapes);\r\n            setDraggingPolygonPosition(true);\r\n            setInfoWindow({ isOpen: false });\r\n            calculateIconPosition(selectedShape);\r\n          }} text='' src='/Drag_icon.svg'></IconButton>\r\n        <IconButton  fontsize={'10px'} minwidth={'25px'} onClick={()=>{setIsUploadProjectPhotosOpen(true)}} text='' src='/addphotowhite_icon.svg'></IconButton>\r\n        <IconButton key={`toggle-${index}`} onClick={() => toggleIndividualLabel(index)} fontsize={'10px'} minwidth={'25px'} text='' src='/singlenumberwhite_icon.svg'></IconButton>\r\n        <input\r\n  type=\"color\"\r\n  value={shape?.color}\r\n  onInput={(e) => handleColorChange(e.target.value)} // Update the color when changed\r\n  style={{\r\n    width: \"50px\",\r\n    height: \"50px\",\r\n    border: \"none\",\r\n    borderRadius: \"25px\",\r\n    overflow: \"hidden\",\r\n  }}\r\n/>\r\n{/* <IconButton onClick={()=>{console.log(selectedShapeObject.color)}}>Current Data</IconButton> */}\r\n        {/* <IconButton fontsize={'10px'} minwidth={'35px'} onClick={() => {\r\n            window.alert('Coming Soon!')\r\n          }} text='' src='/photowhite_icon.svg'></IconButton> */}\r\n    </FlexDiv>\r\n  \r\n   {addNotes && (\r\n        <>\r\n          <TinyTextItalics>Add Notes</TinyTextItalics>\r\n          <FlexDiv>\r\n            <TextAreaAutoResize\r\n              height='120px'\r\n              fontsize='16px'\r\n              value={itemNotes} // Controlled value for the text area\r\n              onChange={(e) => setItemNotes(e.target.value)}\r\n              mobilewidth=\"100%\"\r\n            />\r\n            <Icon30px20pxPointer\r\n              onClick={() => {handleNoteSubmit(); setInfoWindow({isOpen:false})}}\r\n              src={loading ? '/loadinggifgreen.gif' : '/Green Button.svg'} // Dynamic icon src\r\n            />\r\n          </FlexDiv>\r\n        </>\r\n      )}\r\n          <StyledHRGreyBreak></StyledHRGreyBreak>\r\n    {shape.items && shape.items.map((item, itemIndex) => (\r\n      <FlexDiv key={itemIndex}>\r\n        <p onClick={() => ScrollToItemOnEstimate(item, itemIndex)}>\r\n          {item.name}\r\n        </p>\r\n        <Icon30px20pxPointer\r\n          onClick={() => handleAddNoteClick(item.id)}\r\n          src=\"/Pencil.svg\"\r\n        />\r\n        <Icon30px20pxPointer onClick={() => setDeleteWindow({ isOpen: true, item })} src=\"/DeleteIcon.svg\" />\r\n      </FlexDiv>\r\n    ))}\r\n  </div>\r\n);\r\n\r\nconst handleAddNoteClick = async (itemId) => {\r\n  setItemNoteId(itemId); // Set the note ID for the selected item\r\n  setAddNotes(true); // Show the notes input area\r\n\r\n  try {\r\n    const resp = await GetQuoteItem(itemId); // Fetch item details\r\n    if (resp && resp.item) {\r\n      setItemNotes(resp.item.Notes || ''); // Set existing note or clear if not available\r\n    } else {\r\n      setItemNotes(''); // Clear if no note exists\r\n    }\r\n  } catch (error) {\r\n    console.error(\"Failed to retrieve item notes:\", error);\r\n    setItemNotes(''); // Clear in case of an error\r\n  }\r\n};\r\n\r\nconst handleNoteSubmit = async () => {\r\n  if (itemNoteId && itemNotes) {\r\n    setLoading(true); // Show loading GIF\r\n    console.log(\"Submitting Note:\", itemNoteId, itemNotes);\r\n\r\n    await UpdateQuoteNote(itemNoteId, itemNotes);\r\n\r\n    setLoading(false); // Hide loading GIF after submission\r\n  } else {\r\n    alert(\"Please provide a valid note ID and note content.\");\r\n    console.error(\"itemNoteId or itemNotes is not set:\", itemNoteId, itemNotes);\r\n  }\r\n};\r\n\r\n\r\nconst UpdateQuoteNote = async (shapeid, notes) => {\r\n  try {\r\n    const resp = await GetQuoteItem(shapeid);\r\n    if (resp) {\r\n      let itemTemp = { ...resp.item, Notes: notes };\r\n      const respUpdate = await UpdateQuoteItem(itemTemp);\r\n      if (respUpdate) {\r\n        setAddNotes(false); // Close the notes UI after updating\r\n        console.log(\"Note updated successfully\");\r\n      }\r\n    }\r\n  } catch (error) {\r\n    console.error(\"Failed to update note:\", error);\r\n  } finally {\r\n    setLoading(false); // Ensure loading is false even if an error occurs\r\n  }\r\n};\r\n\r\n  const SaveUpdatedPolygonPosition = async (selectedShapeIndex) => {\r\n    // Validate input\r\n    if (selectedShapeIndex < 0 || selectedShapeIndex >= shapes.length) {\r\n      console.error(\"Selected shape index is out of bounds\");\r\n      return;\r\n    }\r\n    \r\n    const shapeData = shapes[selectedShapeIndex];\r\n  \r\n    if (!shapeData || !shapeData.id) {\r\n      console.error(\"Invalid shape data or missing ID\");\r\n      return;\r\n    }\r\n  \r\n    const shapeDataToSend = {\r\n      ...shapeData,\r\n      estimateId: params.quoteId, // Ensure 'params' is defined and accessible\r\n      type: shapeData.data && shapeData.data.area === 0 ? 'Polyline' : 'Polygon'\r\n    };\r\n  \r\n    try {\r\n      const response = await axios.patch(`${window.$POLYGONURL}?id=eq.${shapeData.id}`, shapeDataToSend, {\r\n        headers: {\r\n          apikey: window.$POLYGONAPIKEY,\r\n          authorization: window.$POLYGONAUTHKEY\r\n        }\r\n      });\r\n  \r\n      // Log success or handle the response appropriately\r\n      console.log(\"Polygon updated successfully:\", response.data);\r\n    } catch (error) {\r\n      // Handle errors, such as network issues or server errors\r\n      console.error(\"Error updating polygon position:\", error);\r\n    }\r\n\r\n    setDraggingPolygonPosition(false)\r\n  };\r\n  \r\n\r\n  \r\n\r\n  const onMarkerDragEnd = (event) => {\r\n  \r\n    // Capture the new marker position from the drag event\r\n    const newLat = event.latLng.lat();\r\n    const newLng = event.latLng.lng();\r\n    \r\n    // Log the new position\r\n  \r\n    // Update the icon's position state\r\n    setIconPosition({ lat: newLat, lng: newLng });\r\n  \r\n    // Calculate the lat/lng difference for the movement\r\n    const latDiff = newLat - shapes[selectedShape].vertices[0].lat;\r\n    const lngDiff = newLng - shapes[selectedShape].vertices[0].lng;\r\n  \r\n    // Log the differences to verify correctness\r\n  \r\n    // Map over the shapes to update only the selected shape's vertices\r\n    const updatedShapes = shapes.map((shape, index) => {\r\n      if (index === selectedShape) {\r\n        // Map over the vertices of the selected shape and update their positions\r\n        const updatedVertices = shape.vertices.map(vertex => ({\r\n          lat: vertex.lat + latDiff,\r\n          lng: vertex.lng + lngDiff,\r\n        }));\r\n  \r\n        // Log the original and updated vertices of the selected shape\r\n  \r\n        // Return a new shape object for the selected shape with updated vertices\r\n        return { ...shape, vertices: updatedVertices };\r\n      }\r\n  \r\n      // For shapes that are not selected, return them as is\r\n      return shape;\r\n    });\r\n  \r\n    // Log the shapes before and after the update for debugging\r\n\r\n  \r\n    // Set the updated shapes array into state\r\n    setShapes(updatedShapes);\r\n  };\r\n  \r\n\r\n  const calculateIconPosition = (shapeIndex) => {\r\n    const shapeVertices = shapes[shapeIndex].vertices; // Corrected variable name\r\n    const avgLat = shapeVertices.reduce((acc, curr) => acc + curr.lat, 0) / shapeVertices.length;\r\n    const avgLng = shapeVertices.reduce((acc, curr) => acc + curr.lng, 0) / shapeVertices.length;\r\n  \r\n    // Adjust the latitude slightly above the shape\r\n    const newPosition = { lat: avgLat + 0.00005, lng: avgLng + 0.00009 };\r\n    setIconPosition(newPosition);\r\n\r\n  };\r\n  \r\n  const [iconPosition, setIconPosition] = useState(null);\r\n\r\n  const handlePolylineClick = (shape, index) => {\r\n    setSelectedShape(index);\r\n    if(shape?.items && selectedShape === index){\r\n    setInfoWindow({\r\n      isOpen: true,\r\n      position: shape.vertices[0], // assuming this is the position you want to show the info window\r\n      content: (\r\n        <div>\r\n          {shape.items && shape.items.map((item, itemIndex) => (\r\n            <FlexDiv>\r\n            <p key={itemIndex}>{item.name}</p>\r\n            <Icon30px20pxPointer onClick={() =>{ setDeleteWindow({isOpen: true, item}); setInfoWindow({isOpen:false})}} src=\"/DeleteIcon.svg\"></Icon30px20pxPointer>\r\n            </FlexDiv>\r\n          ))}\r\n        </div>\r\n      )\r\n    });\r\n  } else {\r\n  }\r\n  }\r\n\r\n  const handleDelete = async (itemToDelete) => {\r\n    try {\r\n      // Delete the item from the database\r\n      await DeleteQuoteItemByEstimator(itemToDelete.id);  // Replace with your function to delete the item\r\n  \r\n      // Create a copy of the shapes array\r\n      let updatedShapes = [...shapes];\r\n  \r\n      // For each shape, filter out the item to delete from the 'items' array\r\n      updatedShapes.forEach(shape => {\r\n        if (shape.items) {\r\n          shape.items = shape.items.filter(item => item.id !== itemToDelete.id);\r\n        }\r\n      });\r\n  \r\n      // If the selected polygon's items array is empty, remove the polygon from the array\r\n      if (updatedShapes[selectedShape] && (!updatedShapes[selectedShape].items || updatedShapes[selectedShape].items.length === 0)) {\r\n        updatedShapes.splice(selectedShape, 1);\r\n      }\r\n\r\n      DeleteShapeFromDatabase(selectedShapeObject.id)\r\n  \r\n      // Update the shapes state\r\n      setShapes(updatedShapes);\r\n  \r\n      // Close the delete window\r\n      setDeleteWindow({isOpen: false, item: null});\r\n  \r\n    } catch (error) {\r\n    }\r\n  };\r\n\r\nconst [length, setLength] = useState('');\r\nconst [width, setWidth] = useState('');\r\nconst [elevation, setElevation] = useState('');\r\nconst [typeToUpdate, setTypeToUpdate] = useState(null);\r\n\r\nconst SetAccessInformation = async (type) => {\r\n  setCurrentColor(ColorPalette.PrimaryYellow)\r\n  setTypeToUpdate(type); // set the type to update\r\n  setAccessWindowVisible(false); // close the popup\r\n}\r\n\r\nconst [isGridOpen, setIsGridOpen] = useState(false);\r\n\r\nconst handleGridClick = (itemCategory) => {\r\n  let color;\r\n  switch(itemCategory) {\r\n    case 'Material':\r\n      color = ColorPalette.PrimaryButtonBlue;\r\n      break;\r\n    case 'Removal':\r\n      color = ColorPalette.PrimaryRed;\r\n      break;\r\n    case 'Access':\r\n      color = ColorPalette.PrimaryYellow;\r\n      break;\r\n    case 'Open':\r\n      color = ColorPalette.PrimaryOrange;\r\n      break;\r\n    case 'ShowEstimate':\r\n      setIsEstimateShown(true);\r\n      color = ColorPalette.PrimaryButtonBlue;\r\n      break;\r\n    case 'HideEstimate':\r\n      setIsEstimateShown(false);\r\n      color = ColorPalette.PrimaryButtonBlue;\r\n      break;\r\n    default:\r\n      console.log('Invalid item category');\r\n      return;\r\n  }\r\n\r\n  setCurrentColor(color);\r\n  if(itemCategory !== 'ShowEstimate' && itemCategory !== 'HideEstimate') {\r\n    setItemCategory(itemCategory);\r\n  } else {\r\n    color = ColorPalette.PrimaryRed\r\n    setItemCategory('Removal')\r\n  }\r\n  setIsGridOpen(false)\r\n};\r\n\r\n  \r\nconst [updatingMap, setUpdatingMap] = useState(false);\r\n\r\n  const GetShapeData = async (estimateid) => {\r\n    const resp = await axios.get(`${window.$POLYGONURL}?estimateId=eq.${estimateid}`, {\r\n      headers: {\r\n        apikey: window.$POLYGONAPIKEY,\r\n        authorization: window.$POLYGONAUTHKEY\r\n      }\r\n    })\r\n    if(resp.status === 200){\r\n      if(resp.data.length > 0){\r\n        setShapes(resp.data)\r\n        setUpdatingMap(true)\r\n        setDrawing(true); \r\n        setIsDrawingPolygon(true); \r\n        setIsTextToolSelected(false); \r\n        setSelectedIcon('icon1'); \r\n        setShowColorCircles(true); \r\n        setCurrentColor(ColorPalette.PrimaryRed); \r\n        setItemCategory('Removal')\r\n      } else {\r\n      }\r\n    }\r\n\r\n    const plottingiconresp = await axios.get(`${window.$PLOTICONURL}?estimateId=eq.${estimateid}`, {\r\n      headers: {\r\n        apikey: window.$POLYGONAPIKEY,\r\n        authorization: window.$POLYGONAUTHKEY\r\n      }\r\n    })\r\n    if(plottingiconresp.status === 200){\r\n      if(plottingiconresp.data.length > 0){\r\n        setIcons(plottingiconresp.data)\r\n      }\r\n    }\r\n\r\n\r\n    }\r\n\r\n    useEffect(() => {\r\n      if(params.quoteId !== 0) {\r\n        GetShapeData(params.quoteId)\r\n      }\r\n      console.log('GotShapeData')\r\n    }, [params.quoteId]);\r\n\r\n    useEffect(() => {\r\n      if (selectedIcon) {\r\n        setShowText(true);\r\n        setFadeText(true);\r\n        const timer = setTimeout(() => setFadeText(false), 1500); // Start fade-out after 1.5 seconds\r\n        const hideTimer = setTimeout(() => setShowText(false), 2000); // Hide text after 2 seconds\r\n        return () => {\r\n          clearTimeout(timer);\r\n          clearTimeout(hideTimer);\r\n        };\r\n      }\r\n      console.log('SetFadeText')\r\n    }, [selectedIcon]);\r\n\r\n    useEffect(() => {\r\n      const lastShape = shapes[shapes.length - 1];\r\n    \r\n      if(lastShape && typeToUpdate) {\r\n        switch (typeToUpdate) {\r\n          case 'length':\r\n            setLength(lastShape.data.perimeter);\r\n            break;\r\n          case 'width':\r\n            setWidth(lastShape.data.perimeter);\r\n            break;\r\n          case 'elevation':\r\n            setElevation(lastShape.data.perimeter);\r\n            break;\r\n          default:\r\n            break;\r\n        }\r\n    \r\n        // Reset typeToUpdate since we've just used it\r\n        setTypeToUpdate(null);\r\n        setAccessWindowVisible('flex')\r\n      }\r\n      RefreshEstimate()\r\n      console.log('Shapes!!!')\r\n    }, [shapes]); // add typeToUpdate to the dependency array\r\n  \r\n    useEffect(() => {\r\n      if (inputVisible) {\r\n        // Set focus on the input after it becomes visible\r\n        const timer = setTimeout(() => {\r\n          inputRef.current && inputRef.current.focus();\r\n        }, 0);\r\n        return () => clearTimeout(timer);\r\n      }\r\n      console.log('inputVisible')\r\n    }, [inputVisible]);\r\n  \r\n    useEffect(() => {\r\n      let userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n      if(userinfo?.Role && userinfo?.Role === UserRole.Manager ||\r\n        userinfo?.Role === UserRole.Estimator) \r\n        {\r\n          SetHeaderAuthorization();\r\n          GetProjectInformation(params.caseId)\r\n          if(params.quoteId !== 0){\r\n            GetProposalInformation(params.quoteId)\r\n          }\r\n        } else {\r\n          history.push('/')\r\n        }\r\n        console.log('setUserInfo')\r\n    }, []);\r\n    \r\n    const prevShapesLength = useRef(shapes.length);\r\n    const roundToNearestHalf = (num) => Math.round(num * 2) / 2;\r\n\r\n    useEffect(() => {\r\n      if(!updatingMap){\r\n        return;\r\n      }\r\n      if (shapes.length > prevShapesLength.current) {\r\n        if (params.quoteId !== '0') {\r\n          const lastShape = shapes[shapes.length - 1];\r\n          if(shapes.length == 2){\r\n            setShowAccessItemWindow(false);\r\n          } else {\r\n            setShowAccessItemWindow(true);\r\n\r\n          }\r\n        }\r\n      }\r\n  \r\n      // Remember the current length for the next render\r\n      prevShapesLength.current = shapes.length;\r\n      console.log('showAccessItemWindow')\r\n    }, [shapes]);\r\n\r\n  useLayoutEffect(() => {\r\n    if (inputVisible) {\r\n      inputRef.current && inputRef.current.focus();\r\n    }\r\n  }, [inputVisible]);\r\n\r\n  const [onShapeSelect, setOnShapeSelect] = useState('none')\r\n  const [selectedColor, setSelectedColor] = useState('white');\r\n  const [icons, setIcons] = useState([]);\r\n  const [tempiconCount, setTempIconCount] = useState(0); // New state for counting icons\r\n  const [iconCount, setIconCount] = useState(0); // New state for counting icons\r\n\r\n  const [markerIconSize, setMarkerIconSize] = useState(0.00001); // New state for square icon size\r\n  const [squareIconSize, setSquareIconSize] = useState(0.00001); // New state for square icon size\r\n  const [circleIconSize, setCircleIconSize] = useState(1); // New state for square icon size\r\n  const [triangleIconSize, setTriangleIconSize] = useState(0.00001); // New state for square icon size\r\n  const [rectangleIconSize, setRectangleIconSize] = useState(0.00001); // New state for square icon size\r\n\r\n  const handlePlottingClick = (targetPosition) => {\r\n    const newIcon = {\r\n      type: onShapeSelect, // e.g., 'circle', 'square'\r\n      position: {\r\n        lat: targetPosition.lat,\r\n        lng: targetPosition.lng,\r\n      },\r\n      color: selectedColor, // assuming you have a color picker\r\n      size: markerIconSize\r\n      // additional properties based on the icon type\r\n    };\r\n    AddPlottedShapeToDatabase(newIcon, params.quoteId)\r\n    setIcons(prevIcons => [...prevIcons, newIcon]);\r\n    setTempIconCount(prevCount => prevCount + 1);\r\n  };  \r\n\r\n  useEffect(() => {\r\n    const scrollTimeout = setTimeout(() => {\r\n      if (isEstimateShown === true) {\r\n        document.documentElement.scrollTo({\r\n          top: window.innerHeight,\r\n          behavior: 'smooth'\r\n        });\r\n        document.body.scrollTo({\r\n          top: window.innerHeight,\r\n          behavior: 'smooth'\r\n        });\r\n      } else {\r\n        document.documentElement.scrollTo({\r\n          top: 0,\r\n          behavior: 'smooth'\r\n        });\r\n        document.body.scrollTo({\r\n          top: 0,\r\n          behavior: 'smooth'\r\n        });\r\n      }\r\n    }, 1200); // 500 milliseconds delay\r\n  console.log('scrollTimeout')\r\n    // Cleanup the timeout if the component is unmounted or isEstimateShown changes\r\n    return () => clearTimeout(scrollTimeout);\r\n    \r\n  }, [isEstimateShown]);\r\n  \r\n  \r\n\r\n\r\n  const handleFinishPlotting = () => {\r\n    setIconCount(tempiconCount)\r\n    \r\n    // Reset icon count to 0\r\n    setTempIconCount(0)\r\n    setShowAccessItemWindow(true);\r\n    setIsPlottingToolSelected(false)\r\n    setIsDrawingPolygon(true);\r\n    setDrawing(true)\r\n    setSelectedIcon('icon1');\r\n  };\r\n\r\n  const ChangeSizeOfSelectedShapes = (value) => {\r\n    setMarkerIconSize(value)\r\n  }\r\n\r\n  //Custom Map Testing\r\n\r\n  const [overlayBounds, setOverlayBounds] = useState(null);\r\n  const [overlayUrl, setOverlayUrl] = useState('');\r\n  const [overlayMarkers, setOverlayMarkers] = useState([]);\r\n  const [isOverlayMode, setIsOverlayMode] = useState(false);\r\n\r\n  const onOverlayMapLoad = (mapInstance) => {\r\n    setMap(mapInstance);\r\n  };\r\n\r\n  const onOverlayMapClick = (event) => {\r\n    if (overlayMarkers.length < 2) {\r\n      const newMarker = { lat: event.latLng.lat(), lng: event.latLng.lng() };\r\n      setOverlayMarkers((current) => [...current, newMarker]);\r\n\r\n      if (overlayMarkers.length === 1) {\r\n        const newBounds = {\r\n          north: Math.max(newMarker.lat, overlayMarkers[0].lat),\r\n          south: Math.min(newMarker.lat, overlayMarkers[0].lat),\r\n          east: Math.max(newMarker.lng, overlayMarkers[0].lng),\r\n          west: Math.min(newMarker.lng, overlayMarkers[0].lng),\r\n        };\r\n        setOverlayBounds(newBounds);\r\n      }\r\n    }\r\n  };\r\n\r\n  const onOverlayMarkerDragEnd = (event, index) => {\r\n    const newOverlayMarkers = overlayMarkers.map((marker, i) =>\r\n      i === index ? { lat: event.latLng.lat(), lng: event.latLng.lng() } : marker\r\n    );\r\n    setOverlayMarkers(newOverlayMarkers);\r\n  \r\n    if (newOverlayMarkers.length === 2) {\r\n      const newBounds = {\r\n        north: Math.max(newOverlayMarkers[0].lat, newOverlayMarkers[1].lat),\r\n        south: Math.min(newOverlayMarkers[0].lat, newOverlayMarkers[1].lat),\r\n        east: Math.max(newOverlayMarkers[0].lng, newOverlayMarkers[1].lng),\r\n        west: Math.min(newOverlayMarkers[0].lng, newOverlayMarkers[1].lng),\r\n      };\r\n      setOverlayBounds(newBounds);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (overlayMarkers.length === 2) {\r\n      const newBounds = {\r\n        north: Math.max(overlayMarkers[0].lat, overlayMarkers[1].lat),\r\n        south: Math.min(overlayMarkers[0].lat, overlayMarkers[1].lat),\r\n        east: Math.max(overlayMarkers[0].lng, overlayMarkers[1].lng),\r\n        west: Math.min(overlayMarkers[0].lng, overlayMarkers[1].lng),\r\n      };\r\n      setOverlayBounds(newBounds);\r\n    }\r\n    console.log('overlayMarkers')\r\n  }, [overlayMarkers]);\r\n  \r\n  const handleDoneClick = () => {\r\n    setIsOverlayMode(false);\r\n  };\r\n\r\n// Memoize shapes rendering separately\r\nconst memoizedShapes = React.useMemo(() => {\r\n  return shapes.map((shape) => {\r\n    const isPolygon = shape.data.area !== undefined;\r\n\r\n    const calculateDistance = (point1, point2) => {\r\n      const R = 6371e3; // Earth's radius in meters\r\n      const toRadians = (deg) => (deg * Math.PI) / 180;\r\n      const lat1 = toRadians(point1.lat);\r\n      const lat2 = toRadians(point2.lat);\r\n      const deltaLat = toRadians(point2.lat - point1.lat);\r\n      const deltaLng = toRadians(point2.lng - point1.lng);\r\n\r\n      const a =\r\n        Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +\r\n        Math.cos(lat1) * Math.cos(lat2) *\r\n        Math.sin(deltaLng / 2) * Math.sin(deltaLng / 2);\r\n      const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n\r\n      const distanceMeters = R * c; // Distance in meters\r\n      return distanceMeters * 3.28084; // Convert to feet\r\n    };\r\n\r\n    const sideLengths = isPolygon\r\n      ? shape.vertices.map((vertex, i) => {\r\n          const nextVertex =\r\n            shape.vertices[(i + 1) % shape.vertices.length]; // Loop back to the start for the last vertex\r\n          return {\r\n            distance: calculateDistance(vertex, nextVertex).toFixed(2),\r\n            midpoint: {\r\n              lat: (vertex.lat + nextVertex.lat) / 2,\r\n              lng: (vertex.lng + nextVertex.lng) / 2,\r\n            },\r\n          };\r\n        })\r\n      : [];\r\n\r\n    const totalPolylineLength = !isPolygon\r\n      ? shape.vertices.reduce((total, vertex, i) => {\r\n          if (i === shape.vertices.length - 1) return total; // Skip the last vertex\r\n          return total + calculateDistance(vertex, shape.vertices[i + 1]);\r\n        }, 0).toFixed(2)\r\n      : null;\r\n\r\n    const centralPosition = !isPolygon\r\n      ? {\r\n          lat: shape.vertices.reduce((sum, vertex) => sum + vertex.lat, 0) / shape.vertices.length,\r\n          lng: shape.vertices.reduce((sum, vertex) => sum + vertex.lng, 0) / shape.vertices.length,\r\n        }\r\n      : null;\r\n\r\n    return {\r\n      ...shape,\r\n      isPolygon,\r\n      sideLengths,\r\n      totalPolylineLength,\r\n      centralPosition,\r\n    };\r\n  });\r\n}, [shapes]);\r\n\r\n// Shapes rendering (polygons and polylines)\r\nconst shapesLayer = React.useMemo(() => {\r\n  return memoizedShapes.map((shape, index) => (\r\n    <React.Fragment key={index}>\r\n      {shape.isPolygon ? (\r\n        <Polygon\r\n          paths={shape.vertices}\r\n          onClick={() => {\r\n            setSelectedShape(index);\r\n            const shapeData = shape.data;\r\n            setCurrentShapeData(shape.data);\r\n            if (shapeData?.area) {\r\n              setActiveSquareFeet(shapeData.area);\r\n            }\r\n            if (shapeData?.perimeter) {\r\n              setActivePerimeter(shapeData.perimeter);\r\n            }\r\n            handlePolygonClick(shape, index);\r\n          }}\r\n          options={{\r\n            fillColor: shape.color,\r\n            fillOpacity: selectedShape === index ? 0.45 : 0.25,\r\n            strokeColor: shape.color,\r\n            strokeOpacity: 1,\r\n            strokeWeight: selectedShape === index ? 5 : 3,\r\n          }}\r\n        />\r\n      ) : (\r\n        <Polyline\r\n          path={shape.vertices}\r\n          onClick={() => {\r\n            setSelectedShape(index);\r\n            const shapeData = shape.data;\r\n            setCurrentShapeData(shape.data);\r\n            if (shapeData?.area) {\r\n              setActiveSquareFeet(shapeData.area);\r\n            }\r\n            if (shapeData?.perimeter) {\r\n              setActivePerimeter(shapeData.perimeter);\r\n            }\r\n            setSelectedAccessShape(shape);\r\n          }}\r\n          onMouseDown={() => {\r\n            setSelectedShape(index);\r\n            setSelectedAccessShape(shape);\r\n            handlePolylineClick(shape, index);\r\n          }}\r\n          options={{\r\n            strokeColor: shape.color,\r\n            strokeOpacity: 1,\r\n            strokeWeight: selectedShape === index ? 5 : 3,\r\n          }}\r\n        />\r\n      )}\r\n    </React.Fragment>\r\n  ));\r\n}, [memoizedShapes, selectedShape]);\r\n\r\nconst handleGlobalToggle = () => {\r\n  setShowLengths(!showLengths);\r\n  // Reset individual visibility to match the global state\r\n  setIndividualLabelVisibility(\r\n    Array(memoizedShapes.length).fill(!showLengths)\r\n  );\r\n};\r\n\r\nconst lengthOverlays = React.useMemo(() => {\r\n  if (!window.google || !window.google.maps || !window.google.maps.geometry) {\r\n    return [];\r\n  }\r\n\r\n  // Configuration\r\n  const OFFSET_DISTANCE = -0.75;\r\n  const ARROWS = {\r\n    left: {\r\n      path: \"M -2,-2 0,0 -2,2 0,0\",\r\n      fillColor: \"#ffffff\",\r\n      scale: 3,\r\n      rotation: 90,\r\n      anchor: new window.google.maps.Point(0, 0)\r\n    },\r\n    right: {\r\n      path: \"M 2,-2 0,0 2,2 0,0\",\r\n      fillColor: \"#ffffff\",\r\n      scale: 3,\r\n      rotation: 90,\r\n      anchor: new window.google.maps.Point(0, 0)\r\n    }\r\n  };\r\n\r\n  return memoizedShapes.map((shape, index) => {\r\n    const shouldShowLabel = individualLabelVisibility[index] ?? showLengths;\r\n    if (!shouldShowLabel) return null;\r\n\r\n    return (\r\n      <React.Fragment key={`dimension-${index}`}>\r\n        {shape.type === \"Polygon\" ? (\r\n          (() => {\r\n            // 1) Determine if polygon is clockwise (negative area) or counter-clockwise (positive)\r\n            const signedArea = window.google.maps.geometry.spherical.computeSignedArea(\r\n              shape.vertices\r\n            );\r\n            const polygonIsClockwise = signedArea < 0;\r\n\r\n            return shape.data.distances.map((distance, i) => {\r\n              const start = shape.vertices[i];\r\n              const end = shape.vertices[(i + 1) % shape.vertices.length];\r\n\r\n              // 2) Calculate the heading of the edge\r\n              const heading = window.google.maps.geometry.spherical.computeHeading(start, end);\r\n\r\n              // 3) Decide offset direction based on orientation\r\n              //    If clockwise, use heading + 90; else heading - 90 (swap if needed).\r\n              const offsetAngle = polygonIsClockwise ? heading + 90 : heading - 90;\r\n\r\n              const leftOffset = window.google.maps.geometry.spherical.computeOffset(\r\n                start,\r\n                OFFSET_DISTANCE,\r\n                offsetAngle\r\n              );\r\n              const rightOffset = window.google.maps.geometry.spherical.computeOffset(\r\n                end,\r\n                OFFSET_DISTANCE,\r\n                offsetAngle\r\n              );\r\n\r\n              return (\r\n                <React.Fragment key={`side-${index}-${i}`}>\r\n                  {/* Dimension line */}\r\n                  <Polyline\r\n                    path={[leftOffset, rightOffset]}\r\n                    options={{\r\n                      strokeColor: \"#fff\",\r\n                      strokeWeight: 2,\r\n                      strokeOpacity: 0.9,\r\n                      icons: [\r\n                        {\r\n                          icon: ARROWS.left,\r\n                          offset: \"0%\"\r\n                        },\r\n                        {\r\n                          icon: ARROWS.right,\r\n                          offset: \"100%\"\r\n                        }\r\n                      ]\r\n                    }}\r\n                  />\r\n\r\n                  {/* Centered label */}\r\n                  <OverlayView\r\n                    position={window.google.maps.geometry.spherical.interpolate(\r\n                      leftOffset,\r\n                      rightOffset,\r\n                      0.5\r\n                    )}\r\n                    mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}\r\n                  >\r\n                    <div\r\n                      style={{\r\n                        backgroundColor: \"rgba(255, 255, 255, 0.9)\",\r\n                        color: \"#000\",\r\n                        padding: \"4px 10px\",\r\n                        borderRadius: \"4px\",\r\n                        border: \"1px solid #666\",\r\n                        fontSize: \"12px\",\r\n                        fontWeight: \"500\",\r\n                        transform: \"translate(-50%, -50%)\",\r\n                        whiteSpace: \"nowrap\",\r\n                        boxShadow: \"0 2px 4px rgba(0,0,0,0.2)\",\r\n                        pointerEvents: \"none\"\r\n                      }}\r\n                    >\r\n                      {roundToNearestHalf(distance)} ft\r\n                    </div>\r\n                  </OverlayView>\r\n                </React.Fragment>\r\n              );\r\n            });\r\n          })()\r\n        ) : (\r\n          // For polylines (not polygons), you can keep the existing heading - 90 if you want.\r\n          shape.vertices.length > 1 && (\r\n            <React.Fragment>\r\n              <Polyline\r\n                path={shape.vertices.map((v, i) => {\r\n                  if (i + 1 < shape.vertices.length) {\r\n                    const heading = window.google.maps.geometry.spherical.computeHeading(\r\n                      v,\r\n                      shape.vertices[i + 1]\r\n                    );\r\n                    return window.google.maps.geometry.spherical.computeOffset(\r\n                      v,\r\n                      OFFSET_DISTANCE,\r\n                      heading - 90\r\n                    );\r\n                  }\r\n                  return v;\r\n                })}\r\n                options={{\r\n                  strokeColor: \"#fff\",\r\n                  strokeWeight: 2,\r\n                  strokeOpacity: 0.9,\r\n                  icons: [\r\n                    {\r\n                      icon: ARROWS.left,\r\n                      offset: \"0%\"\r\n                    },\r\n                    {\r\n                      icon: ARROWS.right,\r\n                      offset: \"100%\"\r\n                    }\r\n                  ]\r\n                }}\r\n              />\r\n              <OverlayView\r\n                position={window.google.maps.geometry.spherical.interpolate(\r\n                  shape.vertices[0],\r\n                  shape.vertices[1],\r\n                  0.5\r\n                )}\r\n                mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}\r\n              >\r\n                <div\r\n                  style={{\r\n                    backgroundColor: \"rgba(255, 255, 255, 0.9)\",\r\n                    color: \"#000\",\r\n                    padding: \"4px 10px\",\r\n                    borderRadius: \"4px\",\r\n                    border: \"1px solid #666\",\r\n                    fontSize: \"12px\",\r\n                    fontWeight: \"500\",\r\n                    transform: \"translate(-50%, -50%)\",\r\n                    whiteSpace: \"nowrap\",\r\n                    boxShadow: \"0 2px 4px rgba(0,0,0,0.2)\"\r\n                  }}\r\n                >\r\n                  {roundToNearestHalf(shape.data.perimeter)} ft\r\n                </div>\r\n              </OverlayView>\r\n            </React.Fragment>\r\n          )\r\n        )}\r\n      </React.Fragment>\r\n    );\r\n  });\r\n}, [memoizedShapes, showLengths, individualLabelVisibility]);\r\n\r\n// Helper function to round to nearest 0.5\r\n// const roundToNearestHalf = (num) => Math.round(num * 2) / 2;\r\n\r\n// const lengthOverlays = React.useMemo(() => {\r\n//   return memoizedShapes.map((shape, index) => {\r\n//     const shouldShowLabel =\r\n//       individualLabelVisibility[index] !== undefined\r\n//         ? individualLabelVisibility[index]\r\n//         : showLengths; // Individual state takes precedence over global state\r\n\r\n//     if (!shouldShowLabel) return null; // Skip rendering if visibility is false\r\n\r\n//     return (\r\n//       <React.Fragment key={`overlay-${index}`}>\r\n//         {shape.isPolygon\r\n//           ? shape.sideLengths.map(({ distance, midpoint }, i) => (\r\n//               <OverlayView\r\n//                 key={`side-length-${index}-${i}`}\r\n//                 position={midpoint}\r\n//                 mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}\r\n//               >\r\n//                 <div\r\n//                   style={{\r\n//                     backgroundColor: 'white',\r\n//                     padding: '2px 5px',\r\n//                     border: '1px solid black',\r\n//                     borderRadius: '3px',\r\n//                     fontSize: '12px',\r\n//                     pointerEvents: 'none',\r\n//                   }}\r\n//                 >\r\n//                   {distance}\r\n//                 </div>\r\n//               </OverlayView>\r\n//             ))\r\n//           : shape.totalPolylineLength &&\r\n//             shape.centralPosition && (\r\n//               <OverlayView\r\n//                 position={shape.centralPosition}\r\n//                 mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}\r\n//               >\r\n//                 <div\r\n//                   style={{\r\n//                     backgroundColor: 'white',\r\n//                     padding: '2px 5px',\r\n//                     border: '1px solid black',\r\n//                     borderRadius: '3px',\r\n//                     fontSize: '12px',\r\n//                     pointerEvents: 'none',\r\n//                   }}\r\n//                 >\r\n//                   {shape.totalPolylineLength}\r\n//                 </div>\r\n//               </OverlayView>\r\n//             )}\r\n//       </React.Fragment>\r\n//     );\r\n//   });\r\n// }, [memoizedShapes, showLengths, individualLabelVisibility]);\r\n\r\n  return (\r\n    <div>\r\n    {map === undefined || map === null ? (\r\n         <Backdrop style={{ zIndex: 2 }} open>\r\n         <CircularProgress color=\"inherit\" />\r\n       </Backdrop>\r\n    )\r\n    : null }\r\n    <div style={{ overflowX: 'hidden', overflowY: 'hidden' }}>\r\n<LoadScript id=\"siteMap\" googleMapsApiKey={apiKey} libraries={libraries}>\r\n  <GoogleMap\r\n    scale={scale}\r\n    id=\"map\"\r\n    onLoad={onOverlayMapLoad}\r\n    mapContainerStyle={containerStyle}\r\n    center={center}\r\n    zoom={zoom}\r\n    options={{\r\n      tilt: 0,\r\n      maxZoom: 100,\r\n      mapTypeId: 'hybrid', // Use the desired map type here\r\n      zoomControl: !isOverlayMode,\r\n      mapTypeControl: false,\r\n      scaleControl: false,\r\n      streetViewControl: false,\r\n      rotateControl: false,\r\n      fullscreenControl: false,\r\n      gestureHandling: 'greedy',\r\n    }}\r\n    onClick={isOverlayMode ? onOverlayMapClick : (event) => {\r\n      if (isTextToolSelected) {\r\n        handleMapClick(event); // Your text tool function\r\n        // addVertex(event);\r\n        // addMarker(event); // Your normal map functions\r\n      }\r\n    }}\r\n    onDragStart={() => setIsDragging(true)}\r\n    onDragEnd={() => setIsDragging(false)}\r\n    onCenterChanged={() => {\r\n      if (map) {\r\n        setTargetPosition({ lat: map.getCenter().lat(), lng: map.getCenter().lng() });\r\n        updateDistance();\r\n      }\r\n    }}\r\n  >\r\n    {overlayMarkers.map((marker, index) => (\r\n      <Marker\r\n        key={index}\r\n        position={marker}\r\n        draggable={true}\r\n        onDragEnd={(event) => onOverlayMarkerDragEnd(event, index)}\r\n      />\r\n    ))}\r\n\r\n    {overlayBounds && (\r\n      <GroundOverlay\r\n        key={JSON.stringify(overlayBounds)} // Force re-render when bounds change\r\n        url={overlayUrl}\r\n        bounds={overlayBounds}\r\n        opacity={1}\r\n      />\r\n    )}\r\n\r\n<div id=\"centered-div\" \r\n     style={{ \r\n         position: 'absolute', \r\n         left: '50%', \r\n         top: '50%', \r\n         transform: 'translate(-50%, -50%)',\r\n         display: 'flex',\r\n         alignItems: 'center',\r\n         justifyContent: 'center'\r\n     }}\r\n>\r\n{\r\n  drawing && currentVertices.length > 0 && targetPosition && (\r\n    snappingOn ? (() => {\r\n      // Snapping logic only applies here\r\n      const lastVertex = currentVertices[currentVertices.length - 1];\r\n      let angle = Math.atan2(targetPosition.lat - lastVertex.lat, targetPosition.lng - lastVertex.lng) * (180 / Math.PI);\r\n      angle = (angle + 360) % 360; // Normalize angle\r\n      \r\n      const snappedAngle = Math.round(angle / 45) * 45;\r\n      const distance = window.google.maps.geometry.spherical.computeDistanceBetween(\r\n        new window.google.maps.LatLng(lastVertex), \r\n        new window.google.maps.LatLng(targetPosition)\r\n      );\r\n\r\n      const radians = snappedAngle * (Math.PI / 180);\r\n      const snappedLat = lastVertex.lat + (distance * Math.sin(radians) / 111319.9); // Convert distance to degrees\r\n      const snappedLng = lastVertex.lng + (distance * Math.cos(radians) / (111319.9 * Math.cos(lastVertex.lat * (Math.PI / 180))));\r\n\r\n      const finalTargetPosition = { lat: snappedLat, lng: snappedLng };\r\n      const displayDistanceFeet = (distance * 3.28084).toFixed(2); // Convert meters to feet for display\r\n      const roundedDisplayDistance = roundToNearestHalf(displayDistanceFeet);\r\n      const displayDistance = roundedDisplayDistance.toFixed(1);\r\n\r\n\r\n      return (\r\n        <>\r\n          <Polyline\r\n              path={[lastVertex, finalTargetPosition]}\r\n              options={{\r\n                  strokeColor: currentColor,\r\n                  strokeOpacity: 1,\r\n                  strokeWeight: 3,\r\n              }}\r\n          />\r\n          <OverlayView\r\n            position={{\r\n              lat: (lastVertex.lat + finalTargetPosition.lat) / 2,\r\n              lng: (lastVertex.lng + finalTargetPosition.lng) / 2\r\n            }}\r\n            mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}\r\n          >\r\n            <div style={{backgroundColor: 'white', padding: '5px'}}>\r\n              {displayDistance} ft\r\n            </div>\r\n          </OverlayView>\r\n        </>\r\n      );\r\n    })() : (\r\n      // Original behavior without snapping\r\n      <>\r\n        <Polyline\r\n            path={[currentVertices[currentVertices.length - 1], targetPosition]}\r\n            options={{\r\n                strokeColor: currentColor,\r\n                strokeOpacity: 1,\r\n                strokeWeight: 3,\r\n            }}\r\n        />\r\n      <OverlayView\r\n  position={{\r\n    lat: ((currentVertices[currentVertices.length - 1].lat + targetPosition.lat) / 2) - 0.000025, // Offset latitude to move below\r\n    lng: (currentVertices[currentVertices.length - 1].lng + targetPosition.lng) / 2 // Keep longitude centered\r\n  }}\r\n  mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}\r\n>\r\n  <div style={{ backgroundColor: 'white', padding: '5px' }}>\r\n    {roundToNearestHalf(currentDistance)} ft\r\n  </div>\r\n</OverlayView>\r\n\r\n      </>\r\n    )\r\n  )\r\n}\r\n\r\n<>\r\n        {(() => {\r\n            switch (onShapeSelect) {\r\n                case 'circle':\r\n                    return (\r\n                        <Circle\r\n                            center={targetPosition}\r\n                            radius={\r\n                              ((markerIconSize - 0.000001) / (0.0001 - 0.000001)) * (10 - 0.1) + 0.1\r\n                            }                            \r\n                            options={{\r\n                                fillColor: selectedColor,\r\n                                fillOpacity: 1,\r\n                                strokeOpacity: 0,\r\n                            }}\r\n                        />\r\n                    );\r\n                    case 'square':\r\n                      return (\r\n                        <Polygon\r\n                        paths={[\r\n                          { lat: targetPosition.lat + markerIconSize, lng: targetPosition.lng - markerIconSize * 1.5 },\r\n                          { lat: targetPosition.lat + markerIconSize, lng: targetPosition.lng + markerIconSize * 1.5 },\r\n                          { lat: targetPosition.lat - markerIconSize, lng: targetPosition.lng + markerIconSize * 1.5 },\r\n                          { lat: targetPosition.lat - markerIconSize, lng: targetPosition.lng - markerIconSize * 1.5 },\r\n                        ]}\r\n                        options={{\r\n                          fillColor: selectedColor,\r\n                          fillOpacity: 1,\r\n                          strokeColor: selectedColor,\r\n                          strokeOpacity: 0,\r\n                        }}\r\n                      />\r\n                      \r\n                      \r\n                      );\r\n                case 'triangle':\r\n                    // Calculate triangle vertices based on targetPosition and markerIconSize\r\n                    const triangleCoords = [\r\n                        { lat: targetPosition.lat, lng: targetPosition.lng - markerIconSize },\r\n                        { lat: targetPosition.lat + markerIconSize, lng: targetPosition.lng },\r\n                        { lat: targetPosition.lat, lng: targetPosition.lng + markerIconSize },\r\n                    ];\r\n                    return (\r\n                        <Polygon\r\n                            paths={triangleCoords}\r\n                            options={{\r\n                                fillColor: selectedColor,\r\n                                fillOpacity: 1,\r\n                                strokeColor: selectedColor,\r\n                                strokeOpacity: 0,\r\n                            }}\r\n                        />\r\n                    );\r\n                case 'rectangle':\r\n                    // Define rectangle bounds based on targetPosition and markerIconSize\r\n                    const rectangleBounds = {\r\n                        north: targetPosition.lat + markerIconSize,\r\n                        south: targetPosition.lat - markerIconSize,\r\n                        east: targetPosition.lng + (markerIconSize * 2),\r\n                        west: targetPosition.lng - (markerIconSize * 2),\r\n                    };\r\n                    return (\r\n                        <Rectangle\r\n                            bounds={rectangleBounds}\r\n                            options={{\r\n                                fillColor: selectedColor,\r\n                                fillOpacity: 1,\r\n                                strokeWeight: 0,\r\n                            }}\r\n                        />\r\n                    );\r\n                    case 'line':\r\n                      // Define the start and end points of the line based on targetPosition and markerIconSize\r\n                      const linePath = [\r\n                          { lat: targetPosition.lat, lng: targetPosition.lng - (markerIconSize * 2) },\r\n                          { lat: targetPosition.lat, lng: targetPosition.lng + (markerIconSize * 2) },\r\n                      ];\r\n                      return (\r\n                          <Polyline\r\n                              path={linePath}\r\n                              options={{\r\n                                  strokeColor: selectedColor,\r\n                                  strokeOpacity: 1,\r\n                                  strokeWeight: 2, // You can adjust the weight to make the line thicker or thinner\r\n                              }}\r\n                          />\r\n                      );                    \r\n                default:\r\n                    return (\r\n                        <img\r\n                            src=\"/targetwhite.svg\"\r\n                            alt=\"target\"\r\n                            style={{\r\n                                overflowX: 'visible',\r\n                                overflowY: 'visible',\r\n                                width: `${newScale * 200}%`,\r\n                            }}\r\n                        />\r\n                    );\r\n            }\r\n        })()}\r\n    </>\r\n\r\n</div>\r\n\r\n{deleteWindow.isOpen && (\r\n  <OverlayView\r\n    zIndex={2000}\r\n    position={shapes[selectedShape].vertices[0]}\r\n    mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}\r\n  >\r\n    <DeletePopupContainer visible={deleteWindow.isOpen}>\r\n      <LeagueSpartanHeaderSmall>\r\n      Are you sure you want to delete this?\r\n      </LeagueSpartanHeaderSmall>\r\n      <br></br>\r\n      <FlexDivSpaceAround>\r\n      <RegularResponsiveButton bgcolor={ColorPalette.PrimaryRed} onClick={() => { handleDelete(deleteWindow.item); setDeleteWindow({isOpen: false, item: null}); RefreshEstimate();}}>Delete</RegularResponsiveButton>\r\n      <RegularResponsiveButton bgcolor={ColorPalette.PrimaryGrey} onClick={() => setDeleteWindow({isOpen: false, item: null})}>Cancel</RegularResponsiveButton>\r\n      </FlexDivSpaceAround>\r\n    </DeletePopupContainer>\r\n  </OverlayView>\r\n)}\r\n\r\n{textMarkups.map((markup, index) => {\r\n  if (!isDragging) {\r\n    return (\r\n      <OverlayView\r\n        position={markup.position}\r\n        mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}\r\n        onClick={e => e.stopPropagation()} // Stop click event propagation\r\n      >\r\n        {markup.isEditing ? (\r\n          <input\r\n            type=\"text\"\r\n            ref={inputRef}\r\n            value={inputValue}\r\n            onChange={(e) => setInputValue(e.target.value)}\r\n            style={{\r\n              color: markup.color,\r\n              backgroundColor: 'transparent',\r\n              border: `1px solid ${currentColor}`,\r\n              fontSize: '16px'\r\n            }}\r\n          />\r\n        ) : (\r\n          <div \r\n          style={{\r\n            backgroundColor: selectedText === index ? 'rgba(0, 0, 0, .6)' : 'rgba(0, 0, 0, .3)', // Use darker background if selected\r\n            padding: '5px',\r\n            borderRadius:'5px'\r\n          }}\r\n          onClick={(e) => {\r\n            e.stopPropagation();\r\n            setSelectedText(index);\r\n          }}\r\n        >\r\n            <LeagueSpartanHeaderSmall color={markup.color}>{markup.text}</LeagueSpartanHeaderSmall>\r\n          </div>\r\n        )}\r\n      </OverlayView>\r\n    );\r\n  }\r\n})}\r\n   <ProjectPhotoUploadPreviewWindow open={isUploadProjectPhotosOpen} CloseWindow={()=>{\r\n              setIsUploadProjectPhotosOpen(false); \r\n            }}></ProjectPhotoUploadPreviewWindow>\r\n\r\n{icons.map((icon, index) => {\r\n    switch (icon.type) {\r\n      case 'circle':\r\n        return (\r\n          <Circle\r\n            key={index}\r\n            center={icon.position}\r\n            radius={\r\n              ((icon.size - 0.000001) / (0.0001 - 0.000001)) * (10 - 0.1) + 0.1\r\n            }         \r\n            options={{\r\n              fillColor: icon.color,\r\n              fillOpacity: 1,\r\n              strokeOpacity: 0,\r\n            }}\r\n          />\r\n        );\r\n        case 'square':\r\n  // Calculate square vertices\r\n  const squareSide = icon.size; // This represents the 'radius', adjust as necessary\r\n  const squareCoords = [\r\n    { lat: icon.position.lat + squareSide, lng: icon.position.lng - squareSide * 1.5 },\r\n    { lat: icon.position.lat + squareSide, lng: icon.position.lng + squareSide * 1.5 },\r\n    { lat: icon.position.lat - squareSide, lng: icon.position.lng + squareSide * 1.5 },\r\n    { lat: icon.position.lat - squareSide, lng: icon.position.lng - squareSide * 1.5 },\r\n  ];\r\n  return (\r\n    <Polygon\r\n      key={index}\r\n      paths={squareCoords}\r\n      options={{\r\n        fillColor: icon.color,\r\n        fillOpacity: 1,\r\n        strokeColor: icon.color,\r\n        strokeOpacity: 0,\r\n      }}\r\n    />\r\n  );\r\n        case 'triangle':\r\n          const triangleCoords = [\r\n            { lat: icon.position.lat, lng: icon.position.lng - icon.size },\r\n            { lat: icon.position.lat + icon.size, lng: icon.position.lng },\r\n            { lat: icon.position.lat, lng: icon.position.lng + icon.size },\r\n          ];\r\n          return (\r\n            <Polygon\r\n              key={index}\r\n              paths={triangleCoords}\r\n              options={{\r\n                fillColor: icon.color,\r\n                fillOpacity: 1,\r\n                strokeColor: icon.color,\r\n                strokeOpacity: 0,\r\n              }}\r\n            />\r\n          );\r\n        break;\r\n\r\ncase 'rectangle':\r\n  const rectangleBounds = {\r\n    north: icon.position.lat + icon.size, // Adjust for actual size\r\n    south: icon.position.lat - icon.size, // Adjust for actual size\r\n    east: icon.position.lng + (icon.size * 2), // Adjust for actual size\r\n    west: icon.position.lng - (icon.size * 2), // Adjust for actual size\r\n  };\r\n  return (\r\n    <Rectangle\r\n      key={index}\r\n      bounds={rectangleBounds}\r\n      options={{\r\n        fillColor: icon.color,\r\n        fillOpacity: 1,\r\n        strokeWeight: 0,\r\n      }}\r\n    />\r\n  );\r\n        break;\r\n        case 'line':\r\n          // Define the start and end points of the line based on targetPosition and markerIconSize\r\n          const linePath = [\r\n              { lat: icon.position.lat, lng: icon.position.lng - (icon.size * 2) },\r\n              { lat: icon.position.lat, lng: icon.position.lng + (icon.size * 2) },\r\n          ];\r\n          return (\r\n              <Polyline\r\n                  path={linePath}\r\n                  options={{\r\n                      strokeColor: icon.color,\r\n                      strokeOpacity: 1,\r\n                      strokeWeight: 2, // You can adjust the weight to make the line thicker or thinner\r\n                  }}\r\n              />\r\n          );                    \r\n        default:\r\n        return null;\r\n    }\r\n  })}\r\n\r\n{polylines.map((polyline, index) => {\r\n  if (!isDragging) {\r\n    return (\r\n      <Polyline\r\n        key={index}\r\n        path={polyline}\r\n        options={{\r\n          strokeColor: currentColor,\r\n          strokeOpacity: 1,\r\n          strokeWeight: 3,\r\n        }}\r\n      />\r\n    );\r\n  }\r\n})}\r\n\r\n       {drawing && currentVertices.length > 1 && currentVertices.map((vertex, index) => {\r\n    if (index < currentVertices.length - 1) {\r\n      return (\r\n        <Polyline\r\n          key={index}\r\n          path={[vertex, currentVertices[index + 1]]}\r\n          options={{\r\n            strokeColor: currentColor,\r\n            strokeOpacity: 1,\r\n            strokeWeight: 3,\r\n          }}\r\n        />\r\n      );\r\n    }\r\n    return null;\r\n  })}\r\n        {currentVertices.map((vertex, index) => (\r\n    <Icon30px20pxPointer\r\n      src='/1_Icon.svg'\r\n      key={index}\r\n      position={vertex}\r\n    />\r\n  ))}\r\n\r\n{draggingPolygonPosition && (\r\n        <Marker\r\n          zIndex={9999}\r\n          draggable={true}\r\n          onDragEnd={onMarkerDragEnd}\r\n          position={iconPosition}\r\n          icon={{\r\n            url: \"/Drag_icon.svg\",\r\n            // Specify the size, if desired (optional)\r\n            size: new window.google.maps.Size(32, 32),\r\n            // Specify the origin, if desired (optional, useful if your icon is a sprite)\r\n            origin: new window.google.maps.Point(0, 0),\r\n            // Specify the anchor, which determines the point of the icon to correspond to the marker's location\r\n            anchor: new window.google.maps.Point(16, 16),\r\n          }}\r\n      \r\n        />\r\n      )}\r\n\r\n<>\r\n    {shapesLayer}\r\n    {lengthOverlays}\r\n  </>\r\n\r\n    {infoWindow.isOpen && (\r\n        <InfoWindow\r\n          position={infoWindow.position}\r\n          onCloseClick={() => {setInfoWindow({ isOpen: false, position: null, content: null }); DeselectIcon(); setIsColorChanged(false)} }\r\n        >\r\n          {infoWindow.content}\r\n        </InfoWindow>\r\n      )}\r\n\r\n        {obstructions.map((obstruction, index) => (\r\n          <Circle\r\n            key={index}\r\n            center={obstruction.position}\r\n            onClick={() => selectObstruction(index)}\r\n            radius={1}\r\n            options={{\r\n              fillColor: 'red',\r\n              fillOpacity: 1,\r\n              strokeOpacity: 0,\r\n            }}\r\n          >\r\n            <OverlayView\r\n              position={obstruction.position}\r\n              mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}\r\n            >\r\n              <div style={{backgroundColor: 'white', padding: '5px'}}>\r\n                {obstruction.name}\r\n              </div>\r\n            </OverlayView>\r\n          </Circle>\r\n        ))}\r\n        {utilities.map((utility, index) => (\r\n          <Circle\r\n            key={index}\r\n            center={utility.position}\r\n            onClick={() => selectUtility(index)}\r\n            radius={1}\r\n            options={{\r\n              fillColor: 'blue',\r\n              fillOpacity: 1,\r\n              strokeOpacity: 0,\r\n            }}\r\n          >\r\n            <OverlayView\r\n              position={utility.position}\r\n              mapPaneName={OverlayView.OVERLAY_MOUSE_TARGET}\r\n            >\r\n              <div style={{backgroundColor: 'white', padding: '5px'}}>\r\n                {utility.name}\r\n              </div>\r\n            </OverlayView>\r\n          </Circle>\r\n        ))}\r\n\r\n\r\n    \r\n   \r\n      </GoogleMap>\r\n    </LoadScript>\r\n    <DeleteTopRightIcon onClick={()=>{\r\n      deleteEntity();\r\n    if(selectedAccessShape.color === ColorPalette.PrimaryYellow && !selectedAccessShape.items && isTextToolSelected == false){\r\n      handlePolylineClick(selectedAccessShape)\r\n    } \r\n    }} src=\"/DeleteIcon.svg\" alt=\"My Icon\" />\r\n     <div style={{display: isPlottingToolSelected === true ? 'block' : 'none'}}>\r\n            <Slider margin='72px 20px 40px 67px' onValueChange={(value)=>{ChangeSizeOfSelectedShapes(value)}}></Slider>\r\n            </div>\r\n            {/* {draggingPolygonPosition && (\r\n              <Icon30px30pxPointer src='/Drag_icon.svg'></Icon30px30pxPointer>\r\n      )} */}\r\n      <div style={{position:'absolute', top: '0px', backgroundColor: 'rgba(0, 0, 0, 0.6)', height:'8vh', width: '100vw'}}></div>\r\n    <ZoomImage src='/zoomin.svg' style={{ left: '135px' }}  onClick={zoomIn}></ZoomImage>\r\n    <LengthButton onClick={handleGlobalToggle}\r\n src={showLengths === true ? '/blue_length_icon.svg' : '/length_icon.svg'}></LengthButton>\r\n    <Slider width='80px' left='-30px' onValueChange={(inputValue) => {\r\n    const maxInputValue = 0.000001;\r\n    const minInputValue = 0.000099;\r\n    const range = maxInputValue - minInputValue;\r\n    const step = range / 20; // Divide the input range into 20 steps\r\n\r\n    // Calculate the step index (0 to 20) for the inputValue\r\n    let stepIndex = Math.floor((inputValue - minInputValue) / step);\r\n\r\n    // Ensure the stepIndex is within 0 to 20\r\n    stepIndex = Math.max(0, Math.min(20, stepIndex));\r\n\r\n    // Map the stepIndex to the output value (21 to 1)\r\n    const outputValue = 21 - stepIndex;\r\n\r\n    setScale(outputValue);\r\n}} />\r\n        <ZoomImage src='/zoomout.svg' onClick={zoomOut}></ZoomImage>\r\n    <AreaInputPopup shapes={shapes} maplength={length} mapwidth={width} visible={accessWindowVisible} onClose={(type)=>{SetAccessInformation(type)}} FinishAccess={(accesslength, accesswidth, accesselevation, accessobstruction)=>{setAccessObject({length: accesslength, width: accesswidth, elevation:accesselevation, obstruction:accessobstruction});}} CloseWindow={()=>{setAccessWindowVisible(false); \r\n      CreateEstimate(accessObject); setIsDrawingPolygon(true); setUpdatingMap(true); setIsTextToolSelected(false); setDrawing(true); setSelectedIcon('icon1'); setShowColorCircles(true); setCurrentColor(ColorPalette.PrimaryRed); setItemCategory('Removal')}} CloseWindowNoAdd={()=>{setAccessWindowVisible(false);}}\r\n      UsePhotoAsOverlay={(previewsrc)=>{setOverlayUrl(window.$IMGURL+ previewsrc); console.log(previewsrc)}}\r\n      ></AreaInputPopup>\r\n      <ConfirmWindow\r\n      open={shapePlotterOpen}\r\n      confirmtext={`To plot a shape on the map, select a shape and color, hover over the location, and click 'Place Plot'. Once done, hit 'Finish Plotting' to go back to the Item Addition screen.\r\n      `}\r\n      rightbuttontext={'Continue'}\r\n      rightbuttoncolor={ColorPalette.PrimaryButtonBlue}\r\n      leftbuttoncolor={ColorPalette.PrimaryRed}\r\n      LeftFunction={()=>{setShapePlotterOpen(false);}}\r\n      RightFunction={()=>{setShapePlotterOpen(false);\r\n      }}\r\n      leftbuttontext={'Back'}\r\n      ></ConfirmWindow>\r\n\r\n<ConfirmWindow\r\n      open={itemAddedPopup}\r\n      confirmtext={\"Item added to estimate.\"}\r\n      rightbuttontext={'Continue'}\r\n      rightbuttoncolor={ColorPalette.PrimaryButtonBlue}\r\n      leftbuttoncolor={ColorPalette.PrimaryRed}\r\n      LeftFunction={()=>{setItemAddedPopup(false);}}\r\n      RightFunction={()=>{setItemAddedPopup(false);\r\n      }}\r\n      leftbuttontext={'Back'}\r\n      ></ConfirmWindow>\r\n\r\n<div\r\n      style={{\r\n        display: shapes.length >= 2 ? 'flex' : 'none',\r\n        position: 'absolute',\r\n        left: '10vw',\r\n        bottom: '0%',\r\n        transform: 'translate(-50%, -50%)',\r\n        pointerEvents: 'none',\r\n        paddingTop: '10px',\r\n        paddingBottom: '10px',\r\n      \r\n      }}\r\n    >\r\n      {/* Left Panel Container */}\r\n      <div\r\n        style={{\r\n          display: 'flex',\r\n          flexDirection: 'column',\r\n          alignItems: 'center',\r\n          borderRadius: '15px',\r\n          backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n          marginRight: window.$ISMOBILE ? '10px' : '15vw',\r\n          pointerEvents: 'auto',\r\n          alignItems: 'center',\r\n          padding: '0rem', // optional padding\r\n        }}\r\n      >\r\n        {/* Column of Icons */}\r\n        <div\r\n          style={{\r\n            display: 'flex',\r\n            flexDirection: 'column',\r\n            pointerEvents: 'auto',\r\n            // remove fixed marginBottom / height so icons can resize properly\r\n          }}\r\n        >\r\n          {/* Polygon Tool */}\r\n          <div style={{ position: 'relative', marginBottom: '10px', paddingTop: '5px', marginLeft: 'auto',\r\n        marginRight: 'auto' }}>\r\n            <img\r\n              onClick={() => {\r\n                setIsDrawingPolygon(true);\r\n                setIsTextToolSelected(false);\r\n                setIsPlottingToolSelected(false);\r\n                setDrawing(true);\r\n                setSelectedIcon('icon1');\r\n              }}\r\n              style={{\r\n                width: iconSize,\r\n                height: 'auto',\r\n                margin: showColorCircles ? '5px' : '0px',\r\n                visibility: showColorCircles ? 'visible' : 'hidden',\r\n                border:\r\n                  selectedIcon === 'icon1'\r\n                    ? `4px solid ${currentColor}`\r\n                    : 'none',\r\n                cursor: 'pointer',\r\n              }}\r\n              src=\"/shapewhite_icon.svg\"\r\n              alt=\"icon1\"\r\n            />\r\n            {selectedIcon === 'icon1' && showText && (\r\n              <span\r\n                style={{\r\n                  position: 'absolute',\r\n                  left: '60px',\r\n                  top: '16px',\r\n                  color: 'white',\r\n                  width: '250px',\r\n                  backgroundColor: 'rgba(0, 0, 0, 0.4)',\r\n                  transition: 'opacity 0.5s',\r\n                  opacity: fadeText ? 1 : 0,\r\n                  pointerEvents: 'none',\r\n                }}\r\n              >\r\n                Polygon Tool Selected\r\n              </span>\r\n            )}\r\n          </div>\r\n\r\n          {/* Polyline Tool */}\r\n          <div style={{ position: 'relative', marginBottom: '10px',   marginLeft: 'auto',\r\n        marginRight: 'auto' }}>\r\n            <img\r\n              onClick={() => {\r\n                setIsDrawingPolygon(false);\r\n                setIsTextToolSelected(false);\r\n                setIsPlottingToolSelected(false);\r\n                setDrawing(true);\r\n                setSelectedIcon('icon2');\r\n              }}\r\n              style={{\r\n                width: iconSize,\r\n                height: 'auto',\r\n                margin: showColorCircles ? '5px' : '0px',\r\n                visibility: showColorCircles ? 'visible' : 'hidden',\r\n                border:\r\n                  selectedIcon === 'icon2'\r\n                    ? `4px solid ${currentColor}`\r\n                    : 'none',\r\n                cursor: 'pointer',\r\n              }}\r\n              src=\"/linewhite_icon.svg\"\r\n              alt=\"icon2\"\r\n            />\r\n            {selectedIcon === 'icon2' && showText && (\r\n              <span\r\n                style={{\r\n                  position: 'absolute',\r\n                  left: '60px',\r\n                  top: '16px',\r\n                  color: 'white',\r\n                  width: '250px',\r\n                  backgroundColor: 'rgba(0, 0, 0, 0.4)',\r\n                  transition: 'opacity 0.5s',\r\n                  opacity: fadeText ? 1 : 0,\r\n                  pointerEvents: 'none',\r\n                }}\r\n              >\r\n                Polyline Tool Selected\r\n              </span>\r\n            )}\r\n          </div>\r\n\r\n          {/* Eye / Estimate Toggle */}\r\n          <div style={{ position: 'relative', marginBottom: '10px',   marginLeft: 'auto',\r\n        marginRight: 'auto' }}>\r\n            <img\r\n              onClick={() => {\r\n                if (isEstimateShown === true) {\r\n                  setIsEstimateShown(false);\r\n                  setEyeDisplay('/white_eye_hidden.svg');\r\n                } else {\r\n                  setIsEstimateShown(true);\r\n                  setEyeDisplay('/white_eye.svg');\r\n                }\r\n                setSelectedIcon('icon6');\r\n              }}\r\n              style={{\r\n                width: iconSize,\r\n                height: 'auto',\r\n                margin: showColorCircles ? '5px' : '0px',\r\n                visibility: showColorCircles ? 'visible' : 'hidden',\r\n                border:\r\n                  selectedIcon === 'icon6'\r\n                    ? `4px solid ${currentColor}`\r\n                    : 'none',\r\n                cursor: 'pointer',\r\n              }}\r\n              src={eyeDisplay}\r\n              alt=\"icon6\"\r\n            />\r\n            {selectedIcon === 'icon6' && showText && (\r\n              <span\r\n                style={{\r\n                  position: 'absolute',\r\n                  left: '60px',\r\n                  top: '16px',\r\n                  color: 'white',\r\n                  width: '250px',\r\n                  backgroundColor: 'rgba(0, 0, 0, 0.4)',\r\n                  transition: 'opacity 0.5s',\r\n                  opacity: fadeText ? 1 : 0,\r\n                  pointerEvents: 'none',\r\n                }}\r\n              >\r\n                Estimate View Show/Hide\r\n              </span>\r\n            )}\r\n          </div>\r\n\r\n          {/* Ruler Tool */}\r\n          <div style={{ position: 'relative', marginBottom: '10px',   marginLeft: 'auto',\r\n        marginRight: 'auto' }}>\r\n            <img\r\n              onClick={() => {\r\n                setSnappingOn(!snappingOn);\r\n                setSelectedIcon('icon3');\r\n              }}\r\n              style={{\r\n                width: iconSize,\r\n                height: 'auto',\r\n                margin: showColorCircles ? '5px' : '0px',\r\n                visibility: showColorCircles ? 'visible' : 'hidden',\r\n                border:\r\n                  selectedIcon === 'icon3'\r\n                    ? `4px solid ${currentColor}`\r\n                    : 'none',\r\n                cursor: 'pointer',\r\n              }}\r\n              src={snappingOn === true ? '/ruler_icon_black.svg' : '/ruler_icon.svg'}\r\n              alt=\"icon3\"\r\n            />\r\n            {selectedIcon === 'icon3' && showText && (\r\n              <span\r\n                style={{\r\n                  position: 'absolute',\r\n                  left: '60px',\r\n                  top: '16px',\r\n                  color: 'white',\r\n                  width: '250px',\r\n                  backgroundColor: 'rgba(0, 0, 0, 0.4)',\r\n                  transition: 'opacity 0.5s',\r\n                  opacity: fadeText ? 1 : 0,\r\n                  pointerEvents: 'none',\r\n                }}\r\n              >\r\n                Ruler Tool Selected\r\n              </span>\r\n            )}\r\n          </div>\r\n\r\n          {/* Shape Plotting Tool */}\r\n          <div style={{ position: 'relative', marginBottom: '10px',   marginLeft: 'auto',\r\n        marginRight: 'auto' }}>\r\n            <img\r\n              onClick={() => {\r\n                setIsDrawingPolygon(false);\r\n                setIsTextToolSelected(false);\r\n                setDrawing(false);\r\n                setIsPlottingToolSelected(true);\r\n                setShowAccessItemWindow(true);\r\n                setSelectedIcon('icon4');\r\n              }}\r\n              style={{\r\n                width: iconSize,\r\n                height: 'auto',\r\n                margin: showColorCircles ? '5px' : '0px',\r\n                visibility: showColorCircles ? 'visible' : 'hidden',\r\n                border:\r\n                  selectedIcon === 'icon4'\r\n                    ? `4px solid ${currentColor}`\r\n                    : 'none',\r\n                cursor: 'pointer',\r\n              }}\r\n              src=\"/tree32dp.svg\"\r\n              alt=\"icon4\"\r\n            />\r\n            {selectedIcon === 'icon4' && showText && (\r\n              <span\r\n                style={{\r\n                  position: 'absolute',\r\n                  left: '60px',\r\n                  top: '16px',\r\n                  color: 'white',\r\n                  width: '250px',\r\n                  backgroundColor: 'rgba(0, 0, 0, 0.4)',\r\n                  transition: 'opacity 0.5s',\r\n                  opacity: fadeText ? 1 : 0,\r\n                  pointerEvents: 'none',\r\n                }}\r\n              >\r\n                Shape Plotting Tool Selected\r\n              </span>\r\n            )}\r\n          </div>\r\n        </div>\r\n\r\n        {/* Cube/Grid Icon */}\r\n        <img\r\n          onClick={() => {\r\n            setIsGridOpen(true);\r\n          }}\r\n          style={{\r\n            width: iconSize,\r\n            height: 'auto',\r\n            marginTop: '8px',\r\n            cursor: 'pointer',\r\n            paddingBottom: '10px',\r\n              marginLeft: 'auto',\r\n        marginRight: 'auto'\r\n          }}\r\n          src=\"/cubeicon2.svg\"\r\n          alt=\"target\"\r\n        />\r\n      </div>\r\n\r\n      {/* Right Panel (or bottom row) */}\r\n      <div\r\n        style={{\r\n          display: 'flex',\r\n          flexDirection: 'row',\r\n          alignItems: 'flex-end',\r\n          pointerEvents: 'auto',\r\n          marginTop: 'auto',\r\n          \r\n        }}\r\n      >\r\n\r\n        {/* Confirmation Dialog */}\r\n        <ConfirmationDialog\r\n          show={showDialog}\r\n          onCancel={() => {\r\n            setShowDialog(false);\r\n          }}\r\n          onConfirm={() => {\r\n            handleSave();\r\n          }}\r\n        />\r\n\r\n        {/* Grid Overlay */}\r\n        <GridOverlay\r\n          closeWindow={() => {\r\n            setIsGridOpen(false);\r\n          }}\r\n          isOpen={isGridOpen}\r\n          onGridClick={(category) => {\r\n            handleGridClick(category);\r\n          }}\r\n          showDialog={() => {\r\n            setIsGridOpen(false);\r\n            setShowDialog(true);\r\n          }}\r\n        />\r\n      </div>\r\n    </div>\r\n\r\n{/* RIGHT SIDE */}\r\n\r\n<div style={{ display: isPlottingToolSelected === true ? 'flex' : 'none', position: 'absolute', left: '90vw', bottom: '22.5%', transform: 'translate(-50%, -50%)', pointerEvents: 'none' }}>\r\n  <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', marginRight: '10px', pointerEvents: 'auto' }}>\r\n  <div style={{ display: 'flex', flexDirection: 'column', marginBottom: '115px', pointerEvents: 'auto', height: '55px' }}>\r\n    <img  \r\n      style={{height: '40px', width: '40px', margin: showColorCircles ? '5px' : '0px', visibility: showColorCircles ? 'visible' : 'hidden', border: onShapeSelect === 'circle' ? `4px solid ${selectedColor}` : 'none'}} \r\n      src=\"/sitemap_circle.svg\" alt=\"icon1\" onClick={()=>{setOnShapeSelect('circle');}} />\r\n    <img onClick={()=>{setOnShapeSelect('square');}}\r\n      style={{height: '40px', width: '40px', margin: showColorCircles ? '5px' : '0px', visibility: showColorCircles ? 'visible' : 'hidden', border: onShapeSelect === 'square' ? `4px solid ${selectedColor}` : 'none'}} \r\n      src=\"/sitemap_square.svg\" alt=\"icon2\" />\r\n    <img onClick={()=>{setOnShapeSelect('triangle');}}\r\n      style={{height: '40px', width: '40px', margin: showColorCircles ? '5px' : '0px', visibility: showColorCircles ? 'visible' : 'hidden', border: onShapeSelect === 'triangle' ? `4px solid ${selectedColor}` : 'none'}} \r\n      src=\"/sitemap_triangle.svg\" alt=\"icon3\" />\r\n        {/* <img onClick={()=>{setOnShapeSelect('hexagon');}}\r\n      style={{height: '40px', width: '40px', margin: showColorCircles ? '5px' : '0px', visibility: showColorCircles ? 'visible' : 'hidden', border: selectedIcon === 'icon3' ? `4px solid ${currentColor}` : 'none'}} \r\n      src=\"/sitemap_hexagon.svg\" alt=\"icon4\" /> */}\r\n        <img onClick={()=>{setOnShapeSelect('rectangle');}}\r\n      style={{height: '40px', width: '40px', margin: showColorCircles ? '5px' : '0px', visibility: showColorCircles ? 'visible' : 'hidden', border: onShapeSelect === 'rectangle' ? `4px solid ${selectedColor}` : 'none'}} \r\n      src=\"/sitemap_rectangle.svg\" alt=\"icon5\" />\r\n\r\n    <img onClick={()=>{setOnShapeSelect('line');}}\r\n      style={{height: '40px', width: '40px', margin: showColorCircles ? '5px' : '0px', visibility: showColorCircles ? 'visible' : 'hidden', border: onShapeSelect === 'line' ? `4px solid ${selectedColor}` : 'none'}} \r\n      src=\"/arrow_selector_icon.svg\" alt=\"icon6\" />\r\n        {/* <img onClick={()=>{setOnShapeSelect('line');}}\r\n      style={{height: '40px', width: '40px', margin: showColorCircles ? '5px' : '0px', visibility: showColorCircles ? 'visible' : 'hidden', border: onShapeSelect === 'icon3' ? `4px solid ${selectedColor}` : 'none'}} \r\n      src=\"/sitemap_line.svg\" alt=\"icon6\" /> */}\r\n      <input\r\n      type=\"color\"\r\n      onChange={(e) => setSelectedColor(e.target.value)}\r\n      defaultValue={ColorPalette.PrimaryButtonBlue} // Default color\r\n    />\r\n  </div>\r\n  </div>\r\n  \r\n  <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'flex-end', height: '55px', pointerEvents: 'auto', marginTop:'auto' }}>\r\n\r\n    <ConfirmationDialog \r\n        show={showDialog} \r\n        onCancel={() => {setShowDialog(false)}}\r\n        onConfirm={()=>{handleSave()}} // This will be called when \"Save\" is clicked\r\n      />\r\n  </div>\r\n \r\n</div>\r\n\r\n<AccessItemPopupWindow \r\nplottingSelected={isPlottingToolSelected} \r\niconCount={iconCount} \r\nplottingCallback={()=>{\r\nsetShowAccessItemWindow(false);  setIsPlottingToolSelected(true); setShapePlotterOpen(true);\r\n}} \r\nshapeData={selectedShape !== null ? selectedShape : shapes[shapes.length - 1]} \r\nsquareFeetSM={currentShapeData?.area} \r\nperimeterSM={currentShapeData?.perimeter} \r\nAddItemToPolygon={(item)=>{AddItemToPolygon(item);}} \r\nremovalCallback={()=>{setItemCategory('Material'); \r\nsetCurrentColor(ColorPalette.PrimaryButtonBlue)}} \r\nonClose={()=>{setShowAccessItemWindow(false); setOnShapeSelect(null)}} \r\nvisible={showAccessItemWindow} \r\nitemCategory={itemCategory} \r\nonListItemClick={(product)=>{setAccessAreaItems(prevItems => [...prevItems, product]); setShowAccessItemWindow(false);\r\n}}></AccessItemPopupWindow>\r\n\r\n        <BottomSection>\r\n      <ButtonSection display={isPlottingToolSelected === true || draggingPolygonPosition === true ? 'none' : 'flex'}>\r\n        <FlexColumnDiv>\r\n        <FlexDiv>\r\n        {isColorChanged && (\r\n          <FlexDiv>\r\n        <IconButton fontsize={'10px'} width='180px' src=\"/paint.svg\" onClick={()=>{setInfoWindow({ isOpen: false, position: null, content: null }); DeselectIcon(); saveColorChange()}}>\r\n          SAVE COLOUR\r\n        </IconButton>\r\n         <IconButton bgcolor={ColorPalette.PrimaryRed} fontsize={'10px'} width='180px' src=\"/paint.svg\" onClick={()=>{setIsColorChanged(false)}}>\r\n         DISCARD COLOUR\r\n       </IconButton>\r\n       </FlexDiv>\r\n      )}\r\n\r\n        <IconButton src='/pluscirclewhite_icon.svg' width='200px'  mobilewidth={currentVertices.length === 0 ? '42.5vw' : '27vw'} text={'ADD POINT'} display={isTextToolSelected === true ? 'none' : 'block'} mobiledisplay={isTextToolSelected === true ? 'none' : 'flex'} fontsize={'10px'} bgcolor={ColorPalette.PrimaryGreen} onClick={()=>{ addVertex();\r\n          }}></IconButton>\r\n\r\n        <IconButton onClick={()=>{undoLastVertex()}} width='100px' fontsize={'10px'} mobiledisplay={currentVertices.length === 0 ? 'none' : 'flex'} display={currentVertices.length === 0 ? 'none' : 'flex'} bgcolor={ColorPalette.PrimaryRed} text='UNDO POINT' src='/minuswhite_icon.svg'></IconButton>\r\n\r\n        <IconButton fontsize={'10px'} width='200px' mobilewidth={currentVertices.length === 0 ? '42.5vw' : '27vw'} display={isTextToolSelected === true || currentVertices.length <= 0 ? 'none' : 'flex'} mobiledisplay={isTextToolSelected === true ? 'none' : 'flex'} bgcolor={ColorPalette.PrimaryBlue} onClick={()=>{setSelectedShape(null); finishDrawing()}} text='FINISH SHAPE' src='/checkmarkwhite_icon.svg'></IconButton>\r\n\r\n        {isOverlayMode && (\r\n        <RegularResponsiveButton onClick={handleDoneClick}>Done</RegularResponsiveButton>\r\n      )}\r\n\r\n      </FlexDiv>\r\n      </FlexColumnDiv>\r\n      </ButtonSection>\r\n\r\n      <ButtonSection display={isPlottingToolSelected === true ? 'flex' : 'none'}>\r\n        <RegularResponsiveButton bgcolor={ColorPalette.PrimaryBlue} onClick={()=>{handlePlottingClick(targetPosition);}}>Place Plot</RegularResponsiveButton>\r\n        <RegularResponsiveButton  bgcolor={ColorPalette.PrimaryBlue} onClick={()=>{handleFinishPlotting()}}>Finish Plotting</RegularResponsiveButton>\r\n      </ButtonSection>\r\n\r\n      <ButtonSection display={draggingPolygonPosition === true ? 'flex' : 'none'}>\r\n      <RegularResponsiveButton   bgcolor={ColorPalette.PrimaryBlue} onClick={()=>{\r\n        setShapes(temporaryShapesArray)\r\n        setDraggingPolygonPosition(false)}}>Cancel Move Polygon</RegularResponsiveButton>\r\n        <RegularResponsiveButton   bgcolor={ColorPalette.PrimaryBlue} onClick={()=>{SaveUpdatedPolygonPosition(selectedShape)}}>Save Polygon Position</RegularResponsiveButton>\r\n      </ButtonSection>\r\n\r\n    </BottomSection>\r\n    {isEstimateShown && <ViewProposalEstimatorView />}\r\n    </div>    \r\n    </div>\r\n  );\r\n}\r\n\r\nSiteMapper.defaultProps = {\r\n  ScrollToItemOnEstimate:()=>{},\r\n  DeselectIcon:()=>{},\r\n  RefreshEstimate:()=>{},\r\n}\r\n\r\nexport default SiteMapper;\r\n","/* eslint-disable */\r\n\r\n//  React Imports ---------------------------------------\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport html2canvas from \"html2canvas\";\r\nimport jsPDF from \"jspdf\";\r\nimport { CSVLink } from \"react-csv\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  DeleteQuoteItemByEstimator,\r\n  DeleteQuoteTag,\r\n  DeleteQuoteTool,\r\n  GetCaseById,\r\n  GetQuoteByIdForUserDisplay,\r\n  GetQuoteItem,\r\n  GetQuoteTag,\r\n  QuoteStatus,\r\n  ReverseQuant_QuoteItem,\r\n  SetQuoteTo_Buy,\r\n  SetQuoteTo_Buy_Install,\r\n  SetQuoteTo_Notify,\r\n  UpdateQuote,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  AddImageToCloud,\r\n  decimalHoursToTimeString,\r\n  GetCurrentTime,\r\n  SetHeaderAuthorization,\r\n} from \"../../API_Functions/Utility_Functions\";\r\n//  Imported Components ---------------------------------\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport TopMentProposalView from \"../../comps/MenuComps/TopMenuProposalView\";\r\nimport ImageViewWindow from \"../../comps/Windows/ImageEnlargementWindow\";\r\nimport RevisionInstructionsWindow from \"../../comps/Windows/RevisionInstructions\";\r\nimport DuplicateProposalWindow from \"../../comps/Windows/SaveRevisionGuide\";\r\nimport MobileEstimateQuoteItem from \"../../MobileComponents/MobileEstimateQuoteItem\";\r\nimport { Stored_Values } from \"../../Stored_Values\";\r\nimport { CaseStatus } from \"../../StylesheetComps/CaseStatus\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FixedIconToTop,\r\n  RegularResponsiveButton,\r\n} from \"../../StylesheetComps/Components\";\r\n// Imported Styled Components ---------------------------\r\nimport { GetTaxesForMetro } from \"../../API_Functions/Store_Functions\";\r\nimport QuoteItemEstimator from \"../../comps/QuoteItemEstimator\";\r\nimport DeleteConfirmWindow from \"../../comps/Windows/DeleteProduct\";\r\nimport QuoteLineItem from \"../../comps/Windows/QuoteLineItem\";\r\nimport QuotePhotoUploadPreviewWindow from \"../../comps/Windows/QuotePhotoUpload\";\r\nimport TagWindow from \"../../comps/Windows/Tag\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport {\r\n  AutoSizeOverflowY,\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnCont100xAutoPercent,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnFullWidth,\r\n  FlexColumnFullWidthMargins,\r\n  FlexContFullWidthHeightJustifyCenter,\r\n  FlexRowCont,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont60PercentSpaceEvenly,\r\n  FlexRowContAutox100PercentMobileColumn,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFlexStartMobileColumn,\r\n  FlexRowContFullWidth,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexColumnDiv,\r\n  FlexContainerItem,\r\n  FlexContainerPhotos,\r\n  FlexDivMargins,\r\n  GridContainer3Wide,\r\n  SummaryContainer,\r\n  SummaryContainerItems,\r\n} from \"../../StylesheetComps/Div\";\r\nimport { Icon200x200 } from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  OverrideEmbedDiv,\r\n  OverrideEmbedImage,\r\n} from \"../../StylesheetComps/Imgs/Images\";\r\nimport { InputField } from \"../../StylesheetComps/Inputs\";\r\nimport {\r\n  Image375px,\r\n  TextAreaAutoResize,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  Cont,\r\n  ContentCont44Percent,\r\n  ContentCont77vw,\r\n  ContentContQuote,\r\n} from \"../../StylesheetComps/Projects\";\r\nimport { Icon30px30pxPointer } from \"../../StylesheetComps/Quote\";\r\nimport {\r\n  LargeText,\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanLarge,\r\n  LeagueSpartanRegular,\r\n  MediumHeader,\r\n  StyledHRGreenBreak,\r\n  StyledHRGreenBreakThick,\r\n  StyledHRPropColour,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\nconst ViewProposalAccountantView = () => {\r\n  // React-router variables\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  // Data variables\r\n  const [Quote, setProposal] = useState({});\r\n  const [Case, setCase] = useState({});\r\n  const [curTime, setCurTime] = useState(\"\");\r\n  var MaterialSum = 0;\r\n  var InstallSum = 0;\r\n  var TotalSum = 0;\r\n  var materialSub = 0;\r\n  var installSub = 0;\r\n\r\n  const flattenItems = (items, quoteTitle, caseName) => {\r\n    let flattened = [];\r\n    let processedIds = new Set(); // To keep track of processed items\r\n\r\n    // Add custom headers\r\n    flattened.push({ Name: `Quote: ${quoteTitle}`, Unit: \"\", Quant: \"\" });\r\n    flattened.push({\r\n      Name: `Date: ${new Date().toLocaleDateString()}`,\r\n      Unit: \"\",\r\n      Quant: \"\",\r\n    });\r\n    flattened.push({ Name: `Homeowner: ${caseName}`, Unit: \"\", Quant: \"\" });\r\n    flattened.push({ Name: \"\", Unit: \"\", Quant: \"\" }); // Empty line for separation\r\n\r\n    // Separate primary and related items\r\n    const primaryItems = items?.filter(\r\n      (item) => item.Tag_Id !== 0 && item.CateType !== CategoryTypes.Labor\r\n    );\r\n    const relatedItems = items?.filter(\r\n      (item) => item.Tag_Id === 0 && item.CateType !== CategoryTypes.Labor\r\n    );\r\n\r\n    // Sort primary items by Tag_Id\r\n    primaryItems?.sort((a, b) => a.Tag_Id - b.Tag_Id);\r\n\r\n    primaryItems?.forEach((primary) => {\r\n      // Add the primary item to the flattened array\r\n      flattened.push({\r\n        Name: primary.Name,\r\n        Unit: primary.Unit,\r\n        Quant: primary.Quant,\r\n      });\r\n\r\n      // Mark this primary item as processed\r\n      processedIds.add(primary.Id);\r\n\r\n      // Find and add related items for this primary item\r\n      const relatedForThisPrimary = relatedItems?.filter(\r\n        (item) => item.Parent_Id === primary.Id\r\n      );\r\n      relatedForThisPrimary?.forEach((related) => {\r\n        if (!processedIds.has(related.Id)) {\r\n          flattened.push({\r\n            Name: related.Name,\r\n            Unit: related.Unit,\r\n            Quant: related.Quant,\r\n          });\r\n          processedIds.add(related.Id);\r\n        }\r\n      });\r\n\r\n      // Add a space to separate this tag group\r\n      flattened.push({ Name: \"\", Unit: \"\", Quant: \"\" });\r\n    });\r\n\r\n    return flattened;\r\n  };\r\n\r\n  const materialItems = flattenItems(\r\n    Quote?.Material?.Items,\r\n    Quote?.Tittle,\r\n    Case?.Name\r\n  );\r\n  const laborItems = flattenItems(\r\n    Quote?.Labor?.Items,\r\n    Quote?.Tittle,\r\n    Case?.Name\r\n  );\r\n  const removalItems = flattenItems(\r\n    Quote?.Removal?.Items,\r\n    Quote?.Tittle,\r\n    Case?.Name\r\n  );\r\n\r\n  // Totals\r\n  const [supplyTotal, setSupplyTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n  const [installTotal, setInstallTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n  const [projectSubtotal, setProjectSubtotal] = useState(0);\r\n  const [deposit, setDeposit] = useState(0);\r\n  const [projectGrandTotal, setProjectGrandTotal] = useState(0);\r\n  const [deliveryTotal, setDeliveryTotal] = useState(0);\r\n  const [accessTotal, setAccessTotal] = useState(0);\r\n\r\n  // Display control for headers\r\n  const [toolsmachinesHeader, setToolsMachinesHeader] = useState(\"flex\");\r\n  const [removalHeader, setRemovalHeader] = useState(\"none\");\r\n  const [accessDisplay, setAccessDisplay] = useState(\"none\");\r\n  const [generalMaterialsHeader, setGeneralMaterialsHeader] = useState(\"flex\");\r\n  const [deliveryHeader, setDeliveryHeader] = useState(\"none\");\r\n\r\n  // Display control for various elements\r\n  const [installEstimateDisplay, setInstallEstimateDisplay] = useState(\"flex\");\r\n  const [laborDetailView, setLaborDetailView] = useState(\"none\");\r\n  const [showGenerateInovice, setShowGenerateInvoice] = useState(\"none\");\r\n  const [laborDetailToggleView, setLaborDetailToggleView] = useState(\"none\");\r\n  const [laborDetailArrow, setLaborDetailArrow] = useState(\"/downarrow.svg\");\r\n  const [discardButtonDisplay, setDiscardButtonDisplay] = useState(\"none\");\r\n  const [makeRevisionsButtonDisplay, setMakeRevisionsButtonDisplay] =\r\n    useState(\"block\");\r\n  const [saveRevisionsButtonDisplay, setSaveRevisionsButtonDisplay] =\r\n    useState(\"none\");\r\n  const [cloneProposalButtonDisplay, setCloneProposalButtonDisplay] =\r\n    useState(\"none\");\r\n  const [showDepositButton, setShowDepositButton] = useState(\"block\");\r\n  const [labourBreakdownDisplay, setShowLabourBreakdown] = useState(\"none\");\r\n  const [showRelated, setShowRelated] = useState(false);\r\n  const [laborDetailToggle, setLaborDetailToggle] = useState(false);\r\n\r\n  // UI controls for image preview\r\n  const [imagePreviewUrl, setImagePreviewUrl] = useState(\"\");\r\n  const [imageGalleryDisplay, setImageGalleryDisplay] = useState(false);\r\n  const [cloneProposalWindowDisplay, setCloneProposalWindowDisplay] =\r\n    useState(false);\r\n\r\n  // Revision instruction window\r\n  const [revisionInstructionDisplay, setRevisionInstructionDisplay] =\r\n    useState(false);\r\n  const [revisionAcceptDisplay, setRevisionAcceptDisplay] = useState(\"none\");\r\n  const [revisionDeclineDisplay, setRevisionDeclineDisplay] = useState(\"none\");\r\n\r\n  // Deletion state\r\n  const [deleteState, setDeleteState] = useState(false);\r\n\r\n  // Header input state\r\n  const [headerInputShown, setHeaderInputShown] = useState(0);\r\n\r\n  // Opacity control\r\n  const [supplyTotalOpacity, setSupplyTotalOpacity] = useState(\"100%\");\r\n  const [installTotalOpacity, setInstallTotalOpacity] = useState(\"100%\");\r\n\r\n  // Naming\r\n  const [projectName, setProjectName] = useState(\"\");\r\n  const [estimateName, setEstimateName] = useState(\"\");\r\n  const [homeownerName, setHomeownerName] = useState(\"\");\r\n  const [projectCaseNumber, setProjectCaseNumber] = useState(0);\r\n\r\n  // File naming\r\n  const [invoicefileMaterial, setInvoicefileMaterial] = useState(\r\n    \"invoice_material.pdf\"\r\n  );\r\n  const [invoicefileInstall, setInvoicefileInstall] = useState(\r\n    \"invoice_install.pdf\"\r\n  );\r\n\r\n  // Totals for untagged items\r\n  const [untaggedMaterialSubtotal, setUntaggedMaterialSubtotal] = useState(0);\r\n  const [untaggedInstallSubtotal, setUntaggedInstallSubtotal] = useState(0);\r\n  const [untaggedTotalSubtotal, setUntaggedTotalSubtotal] = useState(0);\r\n\r\n  // Error handling\r\n  const [errorAgreementText, setErrorAgreementText] = useState(\"\");\r\n\r\n  // Supply control\r\n  const [supplyOnlySelected, setSupplyOnlySelected] = useState(false);\r\n\r\n  // Taxation\r\n  const [storeTaxes, setStoreTaxes] = useState(false);\r\n\r\n  // Scrolling control\r\n  const scrollToOverview = document.getElementById(\"overview\");\r\n  const scrollToSupply = document.getElementById(\"supply\");\r\n  const scrollToInstall = document.getElementById(\"install\");\r\n  const scrollToDesigns = document.getElementById(\"designs\");\r\n  const scrollToComments = document.getElementById(\"comments\");\r\n  const scrollToConfirm = document.getElementById(\"confirmation\");\r\n\r\n  // Case status\r\n  const [caseStatus, setCaseStatus] = useState(0);\r\n\r\n  // Button reference\r\n  const buttonRef = React.useRef(null);\r\n  const [displayStatus, setDisplayStatus] = useState({});\r\n  const [deliveryDisplayStatus, setDeliveryDisplayStatus] = useState(false);\r\n  const [removalDisplayStatus, setRemovalDisplayStatus] = useState(false);\r\n\r\n  let removalsHeader7Subtotal = 0;\r\n  let [removalsHeader8Subtotal, setRemovalsHeader8Subtotal] = useState(0);\r\n  let toolsHeader7Subtotal = 0;\r\n  let toolsHeader8Subtotal = 0;\r\n  let removalPriceSubtotal = 0;\r\n  let removalTimeSubtotal = 0;\r\n  const [projectInstallSubtotal, setProjectInstallSubtotal] = useState(0);\r\n\r\n  //Edit Tag Variables\r\n  const [tagObj, setTagObj] = useState(null);\r\n  const [tagWindowDisplay, setTagWindowDisplay] = useState(false);\r\n\r\n  // Delete Tag Variables\r\n\r\n  const [deleteTagId, setDeleteTagId] = useState(0);\r\n  const [deleteTagConfirmDisplay, setDeleteTagConfirmDisplay] = useState(false);\r\n\r\n  //Add Blank Item\r\n  const [newQuoteItem, setNewQuoteItem] = useState({});\r\n\r\n  const GetBlankQuoteItem = async () => {\r\n    const data = await GetQuoteItem(0);\r\n    console.log(data);\r\n  };\r\n\r\n  const formattedDateTime = async () => {\r\n    const now = new Date();\r\n    const day = now.getDate();\r\n    const month = now.toLocaleString(\"default\", { month: \"short\" });\r\n    const year = now.getFullYear();\r\n    let hour = now.getHours();\r\n    const ampm = hour >= 12 ? \"PM\" : \"AM\";\r\n    hour = hour % 12;\r\n    hour = hour ? hour : 12;\r\n    const minute = now.getMinutes().toString().padStart(2, \"0\");\r\n    return `${day} ${month} ${year}, ${hour}:${minute} ${ampm}`;\r\n  };\r\n\r\n  function formatDate(isoString) {\r\n    const date = new Date(isoString);\r\n    const options = {\r\n      year: \"numeric\",\r\n      month: \"long\",\r\n      day: \"numeric\",\r\n      hour: \"2-digit\",\r\n      minute: \"2-digit\",\r\n      hour12: true,\r\n    };\r\n    return date.toLocaleString(\"en-US\", options);\r\n  }\r\n\r\n  const downloadPDF = async () => {\r\n    const timestamp = await formattedDateTime();\r\n    const input = document.getElementById(\"estimate\");\r\n\r\n    const includeElement = document.getElementById(\"include-on-pdf\");\r\n    const originalDisplayStyle = includeElement.style.display;\r\n    includeElement.style.display = \"flex\";\r\n\r\n    html2canvas(input, {\r\n      useCss: true,\r\n      scale: 1, // Reduce the size of the canvas\r\n      ignoreElements: (element) => {\r\n        return element.id === \"exclude-from-pdf\";\r\n      },\r\n    }).then((canvas) => {\r\n      includeElement.style.display = originalDisplayStyle;\r\n\r\n      const imgData = canvas.toDataURL(\"image/jpeg\", 1); // Use JPEG with 50% quality\r\n      const pdf = new jsPDF(\"p\", \"mm\", \"a4\"); // set the PDF to A4 size\r\n      const pageWidth = pdf.internal.pageSize.getWidth();\r\n      const pageHeight = pdf.internal.pageSize.getHeight();\r\n      const imgProps = pdf.getImageProperties(imgData);\r\n      const pdfWidth = pageWidth;\r\n      const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;\r\n      let pdfPages = Math.ceil(pdfHeight / pageHeight);\r\n\r\n      for (let i = 0; i < pdfPages; i++) {\r\n        if (i !== 0) {\r\n          pdf.addPage();\r\n        }\r\n        pdf.addImage(imgData, \"PNG\", 0, -(i * pageHeight), pdfWidth, pdfHeight);\r\n      }\r\n\r\n      pdf.save(`${timestamp} ${Case?.Street}.pdf`);\r\n    });\r\n  };\r\n\r\n  const DisplayImageInGallery = async (url) => {\r\n    if (!url) return;\r\n\r\n    setImagePreviewUrl(url);\r\n    setImageGalleryDisplay(true);\r\n    document.body.style.overflow = \"hidden\";\r\n  };\r\n\r\n  const DisplayLaborBreakdown = async (toggle) => {\r\n    if (toggle) {\r\n      setLaborDetailArrow(\"/downarrow.svg\");\r\n      setLaborDetailToggleView(\"none\");\r\n      setLaborDetailToggle(false);\r\n    } else {\r\n      setLaborDetailToggle(true);\r\n      setLaborDetailArrow(\"/uparrow.svg\");\r\n      setLaborDetailToggleView(\"flex\");\r\n    }\r\n  };\r\n\r\n  const toggleDisplay = (id) => {\r\n    setDisplayStatus((prevStatus) => ({\r\n      ...prevStatus,\r\n      [id]: !prevStatus[id],\r\n    }));\r\n  };\r\n\r\n  const toggleRemovalDisplay = (id) => {\r\n    setRemovalDisplayStatus((prevStatus) => ({\r\n      ...prevStatus,\r\n      [id]: !prevStatus[id],\r\n    }));\r\n  };\r\n\r\n  const GetProjectInformation = async (caseId) => {\r\n    const data = await GetCaseById(caseId);\r\n    const { Case } = data || {};\r\n\r\n    if (!Case) return;\r\n\r\n    const { Name, Tittle, CaseNumber, Street, City, CaseStatus } = Case;\r\n\r\n    setCase(Case);\r\n\r\n    if (Name) setHomeownerName(Name);\r\n    if (Tittle) setProjectName(Tittle);\r\n    if (CaseNumber) setProjectCaseNumber(CaseNumber);\r\n\r\n    if (Street && City) {\r\n      const ext = `${Street}-${City}`;\r\n      setInvoicefileInstall(`invoice_install_${ext}.pdf`);\r\n      setInvoicefileMaterial(`invoice_material_${ext}.pdf`);\r\n    }\r\n\r\n    if (\r\n      [\r\n        CaseStatus.Closed,\r\n        CaseStatus.Canceled,\r\n        CaseStatus.CancelRequested,\r\n        CaseStatus.Drafted,\r\n      ].includes(CaseStatus)\r\n    ) {\r\n      setMakeRevisionsButtonDisplay(\"none\");\r\n    }\r\n\r\n    setCaseStatus(CaseStatus);\r\n  };\r\n\r\n  const DisplayDepositButton = async () => {\r\n    if (caseStatus === CaseStatus.Construction) {\r\n      setShowDepositButton(\"none\");\r\n    } else setShowDepositButton(\"block\");\r\n  };\r\n\r\n  const [estimateGST, setEstimateGST] = useState(0);\r\n  const [estimatePST, setEstimatePST] = useState(0);\r\n\r\n  const GetProposalInformation = async (quoteid) => {\r\n    const data = await GetQuoteByIdForUserDisplay(quoteid);\r\n    if (!data || !data.quote) return;\r\n\r\n    const { quote } = data;\r\n\r\n    let removalsHeader7Subtotal = 0;\r\n    let removalsHeader8Subtotal = 0;\r\n\r\n    quote?.Removal?.Items.forEach((o) => {\r\n      removalsHeader7Subtotal += Number((o.Price + o.LaborSubtotal).toFixed(2));\r\n      removalsHeader8Subtotal += Number((o.Price + o.LaborSubtotal).toFixed(2));\r\n    });\r\n\r\n    let projectInstallSubtotal = 0;\r\n\r\n    quote?.Tags?.forEach((t) => {\r\n      const primaryItems = quote?.Material?.Items.filter(\r\n        (item) => item.Tag_Id === t.Id && item.Parent_Id === 0\r\n      );\r\n\r\n      primaryItems.forEach((o) => {\r\n        const installSub =\r\n          showRelated === true\r\n            ? o.LaborSubtotal\r\n            : o.LaborSubtotalWithRelatedItems;\r\n        projectInstallSubtotal += installSub;\r\n      });\r\n    });\r\n\r\n    quote?.Material?.Items.forEach((o) => {\r\n      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n        const installSub =\r\n          showRelated === true\r\n            ? o.LaborSubtotal\r\n            : o.LaborSubtotalWithRelatedItems;\r\n        projectInstallSubtotal += installSub;\r\n      }\r\n    });\r\n\r\n    setProjectInstallSubtotal(projectInstallSubtotal);\r\n    setProposal(quote);\r\n    setDeliveryTotal(\r\n      quote?.Delivery?.Tools?.reduce(\r\n        (accumulator, tool) => accumulator + tool.Price,\r\n        0\r\n      ) || 0\r\n    );\r\n    setAccessTotal(\r\n      quote?.AccessArea?.Items?.reduce(\r\n        (accumulator, items) => accumulator + items.Price,\r\n        0\r\n      ) || 0\r\n    );\r\n    UpdateUIBasedOnStatus(quote);\r\n\r\n    const materialSubtotal = quote?.Material?.Total?.Subtotal || 0;\r\n    const deliverySubtotal = quote?.Delivery?.Total?.Subtotal || 0;\r\n    const toolSubtotal = quote?.Tool?.Total?.Subtotal || 0;\r\n    const accessAreaSubtotal = quote?.AccessArea?.Total?.Subtotal || 0;\r\n    const installSubtotal =\r\n      Number(projectInstallSubtotal) > Stored_Values.MIN_LABOR\r\n        ? Number(projectInstallSubtotal)\r\n        : Stored_Values?.MIN_LABOR;\r\n\r\n    supplyTotal.Subtotal = (materialSubtotal + deliverySubtotal).toFixed(2);\r\n    installTotal.Subtotal = (\r\n      installSubtotal +\r\n      toolSubtotal +\r\n      removalsHeader7Subtotal +\r\n      accessAreaSubtotal\r\n    ).toFixed(2);\r\n\r\n    const subtotal =\r\n      Number(supplyTotal.Subtotal) + Number(installTotal.Subtotal);\r\n    setProjectSubtotal(\r\n      subtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n    );\r\n\r\n    if (quote.Tittle) {\r\n      setEstimateName(quote.Tittle);\r\n    }\r\n\r\n    const storeTaxArray = await GetTaxesForMetro(params.Id);\r\n    setStoreTaxes(storeTaxArray);\r\n\r\n    let gstTax = 0;\r\n    // let pstTax = 0;\r\n\r\n    const taxitems = [\r\n      { type: \"Material\", subtotal: materialSubtotal },\r\n      { type: \"Delivery\", subtotal: deliverySubtotal },\r\n      { type: \"Labor\", subtotal: installSubtotal },\r\n      { type: \"Removal\", subtotal: removalsHeader7Subtotal },\r\n      { type: \"AccessArea\", subtotal: accessAreaSubtotal },\r\n      { type: \"Tool\", subtotal: toolSubtotal },\r\n    ];\r\n\r\n    const gst = storeTaxArray.find((tax) => tax.TaxCode === \"Gst\");\r\n    // const pst = storeTaxArray.find(tax => tax.TaxCode === 'PST');\r\n\r\n    if (gst) {\r\n      taxitems.forEach((item) => {\r\n        const { type, subtotal } = item;\r\n\r\n        if (type === \"Material\") {\r\n          gstTax += (gst.Rate / 100) * subtotal;\r\n          // pstTax += (pst.Rate / 100) * subtotal;\r\n        } else {\r\n          gstTax += (gst.Rate / 100) * subtotal;\r\n        }\r\n      });\r\n    }\r\n\r\n    gstTax = gstTax.toFixed(2);\r\n    // pstTax = pstTax.toFixed(2);\r\n\r\n    // setEstimatePST(pstTax);\r\n    setEstimateGST(gstTax);\r\n\r\n    computeTotalHours(data.quote.Material.Items, data.quote.Labor.Items);\r\n    computeRemovalsTotal(data.quote.Removal.Items, data.quote.Labor.Items);\r\n    const grandTotal = Number(gstTax) + Number(subtotal.toFixed(2));\r\n    setProjectGrandTotal(grandTotal);\r\n    setDeposit(grandTotal * 0.1);\r\n  };\r\n\r\n  const UpdateUIBasedOnStatus = async (quoteobj) => {\r\n    const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n    if (userInfo.Role === UserRole.Manager) {\r\n      if (quoteobj.QuoteStatus === QuoteStatus.RevisionRequested) {\r\n        setRevisionDeclineDisplay(\"block\");\r\n        setRevisionAcceptDisplay(\"block\");\r\n      }\r\n      setCloneProposalButtonDisplay(\"block\");\r\n    } else if (userInfo.Role === UserRole.Estimator) {\r\n      setCloneProposalButtonDisplay(\"block\");\r\n    }\r\n  };\r\n\r\n  const ChangeUIToMakeRevisions = async () => {\r\n    setHeaderInputShown(3);\r\n    setMakeRevisionsButtonDisplay(\"none\");\r\n    setDiscardButtonDisplay(\"block\");\r\n    setSaveRevisionsButtonDisplay(\"block\");\r\n  };\r\n\r\n  const UpdateQuoteItemQuantity = async (itemid, itemquantity) => {\r\n    var reverseQuantity = await ReverseQuant_QuoteItem(itemid, itemquantity);\r\n    Quote.Material.Items.find(function (o, i) {\r\n      if (o.Id === itemid) {\r\n        o.Quant = itemquantity;\r\n        o.Price = reverseQuantity * o.UnitPrice;\r\n        setSupplyTotalOpacity(\"40%\");\r\n        setInstallTotalOpacity(\"40%\");\r\n      }\r\n      return null;\r\n    });\r\n    //Change Delete State to force a rerender in React\r\n    setDeleteState(!deleteState);\r\n  };\r\n\r\n  const ValidateAgreement = async (supplyonly, caseid, quoteid) => {\r\n    if (supplyonly === true) {\r\n      var databuy = await SetQuoteTo_Buy(quoteid);\r\n      if (databuy !== null) {\r\n        PushToPayment(deposit.toFixed(2), caseid, quoteid);\r\n      } else setErrorAgreementText(\"Please try again!\");\r\n    } else {\r\n      var databuyinstall = await SetQuoteTo_Buy_Install(quoteid);\r\n      if (databuyinstall !== null) {\r\n        var depositSelect =\r\n          deposit < Stored_Values.MIN_DEPOSIT\r\n            ? Stored_Values.MIN_DEPOSIT\r\n            : deposit;\r\n        PushToPayment(depositSelect.toFixed(2), caseid, quoteid);\r\n      } else setErrorAgreementText(\"Please try again!\");\r\n    }\r\n  };\r\n\r\n  const [totalHoursByProduct, setTotalHoursByProduct] = useState({});\r\n  const [totalRemovalsByItem, setTotalRemovalsByItem] = useState({});\r\n  const [laborNamesByProduct, setLaborNamesByProduct] = useState({});\r\n\r\n  function computeTotalHours(productsArray, labourArray) {\r\n    const totalHoursByProduct = {};\r\n    const laborNamesByProduct = {};\r\n\r\n    productsArray.forEach((product, productIndex) => {\r\n      if (product.Parent_Id === 0) {\r\n        let totalHours = 0;\r\n\r\n        labourArray.forEach((labour) => {\r\n          if (\r\n            (labour.Notes === `Install ${product.Name}` ||\r\n              labour.Notes === product.Name) &&\r\n            labour.Parent_Id === product.Id\r\n          ) {\r\n            totalHours += labour.Quant;\r\n            if (!laborNamesByProduct[`${product.Name}_${productIndex}`]) {\r\n              laborNamesByProduct[`${product.Name}_${productIndex}`] =\r\n                new Set();\r\n            }\r\n            laborNamesByProduct[`${product.Name}_${productIndex}`].add(\r\n              labour.Name\r\n            );\r\n          }\r\n        });\r\n\r\n        productsArray.forEach((relatedProduct) => {\r\n          if (relatedProduct.Parent_Id === product.Id) {\r\n            labourArray.forEach((labour) => {\r\n              if (\r\n                (labour.Notes === `Install ${relatedProduct.Name}` ||\r\n                  labour.Notes === relatedProduct.Name) &&\r\n                labour.Parent_Id === relatedProduct.Id\r\n              ) {\r\n                totalHours += labour.Quant;\r\n              }\r\n            });\r\n          }\r\n        });\r\n\r\n        totalHoursByProduct[`${product.Name}_${productIndex}`] = totalHours;\r\n      }\r\n    });\r\n\r\n    setTotalHoursByProduct(totalHoursByProduct);\r\n    setLaborNamesByProduct(laborNamesByProduct);\r\n  }\r\n\r\n  function computeRemovalsTotal(removalsArray, labourArray) {\r\n    const totalRemovalsByItem = {};\r\n    const assignedLabours = new Set();\r\n\r\n    removalsArray.forEach((removal, removalIndex) => {\r\n      let totalRemovals = 0;\r\n\r\n      labourArray.forEach((labour) => {\r\n        if (assignedLabours.has(labour.Id)) return; // Skip already assigned labours\r\n\r\n        const removalMatch = removalsArray.reduce((closest, r) => {\r\n          if (\r\n            labour.Notes.includes(\"Removals\") &&\r\n            labour.Notes.split(\"-\").some((part) => r.Name.includes(part.trim()))\r\n          ) {\r\n            const currentDiff = Math.abs(\r\n              r.Price + r.LaborSubtotal - labour.Price\r\n            );\r\n            const closestDiff = closest\r\n              ? Math.abs(closest.Price + closest.LaborSubtotal - labour.Price)\r\n              : Infinity;\r\n\r\n            return currentDiff < closestDiff ? r : closest;\r\n          }\r\n          return closest;\r\n        }, null);\r\n\r\n        if (\r\n          removalMatch &&\r\n          (removalMatch.Id === removal.Id ||\r\n            removalMatch.Parent_Id === removal.Id)\r\n        ) {\r\n          totalRemovals += labour.Quant;\r\n          assignedLabours.add(labour.Id); // Mark the labour as assigned\r\n        }\r\n      });\r\n\r\n      totalRemovalsByItem[`${removal.Name}_${removalIndex}`] = totalRemovals;\r\n    });\r\n\r\n    setTotalRemovalsByItem(totalRemovalsByItem);\r\n  }\r\n\r\n  const PushToPayment = async (amount, caseid, quoteid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data !== null) {\r\n      if (data.Case !== null) {\r\n        var token = axios.defaults.headers.common[\"Authorization\"];\r\n        if (token) {\r\n          var tokenRef = token.substring(6);\r\n        } else {\r\n          tokenRef = \"am9zaHRlc3QxMDU6QWExMjM0NTY3OCQ=\";\r\n        }\r\n        var name =\r\n          data.Case.Name +\r\n          \", \" +\r\n          data.Case.Street +\r\n          \",\" +\r\n          data.Case.City +\r\n          \" on Project # \" +\r\n          data.Case.CaseNumber;\r\n        var transactionid = data.Case.CaseNumber;\r\n        var paymenturl = await MakeStripePay(\r\n          amount,\r\n          \"CAD\",\r\n          name,\r\n          transactionid,\r\n          quoteid,\r\n          data.Case.Store_Id,\r\n          tokenRef,\r\n          invoiceid\r\n        );\r\n        if (paymenturl !== null) {\r\n          window.open(paymenturl, \"_blank\");\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const SetCurrentTime = async () => {\r\n    var curtime = await GetCurrentTime();\r\n    setCurTime(curtime);\r\n  };\r\n\r\n  const ref = React.createRef();\r\n  const ref2 = React.createRef();\r\n  const options = {\r\n    orientation: \"portrait\",\r\n    unit: \"in\",\r\n    format: [12, 40],\r\n  };\r\n\r\n  var userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n  const SetQuoteDisplay = async (quote) => {\r\n    if (!quote) return;\r\n\r\n    const { Role } = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n    if (\r\n      Role === UserRole.Installer ||\r\n      Role === UserRole.Manager ||\r\n      Role === UserRole.Estimator\r\n    ) {\r\n      setLaborDetailView(\"block\");\r\n    }\r\n\r\n    if (\r\n      Role === UserRole.Manager ||\r\n      Role === UserRole.Estimator ||\r\n      Role === UserRole.Accountant\r\n    ) {\r\n      setShowGenerateInvoice(\"block\");\r\n      setShowLabourBreakdown(\"flex\");\r\n    }\r\n\r\n    // if (quote.Material?.Items.some(item => item.Parent_Id === 0 && item.Tag_Id === 0))\r\n    //   setGeneralMaterialsHeader(\"flex\");\r\n\r\n    if (quote.Delivery?.Tools?.length > 0) setDeliveryHeader(\"flex\");\r\n\r\n    if (quote.Tool?.Tools?.length > 0) setToolsMachinesHeader(\"flex\");\r\n\r\n    if (quote.Removal?.Items?.length > 0) setRemovalHeader(\"flex\");\r\n\r\n    if (quote.AccessArea?.Items?.length > 0) setAccessDisplay(\"flex\");\r\n  };\r\n\r\n  const RouteToPrevious = async (role) => {\r\n    console.log(role);\r\n    if (role === UserRole.Manager || role === UserRole.Estimator) {\r\n      history.push(\r\n        \"/viewcase/\" + params.Id + \"/\" + params.storeId + \"/\" + params.caseId\r\n      );\r\n      // } else if (params.lastrevision == 0) {\r\n      //   history.push(\r\n      //     \"/viewcase/\" + params.Id + \"/\" + params.storeId + \"/\" + params.caseId\r\n      //   );\r\n    } else {\r\n      history.push(\r\n        \"/viewcaseuser/\" +\r\n          params.Id +\r\n          \"/\" +\r\n          params.storeId +\r\n          \"/\" +\r\n          params.caseId\r\n      );\r\n    }\r\n  };\r\n\r\n  const DeleteTagOnQuote = async (tag_id, quote_id) => {\r\n    // Invoke the DeleteQuoteTag function and wait for the promise to resolve\r\n    const data = await DeleteQuoteTag(tag_id);\r\n\r\n    // Check if the data variable is null\r\n    if (data === null) {\r\n      // If the data variable is null, invoke the GetQuoteInfoById function\r\n      GetProposalInformation(quote_id);\r\n    }\r\n  };\r\n\r\n  //Project Comment Files\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n  const [previewImageWindowDisplay, setPreviewImageWindowDisplay] =\r\n    useState(false);\r\n  const inputFile = useRef(null);\r\n  const [photo, setPhoto] = useState(\"\");\r\n\r\n  const AddPhotoButtonClick = () => {\r\n    inputFile.current.click();\r\n  };\r\n\r\n  const handleUpload = (event) => {\r\n    setPhoto(event.target.files[0]);\r\n  };\r\n\r\n  let formdata = new FormData();\r\n\r\n  const OpenUploadImageWindow = async (photo) => {\r\n    // We want to use the try-catch pattern here to handle any errors that\r\n    // may occur when making the API call to AddImageToCloud\r\n    try {\r\n      // Check if we have a photo\r\n      if (photo !== null) {\r\n        // Add the photo to the form data\r\n        formdata.append(\"Quote Photo\", photo);\r\n\r\n        // Make the API call and store the result in a variable\r\n        const uploadedImage = await AddImageToCloud(formdata);\r\n\r\n        // If we have a result, set the preview image and open the window\r\n        if (uploadedImage !== null) {\r\n          setPreviewImage(uploadedImage);\r\n          setPreviewImageWindowDisplay(true);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      // Handle any errors that occurred during the API call\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const ResetImage = async (imgurl) => {\r\n    DeleteImageFromCloud(imgurl);\r\n    setPreviewImageWindowDisplay(false);\r\n  };\r\n\r\n  const DeleteImageFromCloud = async (imgUrl) => {\r\n    try {\r\n      await axios.delete(`${window.$DBURL}utilities/image`, {\r\n        data: { Url: imgUrl },\r\n      });\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (photo !== \"\") {\r\n      OpenUploadImageWindow(photo);\r\n    }\r\n  }, [photo]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetProposalInformation(params.quoteId);\r\n    GetProjectInformation(params.caseId);\r\n    DisplayDepositButton();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    let header7Subtotal = 0;\r\n    let header8Subtotal = 0;\r\n\r\n    Quote?.Removal?.Items.forEach((o) => {\r\n      header7Subtotal += o.Price + o.LaborSubtotal;\r\n      header8Subtotal += o.Price + o.LaborSubtotal;\r\n    });\r\n\r\n    setRemovalsHeader8Subtotal(header8Subtotal);\r\n  }, [Quote?.Removal?.Items]);\r\n\r\n  useEffect(() => {\r\n    if (params.numberofquotes === 0) {\r\n      setMakeRevisionsButtonDisplay(\"none\");\r\n      setHideProjectConfirmationDisplay(\"none\");\r\n    }\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    let newUntaggedMaterialSubtotal = 0;\r\n    let newUntaggedInstallSubtotal = 0;\r\n    let newUntaggedTotalSubtotal = 0;\r\n\r\n    Quote?.Material?.Items.forEach((o) => {\r\n      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n        const materialSub = o.SubtotalWithRelatedItems;\r\n        const installSub = o.LaborSubtotalWithRelatedItems;\r\n\r\n        newUntaggedMaterialSubtotal += materialSub;\r\n        newUntaggedInstallSubtotal += installSub;\r\n        newUntaggedTotalSubtotal += materialSub + installSub;\r\n      }\r\n    });\r\n\r\n    setUntaggedMaterialSubtotal(newUntaggedMaterialSubtotal);\r\n    setUntaggedInstallSubtotal(newUntaggedInstallSubtotal);\r\n    setUntaggedTotalSubtotal(newUntaggedTotalSubtotal);\r\n  }, [Quote?.Material?.Items]);\r\n\r\n  useEffect(() => {\r\n    SetCurrentTime();\r\n    SetQuoteDisplay(Quote);\r\n  }, [Quote]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  var observe;\r\n  if (window.attachEvent) {\r\n    observe = function (element, event, handler) {\r\n      element?.attachEvent(\"on\" + event, handler);\r\n    };\r\n  } else {\r\n    observe = function (element, event, handler) {\r\n      element?.addEventListener(event, handler, false);\r\n    };\r\n  }\r\n  function init() {\r\n    var text = document.getElementById(\"text\");\r\n    if (text !== null) {\r\n      function resize() {\r\n        text.style.height = \"auto\";\r\n        text.style.height = text.scrollHeight + \"px\";\r\n      }\r\n      /* 0-timeout to get the already changed text */\r\n      function delayedResize() {\r\n        window.setTimeout(resize, 0);\r\n      }\r\n      observe(text, \"change\", resize);\r\n      observe(text, \"cut\", delayedResize);\r\n      observe(text, \"paste\", delayedResize);\r\n      observe(text, \"drop\", delayedResize);\r\n      observe(text, \"keydown\", delayedResize);\r\n\r\n      resize();\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    init();\r\n  }, [Quote.Notes]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  // function convertHoursToTimeString(businessHours) {\r\n  //   const HOURS_IN_DAY = 8; // Business hours in a day\r\n  //   const DAYS_IN_WEEK = 5; // Business days in a week\r\n  //   const HOURS_IN_WEEK = HOURS_IN_DAY * DAYS_IN_WEEK; // Business hours in a week\r\n\r\n  //   if (businessHours < HOURS_IN_DAY) {\r\n  //     return \"1 day\";\r\n  //   } else if (businessHours < HOURS_IN_DAY * 4) {\r\n  //     let days = Math.floor(businessHours / HOURS_IN_DAY);\r\n  //     return `${days}-${days + 1} days`;\r\n  //   } else if (businessHours <= HOURS_IN_WEEK) {\r\n  //     return \"1-2 weeks\";\r\n  //   } else {\r\n  //     let weeks = Math.floor(businessHours / HOURS_IN_WEEK);\r\n  //     let remainingHours = businessHours % HOURS_IN_WEEK;\r\n\r\n  //     let lowerWeekBound = weeks;\r\n  //     let upperWeekBound = weeks + 1;\r\n\r\n  //     if (remainingHours > 0 && remainingHours <= HOURS_IN_DAY * 4) {\r\n  //       upperWeekBound = weeks + 1; // Changed this line to ensure no more than a 1-week range\r\n  //     }\r\n\r\n  //     if (weeks < 5) {\r\n  //       return `${lowerWeekBound}-${upperWeekBound} weeks`;\r\n  //     } else {\r\n  //       let lowerMonthBound = Math.floor(weeks / 4); // Approximating 4 weeks per month\r\n  //       let upperMonthBound = lowerMonthBound + 1;\r\n  //       return `${lowerMonthBound}-${upperMonthBound} months`;\r\n  //     }\r\n  //   }\r\n  // }\r\n\r\n  function convertHoursToTimeString(businessHours) {\r\n    const HOURS_IN_DAY = 8; // Business hours in a day\r\n\r\n    if (businessHours < HOURS_IN_DAY) {\r\n      return \"Less than 1 Business Day\";\r\n    } else {\r\n      // Calculate the lower and upper bounds for business days\r\n      let lowerDayBound = Math.floor(businessHours / HOURS_IN_DAY);\r\n      let upperDayBound = Math.ceil(businessHours / HOURS_IN_DAY);\r\n\r\n      // If the upper and lower bounds are the same, it means it's exactly that many days\r\n      if (lowerDayBound === upperDayBound) {\r\n        return `${lowerDayBound} Business Day(s)`;\r\n      } else {\r\n        // Provide a range of days\r\n        return `${lowerDayBound}-${upperDayBound} Business Days`;\r\n      }\r\n    }\r\n  }\r\n\r\n  //Delivery Aggregation\r\n\r\n  let DeliveryItemsNoTag = [];\r\n  const primaryItemsDeliveryItems = Quote?.Material?.Items?.filter(\r\n    (item) => item.Tag_Id == 0 && item.Parent_Id === 0\r\n  );\r\n\r\n  let totalAggregatedDeliveryCost = 0;\r\n\r\n  primaryItemsDeliveryItems?.forEach((o) => {\r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      // Check deliveries for the untagged item itself\r\n      Quote.Delivery.Tools.forEach((tool) => {\r\n        if (o.Id === tool.Item_Id) {\r\n          totalAggregatedDeliveryCost += tool.Price;\r\n        }\r\n      });\r\n\r\n      // Check deliveries for the related items of the untagged item\r\n    }\r\n    if (o.RelatedItems) {\r\n      o.RelatedItems.forEach((relatedItem) => {\r\n        Quote.Delivery.Tools.forEach((tool) => {\r\n          if (relatedItem.Id === tool.Item_Id) {\r\n            totalAggregatedDeliveryCost += tool.Price;\r\n          }\r\n        });\r\n      });\r\n    }\r\n  });\r\n\r\n  primaryItemsDeliveryItems?.forEach((o) => {\r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      Quote.Delivery.Tools.forEach((tool) => {\r\n        if (o.Id === tool.Item_Id) {\r\n          DeliveryItemsNoTag.push(tool);\r\n        }\r\n      });\r\n    }\r\n    if (o.RelatedItems && o.RelatedItems.length > 0) {\r\n      o.RelatedItems.forEach((relatedItem) => {\r\n        Quote.Delivery.Tools.forEach((tool) => {\r\n          if (relatedItem.Id === tool.Item_Id) {\r\n            DeliveryItemsNoTag.push(tool);\r\n          }\r\n        });\r\n      });\r\n    }\r\n  });\r\n\r\n  let removalsMaterialTotal = 0;\r\n  let removalsLaborTotal = 0;\r\n\r\n  Quote?.Removal?.Items?.filter(\r\n    (removalItem) => removalItem.Tag_Id === 0\r\n  ).forEach((o) => {\r\n    removalsMaterialTotal += o.Price;\r\n    removalsLaborTotal += o.LaborSubtotal;\r\n  });\r\n\r\n  const finalUntaggedMaterialSubtotal =\r\n    untaggedMaterialSubtotal +\r\n    totalAggregatedDeliveryCost +\r\n    removalsMaterialTotal;\r\n  const finalUntaggedInstallSubtotal =\r\n    untaggedInstallSubtotal + totalAggregatedDeliveryCost + removalsLaborTotal;\r\n  const finalUntaggedTotalSubtotal =\r\n    untaggedTotalSubtotal +\r\n    totalAggregatedDeliveryCost +\r\n    removalsMaterialTotal +\r\n    removalsLaborTotal;\r\n\r\n  //General Time\r\n\r\n  // Declare variables to accumulate the total time in decimal hours\r\n  let totalInstallTimeInDecimalHours = 0;\r\n  let totalRemovalTimeInDecimalHours = 0;\r\n\r\n  // Iterate through the material items to accumulate the installation time\r\n  Quote?.Material?.Items?.forEach((o) => {\r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      const laborName = laborNamesByProduct[`${o.Name}_${o.Id}`] || \"\";\r\n      const laborItem = Quote.Labor.Items.find(\r\n        (item) => item.Name === laborName\r\n      );\r\n      const hourlyRate = laborItem ? laborItem.UnitPrice : 154;\r\n      const installSub =\r\n        displayStatus[o.Id] === true\r\n          ? o.LaborSubtotal\r\n          : o.LaborSubtotalWithRelatedItems;\r\n      totalInstallTimeInDecimalHours += installSub / hourlyRate;\r\n    }\r\n  });\r\n\r\n  // Iterate through the removal items to accumulate the removal time\r\n  Quote?.Removal?.Items?.forEach((o) => {\r\n    const removalTime = totalRemovalsByItem[`${o.Name}_${o.Id}`] || 0;\r\n    totalRemovalTimeInDecimalHours += removalTime;\r\n  });\r\n\r\n  // Use `totalTimeString` in the subtotal section to display the total time\r\n\r\n  const RemovalItemsNoTag =\r\n    Quote?.Removal?.Items?.filter(\r\n      (removalItem) => removalItem.Tag_Id === 0\r\n    ).map((item) => {\r\n      const originalRemovalIndex = Quote.Removal.Items.findIndex(\r\n        (removal) => removal.Id === item.Id\r\n      );\r\n      const removalTime =\r\n        totalRemovalsByItem[`${item.Name}_${originalRemovalIndex}`] || 0;\r\n      return {\r\n        ...item,\r\n        removalTime: decimalHoursToTimeString(removalTime), // Add the time property\r\n      };\r\n    }) || []; // Default to an empty array if undefined\r\n\r\n  // Calculate the total removal cost, quantity, etc.\r\n  const totalRemovalCost = RemovalItemsNoTag.reduce(\r\n    (sum, item) => sum + item.Price + item.LaborSubtotal,\r\n    0\r\n  );\r\n  const totalRemovalQuantity = RemovalItemsNoTag.reduce(\r\n    (sum, item) => sum + item.Quant,\r\n    0\r\n  );\r\n  const totalRemovalTime = RemovalItemsNoTag.reduce((sum, item) => {\r\n    const originalRemovalIndex = Quote.Removal.Items.findIndex(\r\n      (removal) => removal.Id === item.Id\r\n    );\r\n    return (\r\n      sum + (totalRemovalsByItem[`${item.Name}_${originalRemovalIndex}`] || 0)\r\n    );\r\n  }, 0);\r\n\r\n  const [selectedTagId, setSelectedTagId] = useState(null);\r\n  const [showQuoteLineItem, setShowQuoteLineItem] = useState(false);\r\n  const [showToolLineItem, setShowToolLineItem] = useState(false);\r\n\r\n  const [addOnSelectedItem, setAddOnSelectedItem] = useState({});\r\n\r\n  const [deleteItemConfirmDisplay, setDeleteItemConfirmDisplay] =\r\n    useState(false);\r\n  const [deleteItemId, setDeleteItemId] = useState(0);\r\n  const [isLoading, setIsLoading] = useState(false);\r\n\r\n  // Calculate the total time and convert it to a displayable format\r\n  const totalTimeInDecimalHours =\r\n    totalInstallTimeInDecimalHours + totalRemovalTimeInDecimalHours;\r\n  const totalTimeString = decimalHoursToTimeString(\r\n    totalTimeInDecimalHours + totalRemovalTime\r\n  );\r\n\r\n  const handleClick = (index) => {\r\n    const element = document.querySelector(`[data-scroll-id=\"${index}\"]`);\r\n    if (element) {\r\n      element.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\r\n    }\r\n  };\r\n\r\n  const SaveAndSendEstimate = async () => {\r\n    try {\r\n      const data = await UpdateQuote(Quote);\r\n      if (data !== null) {\r\n        const notify = await SetQuoteTo_Notify(params.quoteId);\r\n        if (notify !== null) {\r\n          window.alert(\"Homeowner Notified\");\r\n        }\r\n      }\r\n    } catch (error) {}\r\n  };\r\n\r\n  const SaveEstimateText = async () => {\r\n    try {\r\n      const data = await UpdateQuote(Quote);\r\n      if (data !== null) {\r\n        GetProposalInformation(params.quoteId);\r\n      }\r\n    } catch (error) {\r\n      setIsLoading(false);\r\n    }\r\n    setIsLoading(false);\r\n  };\r\n\r\n  if (Quote !== null && Quote !== undefined) {\r\n    if (Quote.Material !== null && Quote.Material !== undefined) {\r\n      if (window.$ISMOBILE === true) {\r\n        return (\r\n          <Cont>\r\n            <LeftCont>\r\n              <Menu> </Menu>\r\n            </LeftCont>\r\n            <FlexColumn81vwLightGrey>\r\n              <TopMentProposalView\r\n                mobilePageProp={estimateName}\r\n                currentPage={\"estimatorView\"}\r\n                pageProp={projectName}\r\n                estimateName={estimateName}\r\n                homeownerName={homeownerName}\r\n                projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n                scrollinfo={() => {\r\n                  scrollToOverview.scrollIntoView();\r\n                }}\r\n                scrollsupply={() => {\r\n                  scrollToSupply.scrollIntoView();\r\n                }}\r\n                scrollinstall={() => {\r\n                  scrollToInstall.scrollIntoView();\r\n                }}\r\n                scrolldesigns={() => {\r\n                  scrollToDesigns.scrollIntoView();\r\n                }}\r\n                scrollcomments={() => {\r\n                  scrollToComments.scrollIntoView();\r\n                }}\r\n                scrollconfirmation={() => {\r\n                  scrollToConfirm.scrollIntoView();\r\n                }}\r\n              ></TopMentProposalView>\r\n\r\n              <FlexRowContFlexStartMobileColumn\r\n                height=\"auto\"\r\n                display={\r\n                  Quote.QuoteStatus === QuoteStatus.RevisionRequested\r\n                    ? \"none\"\r\n                    : \"flex\"\r\n                }\r\n              ></FlexRowContFlexStartMobileColumn>\r\n\r\n              {/* Proposal Overview --------------------------------------------------------------- */}\r\n              <RevisionInstructionsWindow\r\n                open={revisionInstructionDisplay}\r\n                CloseWindow={() => {\r\n                  setRevisionInstructionDisplay(false);\r\n                }}\r\n                StartRevising={() => {\r\n                  ChangeUIToMakeRevisions();\r\n                  setRevisionInstructionDisplay(false);\r\n                }}\r\n              ></RevisionInstructionsWindow>\r\n\r\n              <DuplicateProposalWindow\r\n                quoteObj={Quote}\r\n                onClose={() => {\r\n                  setCloneProposalWindowDisplay(false);\r\n                }}\r\n                open={cloneProposalWindowDisplay}\r\n              ></DuplicateProposalWindow>\r\n              <ImageViewWindow\r\n                open={imageGalleryDisplay}\r\n                imgurl={imagePreviewUrl}\r\n                onClose={() => {\r\n                  setImageGalleryDisplay(false);\r\n                  document.body.style.overflow = \"unset\";\r\n                }}\r\n              ></ImageViewWindow>\r\n\r\n              <ContentCont77vw height=\"auto\" width=\"75vw\">\r\n                {isLoading === true ? (\r\n                  <Backdrop style={{ zIndex: 1000 }} open>\r\n                    <CircularProgress color=\"inherit\" />\r\n                  </Backdrop>\r\n                ) : (\r\n                  <div>\r\n                    <LeagueSpartanLarge>Estimate Name</LeagueSpartanLarge>\r\n                    <br />\r\n                    <InputField\r\n                      defaultValue={Quote?.Tittle}\r\n                      onChange={(e) => {\r\n                        Quote.Tittle = e.target.value;\r\n                      }}\r\n                    ></InputField>\r\n                    <FlexColumnFullWidthMargins>\r\n                      <br></br>\r\n                      <FlexRowContFlexStart height=\"auto\">\r\n                        <LeagueSpartanLarge>\r\n                          Estimate Details\r\n                        </LeagueSpartanLarge>\r\n                      </FlexRowContFlexStart>\r\n\r\n                      <br></br>\r\n                      <TextAreaAutoResize\r\n                        id=\"text\"\r\n                        defaultValue={Quote.Notes}\r\n                        onChange={(e) => {\r\n                          Quote.Notes = e.target.value;\r\n                        }}\r\n                      ></TextAreaAutoResize>\r\n                    </FlexColumnFullWidthMargins>\r\n                    <br />\r\n                  </div>\r\n                )}\r\n                <RegularResponsiveButton\r\n                  onClick={() => {\r\n                    setIsLoading(true);\r\n                    SaveEstimateText(Quote);\r\n                  }}\r\n                  width=\"20%\"\r\n                >\r\n                  Save Changes\r\n                </RegularResponsiveButton>\r\n              </ContentCont77vw>\r\n\r\n              <ContentCont44Percent height=\"auto\" justifycontent=\"space-around\">\r\n                <FlexColumnFullWidthMargins height=\"100%\">\r\n                  <br></br>\r\n                  <FlexRowContFlexStart height=\"auto\">\r\n                    <LeagueSpartanLarge>{estimateName}</LeagueSpartanLarge>\r\n                  </FlexRowContFlexStart>\r\n                  <br></br>\r\n                  <SummaryContainer height=\"100%\" justifycontent=\"space-around\">\r\n                    {/* <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                   <LeagueSpartanHeaderSmall>Material Supply</LeagueSpartanHeaderSmall>\r\n                    </SummaryContainerItems> */}\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Materials:</MediumHeader>\r\n                      <MediumHeader>\r\n                        {\" \"}\r\n                        $\r\n                        {Quote?.Material?.Total?.Subtotal?.toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Delivery?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Deliveries:</MediumHeader>\r\n                      <MediumHeader>\r\n                        {\" \"}\r\n                        $\r\n                        {Quote?.Delivery?.Total?.Subtotal?.toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    <br></br>\r\n\r\n                    {/* <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                   <LeagueSpartanHeaderSmall>Installation</LeagueSpartanHeaderSmall>\r\n                    </SummaryContainerItems> */}\r\n\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Number(projectInstallSubtotal).toFixed(2) >\r\n                        Stored_Values.MIN_LABOR\r\n                          ? \"flex\"\r\n                          : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Labour:</MediumHeader>\r\n                      <MediumHeader>\r\n                        $\r\n                        {Number(\r\n                          projectInstallSubtotal + removalsHeader8Subtotal\r\n                        )\r\n                          .toFixed(2)\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Number(projectInstallSubtotal).toFixed(2) >\r\n                        Stored_Values.MIN_LABOR\r\n                          ? \"none\"\r\n                          : \"flex\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Minimum Labour Fee:</MediumHeader>\r\n                      <MediumHeader>\r\n                        ${Stored_Values?.MIN_LABOR?.toFixed(2)}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems>\r\n                      <MediumHeader>\r\n                        Machines, Disposals, Site Access\r\n                      </MediumHeader>\r\n\r\n                      <MediumHeader>\r\n                        ${\" \"}\r\n                        {(\r\n                          parseFloat(\r\n                            Quote?.Tool?.Total?.Subtotal?.toFixed(2).replace(\r\n                              /,/g,\r\n                              \"\"\r\n                            )\r\n                          ) +\r\n                          parseFloat(\r\n                            Quote?.AccessArea?.Total?.Subtotal?.toFixed(\r\n                              2\r\n                            ).replace(/,/g, \"\")\r\n                          )\r\n                        )\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    {/* <SummaryContainerItems\r\n                      display={\r\n                        'flex'\r\n                      }\r\n                    >\r\n                      <MediumHeader>Removals:</MediumHeader>\r\n                      <MediumHeader>\r\n                        ${\" \"}\r\n                        {((removalsHeader8Subtotal))\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n\r\n                    <StyledHRPropColour\r\n                      border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                    ></StyledHRPropColour>\r\n                    <SummaryContainerItems>\r\n                      <LeagueSpartanHeaderSmall>\r\n                        Project Subtotal:\r\n                      </LeagueSpartanHeaderSmall>\r\n                      <MediumHeader>\r\n                        $\r\n                        {\r\n                          projectSubtotal\r\n                          // .toFixed(2)\r\n                          // .toString()\r\n                          // .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    <SummaryContainerItems>\r\n                      <MediumHeader>\r\n                        {storeTaxes[0]?.TaxCode} ({storeTaxes[0]?.Rate}%)\r\n                      </MediumHeader>\r\n                      <MediumHeader>\r\n                        $\r\n                        {estimateGST\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    {/*                     \r\n                  <SummaryContainerItems>\r\n                  <MediumHeader>\r\n                      {storeTaxes[1]?.TaxCode} ({storeTaxes[1]?.Rate}%)\r\n                    </MediumHeader>\r\n                    <MediumHeader>\r\n                      ${estimatePST.toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                    </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n                    {/* {supplyTotal.Tax.map((o, i) => (\r\n                      <SummaryContainerItems key={i}>\r\n                        <MediumHeader>\r\n                          Supply {o.TaxCode} ({o.Rate}%):\r\n                        </MediumHeader>\r\n                        <MediumHeader>\r\n                          $\r\n                          {o.Amount.toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                    ))}\r\n\r\n                    {installTotal.Tax.map((o, i) => (\r\n                      <SummaryContainerItems\r\n                        key={i}\r\n                        display={installSubtotalDisplay}\r\n                      >\r\n                        <MediumHeader>\r\n                          Install {o.TaxCode} ({o.Rate}%):\r\n                        </MediumHeader>\r\n                        <MediumHeader>\r\n                          $\r\n                          {o.Amount.toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                    ))} */}\r\n                    <StyledHRGreenBreak></StyledHRGreenBreak>\r\n                    <SummaryContainerItems>\r\n                      <LeagueSpartanRegular>\r\n                        Project Total:\r\n                      </LeagueSpartanRegular>\r\n                      <LeagueSpartanRegular>\r\n                        {\" \"}\r\n                        $\r\n                        {projectGrandTotal\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </LeagueSpartanRegular>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems>\r\n                      <LeagueSpartanRegular>\r\n                        Projected Project Length:\r\n                      </LeagueSpartanRegular>\r\n                      <LeagueSpartanRegular>\r\n                        {convertHoursToTimeString(\r\n                          Quote.Labor.Items.reduce(\r\n                            (total, o) => total + o?.Quant,\r\n                            0\r\n                          )\r\n                        )}\r\n                      </LeagueSpartanRegular>\r\n                    </SummaryContainerItems>\r\n                    <FlexColumnContCenterAlign>\r\n                      <RegularResponsiveButton\r\n                        fontsize=\"14px\"\r\n                        lineheight=\"30px\"\r\n                        width=\"95%\"\r\n                        height=\"30px\"\r\n                        display={showDepositButton}\r\n                        onClick={() => {\r\n                          ValidateAgreement(\r\n                            supplyOnlySelected,\r\n                            params.caseId,\r\n                            params.quoteId\r\n                          );\r\n                        }}\r\n                      >\r\n                        Pay Deposit $\r\n                        {deposit < Stored_Values.MIN_DEPOSIT\r\n                          ? Stored_Values.MIN_DEPOSIT.toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          : deposit\r\n                              .toFixed(2)\r\n                              .toString()\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}{\" \"}\r\n                      </RegularResponsiveButton>\r\n\r\n                      <TinyTextItalics color={ColorPalette.DarkGrey}>\r\n                        Project deposit is non-refundable. By paying the\r\n                        deposit, you have agreed that you have read and\r\n                        understood our{\" \"}\r\n                        <span>\r\n                          {\" \"}\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href=\"https://newrhodesconstruction.com/rl-terms-of-service/\"\r\n                            target=\"_blank\"\r\n                          >\r\n                            {\" \"}\r\n                            Terms of Service{\" \"}\r\n                          </a>{\" \"}\r\n                        </span>{\" \"}\r\n                      </TinyTextItalics>\r\n                    </FlexColumnContCenterAlign>\r\n                  </SummaryContainer>\r\n                </FlexColumnFullWidthMargins>\r\n              </ContentCont44Percent>\r\n\r\n              <ContentCont77vw>\r\n                <FlexColumnFullWidth>\r\n                  <FlexRowContFlexStart>\r\n                    <LeagueSpartanLarge>Construction Plans</LeagueSpartanLarge>\r\n                    <Icon30px30pxPointer\r\n                      src=\"/Green Button.svg\"\r\n                      onClick={() => {\r\n                        AddPhotoButtonClick();\r\n                      }}\r\n                    ></Icon30px30pxPointer>\r\n                    <input\r\n                      style={{ display: \"none\" }}\r\n                      ref={inputFile}\r\n                      type=\"file\"\r\n                      onChange={handleUpload}\r\n                    />\r\n                  </FlexRowContFlexStart>\r\n                  <QuotePhotoUploadPreviewWindow\r\n                    quoteObj={Quote}\r\n                    open={previewImageWindowDisplay}\r\n                    previewsrc={previewImage}\r\n                    CancelUpload={() => {\r\n                      ResetImage(previewImage);\r\n                    }}\r\n                    CloseWindow={() => {\r\n                      setPreviewImageWindowDisplay(false);\r\n                    }}\r\n                    UploadSuccessful={() => {\r\n                      GetProposalInformation(params.quoteId);\r\n                    }}\r\n                  ></QuotePhotoUploadPreviewWindow>\r\n                  <br></br>\r\n                  <GridContainer3Wide>\r\n                    {Quote.Photos.map((o, i) => {\r\n                      return o.File?.includes(\".pdf\") ||\r\n                        o.File?.includes(\".PDF\") ? (\r\n                        <FlexContainerPhotos key={i}>\r\n                          <a\r\n                            id={i}\r\n                            rel=\"noreferrer\"\r\n                            href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                            target={\"_blank\"}\r\n                            style={{ textDecoration: \"none\", color: \"black\" }}\r\n                          >\r\n                            <embed\r\n                              target={\"_blank\"}\r\n                              src={\"/pdficon.png\"}\r\n                              width={\"150px\"}\r\n                              style={{ backgroundColor: \"white\" }}\r\n                              height={\"200px\"}\r\n                            ></embed>\r\n                            <FlexContFullWidthHeightJustifyCenter>\r\n                              <LargeText>{o.Caption}</LargeText>\r\n                            </FlexContFullWidthHeightJustifyCenter>\r\n                          </a>\r\n                        </FlexContainerPhotos>\r\n                      ) : (\r\n                        <FlexContainerPhotos key={i}>\r\n                          <Image375px\r\n                            onClick={() => {\r\n                              DisplayImageInGallery(o.File);\r\n                            }}\r\n                            src={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                          ></Image375px>\r\n                          <FlexContFullWidthHeightJustifyCenter>\r\n                            <LargeText>{o.Caption}</LargeText>\r\n                          </FlexContFullWidthHeightJustifyCenter>\r\n                        </FlexContainerPhotos>\r\n                      );\r\n                    })}\r\n                  </GridContainer3Wide>\r\n                </FlexColumnFullWidth>\r\n              </ContentCont77vw>\r\n\r\n              <FlexRowContAutox100PercentMobileColumn\r\n                alignitems=\"baseline\"\r\n                margin=\"0\"\r\n              >\r\n                <ContentContQuote id=\"install\">\r\n                  <FlexColumnFullWidth>\r\n                    <FlexRowCont100PercentSpaceBetween mobileflexdirection=\"column\">\r\n                      <FlexColumnFullWidth mobilewidth=\"90vw\">\r\n                        <FlexRowContFlexStart>\r\n                          <LeagueSpartanLarge>\r\n                            Project Estimate\r\n                          </LeagueSpartanLarge>\r\n\r\n                          <TagWindow\r\n                            tagObj={tagObj}\r\n                            quoteid={Quote.Id}\r\n                            open={tagWindowDisplay}\r\n                            RefreshTaglist={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            onClose={() => {\r\n                              setTagWindowDisplay(false);\r\n                            }}\r\n                          ></TagWindow>\r\n                        </FlexRowContFlexStart>\r\n                      </FlexColumnFullWidth>\r\n                    </FlexRowCont100PercentSpaceBetween>\r\n                  </FlexColumnFullWidth>\r\n\r\n                  <FlexColumnFullWidth\r\n                    display={installEstimateDisplay}\r\n                    height=\"auto\"\r\n                    ref={ref2}\r\n                  >\r\n                    <AutoSizeOverflowY>\r\n                      <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n\r\n                      {Quote.Tags.map((t, j) => {\r\n                        let MaterialSum = 0;\r\n                        let InstallSum = 0;\r\n                        let TotalSum = 0;\r\n                        let sumHourlyRate = 0;\r\n                        let countItems = 0;\r\n                        let installSubSumByTag = {};\r\n                        let timeSumByTag = {};\r\n                        let removalTimeSubtotal = 0;\r\n\r\n                        const RemovalItemsWithTag = Quote.Removal.Items.filter(\r\n                          (removalItem) => removalItem.Tag_Id === t.Id\r\n                        ).map((item) => {\r\n                          const originalRemovalIndex =\r\n                            Quote.Removal.Items.findIndex(\r\n                              (removal) => removal.Id === item.Id\r\n                            );\r\n                          const removalTime =\r\n                            totalRemovalsByItem[\r\n                              `${item.Name}_${originalRemovalIndex}`\r\n                            ] || 0;\r\n                          return {\r\n                            ...item,\r\n                            removalTime: decimalHoursToTimeString(removalTime), // Add the time property\r\n                          };\r\n                        });\r\n                        // Calculate the total removal cost, quantity, and time for the current tag\r\n                        const totalRemovalCost = RemovalItemsWithTag.reduce(\r\n                          (sum, item) => sum + item.Price + item.LaborSubtotal,\r\n                          0\r\n                        );\r\n                        const totalRemovalTime = RemovalItemsWithTag.reduce(\r\n                          (sum, item) => {\r\n                            const originalRemovalIndex =\r\n                              Quote.Removal.Items.findIndex(\r\n                                (removal) => removal.Id === item.Id\r\n                              );\r\n                            return (\r\n                              sum +\r\n                              (totalRemovalsByItem[\r\n                                `${item.Name}_${originalRemovalIndex}`\r\n                              ] || 0)\r\n                            );\r\n                          },\r\n                          0\r\n                        );\r\n\r\n                        const primaryItems = Quote.Material.Items.filter(\r\n                          (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                        );\r\n\r\n                        const matchedDeliveries = [];\r\n\r\n                        primaryItems.forEach((primaryItem) => {\r\n                          // Check for deliveries related to the primary item itself\r\n                          Quote.Delivery.Tools.forEach((tool) => {\r\n                            if (primaryItem.Id === tool.Item_Id) {\r\n                              matchedDeliveries.push({\r\n                                ...tool,\r\n                                Tag_Id: primaryItem.Tag_Id,\r\n                              });\r\n                            }\r\n                          });\r\n\r\n                          // Check for deliveries related to the primary item's related items\r\n                          if (\r\n                            primaryItem.RelatedItems &&\r\n                            primaryItem.RelatedItems.length > 0\r\n                          ) {\r\n                            primaryItem.RelatedItems.forEach((relatedItem) => {\r\n                              Quote.Delivery.Tools.forEach((tool) => {\r\n                                if (relatedItem.Id === tool.Item_Id) {\r\n                                  matchedDeliveries.push({\r\n                                    ...tool,\r\n                                    Tag_Id: primaryItem.Tag_Id, // Assuming the tag ID is the same as the primary item's\r\n                                  });\r\n                                }\r\n                              });\r\n                            });\r\n                          }\r\n                        });\r\n\r\n                        let totalAggregatedDeliveryCostWithTagId = 0;\r\n\r\n                        primaryItems.forEach((primaryItem) => {\r\n                          // Check deliveries for the primary item\r\n                          Quote.Delivery.Tools.forEach((tool) => {\r\n                            if (primaryItem.Id === tool.Item_Id) {\r\n                              totalAggregatedDeliveryCostWithTagId +=\r\n                                tool.Price;\r\n                            }\r\n                          });\r\n\r\n                          // Check deliveries for the related items of the primary item\r\n                          if (primaryItem.RelatedItems) {\r\n                            primaryItem.RelatedItems.forEach((relatedItem) => {\r\n                              Quote.Delivery.Tools.forEach((tool) => {\r\n                                if (relatedItem.Id === tool.Item_Id) {\r\n                                  totalAggregatedDeliveryCostWithTagId +=\r\n                                    tool.Price;\r\n                                }\r\n                              });\r\n                            });\r\n                          }\r\n                        });\r\n\r\n                        primaryItems.forEach((o) => {\r\n                          const materialSub = o.SubtotalWithRelatedItems;\r\n                          const installSub = o.LaborSubtotalWithRelatedItems;\r\n                          const originalIndex = Quote.Material.Items.findIndex(\r\n                            (item) => item.Id === o.Id\r\n                          );\r\n                          const laborName = laborNamesByProduct[\r\n                            `${o.Name}_${originalIndex}`\r\n                          ]\r\n                            ? Array.from(\r\n                                laborNamesByProduct[\r\n                                  `${o.Name}_${originalIndex}`\r\n                                ]\r\n                              )\r\n                                .join(\", \")\r\n                                .split(\", \")[0]\r\n                            : \"\";\r\n                          const laborItem = Quote.Labor.Items.find(\r\n                            (item) => item.Name === laborName\r\n                          );\r\n                          const hourlyRate = laborItem\r\n                            ? laborItem.UnitPrice\r\n                            : 154;\r\n\r\n                          sumHourlyRate += hourlyRate;\r\n                          countItems++;\r\n\r\n                          MaterialSum += materialSub;\r\n                          InstallSum += installSub;\r\n                          TotalSum += materialSub + installSub;\r\n                        });\r\n\r\n                        Quote.Removal.Items.filter(\r\n                          (removalItem) => removalItem.Tag_Id === t.Id\r\n                        ).forEach((o) => {\r\n                          const removalTotal = o.Price + o.LaborSubtotal;\r\n                          MaterialSum += removalTotal; // Assuming removals are treated as material costs\r\n                          TotalSum += removalTotal;\r\n                        });\r\n\r\n                        MaterialSum += totalAggregatedDeliveryCostWithTagId;\r\n                        TotalSum += totalAggregatedDeliveryCostWithTagId;\r\n\r\n                        const averageHourlyRate =\r\n                          countItems > 0 ? sumHourlyRate / countItems : 0;\r\n\r\n                        return (\r\n                          <div>\r\n                            <br></br>\r\n                            <DeleteConfirmWindow\r\n                              closeDel={() => {\r\n                                setDeleteTagConfirmDisplay(false);\r\n                              }}\r\n                              onDeleteFunction={() => {\r\n                                DeleteTagOnQuote(deleteTagId, params.quoteId);\r\n                              }}\r\n                              deleteOpen={deleteTagConfirmDisplay}\r\n                            ></DeleteConfirmWindow>\r\n                            <MobileEstimateQuoteItem\r\n                              isHeader={true}\r\n                              header2={t.TagName}\r\n                              ShowItemSelection={() => {\r\n                                setSelectedTagId(t.Id);\r\n                                setShowQuoteLineItem(true);\r\n                                handleClick(t.Id);\r\n                              }}\r\n                              EditTag={() => {\r\n                                setTagObj(t);\r\n                                setTagWindowDisplay(true);\r\n                              }}\r\n                              DeleteTag={() => {\r\n                                setDeleteTagId(t.Id);\r\n                                setDeleteTagConfirmDisplay(true);\r\n                              }}\r\n                              bgColor={ColorPalette.White}\r\n                            ></MobileEstimateQuoteItem>\r\n\r\n                            <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n\r\n                            {selectedTagId === t.Id && showQuoteLineItem ? (\r\n                              <QuoteLineItem\r\n                                data-scroll-id={t.Id}\r\n                                onClose={() => {\r\n                                  setShowQuoteLineItem(false);\r\n                                  setSelectedTagId(0);\r\n                                  setAddOnSelectedItem(null);\r\n                                }}\r\n                                RefreshItemList={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                Tag_Id={t.Id}\r\n                                addOnSelectedItem={addOnSelectedItem}\r\n                              ></QuoteLineItem>\r\n                            ) : null}\r\n\r\n                            {primaryItems.map((o, i) => {\r\n                              const materialSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.Price\r\n                                  : o.SubtotalWithRelatedItems;\r\n                              const installSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.LaborSubtotal\r\n                                  : o.LaborSubtotalWithRelatedItems;\r\n\r\n                              const originalIndex =\r\n                                Quote.Material.Items.findIndex(\r\n                                  (item) => item.Id === o.Id\r\n                                );\r\n\r\n                              // Get the total labor hours for this item's name\r\n                              const totalHours =\r\n                                totalHoursByProduct[\r\n                                  `${o.Name}_${originalIndex}`\r\n                                ] || 0;\r\n\r\n                              timeSumByTag[o.Tag_Id] +=\r\n                                totalHoursByProduct[\r\n                                  `${o.Name}_${originalIndex}`\r\n                                ];\r\n                              const laborNames = laborNamesByProduct[\r\n                                `${o.Name}_${originalIndex}`\r\n                              ]\r\n                                ? Array.from(\r\n                                    laborNamesByProduct[\r\n                                      `${o.Name}_${originalIndex}`\r\n                                    ]\r\n                                  ).join(\", \")\r\n                                : \"\";\r\n                              // Extract the labor name(s) from the laborNames variable\r\n                              const laborName = laborNames\r\n                                ? laborNames.split(\", \")[0]\r\n                                : \"\"; // Adjust as needed if multiple names\r\n\r\n                              // Find the corresponding labor item in Quote.Labor.Items\r\n                              const laborItem = Quote.Labor.Items.find(\r\n                                (item) => item.Name === laborName\r\n                              );\r\n\r\n                              // Get the price from the labor item, or default to 175 if not found\r\n                              const hourlyRate = laborItem\r\n                                ? laborItem.UnitPrice\r\n                                : 154;\r\n                              sumHourlyRate += hourlyRate;\r\n                              countItems++;\r\n\r\n                              return (\r\n                                <MobileEstimateQuoteItem\r\n                                  noChange={o.NoChange}\r\n                                  key={i}\r\n                                  showRelatedItems={displayStatus[o.Id]}\r\n                                  onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                                  RefreshComponentState={() => {\r\n                                    GetProposalInformation(params.quoteId);\r\n                                  }}\r\n                                  inputheaderposition={headerInputShown}\r\n                                  OutputValue={(value) => {\r\n                                    UpdateQuoteItemQuantity(o.Id, value);\r\n                                  }}\r\n                                  showAddOnsSelection={() => {\r\n                                    setShowQuoteLineItem(true);\r\n                                    setSelectedTagId(t.Id);\r\n                                    setAddOnSelectedItem(o);\r\n                                  }}\r\n                                  deleteItemFromEstimate={(itemId) => {\r\n                                    if (itemId) {\r\n                                      setDeleteItemId(itemId);\r\n                                    } else {\r\n                                      setDeleteItemId(o.Id);\r\n                                    }\r\n                                    setDeleteItemConfirmDisplay(true);\r\n                                  }}\r\n                                  quoteItemObj={o}\r\n                                  parentid={o.Parent_Id}\r\n                                  header1=\"Delete\"\r\n                                  header2={o.Name}\r\n                                  subheader2notes={\r\n                                    o.Notes == null ? \"\" : o.Notes + \"\"\r\n                                  }\r\n                                  subheader2={\r\n                                    o.Description === null ? \"\" : o.Description\r\n                                  }\r\n                                  header3={\r\n                                    Number(o?.Quant)\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                                    \" \" +\r\n                                    o.DisplayUnit\r\n                                  }\r\n                                  header4={\r\n                                    \"$\" +\r\n                                    (o?.Quant !== 0\r\n                                      ? (materialSub / o?.Quant).toFixed(4)\r\n                                      : materialSub\r\n                                          .toFixed(2)\r\n                                          .replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          ))\r\n                                  }\r\n                                  // header5={\r\n                                  //   \"$\" +\r\n                                  //   materialSub\r\n                                  //     .toFixed(2)\r\n                                  //     .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  // }\r\n                                  header5={\r\n                                    \"$\" +\r\n                                    (o?.Quant !== 0\r\n                                      ? (installSub / o?.Quant).toFixed(4)\r\n                                      : installSub\r\n                                          .toFixed(2)\r\n                                          .replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          ))\r\n                                  }\r\n                                  // header7={\r\n                                  //   \"$\" +\r\n                                  //   installSub\r\n                                  //     .toFixed(2)\r\n                                  //     .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  // }\r\n                                  // header8={laborNames ? ` ${laborNames}` : ''}\r\n                                  header7={decimalHoursToTimeString(\r\n                                    installSub / hourlyRate\r\n                                  )}\r\n                                  hourlyRate={hourlyRate}\r\n                                  // header9={decimalHoursToTimeString(totalHours)}\r\n                                  header8={\r\n                                    \"$\" +\r\n                                    (\r\n                                      parseFloat(materialSub.toFixed(2)) +\r\n                                      parseFloat(installSub.toFixed(2))\r\n                                    )\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header3title=\"Quantity\"\r\n                                  header4title=\"Material Rate\"\r\n                                  header5title=\"Install Rate\"\r\n                                  header7title=\"Install Time\"\r\n                                ></MobileEstimateQuoteItem>\r\n                              );\r\n                            })}\r\n\r\n                            {RemovalItemsWithTag.length > 0 ? (\r\n                              <div key={`removal-tag`}>\r\n                                <MobileEstimateQuoteItem\r\n                                  CategoryType={CategoryTypes.Removal}\r\n                                  header1=\"Delete\"\r\n                                  header2=\"Removal\"\r\n                                  RemovalItems={RemovalItemsWithTag}\r\n                                  showRelatedItems={removalDisplayStatus[t.Id]}\r\n                                  RefreshComponentState={() => {\r\n                                    GetProposalInformation(params.quoteId);\r\n                                  }}\r\n                                  deleteItemFromEstimate={(itemId) => {\r\n                                    if (itemId) {\r\n                                      setDeleteItemId(itemId);\r\n                                    } else {\r\n                                      console.log(\"no item passed\");\r\n                                    }\r\n                                    setDeleteItemConfirmDisplay(true);\r\n                                  }}\r\n                                  onToggleDisplay={() =>\r\n                                    toggleRemovalDisplay(t.Id)\r\n                                  }\r\n                                  header7={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : \"$\" +\r\n                                        totalRemovalCost\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header9={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : decimalHoursToTimeString(\r\n                                          totalRemovalTime\r\n                                        )\r\n                                  }\r\n                                  header8={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : \"$\" +\r\n                                        totalRemovalCost\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                ></MobileEstimateQuoteItem>\r\n                              </div>\r\n                            ) : null}\r\n\r\n                            {totalAggregatedDeliveryCostWithTagId > 0 ? (\r\n                              <MobileEstimateQuoteItem\r\n                                key={`tagged-aggregated-delivery`}\r\n                                quoteItemObj={{\r\n                                  Price: totalAggregatedDeliveryCostWithTagId,\r\n                                }}\r\n                                showRelatedItems={displayStatus[t.Id]}\r\n                                RefreshComponentState={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                deleteItemFromEstimate={async (item_id) => {\r\n                                  setIsLoading(true);\r\n                                  await DeleteQuoteTool(item_id);\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }}\r\n                                CategoryType={\"Delivery\"}\r\n                                onToggleDisplay={() => toggleDisplay(t.Id)}\r\n                                DeliveryItems={matchedDeliveries}\r\n                                header1=\"Delete\"\r\n                                header2=\"Deliveries\"\r\n                                header3=\"\"\r\n                                header4=\"\"\r\n                                header8={\r\n                                  displayStatus[t.Id] === true\r\n                                    ? \"\"\r\n                                    : \"$\" +\r\n                                      totalAggregatedDeliveryCostWithTagId\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                }\r\n                              ></MobileEstimateQuoteItem>\r\n                            ) : null}\r\n                          </div>\r\n                        );\r\n                      })}\r\n\r\n                      <div>\r\n                        <br></br>\r\n\r\n                        {generalMaterialsHeader === \"flex\" ? (\r\n                          <MobileEstimateQuoteItem\r\n                            isHeader={true}\r\n                            header2=\"General Materials\"\r\n                            ShowItemSelection={() => {\r\n                              setShowQuoteLineItem(true);\r\n                              setSelectedTagId(0);\r\n                            }}\r\n                            // header3=\"Quantity\"\r\n                            // header4=\"Material Rate\"\r\n                            // header5=\"Material Subtotal\"\r\n                            // header6=\"Install Rate\"\r\n                            // header7=\"Install Subtotal\"\r\n                            // header8=\"Line Subtotal\"\r\n                            bgColor={ColorPalette.White}\r\n                          ></MobileEstimateQuoteItem>\r\n                        ) : null}\r\n\r\n                        <StyledHRGreenBreakThick\r\n                          display={generalMaterialsHeader}\r\n                        ></StyledHRGreenBreakThick>\r\n\r\n                        {selectedTagId === 0 && showQuoteLineItem ? (\r\n                          <QuoteLineItem\r\n                            data-scroll-id={0}\r\n                            onClose={() => {\r\n                              setShowQuoteLineItem(false);\r\n                              setSelectedTagId(0);\r\n                              setAddOnSelectedItem(null);\r\n                            }}\r\n                            RefreshItemList={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            Tag_Id={0}\r\n                            addOnSelectedItem={addOnSelectedItem}\r\n                          ></QuoteLineItem>\r\n                        ) : null}\r\n\r\n                        {/* {Quote.Material.Items.map((o, i) => {\r\n                          return o.Parent_Id === 0 && o.Tag_Id === 0 ? (\r\n                            <MobileEstimateQuoteItem\r\n                              key={i}\r\n                              quoteItemObj={o}\r\n                              inputheaderposition={headerInputShown}\r\n                              OutputValue={(value) => {\r\n                                UpdateQuoteItemQuantity(o.Id, value);\r\n                              }}\r\n                              noChange={o.NoChange}\r\n                              parentid={o.Parent_Id}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2={\r\n                                o.Description === null ? \"\" : o.Description\r\n                              }\r\n                              subheader2notes={\r\n                                o.Notes == null ? \"\" : o.Notes + \"\"\r\n                              }\r\n                              header3={o?.Quant.toFixed(2) + \" \" + o.DisplayUnit}\r\n                              header4={\r\n                                \"$\" +\r\n                                o.UnitPrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header5={\r\n                                \"$\" +\r\n                                o.Price.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header6={\r\n                                \"$\" + (o.LaborSubtotal / o?.Quant).toFixed(4)\r\n                              }\r\n                              header7={\r\n                                \"$\" +\r\n                                o.LaborSubtotal.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header8={\r\n                                \"$\" +\r\n                                (\r\n                                  parseFloat(o.Price.toFixed(2)) +\r\n                                  parseFloat(o.LaborSubtotal.toFixed(2))\r\n                                )\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              }\r\n                              header3title=\"Quantity\"\r\n                              header4title=\"Material Rate\"\r\n                              header5title=\"Material Subtotal\"\r\n                              header6title=\"Install Rate\"\r\n                              header7title=\"Install Subtotal\"\r\n                            ></MobileEstimateQuoteItem>\r\n                          ) : null;\r\n                        })} */}\r\n                        {Quote?.Material?.Items.map((o, i) => {\r\n                          if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n                            const materialSub =\r\n                              displayStatus[o.Id] === true\r\n                                ? o.Price\r\n                                : o.SubtotalWithRelatedItems;\r\n                            const installSub =\r\n                              displayStatus[o.Id] === true\r\n                                ? o.LaborSubtotal\r\n                                : o.LaborSubtotalWithRelatedItems;\r\n\r\n                            const matchedDeliveries = [];\r\n                            Quote.Delivery.Tools.forEach((tool) => {\r\n                              if (o.Id === tool.Item_Id) {\r\n                                matchedDeliveries.push({\r\n                                  ...tool,\r\n                                  Tag_Id: o.Tag_Id,\r\n                                });\r\n                              }\r\n                            });\r\n\r\n                            let totalDeliveryCost = 0;\r\n                            Quote.Delivery.Tools.forEach((tool) => {\r\n                              if (o.Id === tool.Item_Id) {\r\n                                totalDeliveryCost += tool.Price;\r\n                              }\r\n                            });\r\n\r\n                            const originalIndex =\r\n                              Quote.Material.Items.findIndex(\r\n                                (item) => item.Id === o.Id\r\n                              );\r\n                            const totalHours =\r\n                              totalHoursByProduct[\r\n                                `${o.Name}_${originalIndex}`\r\n                              ] || 0;\r\n                            const laborNames = laborNamesByProduct[\r\n                              `${o.Name}_${originalIndex}`\r\n                            ]\r\n                              ? Array.from(\r\n                                  laborNamesByProduct[\r\n                                    `${o.Name}_${originalIndex}`\r\n                                  ]\r\n                                ).join(\", \")\r\n                              : \"\";\r\n                            const laborName = laborNames\r\n                              ? laborNames.split(\", \")[0]\r\n                              : \"\";\r\n                            const laborItem = Quote.Labor.Items.find(\r\n                              (item) => item.Name === laborName\r\n                            );\r\n                            const hourlyRate = laborItem\r\n                              ? laborItem.UnitPrice\r\n                              : 154;\r\n\r\n                            return (\r\n                              <MobileEstimateQuoteItem\r\n                                showRelatedItems={displayStatus[o.Id]}\r\n                                onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                                RefreshComponentState={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                key={i}\r\n                                quoteItemObj={o}\r\n                                inputheaderposition={headerInputShown}\r\n                                OutputValue={(value) =>\r\n                                  UpdateQuoteItemQuantity(o.Id, value)\r\n                                }\r\n                                showAddOnsSelection={() => {\r\n                                  setShowQuoteLineItem(true);\r\n                                  setSelectedTagId(0);\r\n                                  setAddOnSelectedItem(o);\r\n                                }}\r\n                                deleteItemFromEstimate={(itemId) => {\r\n                                  if (itemId) {\r\n                                    setDeleteItemId(itemId);\r\n                                  } else {\r\n                                    setDeleteItemId(o.Id);\r\n                                  }\r\n                                  setDeleteItemConfirmDisplay(true);\r\n                                }}\r\n                                noChange={o.NoChange}\r\n                                parentid={o.Parent_Id}\r\n                                header1=\"Delete\"\r\n                                header2={o.Name}\r\n                                subheader2={o.Description || \"\"}\r\n                                subheader2notes={o.Notes || \"\"}\r\n                                header3={\r\n                                  Number(o?.Quant)\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                                  \" \" +\r\n                                  o.DisplayUnit\r\n                                }\r\n                                header4={\r\n                                  \"$\" +\r\n                                  (o?.Quant !== 0\r\n                                    ? (materialSub / o?.Quant).toFixed(4)\r\n                                    : materialSub\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"))\r\n                                }\r\n                                header5={\r\n                                  \"$\" +\r\n                                  (o?.Quant !== 0\r\n                                    ? (installSub / o?.Quant).toFixed(4)\r\n                                    : installSub\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"))\r\n                                }\r\n                                // header6={\"$\" + (o?.Quant ? (installSub / o?.Quant).toFixed(4) : installSub.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"))}\r\n                                // header7={\"$\" + installSub.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                                header7={decimalHoursToTimeString(\r\n                                  installSub / hourlyRate\r\n                                )}\r\n                                header8={\r\n                                  \"$\" +\r\n                                  (\r\n                                    parseFloat(materialSub.toFixed(2)) +\r\n                                    parseFloat(installSub.toFixed(2))\r\n                                  )\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                }\r\n                                hourlyRate={hourlyRate}\r\n                                header3title=\"Quantity\"\r\n                                header4title=\"Material Rate\"\r\n                                header5title=\"Install Rate\"\r\n                                header7title=\"Install Time\"\r\n                              ></MobileEstimateQuoteItem>\r\n                            );\r\n                          }\r\n\r\n                          return null;\r\n                        }).concat(\r\n                          <div key={`removal-no-tag`}>\r\n                            <MobileEstimateQuoteItem\r\n                              CategoryType={CategoryTypes.Removal}\r\n                              deleteItemFromEstimate={(itemId) => {\r\n                                if (itemId) {\r\n                                  setDeleteItemId(itemId);\r\n                                } else {\r\n                                  setDeleteItemId(o.Id);\r\n                                }\r\n                                setDeleteItemConfirmDisplay(true);\r\n                              }}\r\n                              RefreshComponentState={() => {\r\n                                GetProposalInformation(params.quoteId);\r\n                              }}\r\n                              header1=\"Delete\"\r\n                              header2=\"Removal\"\r\n                              RemovalItems={RemovalItemsNoTag}\r\n                              showRelatedItems={removalDisplayStatus}\r\n                              onToggleDisplay={() => {\r\n                                setRemovalDisplayStatus(!removalDisplayStatus);\r\n                              }}\r\n                              // header3={totalRemovalQuantity.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                              // header6={removalDisplayStatus === false ?  \"$\" + (totalRemovalCost / totalRemovalQuantity).toFixed(4): ''}\r\n                              // header7={removalDisplayStatus === false ?  \"$\" + totalRemovalCost.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") : ''}\r\n                              header9={\r\n                                removalDisplayStatus === true\r\n                                  ? decimalHoursToTimeString(totalRemovalTime)\r\n                                  : \"\"\r\n                              }\r\n                              header8={\r\n                                removalDisplayStatus === true\r\n                                  ? \"$\" +\r\n                                    totalRemovalCost\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  : \"\"\r\n                              }\r\n                            ></MobileEstimateQuoteItem>\r\n                          </div>,\r\n                          totalAggregatedDeliveryCost > 0 ? (\r\n                            <MobileEstimateQuoteItem\r\n                              key={`total-aggregated-delivery`}\r\n                              quoteItemObj={{\r\n                                Price: totalAggregatedDeliveryCost,\r\n                              }}\r\n                              DeliveryItems={DeliveryItemsNoTag}\r\n                              CategoryType={\"Delivery\"}\r\n                              RefreshComponentState={() => {\r\n                                GetProposalInformation(params.quoteId);\r\n                              }}\r\n                              showRelatedItems={deliveryDisplayStatus}\r\n                              onToggleDisplay={() => {\r\n                                setDeliveryDisplayStatus(\r\n                                  !deliveryDisplayStatus\r\n                                );\r\n                              }}\r\n                              header1=\"Delete\"\r\n                              header2=\"Deliveries\"\r\n                              header3=\"\"\r\n                              header4=\"\"\r\n                              header8={\r\n                                deliveryDisplayStatus === false\r\n                                  ? \"$\" +\r\n                                    totalAggregatedDeliveryCost\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  : \"\"\r\n                              }\r\n                            ></MobileEstimateQuoteItem>\r\n                          ) : null\r\n                        )}\r\n                      </div>\r\n                      {toolsmachinesHeader === \"flex\" ? (\r\n                        <div>\r\n                          <MobileEstimateQuoteItem\r\n                            isHeader={true}\r\n                            ShowItemSelection={() => {\r\n                              setSelectedTagId(0);\r\n                              setShowToolLineItem(true);\r\n                            }}\r\n                            header2=\"Machines, Disposals, & Access\"\r\n                            header7=\"Move Cost Per Machine\"\r\n                            bgColor={ColorPalette.White}\r\n                          ></MobileEstimateQuoteItem>\r\n                          <FlexColumnCont100xAutoPercent>\r\n                            <FlexColumnDiv>\r\n                              <TinyTextItalics>Length</TinyTextItalics>\r\n                              <InputField\r\n                                defaultValue={Quote?.AccessArea?.Length}\r\n                                onChange={(e) => {\r\n                                  setProposal((prevQuote) => ({\r\n                                    ...prevQuote,\r\n                                    AccessArea: {\r\n                                      ...prevQuote.AccessArea,\r\n                                      Length: e.target.value,\r\n                                    },\r\n                                  }));\r\n                                }}\r\n                              />\r\n                            </FlexColumnDiv>\r\n                            <FlexColumnDiv>\r\n                              <TinyTextItalics>Width</TinyTextItalics>\r\n                              <InputField\r\n                                defaultValue={Quote?.AccessArea?.Width}\r\n                                onChange={(e) => {\r\n                                  setProposal((prevQuote) => ({\r\n                                    ...prevQuote,\r\n                                    AccessArea: {\r\n                                      ...prevQuote.AccessArea,\r\n                                      Width: e.target.value,\r\n                                    },\r\n                                  }));\r\n                                }}\r\n                              />\r\n                            </FlexColumnDiv>\r\n                            <FlexColumnDiv>\r\n                              <TinyTextItalics>Elevation</TinyTextItalics>\r\n                              <InputField\r\n                                defaultValue={Quote?.AccessArea?.Elevation}\r\n                                onChange={(e) => {\r\n                                  setProposal((prevQuote) => ({\r\n                                    ...prevQuote,\r\n                                    AccessArea: {\r\n                                      ...prevQuote.AccessArea,\r\n                                      Elevation: e.target.value,\r\n                                    },\r\n                                  }));\r\n                                }}\r\n                              />\r\n                            </FlexColumnDiv>\r\n                            <FlexColumnDiv>\r\n                              <TinyTextItalics>Obstruction</TinyTextItalics>\r\n                              <div>\r\n                                <label>\r\n                                  <input\r\n                                    type=\"radio\"\r\n                                    name=\"obstruct\"\r\n                                    value=\"true\"\r\n                                    checked={\r\n                                      Quote?.AccessArea?.Obstruct === true\r\n                                    }\r\n                                    onChange={() => {\r\n                                      setProposal((prevQuote) => ({\r\n                                        ...prevQuote,\r\n                                        AccessArea: {\r\n                                          ...prevQuote.AccessArea,\r\n                                          Obstruct: true,\r\n                                        },\r\n                                      }));\r\n                                    }}\r\n                                  />\r\n                                  True\r\n                                </label>\r\n                                <label>\r\n                                  <input\r\n                                    type=\"radio\"\r\n                                    name=\"obstruct\"\r\n                                    value=\"false\"\r\n                                    checked={\r\n                                      Quote?.AccessArea?.Obstruct === false\r\n                                    }\r\n                                    onChange={() => {\r\n                                      setProposal((prevQuote) => ({\r\n                                        ...prevQuote,\r\n                                        AccessArea: {\r\n                                          ...prevQuote.AccessArea,\r\n                                          Obstruct: false,\r\n                                        },\r\n                                      }));\r\n                                    }}\r\n                                  />\r\n                                  False\r\n                                </label>\r\n                              </div>\r\n                            </FlexColumnDiv>\r\n                            <br></br>\r\n\r\n                            <RegularResponsiveButton\r\n                              onClick={() => {\r\n                                setIsLoading(true);\r\n                                SaveEstimateText(Quote);\r\n                              }}\r\n                              width=\"20%\"\r\n                            >\r\n                              Save Changes\r\n                            </RegularResponsiveButton>\r\n\r\n                            <br></br>\r\n                          </FlexColumnCont100xAutoPercent>\r\n                        </div>\r\n                      ) : null}\r\n\r\n                      {selectedTagId === 0 && showToolLineItem ? (\r\n                        <QuoteLineItem\r\n                          onClose={() => {\r\n                            setShowToolLineItem(false);\r\n                            setSelectedTagId(0);\r\n                            setAddOnSelectedItem(null);\r\n                          }}\r\n                          RefreshItemList={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          Tag_Id={0}\r\n                          addOnSelectedItem={addOnSelectedItem}\r\n                        ></QuoteLineItem>\r\n                      ) : null}\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        mobiledisplay={toolsmachinesHeader}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      {Quote.Tool.Tools.map((o, i) => {\r\n                        if (!o?.ToolName.includes(\"Wheelbarrow\")) {\r\n                          if (o.RentalRate > 0 && o.BasePrice > 0) {\r\n                            toolsHeader7Subtotal += o.BasePrice;\r\n                          }\r\n                          toolsHeader8Subtotal += o.Price;\r\n                        }\r\n\r\n                        return (\r\n                          <MobileEstimateQuoteItem\r\n                            key={i}\r\n                            CategoryType={\"Tool\"}\r\n                            RefreshComponentState={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            header1=\"Delete\"\r\n                            header2={o.ToolName}\r\n                            subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                            header4={\r\n                              o.RentalRate > 0\r\n                                ? \"$\" +\r\n                                  (o.RentalRate * o.RentalLength + o.BasePrice)\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                : \"$\" +\r\n                                  o.BasePrice.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                            }\r\n                            deleteItemFromEstimate={async (itemId) => {\r\n                              if (itemId) {\r\n                                setIsLoading(true);\r\n                                setDeleteItemId(itemId);\r\n                                const data = await DeleteQuoteTool(itemId);\r\n                                if (data === null) {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }\r\n                              } else {\r\n                                setDeleteItemId(o.Id);\r\n                                const data = await DeleteQuoteTool(o.Id);\r\n                                if (data === null) {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }\r\n                              }\r\n                            }}\r\n                            quoteItemObj={o}\r\n                            header5={o.RentalLength}\r\n                            itemLink={o.VideoUrl}\r\n                            header3={\r\n                              typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                                ? o.Quant.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                : \"\"\r\n                            }\r\n                            // header8={\r\n                            //   o.RentalRate > 0 && o.BasePrice > 0\r\n                            //     ? \"$\" +\r\n                            //       o.BasePrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            //     : \"\"\r\n                            // }\r\n                            header8={\r\n                              \"$\" +\r\n                              o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                            header3title={\"Quantity\"}\r\n                            header4title={\"Rental Rate\"}\r\n                            header5title={\"Rental Hours\"}\r\n                          ></MobileEstimateQuoteItem>\r\n                        );\r\n                      })}\r\n\r\n                      {Quote.AccessArea.Items.map((o, i) => (\r\n                        <div>\r\n                          <MobileEstimateQuoteItem\r\n                            key={i}\r\n                            showRelatedItems={showRelated}\r\n                            onClick={() => {\r\n                              setShowRelated(!showRelated);\r\n                            }}\r\n                            RefreshComponentState={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            deleteItemFromEstimate={(itemId) => {\r\n                              if (itemId) {\r\n                                setDeleteItemId(itemId);\r\n                              } else {\r\n                                setDeleteItemId(o.Id);\r\n                              }\r\n                              setDeleteItemConfirmDisplay(true);\r\n                            }}\r\n                            quoteItemObj={o}\r\n                            CategoryType={CategoryTypes.Access}\r\n                            header1=\"Delete\"\r\n                            header2={o.Name}\r\n                            subheader2={o.Notes}\r\n                            header3={\r\n                              Number(o?.Quant)\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                              \" \" +\r\n                              o.DisplayUnit\r\n                            }\r\n                            header5=\"\"\r\n                            header4=\"\"\r\n                            // header6={\r\n                            //   \"$\" +\r\n                            //   o.UnitPrice.toFixed(2).replace(\r\n                            //     /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                            //     \",\"\r\n                            //   ) +\r\n                            //   \"\" +\r\n                            //   o.DisplayUnit\r\n                            // }\r\n                            // header7={\r\n                            //   \"$\" +\r\n                            //   o.Price.toFixed(2).replace(\r\n                            //     /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                            //     \",\"\r\n                            //   )\r\n                            // }\r\n                            header8={\r\n                              \"$\" +\r\n                              o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                            header3title={\"Quantity\"}\r\n                          ></MobileEstimateQuoteItem>\r\n                        </div>\r\n                      ))}\r\n\r\n                      <LeagueSpartanRegular display={laborDetailToggleView}>\r\n                        Labour Breakdown (Staff Only)\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        mobiledisplay={laborDetailToggleView}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n\r\n                      {laborDetailToggleView === \"flex\"\r\n                        ? Quote.Labor.Items.map((o, i) => (\r\n                            <MobileEstimateQuoteItem\r\n                              key={i}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2={o.Notes}\r\n                              header6={\r\n                                o?.Quant.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                ) + \" hr\"\r\n                              }\r\n                              header7={\r\n                                \"$\" +\r\n                                o.UnitPrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header8={\r\n                                \"$\" +\r\n                                o.Price.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                            ></MobileEstimateQuoteItem>\r\n                          ))\r\n                        : null}\r\n\r\n                      <br></br>\r\n                    </AutoSizeOverflowY>\r\n                  </FlexColumnFullWidth>\r\n                </ContentContQuote>\r\n              </FlexRowContAutox100PercentMobileColumn>\r\n            </FlexColumn81vwLightGrey>\r\n\r\n            <FixedIconToTop\r\n              src=\"/BackToTopArrowAlt.svg\"\r\n              onClick={() => {\r\n                window.scrollTo(0, 0);\r\n              }}\r\n            ></FixedIconToTop>\r\n          </Cont>\r\n        );\r\n      }\r\n      /////////////////////////// MOBILE ->>>>>>>>>>>>>\r\n\r\n      /////////////////////////// DESKTOP ->>>>>>>>>>>>>\r\n\r\n      return (\r\n        <Cont>\r\n          <LeftCont width=\"16vw\" id=\"exclude-from-pdf\">\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <FlexColumn81vwLightGrey\r\n            width=\"85vw\"\r\n            minheight=\"auto\"\r\n            height=\"fit-content\"\r\n            id=\"estimate\"\r\n          >\r\n            {/* <div id='exclude-from-pdf' style={{height: \"100%\", position: \"relative\"}}> */}\r\n            <TopMentProposalView\r\n              id=\"exclude-from-pdf\"\r\n              quoteObj={Quote}\r\n              currentPage={\"estimatorView\"}\r\n              mobilePageProp={estimateName}\r\n              pageProp={projectName}\r\n              estimateName={estimateName}\r\n              homeownerName={homeownerName}\r\n              projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n              onBack={() => {\r\n                RouteToPrevious(userinfo.Role);\r\n              }}\r\n              saveAndSend={() => {\r\n                SaveAndSendEstimate();\r\n              }}\r\n              saveEstimate={() => {\r\n                SaveEstimateText();\r\n              }}\r\n              scrollinfo={() => {\r\n                scrollToOverview.scrollIntoView();\r\n              }}\r\n              scrollsupply={() => {\r\n                scrollToSupply.scrollIntoView();\r\n              }}\r\n              scrollinstall={() => {\r\n                scrollToInstall.scrollIntoView();\r\n              }}\r\n              scrolldesigns={() => {\r\n                scrollToDesigns.scrollIntoView();\r\n              }}\r\n              scrollcomments={() => {\r\n                scrollToComments.scrollIntoView();\r\n              }}\r\n              scrollconfirmation={() => {\r\n                scrollToConfirm.scrollIntoView();\r\n              }}\r\n            ></TopMentProposalView>\r\n            {/* </div> */}\r\n            {/* Approval --------------------------------------------------------------- */}\r\n            <FlexRowContFlexStartMobileColumn\r\n              height=\"auto\"\r\n              display={\r\n                Quote.QuoteStatus === QuoteStatus.RevisionRequested\r\n                  ? \"none\"\r\n                  : \"flex\"\r\n              }\r\n            >\r\n              <FlexRowCont alignitems=\"stretch\" height=\"auto\" width=\"100%\">\r\n                {/* <ContentCont77vw height='auto' width=\"75vw\" id='exclude-from-pdf'>\r\n                {isLoading === true ? (\r\n            <Backdrop style={{ zIndex: 1000 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n            </Backdrop>\r\n                ) :\r\n                <div>\r\n              <LeagueSpartanLarge>\r\n                        Estimate Name\r\n                        </LeagueSpartanLarge>\r\n                      \r\n                        <br/>\r\n                        <InputField defaultValue={Quote?.Tittle\r\n                        }\r\n                        onChange={(e) => { Quote.Tittle = e.target.value;}} \r\n                        >\r\n                        </InputField>\r\n                <FlexColumnFullWidthMargins>\r\n                  <br></br>\r\n                  <FlexRowContFlexStart height=\"auto\">\r\n          \r\n                    <LeagueSpartanLarge>Estimate Details</LeagueSpartanLarge>\r\n                  </FlexRowContFlexStart>\r\n                  \r\n                  <br></br>\r\n  <TextAreaAutoResize\r\n                  id=\"text\"\r\n                  defaultValue={Quote.Notes}\r\n                  onChange={(e) => { Quote.Notes = e.target.value;}}\r\n                ></TextAreaAutoResize>\r\n                </FlexColumnFullWidthMargins>\r\n                <br/>\r\n            \r\n                  </div>\r\n                }\r\n\r\n              </ContentCont77vw> */}\r\n                <ContentCont77vw\r\n                  display=\"none\"\r\n                  id=\"include-on-pdf\"\r\n                  width=\"75vw\"\r\n                  height=\"auto\"\r\n                  justifycontent=\"space-between\"\r\n                >\r\n                  <FlexColumnFullWidthMargins\r\n                    height=\"auto\"\r\n                    justifycontent=\"flex-start\"\r\n                  >\r\n                    <Icon200x200 src=\"/NRCLogoRegularBlack.png\"></Icon200x200>\r\n                    <div>\r\n                      <SmallHeader>New Rhodes Construction</SmallHeader>\r\n                      <SmallHeader>\r\n                        12306 McTavish Road Pitt Meadows BC V3Y1Z1\r\n                      </SmallHeader>\r\n                      <SmallHeader>+1 (778-657-5944)</SmallHeader>\r\n                      <SmallHeader>ar@newrhodesconstruction.com</SmallHeader>\r\n                      <SmallHeader>www.newrhodesconstruction.com</SmallHeader>\r\n                      <SmallHeader>\r\n                        GST/HST Registration No. 781153283RT0001\r\n                      </SmallHeader>\r\n                    </div>\r\n                  </FlexColumnFullWidthMargins>\r\n\r\n                  <FlexColumnFullWidthMargins\r\n                    height=\"auto\"\r\n                    justifycontent=\"flex-start\"\r\n                  >\r\n                    <div>\r\n                      <SmallHeader>\r\n                        <b> BILL TO: </b> {Case?.Name}\r\n                      </SmallHeader>\r\n                      <SmallHeader>{Case?.Email}</SmallHeader>\r\n                      <SmallHeader>\r\n                        {Case?.Street} {\", \"}\r\n                        {Case?.City}\r\n                      </SmallHeader>\r\n                      <SmallHeader>{Case?.Phone}</SmallHeader>\r\n                      <SmallHeader>\r\n                        Date: {formatDate(Quote?.EditTime)}\r\n                      </SmallHeader>\r\n                      <br></br>\r\n                      <TinyTextItalics color={ColorPalette.DarkGrey}>\r\n                        Project deposit is non-refundable. By paying the\r\n                        deposit, you have agreed that you have read and\r\n                        understood our{\" \"}\r\n                        <span>\r\n                          {\" \"}\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href=\"https://newrhodesconstruction.com/rl-terms-of-service/\"\r\n                            target=\"_blank\"\r\n                          >\r\n                            {\" \"}\r\n                            Terms of Service{\" \"}\r\n                          </a>{\" \"}\r\n                        </span>{\" \"}\r\n                      </TinyTextItalics>\r\n                    </div>\r\n                  </FlexColumnFullWidthMargins>\r\n                </ContentCont77vw>\r\n                <ContentCont77vw\r\n                  width=\"75vw\"\r\n                  height=\"auto\"\r\n                  justifycontent=\"space-around\"\r\n                >\r\n                  <FlexColumnFullWidthMargins height=\"100%\">\r\n                    <br></br>\r\n                    <FlexRowContFlexStart height=\"auto\">\r\n                      <LeagueSpartanLarge>{estimateName}</LeagueSpartanLarge>\r\n                      <RegularResponsiveButton\r\n                        id=\"exclude-from-pdf\"\r\n                        display={labourBreakdownDisplay}\r\n                        onClick={downloadPDF}\r\n                      >\r\n                        Download PDF\r\n                      </RegularResponsiveButton>\r\n                      <RegularResponsiveButton width=\"175px\">\r\n                        <CSVLink\r\n                          data={materialItems}\r\n                          filename={\"Material.csv\"}\r\n                          style={{ color: \"white\" }}\r\n                        >\r\n                          Download Material CSV\r\n                        </CSVLink>\r\n                      </RegularResponsiveButton>\r\n                      <br />\r\n                      <RegularResponsiveButton width=\"175px\">\r\n                        <CSVLink\r\n                          data={laborItems}\r\n                          filename={\"Labor.csv\"}\r\n                          style={{ color: \"white\" }}\r\n                        >\r\n                          Download Labor CSV\r\n                        </CSVLink>\r\n                      </RegularResponsiveButton>\r\n                      <br />\r\n                      <RegularResponsiveButton width=\"175px\">\r\n                        <CSVLink\r\n                          data={removalItems}\r\n                          filename={\"Removal.csv\"}\r\n                          style={{ color: \"white\" }}\r\n                        >\r\n                          Download Removal CSV\r\n                        </CSVLink>\r\n                      </RegularResponsiveButton>\r\n                    </FlexRowContFlexStart>\r\n                    <SummaryContainer\r\n                      height=\"100%\"\r\n                      justifycontent=\"space-around\"\r\n                    >\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        <LeagueSpartanHeaderSmall>\r\n                          Material Supply\r\n                        </LeagueSpartanHeaderSmall>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Materials:</MediumHeader>\r\n                        <MediumHeader>\r\n                          {\" \"}\r\n                          $\r\n                          {Quote?.Material?.Total?.Subtotal?.toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Delivery?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Delivery:</MediumHeader>\r\n                        <MediumHeader>\r\n                          {\" \"}\r\n                          $\r\n                          {Quote?.Delivery?.Total?.Subtotal?.toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n\r\n                      <br></br>\r\n\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        <LeagueSpartanHeaderSmall>\r\n                          Installation\r\n                        </LeagueSpartanHeaderSmall>\r\n                      </SummaryContainerItems>\r\n\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Number(projectInstallSubtotal).toFixed(2) >\r\n                          Stored_Values.MIN_LABOR\r\n                            ? \"flex\"\r\n                            : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Labour:</MediumHeader>\r\n                        <MediumHeader key={removalsHeader8Subtotal}>\r\n                          $\r\n                          {Number(\r\n                            projectInstallSubtotal + removalsHeader8Subtotal\r\n                          )\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Number(projectInstallSubtotal).toFixed(2) >\r\n                          Stored_Values.MIN_LABOR\r\n                            ? \"none\"\r\n                            : \"flex\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Minimum Labour Fee:</MediumHeader>\r\n                        <MediumHeader>\r\n                          ${Stored_Values?.MIN_LABOR?.toFixed(2)}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems>\r\n                        <MediumHeader>\r\n                          Machines, Disposals, Site Access\r\n                        </MediumHeader>\r\n\r\n                        <MediumHeader>\r\n                          ${\" \"}\r\n                          {(\r\n                            parseFloat(\r\n                              Quote?.Tool?.Total?.Subtotal?.toFixed(2).replace(\r\n                                /,/g,\r\n                                \"\"\r\n                              )\r\n                            ) +\r\n                            parseFloat(\r\n                              Quote?.AccessArea?.Total?.Subtotal?.toFixed(\r\n                                2\r\n                              ).replace(/,/g, \"\")\r\n                            )\r\n                          )\r\n                            .toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      {/* <SummaryContainerItems\r\n                    >\r\n                      <MediumHeader>Removals:</MediumHeader>\r\n                      <MediumHeader>\r\n                        ${\" \"}\r\n                        {((removalsHeader8Subtotal))\r\n                        .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n\r\n                      <StyledHRPropColour\r\n                        border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                      ></StyledHRPropColour>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanHeaderSmall>\r\n                          Project Subtotal:\r\n                        </LeagueSpartanHeaderSmall>\r\n                        <MediumHeader>${projectSubtotal}</MediumHeader>\r\n                      </SummaryContainerItems>\r\n\r\n                      <SummaryContainerItems>\r\n                        <MediumHeader>\r\n                          {storeTaxes[0]?.TaxCode} ({storeTaxes[0]?.Rate}%)\r\n                        </MediumHeader>\r\n                        <MediumHeader>\r\n                          $\r\n                          {estimateGST\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      {/* <SummaryContainerItems>\r\n                  <MediumHeader>\r\n                      {storeTaxes[1]?.TaxCode} ({storeTaxes[1]?.Rate}%)\r\n                    </MediumHeader>\r\n                    <MediumHeader>\r\n                      ${estimatePST.toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                    </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n                      <StyledHRGreenBreak></StyledHRGreenBreak>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanRegular>\r\n                          Project Total:\r\n                        </LeagueSpartanRegular>\r\n                        <LeagueSpartanRegular>\r\n                          {\" \"}\r\n                          $\r\n                          {projectGrandTotal\r\n                            .toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </LeagueSpartanRegular>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanRegular>\r\n                          Projected Project Length:\r\n                        </LeagueSpartanRegular>\r\n                        <LeagueSpartanRegular>\r\n                          {convertHoursToTimeString(\r\n                            Quote.Labor.Items.reduce(\r\n                              (total, o) => total + o?.Quant,\r\n                              0\r\n                            )\r\n                          )}\r\n                        </LeagueSpartanRegular>\r\n                      </SummaryContainerItems>\r\n                      <FlexColumnContCenterAlign id=\"exclude-from-pdf\"></FlexColumnContCenterAlign>\r\n                    </SummaryContainer>\r\n                  </FlexColumnFullWidthMargins>\r\n                </ContentCont77vw>\r\n              </FlexRowCont>\r\n            </FlexRowContFlexStartMobileColumn>\r\n\r\n            {/* Proposal Overview --------------------------------------------------------------- */}\r\n            <RevisionInstructionsWindow\r\n              open={revisionInstructionDisplay}\r\n              CloseWindow={() => {\r\n                setRevisionInstructionDisplay(false);\r\n              }}\r\n              StartRevising={() => {\r\n                ChangeUIToMakeRevisions();\r\n                setRevisionInstructionDisplay(false);\r\n              }}\r\n            ></RevisionInstructionsWindow>\r\n\r\n            <ImageViewWindow\r\n              open={imageGalleryDisplay}\r\n              imgurl={imagePreviewUrl}\r\n              onClose={() => {\r\n                setImageGalleryDisplay(false);\r\n                document.body.style.overflow = \"unset\";\r\n              }}\r\n            ></ImageViewWindow>\r\n            <DuplicateProposalWindow\r\n              quoteObj={Quote}\r\n              onClose={() => {\r\n                setCloneProposalWindowDisplay(false);\r\n              }}\r\n              open={cloneProposalWindowDisplay}\r\n            ></DuplicateProposalWindow>\r\n\r\n            <ContentCont77vw id=\"exclude-from-pdf\">\r\n              <FlexColumnFullWidth>\r\n                <FlexRowContFlexStart>\r\n                  <LeagueSpartanLarge>Construction Plans</LeagueSpartanLarge>\r\n                  <Icon30px30pxPointer\r\n                    src=\"/Green Button.svg\"\r\n                    onClick={() => {\r\n                      AddPhotoButtonClick();\r\n                    }}\r\n                  ></Icon30px30pxPointer>\r\n                  <input\r\n                    style={{ display: \"none\" }}\r\n                    ref={inputFile}\r\n                    type=\"file\"\r\n                    onChange={handleUpload}\r\n                  />\r\n                  <QuotePhotoUploadPreviewWindow\r\n                    quoteObj={Quote}\r\n                    open={previewImageWindowDisplay}\r\n                    previewsrc={previewImage}\r\n                    CancelUpload={() => {\r\n                      ResetImage(previewImage);\r\n                    }}\r\n                    CloseWindow={() => {\r\n                      setPreviewImageWindowDisplay(false);\r\n                    }}\r\n                    UploadSuccessful={() => {\r\n                      GetProposalInformation(params.quoteId);\r\n                    }}\r\n                  ></QuotePhotoUploadPreviewWindow>\r\n                </FlexRowContFlexStart>\r\n\r\n                <br></br>\r\n                <FlexRowCont60PercentSpaceEvenly\r\n                  alignitems=\"baseline\"\r\n                  width=\"100%\"\r\n                  flexwrap=\"wrap\"\r\n                >\r\n                  {Quote.Photos.map((o, i) => {\r\n                    return o.File?.includes(\".pdf\") ||\r\n                      o.File?.includes(\".PDF\") ? (\r\n                      <FlexContainerItem key={i}>\r\n                        <a\r\n                          id={i}\r\n                          rel=\"noreferrer\"\r\n                          href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                          target={\"_blank\"}\r\n                          style={{\r\n                            textDecoration: \"none\",\r\n                            color: \"black\",\r\n                          }}\r\n                        >\r\n                          <embed\r\n                            target={\"_blank\"}\r\n                            href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                            src={\r\n                              o.File !== \"\"\r\n                                ? window.$IMGURL +\r\n                                  o.File +\r\n                                  \"#toolbar=0&navpanes=0&scrollbar=0\"\r\n                                : \"\"\r\n                            }\r\n                            width={\"350px\"}\r\n                            style={{ backgroundColor: \"white\" }}\r\n                            height={\"200px\"}\r\n                          ></embed>\r\n                          <OverrideEmbedDiv>\r\n                            <OverrideEmbedImage></OverrideEmbedImage>\r\n                          </OverrideEmbedDiv>\r\n                          <FlexContFullWidthHeightJustifyCenter>\r\n                            <LargeText>{o.Caption}</LargeText>\r\n                          </FlexContFullWidthHeightJustifyCenter>\r\n                        </a>\r\n                      </FlexContainerItem>\r\n                    ) : (\r\n                      <FlexContainerItem key={i}>\r\n                        <Image375px\r\n                          onClick={() => {\r\n                            DisplayImageInGallery(o.File);\r\n                          }}\r\n                          src={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                        ></Image375px>\r\n                        <FlexContFullWidthHeightJustifyCenter>\r\n                          <LargeText>{o.Caption}</LargeText>\r\n                        </FlexContFullWidthHeightJustifyCenter>\r\n                      </FlexContainerItem>\r\n                    );\r\n                  })}\r\n                </FlexRowCont60PercentSpaceEvenly>\r\n              </FlexColumnFullWidth>\r\n            </ContentCont77vw>\r\n\r\n            <FlexRowContAutox100PercentMobileColumn\r\n              alignitems=\"baseline\"\r\n              margin=\"0\"\r\n            >\r\n              <ContentContQuote id=\"install\">\r\n                <FlexColumnFullWidth\r\n                  display={installEstimateDisplay}\r\n                  height=\"auto\"\r\n                  ref={ref2}\r\n                >\r\n                  <AutoSizeOverflowY>\r\n                    <FlexDivMargins>\r\n                      <LeagueSpartanRegular marginright=\"10px\">\r\n                        Project Estimate\r\n                      </LeagueSpartanRegular>\r\n                    </FlexDivMargins>\r\n\r\n                    <TagWindow\r\n                      tagObj={tagObj}\r\n                      quoteid={Quote.Id}\r\n                      open={tagWindowDisplay}\r\n                      RefreshTaglist={() => {\r\n                        GetProposalInformation(params.quoteId);\r\n                      }}\r\n                      onClose={() => {\r\n                        setTagWindowDisplay(false);\r\n                      }}\r\n                    ></TagWindow>\r\n\r\n                    {Quote.Tags.map((t, j) => {\r\n                      let MaterialSum = 0;\r\n                      let InstallSum = 0;\r\n                      let TotalSum = 0;\r\n                      let sumHourlyRate = 0;\r\n                      let countItems = 0;\r\n                      let installSubSumByTag = {};\r\n                      let timeSumByTag = {};\r\n                      let removalTimeSubtotal = 0;\r\n\r\n                      // Filter removal items for the current tag\r\n                      const RemovalItemsWithTag = Quote.Removal.Items.filter(\r\n                        (removalItem) => removalItem.Tag_Id === t.Id\r\n                      ).map((item) => {\r\n                        const originalRemovalIndex =\r\n                          Quote.Removal.Items.findIndex(\r\n                            (removal) => removal.Id === item.Id\r\n                          );\r\n                        const removalTime =\r\n                          totalRemovalsByItem[\r\n                            `${item.Name}_${originalRemovalIndex}`\r\n                          ] || 0;\r\n                        return {\r\n                          ...item,\r\n                          removalTime: decimalHoursToTimeString(removalTime), // Add the time property\r\n                        };\r\n                      });\r\n                      // Calculate the total removal cost, quantity, and time for the current tag\r\n                      const totalRemovalCost = RemovalItemsWithTag.reduce(\r\n                        (sum, item) => sum + item.Price + item.LaborSubtotal,\r\n                        0\r\n                      );\r\n                      const totalRemovalTime = RemovalItemsWithTag.reduce(\r\n                        (sum, item) => {\r\n                          const originalRemovalIndex =\r\n                            Quote.Removal.Items.findIndex(\r\n                              (removal) => removal.Id === item.Id\r\n                            );\r\n                          return (\r\n                            sum +\r\n                            (totalRemovalsByItem[\r\n                              `${item.Name}_${originalRemovalIndex}`\r\n                            ] || 0)\r\n                          );\r\n                        },\r\n                        0\r\n                      );\r\n\r\n                      const primaryItems = Quote.Material.Items.filter(\r\n                        (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                      );\r\n\r\n                      const matchedDeliveries = [];\r\n\r\n                      primaryItems.forEach((primaryItem) => {\r\n                        // Check for deliveries related to the primary item itself\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (primaryItem.Id === tool.Item_Id) {\r\n                            matchedDeliveries.push({\r\n                              ...tool,\r\n                              Tag_Id: primaryItem.Tag_Id,\r\n                            });\r\n                          }\r\n                        });\r\n\r\n                        // Check for deliveries related to the primary item's related items\r\n                        if (\r\n                          primaryItem.RelatedItems &&\r\n                          primaryItem.RelatedItems.length > 0\r\n                        ) {\r\n                          primaryItem.RelatedItems.forEach((relatedItem) => {\r\n                            Quote.Delivery.Tools.forEach((tool) => {\r\n                              if (relatedItem.Id === tool.Item_Id) {\r\n                                matchedDeliveries.push({\r\n                                  ...tool,\r\n                                  Tag_Id: primaryItem.Tag_Id, // Assuming the tag ID is the same as the primary item's\r\n                                });\r\n                              }\r\n                            });\r\n                          });\r\n                        }\r\n                      });\r\n\r\n                      let totalAggregatedDeliveryCostWithTagId = 0;\r\n\r\n                      primaryItems.forEach((primaryItem) => {\r\n                        // Check deliveries for the primary item\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (primaryItem.Id === tool.Item_Id) {\r\n                            totalAggregatedDeliveryCostWithTagId += tool.Price;\r\n                          }\r\n                        });\r\n\r\n                        // Check deliveries for the related items of the primary item\r\n                        if (primaryItem.RelatedItems) {\r\n                          primaryItem.RelatedItems.forEach((relatedItem) => {\r\n                            Quote.Delivery.Tools.forEach((tool) => {\r\n                              if (relatedItem.Id === tool.Item_Id) {\r\n                                totalAggregatedDeliveryCostWithTagId +=\r\n                                  tool.Price;\r\n                              }\r\n                            });\r\n                          });\r\n                        }\r\n                      });\r\n\r\n                      primaryItems.forEach((o) => {\r\n                        const materialSub = o.SubtotalWithRelatedItems;\r\n                        const installSub = o.LaborSubtotalWithRelatedItems;\r\n                        const originalIndex = Quote.Material.Items.findIndex(\r\n                          (item) => item.Id === o.Id\r\n                        );\r\n                        const laborName = laborNamesByProduct[\r\n                          `${o.Name}_${originalIndex}`\r\n                        ]\r\n                          ? Array.from(\r\n                              laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n                            )\r\n                              .join(\", \")\r\n                              .split(\", \")[0]\r\n                          : \"\";\r\n                        const laborItem = Quote.Labor.Items.find(\r\n                          (item) => item.Name === laborName\r\n                        );\r\n                        const hourlyRate = laborItem\r\n                          ? laborItem.UnitPrice\r\n                          : 154;\r\n\r\n                        sumHourlyRate += hourlyRate;\r\n                        countItems++;\r\n\r\n                        MaterialSum += materialSub;\r\n                        InstallSum += installSub;\r\n                        TotalSum += materialSub + installSub;\r\n                      });\r\n\r\n                      Quote.Removal.Items.filter(\r\n                        (removalItem) => removalItem.Tag_Id === t.Id\r\n                      ).forEach((o) => {\r\n                        const removalTotal = o.Price + o.LaborSubtotal;\r\n                        MaterialSum += removalTotal; // Assuming removals are treated as material costs\r\n                        TotalSum += removalTotal;\r\n                      });\r\n\r\n                      MaterialSum += totalAggregatedDeliveryCostWithTagId;\r\n                      TotalSum += totalAggregatedDeliveryCostWithTagId;\r\n\r\n                      const averageHourlyRate =\r\n                        countItems > 0 ? sumHourlyRate / countItems : 0;\r\n\r\n                      return (\r\n                        <div key={j}>\r\n                          <div>\r\n                            <DeleteConfirmWindow\r\n                              closeDel={() => {\r\n                                setDeleteTagConfirmDisplay(false);\r\n                              }}\r\n                              onDeleteFunction={() => {\r\n                                DeleteTagOnQuote(deleteTagId, params.quoteId);\r\n                              }}\r\n                              deleteOpen={deleteTagConfirmDisplay}\r\n                            ></DeleteConfirmWindow>\r\n                            <QuoteItemEstimator\r\n                              isHeader={true}\r\n                              header2={t.TagName}\r\n                              ShowItemSelection={() => {\r\n                                setSelectedTagId(t.Id);\r\n                                setShowQuoteLineItem(true);\r\n                                handleClick(t.Id);\r\n                              }}\r\n                              EditTag={() => {\r\n                                setTagObj(t);\r\n                                setTagWindowDisplay(true);\r\n                              }}\r\n                              DeleteTag={() => {\r\n                                setDeleteTagId(t.Id);\r\n                                setDeleteTagConfirmDisplay(true);\r\n                              }}\r\n                              bgColor={ColorPalette.White}\r\n                            ></QuoteItemEstimator>\r\n\r\n                            <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n\r\n                            {selectedTagId === t.Id && showQuoteLineItem ? (\r\n                              <QuoteLineItem\r\n                                data-scroll-id={t.Id}\r\n                                onClose={() => {\r\n                                  setShowQuoteLineItem(false);\r\n                                  setSelectedTagId(0);\r\n                                  setAddOnSelectedItem(null);\r\n                                }}\r\n                                RefreshItemList={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                Tag_Id={t.Id}\r\n                                addOnSelectedItem={addOnSelectedItem}\r\n                              ></QuoteLineItem>\r\n                            ) : null}\r\n\r\n                            {primaryItems.map((o, i) => {\r\n                              const materialSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.Price\r\n                                  : o.SubtotalWithRelatedItems;\r\n                              const installSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.LaborSubtotal\r\n                                  : o.LaborSubtotalWithRelatedItems;\r\n\r\n                              const originalIndex =\r\n                                Quote.Material.Items.findIndex(\r\n                                  (item) => item.Id === o.Id\r\n                                );\r\n\r\n                              // Get the total labor hours for this item's name\r\n                              const totalHours =\r\n                                totalHoursByProduct[\r\n                                  `${o.Name}_${originalIndex}`\r\n                                ] || 0;\r\n\r\n                              timeSumByTag[o.Tag_Id] +=\r\n                                totalHoursByProduct[\r\n                                  `${o.Name}_${originalIndex}`\r\n                                ];\r\n                              const laborNames = laborNamesByProduct[\r\n                                `${o.Name}_${originalIndex}`\r\n                              ]\r\n                                ? Array.from(\r\n                                    laborNamesByProduct[\r\n                                      `${o.Name}_${originalIndex}`\r\n                                    ]\r\n                                  ).join(\", \")\r\n                                : \"\";\r\n                              // Extract the labor name(s) from the laborNames variable\r\n                              const laborName = laborNames\r\n                                ? laborNames.split(\", \")[0]\r\n                                : \"\"; // Adjust as needed if multiple names\r\n\r\n                              // Find the corresponding labor item in Quote.Labor.Items\r\n                              const laborItem = Quote.Labor.Items.find(\r\n                                (item) => item.Name === laborName\r\n                              );\r\n\r\n                              // Get the price from the labor item, or default to 175 if not found\r\n                              const hourlyRate = laborItem\r\n                                ? laborItem.UnitPrice\r\n                                : 154;\r\n                              sumHourlyRate += hourlyRate;\r\n                              countItems++;\r\n\r\n                              return (\r\n                                <QuoteItemEstimator\r\n                                  isAccountant={true}\r\n                                  noChange={o.NoChange}\r\n                                  key={i}\r\n                                  showRelatedItems={displayStatus[o.Id]}\r\n                                  onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                                  RefreshComponentState={() => {\r\n                                    GetProposalInformation(params.quoteId);\r\n                                  }}\r\n                                  inputheaderposition={headerInputShown}\r\n                                  OutputValue={(value) => {\r\n                                    UpdateQuoteItemQuantity(o.Id, value);\r\n                                  }}\r\n                                  showAddOnsSelection={() => {\r\n                                    setShowQuoteLineItem(true);\r\n                                    setSelectedTagId(t.Id);\r\n                                    setAddOnSelectedItem(o);\r\n                                  }}\r\n                                  deleteItemFromEstimate={(itemId) => {\r\n                                    if (itemId) {\r\n                                      setDeleteItemId(itemId);\r\n                                    } else {\r\n                                      setDeleteItemId(o.Id);\r\n                                    }\r\n                                    setDeleteItemConfirmDisplay(true);\r\n                                  }}\r\n                                  quoteItemObj={o}\r\n                                  parentid={o.Parent_Id}\r\n                                  header1=\"Delete\"\r\n                                  header2={o.Name}\r\n                                  subheader2notes={\r\n                                    o.Notes == null ? \"\" : o.Notes + \"\"\r\n                                  }\r\n                                  subheader2={\r\n                                    o.Description === null ? \"\" : o.Description\r\n                                  }\r\n                                  header3={\r\n                                    Number(o?.Quant)\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n                                    \" \" +\r\n                                    o.DisplayUnit\r\n                                  }\r\n                                  header4={\r\n                                    \"$\" +\r\n                                    (o?.Quant !== 0\r\n                                      ? (materialSub / o?.Quant).toFixed(4)\r\n                                      : materialSub\r\n                                          .toFixed(2)\r\n                                          .replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          ))\r\n                                  }\r\n                                  header5={\r\n                                    \"$\" +\r\n                                    materialSub\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header6={\r\n                                    \"$\" +\r\n                                    (o?.Quant !== 0\r\n                                      ? (installSub / o?.Quant).toFixed(4)\r\n                                      : installSub\r\n                                          .toFixed(2)\r\n                                          .replace(\r\n                                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                            \",\"\r\n                                          ))\r\n                                  }\r\n                                  header7={\r\n                                    \"$\" +\r\n                                    installSub\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header8={laborNames ? ` ${laborNames}` : \"\"}\r\n                                  header9={decimalHoursToTimeString(\r\n                                    installSub / hourlyRate\r\n                                  )}\r\n                                  hourlyRate={hourlyRate}\r\n                                  // header9={decimalHoursToTimeString(totalHours)}\r\n                                  header10={\r\n                                    \"$\" +\r\n                                    (\r\n                                      parseFloat(materialSub.toFixed(2)) +\r\n                                      parseFloat(installSub.toFixed(2))\r\n                                    )\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  weightedRate={\r\n                                    o?.Quant !== 0\r\n                                      ? (\r\n                                          materialSub / o?.Quant +\r\n                                          installSub / o?.Quant\r\n                                        )\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                      : \"N/A\"\r\n                                  }\r\n                                ></QuoteItemEstimator>\r\n                              );\r\n                            })}\r\n\r\n                            {RemovalItemsWithTag.length > 0 ? (\r\n                              <div key={`removal-tag`}>\r\n                                <QuoteItemEstimator\r\n                                  CategoryType={CategoryTypes.Removal}\r\n                                  header1=\"Delete\"\r\n                                  header2=\"Removal\"\r\n                                  header3={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : `${\r\n                                          parseFloat(\r\n                                            RemovalItemsWithTag.reduce(\r\n                                              (accumulator, item) =>\r\n                                                accumulator + item.Quant,\r\n                                              0\r\n                                            )\r\n                                          ).toFixed(2) || \"0.00\"\r\n                                        } ${RemovalItemsWithTag[0].DisplayUnit}`\r\n                                  }\r\n                                  RemovalItems={RemovalItemsWithTag}\r\n                                  showRelatedItems={removalDisplayStatus[t.Id]}\r\n                                  RefreshComponentState={() => {\r\n                                    GetProposalInformation(params.quoteId);\r\n                                  }}\r\n                                  deleteItemFromEstimate={(itemId) => {\r\n                                    if (itemId) {\r\n                                      setDeleteItemId(itemId);\r\n                                    } else {\r\n                                      console.log(\"no item passed\");\r\n                                    }\r\n                                    setDeleteItemConfirmDisplay(true);\r\n                                  }}\r\n                                  onToggleDisplay={() =>\r\n                                    toggleRemovalDisplay(t.Id)\r\n                                  }\r\n                                  header7={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : \"$\" +\r\n                                        totalRemovalCost\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header9={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : decimalHoursToTimeString(\r\n                                          totalRemovalTime\r\n                                        )\r\n                                  }\r\n                                  header10={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : \"$\" +\r\n                                        totalRemovalCost\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                ></QuoteItemEstimator>\r\n                              </div>\r\n                            ) : null}\r\n\r\n                            {totalAggregatedDeliveryCostWithTagId > 0 ? (\r\n                              <QuoteItemEstimator\r\n                                key={`tagged-aggregated-delivery`}\r\n                                quoteItemObj={{\r\n                                  Price: totalAggregatedDeliveryCostWithTagId,\r\n                                }}\r\n                                showRelatedItems={displayStatus[t.Id]}\r\n                                RefreshComponentState={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                deleteItemFromEstimate={async (item_id) => {\r\n                                  setIsLoading(true);\r\n                                  await DeleteQuoteTool(item_id);\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }}\r\n                                CategoryType={\"Delivery\"}\r\n                                onToggleDisplay={() => toggleDisplay(t.Id)}\r\n                                DeliveryItems={matchedDeliveries}\r\n                                header1=\"Delete\"\r\n                                header2=\"Deliveries\"\r\n                                // header3=\"\"\r\n                                header3={\r\n                                  matchedDeliveries.reduce(\r\n                                    (accumulator, tool) =>\r\n                                      accumulator + tool.Quant,\r\n                                    0\r\n                                  ) || 0\r\n                                }\r\n                                header10={\r\n                                  displayStatus[t.Id] === true\r\n                                    ? \"\"\r\n                                    : \"$\" +\r\n                                      totalAggregatedDeliveryCostWithTagId\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                }\r\n                              ></QuoteItemEstimator>\r\n                            ) : null}\r\n\r\n                            {primaryItems.length > 0 ||\r\n                            RemovalItemsWithTag.length > 0 ? (\r\n                              <QuoteItemEstimator\r\n                                isHeader={true}\r\n                                header2=\"Subtotal\"\r\n                                header5={\r\n                                  \"$\" +\r\n                                  MaterialSum.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                }\r\n                                header7={\r\n                                  \"$\" +\r\n                                  InstallSum.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                }\r\n                                header9={\r\n                                  InstallSum === 0 || averageHourlyRate === 0\r\n                                    ? decimalHoursToTimeString(totalRemovalTime)\r\n                                    : decimalHoursToTimeString(\r\n                                        InstallSum / averageHourlyRate +\r\n                                          totalRemovalTime\r\n                                      )\r\n                                }\r\n                                header10={\r\n                                  \"$\" +\r\n                                  TotalSum.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                }\r\n                                bgColor={ColorPalette.White}\r\n                              ></QuoteItemEstimator>\r\n                            ) : null}\r\n                          </div>\r\n                        </div>\r\n                      );\r\n                      Object.keys(timeSumByTag).forEach((tagId) => {\r\n                        timeSumByTag[tagId] = decimalHoursToTimeString(\r\n                          timeSumByTag[tagId]\r\n                        );\r\n                      });\r\n                    })}\r\n\r\n                    {generalMaterialsHeader === \"flex\" ? <br></br> : null}\r\n\r\n                    {generalMaterialsHeader === \"flex\" ? (\r\n                      <QuoteItemEstimator\r\n                        isHeader={true}\r\n                        header2=\"General Materials\"\r\n                        ShowItemSelection={() => {\r\n                          setShowQuoteLineItem(true);\r\n                          setSelectedTagId(0);\r\n                        }}\r\n                        // header3=\"Quantity\"\r\n                        // header4=\"Material Rate\"\r\n                        // header5=\"Material Subtotal\"\r\n                        // header6=\"Install Rate\"\r\n                        // header7=\"Install Subtotal\"\r\n                        // header8=\"Line Subtotal\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItemEstimator>\r\n                    ) : null}\r\n\r\n                    <StyledHRGreenBreakThick\r\n                      display={generalMaterialsHeader}\r\n                    ></StyledHRGreenBreakThick>\r\n                    {selectedTagId === 0 && showQuoteLineItem ? (\r\n                      <QuoteLineItem\r\n                        onClose={() => {\r\n                          setShowQuoteLineItem(false);\r\n                          setSelectedTagId(0);\r\n                          setAddOnSelectedItem(null);\r\n                        }}\r\n                        RefreshItemList={() => {\r\n                          GetProposalInformation(params.quoteId);\r\n                        }}\r\n                        Tag_Id={0}\r\n                        addOnSelectedItem={addOnSelectedItem}\r\n                      ></QuoteLineItem>\r\n                    ) : null}\r\n                    {Quote?.Material?.Items.map((o, i) => {\r\n                      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n                        const materialSub =\r\n                          displayStatus[o.Id] === true\r\n                            ? o.Price\r\n                            : o.SubtotalWithRelatedItems;\r\n                        const installSub =\r\n                          displayStatus[o.Id] === true\r\n                            ? o.LaborSubtotal\r\n                            : o.LaborSubtotalWithRelatedItems;\r\n\r\n                        const matchedDeliveries = [];\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (o.Id === tool.Item_Id) {\r\n                            matchedDeliveries.push({\r\n                              ...tool,\r\n                              Tag_Id: o.Tag_Id,\r\n                            });\r\n                          }\r\n                        });\r\n\r\n                        let totalDeliveryCost = 0;\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (o.Id === tool.Item_Id) {\r\n                            totalDeliveryCost += tool.Price;\r\n                          }\r\n                        });\r\n\r\n                        // Get the index of the item in the original array\r\n                        const originalIndex = Quote.Material.Items.findIndex(\r\n                          (item) => item.Id === o.Id\r\n                        );\r\n\r\n                        // Get the total labor hours for this item's name\r\n                        const totalHours =\r\n                          totalHoursByProduct[`${o.Name}_${originalIndex}`] ||\r\n                          0;\r\n\r\n                        const laborNames = laborNamesByProduct[\r\n                          `${o.Name}_${originalIndex}`\r\n                        ]\r\n                          ? Array.from(\r\n                              laborNamesByProduct[`${o.Name}_${originalIndex}`]\r\n                            ).join(\", \")\r\n                          : \"\";\r\n\r\n                        const laborName = laborNames\r\n                          ? laborNames.split(\", \")[0]\r\n                          : \"\"; // Adjust as needed if multiple names\r\n\r\n                        // Find the corresponding labor item in Quote.Labor.Items\r\n                        const laborItem = Quote.Labor.Items.find(\r\n                          (item) => item.Name === laborName\r\n                        );\r\n\r\n                        // Get the price from the labor item, or default to 175 if not found\r\n                        const hourlyRate = laborItem\r\n                          ? laborItem.UnitPrice\r\n                          : 154;\r\n\r\n                        return (\r\n                          <QuoteItemEstimator\r\n                            isAccountant={true}\r\n                            showRelatedItems={displayStatus[o.Id]}\r\n                            onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                            RefreshComponentState={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            key={i}\r\n                            quoteItemObj={o}\r\n                            inputheaderposition={headerInputShown}\r\n                            OutputValue={(value) => {\r\n                              UpdateQuoteItemQuantity(o.Id, value);\r\n                            }}\r\n                            showAddOnsSelection={() => {\r\n                              setShowQuoteLineItem(true);\r\n                              setSelectedTagId(0);\r\n                              setAddOnSelectedItem(o);\r\n                            }}\r\n                            deleteItemFromEstimate={(itemId) => {\r\n                              if (itemId) {\r\n                                setDeleteItemId(itemId);\r\n                              } else {\r\n                                setDeleteItemId(o.Id);\r\n                              }\r\n                              setDeleteItemConfirmDisplay(true);\r\n                            }}\r\n                            noChange={o.NoChange}\r\n                            parentid={o.Parent_Id}\r\n                            header1=\"Delete\"\r\n                            header2={o.Name}\r\n                            subheader2={\r\n                              o.Description === null ? \"\" : o.Description\r\n                            }\r\n                            subheader2notes={\r\n                              o.Notes == null ? \"\" : o.Notes + \"\"\r\n                            }\r\n                            header3={\r\n                              o?.Quant?.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              ) +\r\n                              \" \" +\r\n                              o.DisplayUnit\r\n                            }\r\n                            header4={\r\n                              \"$\" +\r\n                              (o?.Quant !== 0\r\n                                ? (materialSub / o?.Quant).toFixed(4)\r\n                                : materialSub\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"))\r\n                            }\r\n                            header5={\r\n                              \"$\" +\r\n                              materialSub\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                            header6={\r\n                              \"$\" +\r\n                              (o?.Quant !== 0\r\n                                ? (installSub / o?.Quant).toFixed(4)\r\n                                : installSub\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\"))\r\n                            }\r\n                            header7={\r\n                              \"$\" +\r\n                              installSub\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                            header8={laborNames ? ` ${laborNames}` : \"\"}\r\n                            header9={decimalHoursToTimeString(\r\n                              installSub / hourlyRate\r\n                            )}\r\n                            hourlyRate={hourlyRate}\r\n                            weightedRate={\r\n                              o?.Quant !== 0\r\n                                ? (\r\n                                    materialSub / o?.Quant +\r\n                                    installSub / o?.Quant\r\n                                  )\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                : \"N/A\"\r\n                            }\r\n                            header10={\r\n                              \"$\" +\r\n                              (\r\n                                parseFloat(materialSub.toFixed(2)) +\r\n                                parseFloat(installSub.toFixed(2))\r\n                              )\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                          ></QuoteItemEstimator>\r\n                        );\r\n                      }\r\n                      return null;\r\n                    }).concat(\r\n                      <div key={`removal-no-tag`}>\r\n                        <QuoteItemEstimator\r\n                          CategoryType={CategoryTypes.Removal}\r\n                          deleteItemFromEstimate={(itemId) => {\r\n                            if (itemId) {\r\n                              setDeleteItemId(itemId);\r\n                            } else {\r\n                              setDeleteItemId(o.Id);\r\n                            }\r\n                            setDeleteItemConfirmDisplay(true);\r\n                          }}\r\n                          RefreshComponentState={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          header1=\"Delete\"\r\n                          header2=\"Removal\"\r\n                          header3={\r\n                            removalDisplayStatus === true\r\n                              ? \"\"\r\n                              : `${\r\n                                  parseFloat(\r\n                                    RemovalItemsNoTag.reduce(\r\n                                      (accumulator, item) =>\r\n                                        accumulator + item.Quant,\r\n                                      0\r\n                                    )\r\n                                  ).toFixed(2) || \"0.00\"\r\n                                } ${\r\n                                  RemovalItemsNoTag.length > 0\r\n                                    ? RemovalItemsNoTag[0].DisplayUnit\r\n                                    : \"\"\r\n                                }`\r\n                          }\r\n                          RemovalItems={RemovalItemsNoTag}\r\n                          showRelatedItems={removalDisplayStatus}\r\n                          onToggleDisplay={() => {\r\n                            setRemovalDisplayStatus(!removalDisplayStatus);\r\n                          }}\r\n                          // header3={totalRemovalQuantity.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          // header6={removalDisplayStatus === false ?  \"$\" + (totalRemovalCost / totalRemovalQuantity).toFixed(4): ''}\r\n                          header7={\r\n                            removalDisplayStatus === false\r\n                              ? \"$\" +\r\n                                totalRemovalCost\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              : \"\"\r\n                          }\r\n                          header9={\r\n                            removalDisplayStatus === false\r\n                              ? decimalHoursToTimeString(totalRemovalTime)\r\n                              : \"\"\r\n                          }\r\n                          header10={\r\n                            removalDisplayStatus === false\r\n                              ? \"$\" +\r\n                                totalRemovalCost\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              : \"\"\r\n                          }\r\n                        ></QuoteItemEstimator>\r\n                      </div>,\r\n                      totalAggregatedDeliveryCost > 0 ? (\r\n                        <QuoteItemEstimator\r\n                          key={`total-aggregated-delivery`}\r\n                          quoteItemObj={{ Price: totalAggregatedDeliveryCost }}\r\n                          DeliveryItems={DeliveryItemsNoTag}\r\n                          CategoryType={\"Delivery\"}\r\n                          RefreshComponentState={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          deleteItemFromEstimate={async (item_id) => {\r\n                            setIsLoading(true);\r\n                            await DeleteQuoteTool(item_id);\r\n                            GetProposalInformation(params.quoteId);\r\n                            setIsLoading(false);\r\n                          }}\r\n                          showRelatedItems={deliveryDisplayStatus}\r\n                          onToggleDisplay={() => {\r\n                            setDeliveryDisplayStatus(!deliveryDisplayStatus);\r\n                          }}\r\n                          header1=\"Delete\"\r\n                          header2=\"Deliveries\"\r\n                          header3={\r\n                            DeliveryItemsNoTag.reduce(\r\n                              (accumulator, tool) => accumulator + tool.Quant,\r\n                              0\r\n                            ) || 0\r\n                          }\r\n                          header4=\"\"\r\n                          header10={\r\n                            deliveryDisplayStatus === false\r\n                              ? \"$\" +\r\n                                totalAggregatedDeliveryCost\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              : \"\"\r\n                          }\r\n                        ></QuoteItemEstimator>\r\n                      ) : null,\r\n\r\n                      generalMaterialsHeader === \"flex\" ? (\r\n                        <QuoteItemEstimator\r\n                          isHeader={true}\r\n                          key={\"untagged_subtotals\"}\r\n                          header2={\"Subtotal\"}\r\n                          bgColor={\"White\"}\r\n                          header5={`$${finalUntaggedMaterialSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          header7={`$${finalUntaggedInstallSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          header9={totalTimeString}\r\n                          header10={`$${finalUntaggedTotalSubtotal\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                        />\r\n                      ) : null\r\n                    )}\r\n\r\n                    {removalHeader === \"flex\" ? (\r\n                      <div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n                    ) : null}\r\n\r\n                    {toolsmachinesHeader === \"flex\" ? (\r\n                      <div>\r\n                        <QuoteItemEstimator\r\n                          isHeader={true}\r\n                          ShowItemSelection={() => {\r\n                            setSelectedTagId(0);\r\n                            setShowToolLineItem(true);\r\n                          }}\r\n                          header2=\"Machines, Disposals, & Access\"\r\n                          // header3=\"Quantity\"\r\n                          header4=\"\"\r\n                          header5=\"\"\r\n                          // header6=\"Rental Rate\"\r\n                          header7=\"Move Cost Per Machine\"\r\n                          header8=\"Line Subtotal\"\r\n                          bgColor={ColorPalette.White}\r\n                        ></QuoteItemEstimator>\r\n                        <FlexRowCont100PercentSpaceBetween>\r\n                          <FlexColumnDiv>\r\n                            <TinyTextItalics>Length</TinyTextItalics>\r\n                            <InputField\r\n                              defaultValue={Quote?.AccessArea?.Length}\r\n                              onChange={(e) => {\r\n                                setProposal((prevQuote) => ({\r\n                                  ...prevQuote,\r\n                                  AccessArea: {\r\n                                    ...prevQuote.AccessArea,\r\n                                    Length: e.target.value,\r\n                                  },\r\n                                }));\r\n                              }}\r\n                            />\r\n                          </FlexColumnDiv>\r\n                          <FlexColumnDiv>\r\n                            <TinyTextItalics>Width</TinyTextItalics>\r\n                            <InputField\r\n                              defaultValue={Quote?.AccessArea?.Width}\r\n                              onChange={(e) => {\r\n                                setProposal((prevQuote) => ({\r\n                                  ...prevQuote,\r\n                                  AccessArea: {\r\n                                    ...prevQuote.AccessArea,\r\n                                    Width: e.target.value,\r\n                                  },\r\n                                }));\r\n                              }}\r\n                            />\r\n                          </FlexColumnDiv>\r\n                          <FlexColumnDiv>\r\n                            <TinyTextItalics>Elevation</TinyTextItalics>\r\n                            <InputField\r\n                              defaultValue={Quote?.AccessArea?.Elevation}\r\n                              onChange={(e) => {\r\n                                setProposal((prevQuote) => ({\r\n                                  ...prevQuote,\r\n                                  AccessArea: {\r\n                                    ...prevQuote.AccessArea,\r\n                                    Elevation: e.target.value,\r\n                                  },\r\n                                }));\r\n                              }}\r\n                            />\r\n                          </FlexColumnDiv>\r\n                          <FlexColumnDiv>\r\n                            <TinyTextItalics>Obstruction</TinyTextItalics>\r\n                            <div>\r\n                              <label>\r\n                                <input\r\n                                  type=\"radio\"\r\n                                  name=\"obstruct\"\r\n                                  value=\"true\"\r\n                                  checked={Quote?.AccessArea?.Obstruct === true}\r\n                                  onChange={() => {\r\n                                    setProposal((prevQuote) => ({\r\n                                      ...prevQuote,\r\n                                      AccessArea: {\r\n                                        ...prevQuote.AccessArea,\r\n                                        Obstruct: true,\r\n                                      },\r\n                                    }));\r\n                                  }}\r\n                                />\r\n                                True\r\n                              </label>\r\n                              <label>\r\n                                <input\r\n                                  type=\"radio\"\r\n                                  name=\"obstruct\"\r\n                                  value=\"false\"\r\n                                  checked={\r\n                                    Quote?.AccessArea?.Obstruct === false\r\n                                  }\r\n                                  onChange={() => {\r\n                                    setProposal((prevQuote) => ({\r\n                                      ...prevQuote,\r\n                                      AccessArea: {\r\n                                        ...prevQuote.AccessArea,\r\n                                        Obstruct: false,\r\n                                      },\r\n                                    }));\r\n                                  }}\r\n                                />\r\n                                False\r\n                              </label>\r\n                            </div>\r\n                          </FlexColumnDiv>\r\n                        </FlexRowCont100PercentSpaceBetween>\r\n                      </div>\r\n                    ) : null}\r\n                    <StyledHRGreenBreakThick\r\n                      display={toolsmachinesHeader}\r\n                    ></StyledHRGreenBreakThick>\r\n\r\n                    {selectedTagId === 0 && showToolLineItem ? (\r\n                      <QuoteLineItem\r\n                        onClose={() => {\r\n                          setShowToolLineItem(false);\r\n                          setSelectedTagId(0);\r\n                          setAddOnSelectedItem(null);\r\n                        }}\r\n                        RefreshItemList={() => {\r\n                          GetProposalInformation(params.quoteId);\r\n                        }}\r\n                        Tag_Id={0}\r\n                        addOnSelectedItem={addOnSelectedItem}\r\n                      ></QuoteLineItem>\r\n                    ) : null}\r\n\r\n                    {Quote.Tool.Tools.sort((a, b) =>\r\n                      a.ToolName.localeCompare(b.ToolName)\r\n                    ).map((o, i) => {\r\n                      if (!o?.ToolName.includes(\"Wheelbarrow\")) {\r\n                        if (o.RentalRate > 0 && o.BasePrice > 0) {\r\n                          toolsHeader7Subtotal += o.BasePrice;\r\n                        }\r\n                        toolsHeader8Subtotal += o.Price;\r\n                      }\r\n\r\n                      return (\r\n                        <QuoteItemEstimator\r\n                          key={i}\r\n                          CategoryType={\"Tool\"}\r\n                          RefreshComponentState={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          header1=\"Delete\"\r\n                          header2={o.ToolName}\r\n                          subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                          header4={\r\n                            o.RentalRate > 0\r\n                              ? `$${o.RentalRate.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`\r\n                              : null\r\n                          }\r\n                          header6={\r\n                            o.BasePrice > 0\r\n                              ? `$${o.BasePrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`\r\n                              : null\r\n                          }\r\n                          deleteItemFromEstimate={async (itemId) => {\r\n                            if (itemId) {\r\n                              setIsLoading(true);\r\n                              setDeleteItemId(itemId);\r\n                              const data = await DeleteQuoteTool(itemId);\r\n                              if (data === null) {\r\n                                GetProposalInformation(params.quoteId);\r\n                                setIsLoading(false);\r\n                              }\r\n                            } else {\r\n                              setDeleteItemId(o.Id);\r\n                              const data = await DeleteQuoteTool(o.Id);\r\n                              if (data === null) {\r\n                                GetProposalInformation(params.quoteId);\r\n                                setIsLoading(false);\r\n                              }\r\n                            }\r\n                          }}\r\n                          quoteItemObj={o}\r\n                          header9={o.RentalLength > 0 ? o.RentalLength : null}\r\n                          itemLink={o.VideoUrl}\r\n                          header3={\r\n                            typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                              ? o.Quant.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              : \"\"\r\n                          }\r\n                          header8={\r\n                            o.RentalRate > 0 && o.BasePrice > 0\r\n                              ? \"$\" +\r\n                                o.BasePrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              : \"\"\r\n                          }\r\n                          header10={\r\n                            \"$\" +\r\n                            o.Price.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            )\r\n                          }\r\n                        ></QuoteItemEstimator>\r\n                      );\r\n                    })}\r\n\r\n                    {Quote.AccessArea.Items.map((o, i) => (\r\n                      <div>\r\n                        <QuoteItemEstimator\r\n                          key={i}\r\n                          showRelatedItems={showRelated}\r\n                          onClick={() => {\r\n                            setShowRelated(!showRelated);\r\n                          }}\r\n                          RefreshComponentState={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          deleteItemFromEstimate={(itemId) => {\r\n                            if (itemId) {\r\n                              setDeleteItemId(itemId);\r\n                            } else {\r\n                              setDeleteItemId(o.Id);\r\n                            }\r\n                            setDeleteItemConfirmDisplay(true);\r\n                          }}\r\n                          quoteItemObj={o}\r\n                          CategoryType={CategoryTypes.Access}\r\n                          header1=\"Delete\"\r\n                          header2={o.Name}\r\n                          subheader2={o.Notes}\r\n                          header3={\r\n                            o?.Quant.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            ) +\r\n                            \" \" +\r\n                            o.DisplayUnit\r\n                          }\r\n                          header5=\"\"\r\n                          header4=\"\"\r\n                          header6={\r\n                            \"$\" +\r\n                            o.UnitPrice.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            ) +\r\n                            \"\" +\r\n                            o.DisplayUnit\r\n                          }\r\n                          header7={\r\n                            \"$\" +\r\n                            o.Price.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            )\r\n                          }\r\n                          header10={\r\n                            \"$\" +\r\n                            o.Price.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            )\r\n                          }\r\n                        ></QuoteItemEstimator>\r\n                      </div>\r\n                    ))}\r\n\r\n                    {(toolsHeader7Subtotal > 0 || toolsHeader8Subtotal > 0) && (\r\n                      <QuoteItemEstimator\r\n                        isHeader={true}\r\n                        bgColor={ColorPalette.White}\r\n                        header2={`Subtotal`}\r\n                        header7={\r\n                          \"$\" +\r\n                          (toolsHeader7Subtotal + accessTotal)\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                        header10={\r\n                          \"$\" +\r\n                          (toolsHeader8Subtotal + accessTotal)\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      ></QuoteItemEstimator>\r\n                    )}\r\n                    {toolsmachinesHeader === \"flex\" ? (\r\n                      <div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n                    ) : null}\r\n                    <FlexRowContFullWidth\r\n                      id=\"exclude-from-pdf\"\r\n                      onClick={() => {\r\n                        DisplayLaborBreakdown(laborDetailToggle);\r\n                      }}\r\n                    ></FlexRowContFullWidth>\r\n                  </AutoSizeOverflowY>\r\n                </FlexColumnFullWidth>\r\n              </ContentContQuote>\r\n            </FlexRowContAutox100PercentMobileColumn>\r\n          </FlexColumn81vwLightGrey>\r\n\r\n          <FixedIconToTop\r\n            src=\"/BackToTopArrowAlt.svg\"\r\n            onClick={() => {\r\n              window.scrollTo(0, 0);\r\n            }}\r\n          ></FixedIconToTop>\r\n\r\n          {isLoading === true ? (\r\n            <Backdrop style={{ zIndex: 1000 }} open>\r\n              <CircularProgress color=\"inherit\" />\r\n            </Backdrop>\r\n          ) : null}\r\n          <DeleteConfirmWindow\r\n            closeDel={() => {\r\n              setDeleteItemConfirmDisplay(false);\r\n            }}\r\n            onDeleteFunction={async () => {\r\n              setIsLoading(true);\r\n              const data = await DeleteQuoteItemByEstimator(deleteItemId);\r\n              if (data === null) {\r\n                GetProposalInformation(params.quoteId);\r\n                setIsLoading(false);\r\n              }\r\n            }}\r\n            deleteOpen={deleteItemConfirmDisplay}\r\n          ></DeleteConfirmWindow>\r\n        </Cont>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <LeftCont>\r\n            <Menu> </Menu>\r\n          </LeftCont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nViewProposalAccountantView.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default ViewProposalAccountantView;\r\n","/* eslint-disable */\r\n//  React Imports ---------------------------------------\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport axios from \"axios\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport html2canvas from \"html2canvas\";\r\nimport jsPDF from \"jspdf\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n  GetCaseById,\r\n  GetQuoteByIdForUserDisplay,\r\n  QuoteStatus,\r\n  ReverseQuant_QuoteItem,\r\n} from \"../../API_Functions/CaseQuote_Functions\";\r\nimport {\r\n  GetCurrentTime,\r\n  MakeStripePay,\r\n  SetHeaderAuthorization,\r\n} from \"../../API_Functions/Utility_Functions\";\r\nimport moment from \"moment\";\r\n//  Imported Components ---------------------------------\r\nimport TopMentProposalView from \"../../comps/MenuComps/TopMenuProposalView\";\r\nimport QuoteItem from \"../../comps/QuoteItem\";\r\nimport ImageViewWindow from \"../../comps/Windows/ImageEnlargementWindow\";\r\nimport RevisionInstructionsWindow from \"../../comps/Windows/RevisionInstructions\";\r\nimport DuplicateProposalWindow from \"../../comps/Windows/SaveRevisionGuide\";\r\nimport MobileQuoteItem from \"../../MobileComponents/MobileQuoteItem\";\r\nimport { Stored_Values } from \"../../Stored_Values\";\r\nimport { CaseStatus } from \"../../StylesheetComps/CaseStatus\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport {\r\n  FixedIconToTop,\r\n  RegularResponsiveButton,\r\n} from \"../../StylesheetComps/Components\";\r\n// Imported Styled Components ---------------------------\r\nimport { GetTaxesForMetro } from \"../../API_Functions/Store_Functions\";\r\nimport EstimateFooter from \"../../comps/EstimateFooter\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\nimport {\r\n  AutoSizeOverflowY,\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnContCenterAlign,\r\n  FlexColumnFullWidth,\r\n  FlexColumnFullWidthMargins,\r\n  FlexContFullWidthHeightJustifyCenter,\r\n  FlexRowCont,\r\n  FlexRowCont100PercentSpaceBetween,\r\n  FlexRowCont60PercentSpaceEvenly,\r\n  FlexRowContAutox100PercentMobileColumn,\r\n  FlexRowContFlexStart,\r\n  FlexRowContFlexStartMobileColumn,\r\n  FlexRowContFullWidth,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport {\r\n  FlexColumnDivAutoMargin,\r\n  FlexColumnDivSpaceBetween,\r\n  FlexContainerItem,\r\n  FlexContainerPhotos,\r\n  GridContainer3Wide,\r\n  SummaryContainer,\r\n  SummaryContainerItems,\r\n} from \"../../StylesheetComps/Div\";\r\nimport {\r\n  Icon200x200,\r\n  Icon30x40pxPointer,\r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\nimport {\r\n  OverrideEmbedDiv,\r\n  OverrideEmbedImage,\r\n} from \"../../StylesheetComps/Imgs/Images\";\r\nimport {\r\n  FlexDivSpaceAround,\r\n  Image375px,\r\n  TextAreaAutoResizeNoBorder,\r\n} from \"../../StylesheetComps/LandscapeForm\";\r\nimport { SmallHeader } from \"../../StylesheetComps/Menu\";\r\nimport {\r\n  Cont,\r\n  ContentCont44Percent,\r\n  ContentCont77vw,\r\n  ContentContQuote,\r\n} from \"../../StylesheetComps/Projects\";\r\nimport {\r\n  LargeText,\r\n  LeagueSpartanHeaderSmall,\r\n  LeagueSpartanLarge,\r\n  LeagueSpartanRegular,\r\n  MediumHeader,\r\n  StyledHRGreenBreak,\r\n  StyledHRGreenBreakThick,\r\n  StyledHRPropColour,\r\n  TinyTextItalics,\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\nconst ViewEstimateNA = () => {\r\n  // React-router variables\r\n  const history = useHistory();\r\n  const params = useParams();\r\n\r\n  // Data variables\r\n  const [Quote, setProposal] = useState({});\r\n  const [Case, setCase] = useState({});\r\n  const [curTime, setCurTime] = useState(\"\");\r\n  var MaterialSum = 0;\r\n  var InstallSum = 0;\r\n  var TotalSum = 0;\r\n  var materialSub = 0;\r\n  var installSub = 0;\r\n\r\n  // Totals\r\n  const [supplyTotal, setSupplyTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n  const [installTotal, setInstallTotal] = useState({\r\n    Subtotal: 0,\r\n    Tax: [],\r\n    Total: 0,\r\n  });\r\n  const [projectSubtotal, setProjectSubtotal] = useState(0);\r\n  const [deposit, setDeposit] = useState(0);\r\n  const [projectGrandTotal, setProjectGrandTotal] = useState(0);\r\n  const [deliveryTotal, setDeliveryTotal] = useState(0);\r\n  const [accessTotal, setAccessTotal] = useState(0);\r\n\r\n  // Display control for headers\r\n  const [toolsmachinesHeader, setToolsMachinesHeader] = useState(\"none\");\r\n  const [removalHeader, setRemovalHeader] = useState(\"none\");\r\n  const [accessDisplay, setAccessDisplay] = useState(\"none\");\r\n  const [generalMaterialsHeader, setGeneralMaterialsHeader] = useState(\"none\");\r\n  const [deliveryHeader, setDeliveryHeader] = useState(\"none\");\r\n\r\n  // Display control for various elements\r\n  const [installEstimateDisplay, setInstallEstimateDisplay] = useState(\"flex\");\r\n  const [laborDetailView, setLaborDetailView] = useState(\"none\");\r\n  const [showGenerateInovice, setShowGenerateInvoice] = useState(\"none\");\r\n  const [laborDetailToggleView, setLaborDetailToggleView] = useState(\"none\");\r\n  const [laborDetailArrow, setLaborDetailArrow] = useState(\"/downarrow.svg\");\r\n  const [discardButtonDisplay, setDiscardButtonDisplay] = useState(\"none\");\r\n  const [makeRevisionsButtonDisplay, setMakeRevisionsButtonDisplay] =\r\n    useState(\"block\");\r\n  const [saveRevisionsButtonDisplay, setSaveRevisionsButtonDisplay] =\r\n    useState(\"none\");\r\n  const [cloneProposalButtonDisplay, setCloneProposalButtonDisplay] =\r\n    useState(\"none\");\r\n  const [showDepositButton, setShowDepositButton] = useState(\"block\");\r\n  const [labourBreakdownDisplay, setShowLabourBreakdown] = useState(\"none\");\r\n  const [showRelated, setShowRelated] = useState(false);\r\n  const [laborDetailToggle, setLaborDetailToggle] = useState(false);\r\n\r\n  // UI controls for image preview\r\n  const [imagePreviewUrl, setImagePreviewUrl] = useState(\"\");\r\n  const [imageGalleryDisplay, setImageGalleryDisplay] = useState(false);\r\n  const [cloneProposalWindowDisplay, setCloneProposalWindowDisplay] =\r\n    useState(false);\r\n\r\n  // Revision instruction window\r\n  const [revisionInstructionDisplay, setRevisionInstructionDisplay] =\r\n    useState(false);\r\n  const [revisionAcceptDisplay, setRevisionAcceptDisplay] = useState(\"none\");\r\n  const [revisionDeclineDisplay, setRevisionDeclineDisplay] = useState(\"none\");\r\n\r\n  // Deletion state\r\n  const [deleteState, setDeleteState] = useState(false);\r\n\r\n  // Header input state\r\n  const [headerInputShown, setHeaderInputShown] = useState(0);\r\n\r\n  // Opacity control\r\n  const [supplyTotalOpacity, setSupplyTotalOpacity] = useState(\"100%\");\r\n  const [installTotalOpacity, setInstallTotalOpacity] = useState(\"100%\");\r\n\r\n  // Naming\r\n  const [projectName, setProjectName] = useState(\"\");\r\n  const [estimateName, setEstimateName] = useState(\"\");\r\n  const [homeownerName, setHomeownerName] = useState(\"\");\r\n  const [projectCaseNumber, setProjectCaseNumber] = useState(0);\r\n\r\n  // File naming\r\n  const [invoicefileMaterial, setInvoicefileMaterial] = useState(\r\n    \"invoice_material.pdf\"\r\n  );\r\n  const [invoicefileInstall, setInvoicefileInstall] = useState(\r\n    \"invoice_install.pdf\"\r\n  );\r\n\r\n  // Totals for untagged items\r\n  const [untaggedMaterialSubtotal, setUntaggedMaterialSubtotal] = useState(0);\r\n  const [untaggedInstallSubtotal, setUntaggedInstallSubtotal] = useState(0);\r\n  const [untaggedTotalSubtotal, setUntaggedTotalSubtotal] = useState(0);\r\n\r\n  // Error handling\r\n  const [errorAgreementText, setErrorAgreementText] = useState(\"\");\r\n\r\n  // Supply control\r\n  const [supplyOnlySelected, setSupplyOnlySelected] = useState(false);\r\n\r\n  // Taxation\r\n  const [storeTaxes, setStoreTaxes] = useState(false);\r\n\r\n  // Scrolling control\r\n  const scrollToOverview = document.getElementById(\"overview\");\r\n  const scrollToSupply = document.getElementById(\"supply\");\r\n  const scrollToInstall = document.getElementById(\"install\");\r\n  const scrollToDesigns = document.getElementById(\"designs\");\r\n  const scrollToComments = document.getElementById(\"comments\");\r\n  const scrollToConfirm = document.getElementById(\"confirmation\");\r\n\r\n  // Case status\r\n  const [caseStatus, setCaseStatus] = useState(0);\r\n\r\n  // Button reference\r\n  const buttonRef = React.useRef(null);\r\n  const [displayStatus, setDisplayStatus] = useState({});\r\n\r\n  const [paymentURL, setPaymentURL] = useState('');\r\n\r\n  \r\n\r\n  let removalsHeader7Subtotal = 0;\r\n  let [removalsHeader8Subtotal, setRemovalsHeader8Subtotal] = useState(0);\r\n  let toolsHeader7Subtotal = 0;\r\n  let toolsHeader8Subtotal = 0;\r\n  const [projectInstallSubtotal, setProjectInstallSubtotal] = useState(0);\r\n\r\n  const formattedDateTime = async () => {\r\n    const now = new Date();\r\n    const day = now.getDate();\r\n    const month = now.toLocaleString(\"default\", { month: \"short\" });\r\n    const year = now.getFullYear();\r\n    let hour = now.getHours();\r\n    const ampm = hour >= 12 ? \"PM\" : \"AM\";\r\n    hour = hour % 12;\r\n    hour = hour ? hour : 12;\r\n    const minute = now.getMinutes().toString().padStart(2, \"0\");\r\n    return `${day} ${month} ${year}, ${hour}:${minute} ${ampm}`;\r\n  };\r\n\r\n  function formatDate(isoString) {\r\n    const date = new Date(isoString);\r\n    const options = {\r\n      year: \"numeric\",\r\n      month: \"long\",\r\n      day: \"numeric\",\r\n      hour: \"2-digit\",\r\n      minute: \"2-digit\",\r\n      hour12: true,\r\n    };\r\n    return date.toLocaleString(\"en-US\", options);\r\n  }\r\n\r\n  const downloadPDF = async () => {\r\n    const timestamp = await formattedDateTime();\r\n    const input = document.getElementById(\"estimate\");\r\n\r\n    const includeElement = document.getElementById(\"include-on-pdf\");\r\n    const originalDisplayStyle = includeElement.style.display;\r\n    includeElement.style.display = \"flex\";\r\n\r\n    html2canvas(input, {\r\n      useCss: true,\r\n      scale: 1, // Reduce the size of the canvas\r\n      ignoreElements: (element) => {\r\n        return element.id === \"exclude-from-pdf\";\r\n      },\r\n    }).then((canvas) => {\r\n      includeElement.style.display = originalDisplayStyle;\r\n\r\n      const imgData = canvas.toDataURL(\"image/jpeg\", 1); // Use JPEG with 50% quality\r\n      const pdf = new jsPDF(\"p\", \"mm\", \"a4\"); // set the PDF to A4 size\r\n      const pageWidth = pdf.internal.pageSize.getWidth();\r\n      const pageHeight = pdf.internal.pageSize.getHeight();\r\n      const imgProps = pdf.getImageProperties(imgData);\r\n      const pdfWidth = pageWidth;\r\n      const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;\r\n      let pdfPages = Math.ceil(pdfHeight / pageHeight);\r\n\r\n      for (let i = 0; i < pdfPages; i++) {\r\n        if (i !== 0) {\r\n          pdf.addPage();\r\n        }\r\n        pdf.addImage(imgData, \"PNG\", 0, -(i * pageHeight), pdfWidth, pdfHeight);\r\n      }\r\n\r\n      pdf.save(`${timestamp} ${Case?.Street}.pdf`);\r\n    });\r\n  };\r\n\r\n  const DisplayImageInGallery = async (url) => {\r\n    if (!url) return;\r\n\r\n    setImagePreviewUrl(url);\r\n    setImageGalleryDisplay(true);\r\n    document.body.style.overflow = \"hidden\";\r\n  };\r\n\r\n  const DisplayLaborBreakdown = async (toggle) => {\r\n    if (toggle) {\r\n      setLaborDetailArrow(\"/downarrow.svg\");\r\n      setLaborDetailToggleView(\"none\");\r\n      setLaborDetailToggle(false);\r\n    } else {\r\n      setLaborDetailToggle(true);\r\n      setLaborDetailArrow(\"/uparrow.svg\");\r\n      setLaborDetailToggleView(\"flex\");\r\n    }\r\n  };\r\n\r\n  const toggleDisplay = (id) => {\r\n    setDisplayStatus((prevStatus) => ({\r\n      ...prevStatus,\r\n      [id]: !prevStatus[id],\r\n    }));\r\n  };\r\n\r\n  const GetProjectInformation = async (caseId) => {\r\n    const data = await GetCaseById(caseId);\r\n    const { Case } = data || {};\r\n\r\n    if (!Case) return;\r\n\r\n    const { Name, Tittle, CaseNumber, Street, City, CaseStatus } = Case;\r\n\r\n    setCase(Case);\r\n\r\n    if (Name) setHomeownerName(Name);\r\n    if (Tittle) setProjectName(Tittle);\r\n    if (CaseNumber) setProjectCaseNumber(CaseNumber);\r\n\r\n    if (Street && City) {\r\n      const ext = `${Street}-${City}`;\r\n      setInvoicefileInstall(`invoice_install_${ext}.pdf`);\r\n      setInvoicefileMaterial(`invoice_material_${ext}.pdf`);\r\n    }\r\n\r\n    if (\r\n      [\r\n        CaseStatus.Closed,\r\n        CaseStatus.Canceled,\r\n        CaseStatus.CancelRequested,\r\n        CaseStatus.Drafted,\r\n      ].includes(CaseStatus)\r\n    ) {\r\n      setMakeRevisionsButtonDisplay(\"none\");\r\n    }\r\n\r\n    setCaseStatus(CaseStatus);\r\n  };\r\n\r\n  const toggleRemovalDisplay = (id) => {\r\n    setRemovalDisplayStatus((prevStatus) => ({\r\n      ...prevStatus,\r\n      [id]: !prevStatus[id],\r\n    }));\r\n  };\r\n\r\n  // const DisplayDepositButton = async () => {\r\n  //   if (caseStatus === CaseStatus.Construction) {\r\n  //     setShowDepositButton(\"none\");\r\n  //   } else setShowDepositButton(\"block\");\r\n  // };\r\n\r\n  const [estimateGST, setEstimateGST] = useState(0);\r\n  const [estimatePST, setEstimatePST] = useState(0);\r\n\r\n  const GetProposalInformation = async (quoteid) => {\r\n    const headers = {\r\n      apikey: window.$POLYGONAPIKEY,\r\n      authorization: window.$POLYGONAUTHKEY,\r\n    };\r\n\r\n    let quote; // Declare quote here for broader scope access\r\n\r\n    try {\r\n      const checkResponse = await axios.get(\r\n        `${window.$LOCKINURL}?estimateId=eq.${quoteid}`,\r\n        { headers }\r\n      );\r\n\r\n      if (Array.isArray(checkResponse.data) && checkResponse.data.length > 0) {\r\n        console.log(\"Estimate already there!\");\r\n        // If the API returns the quote directly or as part of an object, adjust accordingly\r\n        // Assuming the quote is directly within the data array\r\n        quote = checkResponse.data[0].quote; // Adjust this based on the actual structure\r\n      } else {\r\n        const data = await GetQuoteByIdForUserDisplay(quoteid);\r\n        if (!data || !data.quote) return;\r\n        quote = data.quote; // Set quote from this block for use outside\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error fetching proposal information:\", error);\r\n      return; // Exit if there's an error\r\n    }\r\n\r\n    if (!quote) return; // If quote hasn't been set, exit the function\r\n\r\n    let removalsHeader7Subtotal = 0;\r\n    let removalsHeader8Subtotal = 0;\r\n\r\n    quote?.Removal?.Items.forEach((o) => {\r\n      removalsHeader7Subtotal += Number((o.Price + o.LaborSubtotal).toFixed(2));\r\n      removalsHeader8Subtotal += Number((o.Price + o.LaborSubtotal).toFixed(2));\r\n    });\r\n\r\n    let projectInstallSubtotal = 0;\r\n\r\n    quote?.Tags?.forEach((t) => {\r\n      const primaryItems = quote?.Material?.Items.filter(\r\n        (item) => item.Tag_Id === t.Id && item.Parent_Id === 0\r\n      );\r\n\r\n      primaryItems.forEach((o) => {\r\n        const installSub =\r\n          showRelated === true\r\n            ? o.LaborSubtotal\r\n            : o.LaborSubtotalWithRelatedItems;\r\n        projectInstallSubtotal += installSub;\r\n      });\r\n    });\r\n\r\n    quote?.Material?.Items.forEach((o) => {\r\n      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n        const installSub =\r\n          showRelated === true\r\n            ? o.LaborSubtotal\r\n            : o.LaborSubtotalWithRelatedItems;\r\n        projectInstallSubtotal += installSub;\r\n      }\r\n    });\r\n\r\n    setProjectInstallSubtotal(projectInstallSubtotal);\r\n    setProposal(quote);\r\n    setDeliveryTotal(\r\n      quote?.Delivery?.Tools?.reduce(\r\n        (accumulator, tool) => accumulator + tool.Price,\r\n        0\r\n      ) || 0\r\n    );\r\n    setAccessTotal(\r\n      quote?.AccessArea?.Items?.reduce(\r\n        (accumulator, items) => accumulator + items.Price,\r\n        0\r\n      ) || 0\r\n    );\r\n    // UpdateUIBasedOnStatus(quote);\r\n\r\n    const materialSubtotal = quote?.Material?.Total?.Subtotal || 0;\r\n    const deliverySubtotal = quote?.Delivery?.Total?.Subtotal || 0;\r\n    const toolSubtotal = quote?.Tool?.Total?.Subtotal || 0;\r\n    const accessAreaSubtotal = quote?.AccessArea?.Total?.Subtotal || 0;\r\n    const installSubtotal =\r\n      Number(projectInstallSubtotal) > Stored_Values.MIN_LABOR\r\n        ? Number(projectInstallSubtotal)\r\n        : Stored_Values?.MIN_LABOR;\r\n\r\n    supplyTotal.Subtotal = (materialSubtotal + deliverySubtotal).toFixed(2);\r\n    installTotal.Subtotal = (\r\n      installSubtotal +\r\n      toolSubtotal +\r\n      removalsHeader7Subtotal +\r\n      accessAreaSubtotal\r\n    ).toFixed(2);\r\n\r\n    const subtotal =\r\n      Number(supplyTotal.Subtotal) + Number(installTotal.Subtotal);\r\n    setProjectSubtotal(\r\n      subtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n    );\r\n\r\n    if (quote.Tittle) {\r\n      setEstimateName(quote.Tittle);\r\n    }\r\n\r\n    const storeTaxArray = await GetTaxesForMetro(params.Id);\r\n    setStoreTaxes(storeTaxArray);\r\n\r\n    let gstTax = 0;\r\n    // let pstTax = 0;\r\n\r\n    const taxitems = [\r\n      { type: \"Material\", subtotal: materialSubtotal },\r\n      { type: \"Delivery\", subtotal: deliverySubtotal },\r\n      { type: \"Labor\", subtotal: installSubtotal },\r\n      { type: \"Removal\", subtotal: removalsHeader7Subtotal },\r\n      { type: \"AccessArea\", subtotal: accessAreaSubtotal },\r\n      { type: \"Tool\", subtotal: toolSubtotal },\r\n    ];\r\n\r\n    const gst = storeTaxArray.find((tax) => tax.TaxCode === \"Gst\");\r\n    // const pst = storeTaxArray.find(tax => tax.TaxCode === 'PST');\r\n\r\n    if (gst) {\r\n      taxitems.forEach((item) => {\r\n        const { type, subtotal } = item;\r\n\r\n        if (type === \"Material\") {\r\n          gstTax += (gst.Rate / 100) * subtotal;\r\n          // pstTax += (pst.Rate / 100) * subtotal;\r\n        } else {\r\n          gstTax += (gst.Rate / 100) * subtotal;\r\n        }\r\n      });\r\n    }\r\n\r\n    gstTax = gstTax.toFixed(2);\r\n    // pstTax = pstTax.toFixed(2);\r\n\r\n    // setEstimatePST(pstTax);\r\n    setEstimateGST(gstTax);\r\n\r\n    const grandTotal = Number(gstTax) + Number(subtotal.toFixed(2));\r\n    setProjectGrandTotal(grandTotal);\r\n    setDeposit(grandTotal * 0.1);\r\n\r\n    TrackEstimateView(params.caseId, params.quoteId, params.viewonly, quote.Tittle)\r\n  };\r\n\r\n  // const UpdateUIBasedOnStatus = async (quoteobj) => {\r\n  //   const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n  //   if (userInfo.Role === UserRole.Manager) {\r\n  //     if (quoteobj.QuoteStatus === QuoteStatus.RevisionRequested) {\r\n  //       setRevisionDeclineDisplay(\"block\");\r\n  //       setRevisionAcceptDisplay(\"block\");\r\n  //     }\r\n  //     setCloneProposalButtonDisplay(\"block\");\r\n  //   } else if (userInfo.Role === UserRole.Estimator) {\r\n  //     setCloneProposalButtonDisplay(\"block\");\r\n  //   }\r\n  // };\r\n\r\n  const ChangeUIToMakeRevisions = async () => {\r\n    setHeaderInputShown(3);\r\n    setMakeRevisionsButtonDisplay(\"none\");\r\n    setDiscardButtonDisplay(\"block\");\r\n    setSaveRevisionsButtonDisplay(\"block\");\r\n  };\r\n\r\n  const UpdateQuoteItemQuantity = async (itemid, itemquantity) => {\r\n    var reverseQuantity = await ReverseQuant_QuoteItem(itemid, itemquantity);\r\n    Quote.Material.Items.find(function (o, i) {\r\n      if (o.Id === itemid) {\r\n        o.Quant = itemquantity;\r\n        o.Price = reverseQuantity * o.UnitPrice;\r\n        setSupplyTotalOpacity(\"40%\");\r\n        setInstallTotalOpacity(\"40%\");\r\n      }\r\n      return null;\r\n    });\r\n    //Change Delete State to force a rerender in React\r\n    setDeleteState(!deleteState);\r\n  };\r\n\r\n  const ValidateAgreement = async (supplyonly, caseid, quoteid) => {\r\n    // if (supplyonly === true) {\r\n    // var databuy = await SetQuoteTo_Buy(quoteid);\r\n    //   if (databuy !== null) {\r\n    //     // PushToPayment(deposit.toFixed(2), caseid, quoteid);\r\n    //   } else setErrorAgreementText(\"Please try again!\");\r\n    // } else {\r\n    // var databuyinstall = await SetQuoteTo_Buy_Install(quoteid);\r\n    // if (databuyinstall !== null) {\r\n    var depositSelect =\r\n      deposit < Stored_Values.MIN_DEPOSIT ? Stored_Values.MIN_DEPOSIT : deposit;\r\n    PushToPayment(depositSelect.toFixed(2), caseid, quoteid);\r\n    // } else setErrorAgreementText(\"Please try again!\");\r\n    // }\r\n  };\r\n\r\n  const PushToPayment = async (amount, caseid, quoteid) => {\r\n    var data = await GetCaseById(caseid);\r\n    if (data !== null) {\r\n      if (data.Case !== null) {\r\n        var token = axios.defaults.headers.common[\"Authorization\"];\r\n        if (token) {\r\n          var tokenRef = token.substring(6);\r\n        } else {\r\n          tokenRef = \"am9zaHRlc3QxMDU6QWExMjM0NTY3OCQ=\";\r\n        }\r\n        var name =\r\n          data.Case.Name +\r\n          \", \" +\r\n          data.Case.Street +\r\n          \",\" +\r\n          data.Case.City +\r\n          \" on Project # \" +\r\n          data.Case.CaseNumber;\r\n        var transactionid = data.Case.CaseNumber;\r\n        var paymenturl = await MakeStripePay(\r\n          amount,\r\n          \"CAD\",\r\n          name,\r\n          transactionid,\r\n          quoteid,\r\n          data.Case.Store_Id,\r\n          tokenRef,\r\n          0\r\n        );\r\n        if (paymenturl !== null) {\r\n          window.open(paymenturl, \"_blank\");\r\n          setPaymentURL(paymenturl)\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const SetCurrentTime = async () => {\r\n    var curtime = await GetCurrentTime();\r\n    setCurTime(curtime);\r\n  };\r\n\r\n  const ref = React.createRef();\r\n  const ref2 = React.createRef();\r\n  const options = {\r\n    orientation: \"portrait\",\r\n    unit: \"in\",\r\n    format: [12, 40],\r\n  };\r\n\r\n  var userinfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n  const SetQuoteDisplay = async (quote) => {\r\n    if (!quote) return;\r\n\r\n    // const { Role } = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n\r\n    // if (\r\n    //   Role === UserRole.Installer ||\r\n    //   Role === UserRole.Manager ||\r\n    //   Role === UserRole.Estimator\r\n    // ) {\r\n    //   setLaborDetailView(\"block\");\r\n    // }\r\n\r\n    // if (\r\n    //   Role === UserRole.Manager ||\r\n    //   Role === UserRole.Estimator ||\r\n    //   Role === UserRole.Accountant\r\n    // ) {\r\n    //   setShowGenerateInvoice(\"block\");\r\n    //   setShowLabourBreakdown(\"flex\");\r\n    // }\r\n\r\n    if (\r\n      quote.Material?.Items.some(\r\n        (item) => item.Parent_Id === 0 && item.Tag_Id === 0\r\n      )\r\n    )\r\n      setGeneralMaterialsHeader(\"flex\");\r\n\r\n    if (quote.Delivery?.Tools?.length > 0) setDeliveryHeader(\"flex\");\r\n\r\n    if (quote.Tool?.Tools?.length > 0) setToolsMachinesHeader(\"flex\");\r\n\r\n    if (quote.Removal?.Items?.length > 0) setRemovalHeader(\"flex\");\r\n\r\n    if (quote.AccessArea?.Items?.length > 0) setAccessDisplay(\"flex\");\r\n  };\r\n\r\n  const RouteToPrevious = async (role) => {\r\n    if (role == UserRole.User || role == UserRole.VIP) {\r\n      history.push(\r\n        \"/viewcaseuser/\" +\r\n          params.Id +\r\n          \"/\" +\r\n          params.storeId +\r\n          \"/\" +\r\n          params.caseId\r\n      );\r\n    } else if (params.lastrevision == 0) {\r\n      history.push(\r\n        \"/viewcase/\" + params.Id + \"/\" + params.storeId + \"/\" + params.caseId\r\n      );\r\n    } else {\r\n      history.push(\r\n        \"/viewcaseuser/\" +\r\n          params.Id +\r\n          \"/\" +\r\n          params.storeId +\r\n          \"/\" +\r\n          params.caseId\r\n      );\r\n    }\r\n  };\r\n\r\n  //Project Comment Files\r\n  const [previewImage, setPreviewImage] = useState(\"\");\r\n\r\n  const inputFile = useRef(null);\r\n\r\n  const [totalRemovalsByItem, setTotalRemovalsByItem] = useState({});\r\n\r\n  function computeRemovalsTotal(removalsArray, labourArray) {\r\n    const totalRemovalsByItem = {};\r\n    const assignedLabours = new Set();\r\n\r\n    removalsArray.forEach((removal, removalIndex) => {\r\n      let totalRemovals = 0;\r\n\r\n      labourArray.forEach((labour) => {\r\n        if (assignedLabours.has(labour.Id)) return; // Skip already assigned labours\r\n\r\n        const removalMatch = removalsArray.reduce((closest, r) => {\r\n          if (\r\n            labour.Notes.includes(\"Removals\") &&\r\n            labour.Notes.split(\"-\").some((part) => r.Name.includes(part.trim()))\r\n          ) {\r\n            const currentDiff = Math.abs(\r\n              r.Price + r.LaborSubtotal - labour.Price\r\n            );\r\n            const closestDiff = closest\r\n              ? Math.abs(closest.Price + closest.LaborSubtotal - labour.Price)\r\n              : Infinity;\r\n\r\n            return currentDiff < closestDiff ? r : closest;\r\n          }\r\n          return closest;\r\n        }, null);\r\n\r\n        if (\r\n          removalMatch &&\r\n          (removalMatch.Id === removal.Id ||\r\n            removalMatch.Parent_Id === removal.Id)\r\n        ) {\r\n          totalRemovals += labour.Quant;\r\n          assignedLabours.add(labour.Id); // Mark the labour as assigned\r\n        }\r\n      });\r\n\r\n      totalRemovalsByItem[`${removal.Name}_${removalIndex}`] = totalRemovals;\r\n    });\r\n\r\n    setTotalRemovalsByItem(totalRemovalsByItem);\r\n  }\r\n\r\n  const TrackEstimateView = async (project_id, estimate_id, tracking_id, estimate_name) => {\r\n    // Get the client's IP address using a free API service (ipify)\r\n    let ip_address = \"\";\r\n    try {\r\n      const ipResponse = await fetch(\"https://api.ipify.org?format=json\");\r\n      if (ipResponse.ok) {\r\n        const ipData = await ipResponse.json();\r\n        ip_address = ipData.ip;\r\n      } else {\r\n        console.error(\"Failed to fetch IP address: \", ipResponse.status);\r\n      }\r\n    } catch (error) {\r\n      console.error(\"Error fetching IP address:\", error);\r\n    }\r\n  \r\n    // Get the client's user agent from the browser\r\n    const user_agent = navigator.userAgent;\r\n  \r\n    // Attempt to look up an approximate location based on the IP address using ipapi.co\r\n    let approx_location = \"\";\r\n    if (ip_address) {\r\n      try {\r\n        const locationResponse = await fetch(`https://ipapi.co/${ip_address}/json/`);\r\n        if (locationResponse.ok) {\r\n          const locationData = await locationResponse.json();\r\n          // Construct a human-readable location string; adjust based on available data.\r\n          approx_location = `${locationData.city}, ${locationData.region}, ${locationData.country_name}`;\r\n        } else {\r\n          console.error(\"Failed to fetch location: \", locationResponse.status);\r\n        }\r\n      } catch (error) {\r\n        console.error(\"Error fetching location:\", error);\r\n      }\r\n    }\r\n  \r\n    // Build the payload with the required identifiers and additional info\r\n    const payload = {\r\n      project_id,\r\n      estimate_id,\r\n      tracking_code: tracking_id,\r\n      ip_address,\r\n      user_agent,\r\n      approx_location,\r\n      estimate_name\r\n    };\r\n  \r\n    // The Supabase REST endpoint for the 'read_receipts' table\r\n    const url = \"https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/read_receipts\";\r\n  \r\n    try {\r\n      const response = await fetch(url, {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          apikey: window.$POLYGONAPIKEY,\r\n          Authorization: window.$POLYGONAUTHKEY,\r\n        },\r\n        body: JSON.stringify(payload),\r\n      });\r\n  \r\n      if (!response.ok) {\r\n        throw new Error(`HTTP error! status: ${response.status}`);\r\n      }\r\n      const data = await response.json();\r\n      console.log(\"View recorded successfully:\", data);\r\n    } catch (error) {\r\n      console.error(\"Error recording view:\", error);\r\n    }\r\n  };  \r\n  \r\n\r\n  useEffect(() => {\r\n    SetHeaderAuthorization();\r\n    GetProposalInformation(params.quoteId);\r\n    GetProjectInformation(params.caseId);\r\n    // DisplayDepositButton();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    let header7Subtotal = 0;\r\n    let header8Subtotal = 0;\r\n\r\n    Quote?.Removal?.Items.forEach((o) => {\r\n      header7Subtotal += o.Price + o.LaborSubtotal;\r\n      header8Subtotal += o.Price + o.LaborSubtotal;\r\n    });\r\n\r\n    setRemovalsHeader8Subtotal(header8Subtotal);\r\n  }, [Quote?.Removal?.Items]);\r\n\r\n  useEffect(() => {\r\n    if (params.numberofquotes === 0) {\r\n      setMakeRevisionsButtonDisplay(\"none\");\r\n      setHideProjectConfirmationDisplay(\"none\");\r\n    }\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    let newUntaggedMaterialSubtotal = 0;\r\n    let newUntaggedInstallSubtotal = 0;\r\n    let newUntaggedTotalSubtotal = 0;\r\n\r\n    Quote?.Material?.Items.forEach((o) => {\r\n      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n        const materialSub = o.SubtotalWithRelatedItems;\r\n        const installSub = o.LaborSubtotalWithRelatedItems;\r\n\r\n        newUntaggedMaterialSubtotal += materialSub;\r\n        newUntaggedInstallSubtotal += installSub;\r\n        newUntaggedTotalSubtotal += materialSub + installSub;\r\n      }\r\n    });\r\n\r\n    setUntaggedMaterialSubtotal(newUntaggedMaterialSubtotal);\r\n    setUntaggedInstallSubtotal(newUntaggedInstallSubtotal);\r\n    setUntaggedTotalSubtotal(newUntaggedTotalSubtotal);\r\n  }, [Quote?.Material?.Items]);\r\n\r\n  useEffect(() => {\r\n    SetCurrentTime();\r\n    SetQuoteDisplay(Quote);\r\n  }, [Quote]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  var observe;\r\n  if (window.attachEvent) {\r\n    observe = function (element, event, handler) {\r\n      element?.attachEvent(\"on\" + event, handler);\r\n    };\r\n  } else {\r\n    observe = function (element, event, handler) {\r\n      element?.addEventListener(event, handler, false);\r\n    };\r\n  }\r\n  function init() {\r\n    var text = document.getElementById(\"text\");\r\n    if (text !== null) {\r\n      function resize() {\r\n        text.style.height = \"auto\";\r\n        text.style.height = text.scrollHeight + \"px\";\r\n      }\r\n      /* 0-timeout to get the already changed text */\r\n      function delayedResize() {\r\n        window.setTimeout(resize, 0);\r\n      }\r\n      observe(text, \"change\", resize);\r\n      observe(text, \"cut\", delayedResize);\r\n      observe(text, \"paste\", delayedResize);\r\n      observe(text, \"drop\", delayedResize);\r\n      observe(text, \"keydown\", delayedResize);\r\n\r\n      resize();\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    init();\r\n  }, [Quote.Notes]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  const [deliveryDisplayStatus, setDeliveryDisplayStatus] = useState(false);\r\n  const [removalDisplayStatus, setRemovalDisplayStatus] = useState(false);\r\n\r\n  const RemovalItemsNoTag =\r\n    Quote?.Removal?.Items?.filter(\r\n      (removalItem) => removalItem.Tag_Id === 0\r\n    ).map((item) => {\r\n      const originalRemovalIndex = Quote.Removal.Items.findIndex(\r\n        (removal) => removal.Id === item.Id\r\n      );\r\n      return {\r\n        ...item,\r\n      };\r\n    }) || []; // Default to an empty array if undefined\r\n\r\n  const totalRemovalCost = RemovalItemsNoTag.reduce(\r\n    (sum, item) => sum + item.Price + item.LaborSubtotal,\r\n    0\r\n  );\r\n  const totalRemovalQuantity = RemovalItemsNoTag.reduce(\r\n    (sum, item) => sum + item.Quant,\r\n    0\r\n  );\r\n\r\n  // let totalAggregatedDeliveryCost = 0;\r\n\r\n  // Quote?.Material?.Items.forEach(o => {\r\n  //   if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n  //     // Check deliveries for the untagged item itself\r\n  //     Quote.Delivery.Tools.forEach(tool => {\r\n  //       if (o.Id === tool.Item_Id) {\r\n  //         totalAggregatedDeliveryCost += tool.Price;\r\n  //       }\r\n  //     });\r\n\r\n  //     // Check deliveries for the related items of the untagged item\r\n\r\n  //   }\r\n  //   if (o.RelatedItems) {\r\n  //     o.RelatedItems.forEach(relatedItem => {\r\n  //       Quote.Delivery.Tools.forEach(tool => {\r\n  //         if (relatedItem.Id === tool.Item_Id) {\r\n  //           totalAggregatedDeliveryCost += tool.Price;\r\n  //         }\r\n  //       });\r\n  //     });\r\n  //   }\r\n  // });\r\n\r\n  let totalAggregatedDeliveryCost = 0;\r\n\r\n  let removalsMaterialTotal = 0;\r\n  let removalsLaborTotal = 0;\r\n\r\n  Quote?.Removal?.Items?.filter(\r\n    (removalItem) => removalItem.Tag_Id === 0\r\n  ).forEach((o) => {\r\n    removalsMaterialTotal += o.Price;\r\n    removalsLaborTotal += o.LaborSubtotal;\r\n  });\r\n\r\n  const finalUntaggedMaterialSubtotal =\r\n    untaggedMaterialSubtotal +\r\n    totalAggregatedDeliveryCost +\r\n    removalsMaterialTotal;\r\n  const finalUntaggedInstallSubtotal =\r\n    untaggedInstallSubtotal + totalAggregatedDeliveryCost + removalsLaborTotal;\r\n  const finalUntaggedTotalSubtotal =\r\n    untaggedTotalSubtotal +\r\n    totalAggregatedDeliveryCost +\r\n    removalsMaterialTotal +\r\n    removalsLaborTotal;\r\n\r\n  Quote?.Material?.Items.forEach((o) => {\r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      // Check deliveries for the untagged item itself\r\n      Quote.Delivery.Tools.forEach((tool) => {\r\n        if (o.Id === tool.Item_Id) {\r\n          totalAggregatedDeliveryCost += tool.Price;\r\n        }\r\n      });\r\n\r\n      // Check deliveries for the related items of the untagged item\r\n      if (o.RelatedItems && o.RelatedItems.length > 0) {\r\n        addRelatedItemsDeliveryCost(o.RelatedItems, Quote.Delivery.Tools);\r\n      }\r\n    }\r\n\r\n    // For items that aren't untagged but have related items\r\n    if (o.RelatedItems && o.Parent_Id !== 0) {\r\n      addRelatedItemsDeliveryCost(o.RelatedItems, Quote.Delivery.Tools);\r\n    }\r\n  });\r\n\r\n  function addRelatedItemsDeliveryCost(relatedItems, tools) {\r\n    relatedItems.forEach((relatedItem) => {\r\n      tools.forEach((tool) => {\r\n        if (relatedItem.Id === tool.Item_Id) {\r\n          totalAggregatedDeliveryCost += tool.Price;\r\n        }\r\n      });\r\n\r\n      // Check for sub-related items\r\n      if (relatedItem.RelatedItems && relatedItem.RelatedItems.length > 0) {\r\n        addRelatedItemsDeliveryCost(relatedItem.RelatedItems, tools);\r\n      }\r\n    });\r\n  }\r\n\r\n  console.log(\"Total Aggregated Delivery Cost:\", totalAggregatedDeliveryCost);\r\n\r\n  let DeliveryItemsNoTag = [];\r\n\r\n  Quote?.Material?.Items.forEach((o) => {\r\n    if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n      Quote.Delivery.Tools.forEach((tool) => {\r\n        if (o.Id === tool.Item_Id) {\r\n          DeliveryItemsNoTag.push(tool);\r\n        }\r\n      });\r\n    }\r\n    if (o.RelatedItems && o.RelatedItems.length > 0) {\r\n      o.RelatedItems.forEach((relatedItem) => {\r\n        Quote.Delivery.Tools.forEach((tool) => {\r\n          if (relatedItem.Id === tool.Item_Id) {\r\n            DeliveryItemsNoTag.push(tool);\r\n          }\r\n        });\r\n      });\r\n    }\r\n  });\r\n\r\n  // function convertHoursToTimeString(businessHours) {\r\n  //   const HOURS_IN_DAY = 8; // Business hours in a day\r\n  //   const DAYS_IN_WEEK = 5; // Business days in a week\r\n  //   const HOURS_IN_WEEK = HOURS_IN_DAY * DAYS_IN_WEEK; // Business hours in a week\r\n\r\n  //   if (businessHours < HOURS_IN_DAY) {\r\n  //     return \"1 Business day\";\r\n  //   } else if (businessHours < HOURS_IN_DAY * 4) {\r\n  //     let days = Math.floor(businessHours / HOURS_IN_DAY);\r\n  //     return `${days}-${days + 1} Business days`;\r\n  //   } else if (businessHours <= HOURS_IN_WEEK) {\r\n  //     return \"7-14 Working Days\";\r\n  //   } else {\r\n  //     let weeks = Math.floor(businessHours / HOURS_IN_WEEK);\r\n  //     let remainingHours = businessHours % HOURS_IN_WEEK;\r\n\r\n  //     let lowerWeekBound = weeks;\r\n  //     let upperWeekBound = weeks + 1;\r\n\r\n  //     let lowerDayBound = lowerWeekBound * DAYS_IN_WEEK\r\n  //     let upperDayBound = upperWeekBound * DAYS_IN_WEEK\r\n\r\n  //     if (remainingHours > 0 && remainingHours <= HOURS_IN_DAY * 4) {\r\n  //       upperWeekBound = weeks + 1; // Changed this line to ensure no more than a 1-week range\r\n  //     }\r\n\r\n  //     if (weeks < 5) {\r\n  //       return `${lowerDayBound}-${upperDayBound} Business Days`;\r\n  //     } else {\r\n  //       let lowerMonthBound = Math.floor(weeks / 4); // Approximating 4 weeks per month\r\n  //       let upperMonthBound = lowerMonthBound + 1;\r\n  //       return `${lowerMonthBound}-${upperMonthBound} months`;\r\n  //     }\r\n  //   }\r\n  // }\r\n\r\n  function convertHoursToTimeString(businessHours) {\r\n    const HOURS_IN_DAY = 8; // Business hours in a day\r\n\r\n    if (businessHours < HOURS_IN_DAY) {\r\n      return \"Less than 1 Business Day\";\r\n    } else {\r\n      // Calculate the lower and upper bounds for business days\r\n      let lowerDayBound = Math.floor(businessHours / HOURS_IN_DAY);\r\n      let upperDayBound = Math.ceil(businessHours / HOURS_IN_DAY);\r\n\r\n      // If the upper and lower bounds are the same, it means it's exactly that many days\r\n      if (lowerDayBound === upperDayBound) {\r\n        return `${lowerDayBound} Business Day(s)`;\r\n      } else {\r\n        // Provide a range of days\r\n        return `${lowerDayBound}-${upperDayBound} Business Days`;\r\n      }\r\n    }\r\n  }\r\n\r\n  const buildMaterialTableBody = () => {\r\n    const tableBody = [\r\n      [\r\n        {\r\n          text: \"DESCRIPTION\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"QTY\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"MAT. RATE\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"INST. RATE\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"SUBTOTAL\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n      ],\r\n    ];\r\n\r\n    // Function to handle undefined values\r\n    const safeValue = (value, defaultValue = \"N/A\") =>\r\n      value !== undefined && value !== null ? value : defaultValue;\r\n\r\n    // Function to add item rows to the table body\r\n    const addItemRows = (items) => {\r\n      items.forEach((o) => {\r\n        const materialSub = safeValue(\r\n          displayStatus[o.Id] === true ? o.Price : o.SubtotalWithRelatedItems,\r\n          0\r\n        );\r\n        const installSub = safeValue(\r\n          displayStatus[o.Id] === true\r\n            ? o.LaborSubtotal\r\n            : o.LaborSubtotalWithRelatedItems,\r\n          0\r\n        );\r\n\r\n        // Perform necessary calculations\r\n        const itemName = o.Name || \"\";\r\n        const quantity =\r\n          Number(safeValue(o?.Quant, 0))\r\n            ?.toFixed(2)\r\n            ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n          \" \" +\r\n          safeValue(o.DisplayUnit, \"\");\r\n        const materialRate =\r\n          o?.Quant !== 0\r\n            ? (materialSub / o?.Quant).toFixed(4)\r\n            : materialSub.toFixed(2);\r\n        const installRate =\r\n          o?.Quant !== 0\r\n            ? (installSub / o?.Quant).toFixed(4)\r\n            : installSub.toFixed(2);\r\n        const subtotal = (\r\n          parseFloat(materialSub.toFixed(2)) + parseFloat(installSub.toFixed(2))\r\n        ).toFixed(2);\r\n\r\n        tableBody.push([\r\n          { text: itemName, margin: [0, 5, 0, 5], fontSize: 10 },\r\n          { text: quantity, alignment: \"center\", fontSize: 10 },\r\n          { text: `$${materialRate}`, alignment: \"right\", fontSize: 10 },\r\n          { text: `$${installRate}`, alignment: \"right\", fontSize: 10 },\r\n          {\r\n            text: `$${subtotal.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n            alignment: \"right\",\r\n            fontSize: 10,\r\n          },\r\n        ]);\r\n      });\r\n    };\r\n\r\n    // Function to add removal items to the table body\r\n    const addRemovalRows = (removalItems) => {\r\n      removalItems.forEach((o) => {\r\n        const itemName = o.Name || \"\";\r\n        const quantity =\r\n          Number(safeValue(o?.Quant, 0))\r\n            ?.toFixed(2)\r\n            ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n          \" \" +\r\n          safeValue(o.DisplayUnit, \"\");\r\n        const removalTotal = o.Price + o.LaborSubtotal;\r\n\r\n        tableBody.push([\r\n          { text: itemName, margin: [0, 5, 0, 5], fontSize: 10 },\r\n          { text: quantity, alignment: \"center\", fontSize: 10 },\r\n          { text: \"N/A\", alignment: \"right\", fontSize: 10 }, // Assuming no material rate for removals\r\n          { text: \"N/A\", alignment: \"right\", fontSize: 10 }, // Assuming no install rate for removals\r\n          {\r\n            text: `$${removalTotal\r\n              .toFixed(2)\r\n              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n            alignment: \"right\",\r\n            fontSize: 10,\r\n          },\r\n        ]);\r\n      });\r\n    };\r\n\r\n    // Function to add a single delivery row with aggregated totals\r\n    const addAggregatedDeliveryRow = (deliveries) => {\r\n      const totalQuantity = deliveries.reduce(\r\n        (sum, tool) => sum + (tool.Quant || 0),\r\n        0\r\n      );\r\n      const totalCost = deliveries.reduce((sum, tool) => sum + tool.Price, 0);\r\n\r\n      if (totalCost > 0) {\r\n        tableBody.push([\r\n          { text: \"Deliveries\", margin: [0, 5, 0, 5], fontSize: 10 },\r\n          {\r\n            text:\r\n              totalQuantity.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n              \" \" +\r\n              (deliveries[0]?.DisplayUnit || \"\"),\r\n            alignment: \"center\",\r\n            fontSize: 10,\r\n          },\r\n          { text: \"N/A\", alignment: \"right\", fontSize: 10 }, // Assuming no material rate for deliveries\r\n          { text: \"N/A\", alignment: \"right\", fontSize: 10 }, // Assuming no install rate for deliveries\r\n          {\r\n            text: `$${totalCost\r\n              .toFixed(2)\r\n              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n            alignment: \"right\",\r\n            fontSize: 10,\r\n          },\r\n        ]);\r\n      }\r\n    };\r\n\r\n    // Add items for each tag\r\n    const tags = safeValue(Quote?.Tags, []);\r\n    tags.forEach((tag) => {\r\n      const tagItems = safeValue(\r\n        Quote?.Material?.Items.filter(\r\n          (o) => o.Tag_Id === tag.Id && o.Parent_Id === 0\r\n        ),\r\n        []\r\n      );\r\n      const tagRemovals = safeValue(\r\n        Quote?.Removal?.Items.filter((o) => o.Tag_Id === tag.Id),\r\n        []\r\n      );\r\n      const matchedDeliveries = [];\r\n\r\n      function checkDeliveries(item) {\r\n        // Check for deliveries related to the item itself\r\n        Quote.Delivery.Tools.forEach((tool) => {\r\n          if (item.Id === tool.Item_Id) {\r\n            matchedDeliveries.push({\r\n              ...tool,\r\n              Tag_Id: item.Tag_Id,\r\n            });\r\n          }\r\n        });\r\n\r\n        // If the item has related items, check for deliveries related to those as well\r\n        if (item.RelatedItems && item.RelatedItems.length > 0) {\r\n          item.RelatedItems.forEach((relatedItem) => {\r\n            checkDeliveries(relatedItem); // Recursive call for nested related items\r\n          });\r\n        }\r\n      }\r\n\r\n      tagItems.forEach((primaryItem) => {\r\n        checkDeliveries(primaryItem);\r\n      });\r\n\r\n      if (\r\n        tagItems.length > 0 ||\r\n        tagRemovals.length > 0 ||\r\n        matchedDeliveries.length > 0\r\n      ) {\r\n        tableBody.push([\r\n          {\r\n            text: safeValue(tag.TagName),\r\n            colSpan: 5,\r\n            alignment: \"left\",\r\n            bold: true,\r\n            fillColor: \"#f0f0f0\",\r\n            fontSize: 10,\r\n          },\r\n          {},\r\n          {},\r\n          {},\r\n          {},\r\n        ]);\r\n\r\n        // Add items under this tag\r\n        addItemRows(tagItems);\r\n\r\n        // Add removal items under this tag\r\n        addRemovalRows(tagRemovals);\r\n\r\n        // Add a single aggregated delivery row under this tag\r\n        addAggregatedDeliveryRow(matchedDeliveries);\r\n      }\r\n    });\r\n\r\n    // Add primary items (no tag) under \"General Materials\"\r\n    const primaryItems = safeValue(\r\n      Quote?.Material?.Items.filter((o) => o.Parent_Id === 0 && o.Tag_Id === 0),\r\n      []\r\n    );\r\n    const generalRemovals = safeValue(\r\n      Quote?.Removal?.Items.filter((o) => o.Tag_Id === 0),\r\n      []\r\n    );\r\n    const generalDeliveries = [];\r\n\r\n    function checkGeneralDeliveries(item) {\r\n      // Check for deliveries related to the item itself\r\n      Quote.Delivery.Tools.forEach((tool) => {\r\n        if (item.Id === tool.Item_Id) {\r\n          generalDeliveries.push({\r\n            ...tool,\r\n            Tag_Id: item.Tag_Id,\r\n          });\r\n        }\r\n      });\r\n\r\n      // If the item has related items, check for deliveries related to those as well\r\n      if (item.RelatedItems && item.RelatedItems.length > 0) {\r\n        item.RelatedItems.forEach((relatedItem) => {\r\n          checkGeneralDeliveries(relatedItem); // Recursive call for nested related items\r\n        });\r\n      }\r\n    }\r\n\r\n    primaryItems.forEach((primaryItem) => {\r\n      checkGeneralDeliveries(primaryItem);\r\n    });\r\n\r\n    let totalAggregatedDeliveryCost = generalDeliveries.reduce(\r\n      (sum, tool) => sum + tool.Price,\r\n      0\r\n    );\r\n\r\n    if (\r\n      primaryItems.length > 0 ||\r\n      generalRemovals.length > 0 ||\r\n      totalAggregatedDeliveryCost > 0\r\n    ) {\r\n      tableBody.push([\r\n        {\r\n          text: \"General Materials\",\r\n          colSpan: 5,\r\n          alignment: \"left\",\r\n          bold: true,\r\n          fillColor: \"#f0f0f0\",\r\n          fontSize: 10,\r\n        },\r\n        {},\r\n        {},\r\n        {},\r\n        {},\r\n      ]);\r\n      addItemRows(primaryItems);\r\n      addRemovalRows(generalRemovals);\r\n      addAggregatedDeliveryRow(generalDeliveries);\r\n    }\r\n\r\n    return tableBody;\r\n  };\r\n\r\n  const buildMachinesTableBody = () => {\r\n    const tableBody = [\r\n      [\r\n        {\r\n          text: \"Machines, Disposals, & Access\",\r\n          colSpan: 6,\r\n          alignment: \"left\",\r\n          bold: true,\r\n          fillColor: \"#f0f0f0\",\r\n          fontSize: 10,\r\n        },\r\n        {},\r\n        {},\r\n        {},\r\n        {},\r\n        {},\r\n      ],\r\n      [\r\n        {\r\n          text: \"DESCRIPTION\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"QTY\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"RENT PRICE\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"MOB. COST\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"RENT RATE\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n        {\r\n          text: \"SUBTOTAL\",\r\n          style: \"tableHeader\",\r\n          fillColor: \"#169ADB\",\r\n          fontSize: 10,\r\n          alignment: \"center\",\r\n        },\r\n      ],\r\n    ];\r\n\r\n    // Function to handle undefined values\r\n    const safeValue = (value, defaultValue = \"N/A\") =>\r\n      value !== undefined && value !== null ? value : defaultValue;\r\n\r\n    // Ensure both Tools and AccessArea are arrays\r\n    const tools = Array.isArray(Quote?.Tool?.Tools) ? Quote?.Tool?.Tools : [];\r\n    const accessItems = Array.isArray(Quote?.AccessArea?.Items)\r\n      ? Quote?.AccessArea?.Items\r\n      : [];\r\n\r\n    // Combine Tools and AccessArea items\r\n    const toolsAndAccessItems = [...tools, ...accessItems];\r\n\r\n    toolsAndAccessItems.forEach((o) => {\r\n      const itemName = o.ToolName || o.Name || \"\";\r\n\r\n      // Exclude items containing 'Wheelbarrow' or 'Suggested'\r\n      if (itemName.includes(\"Wheelbarrow\") || itemName.includes(\"Suggested\")) {\r\n        return;\r\n      }\r\n\r\n      const quantity =\r\n        Number(safeValue(o?.Quant, 0))\r\n          ?.toFixed(2)\r\n          ?.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") +\r\n        \" \" +\r\n        safeValue(o.DisplayUnit, \"\");\r\n      const rentalPrice =\r\n        o.RentalRate > 0\r\n          ? `$${o.RentalRate.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`\r\n          : \"N/A\";\r\n      const moveCost =\r\n        o.BasePrice > 0\r\n          ? `$${o.BasePrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`\r\n          : \"N/A\";\r\n      const rentalRate =\r\n        o.RentalRate > 0\r\n          ? `$${o.RentalRate.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`\r\n          : \"N/A\";\r\n      const subtotal = `$${o.Price.toFixed(2).replace(\r\n        /\\B(?=(\\d{3})+(?!\\d))/g,\r\n        \",\"\r\n      )}`;\r\n\r\n      tableBody.push([\r\n        { text: itemName, margin: [0, 5, 0, 5], fontSize: 10 },\r\n        { text: quantity, alignment: \"center\", fontSize: 10 },\r\n        { text: rentalPrice, alignment: \"right\", fontSize: 10 },\r\n        { text: moveCost, alignment: \"right\", fontSize: 10 },\r\n        { text: rentalRate, alignment: \"right\", fontSize: 10 },\r\n        { text: subtotal, alignment: \"right\", fontSize: 10 },\r\n      ]);\r\n    });\r\n\r\n    return tableBody;\r\n  };\r\n\r\n  const currentUrl = window.location.href; // Get the current URL\r\n  //Start of the PDF\r\n\r\n  const dd = {\r\n    content: [\r\n      {\r\n        columns: [\r\n          {\r\n            image:\r\n              \"data:image/png;base64,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\",\r\n            width: 100,\r\n            margin: [0, 0, 0, 10],\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        columns: [\r\n          {\r\n            text: \"New Rhodes Construction\\n12306 McTavish Road\\nPitt Meadows BC V3Y1Z1\\n+1 (778-657-5944)\\noffice@newrhodesconstruction.com\\nwww.newrhodesconstruction.com\\nGST/HST Registration No. 781153283RT0001\",\r\n            margin: [0, 0, 0, 20],\r\n            fontSize: 8, // Reduced font size\r\n          },\r\n          {\r\n            text: \".\",\r\n            alignment: \"right\",\r\n            margin: [0, 0, 0, 20],\r\n            fontSize: 8, // Reduced font size\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        text: \"PROJECT ESTIMATE\",\r\n        style: \"header\",\r\n        alignment: \"left\",\r\n        color: \"#169ADB\",\r\n      },\r\n      {\r\n        columns: [\r\n          {\r\n            text: [\r\n              { text: \"SENT TO\\n\", bold: true, fontSize: 10 },\r\n              `${homeownerName}\\n${Case?.Email}\\n${Case?.Street}\\n${Case?.City}\\n${Case?.Phone}\\n\\n`,\r\n\r\n              { text: \"PROJECT NAME\\n\", bold: true, fontSize: 10 },\r\n              `${estimateName}\\n`,\r\n            ],\r\n            margin: [0, 20, 0, 20],\r\n            fontSize: 10, // Reduced font size\r\n          },\r\n          {\r\n            text: [\r\n              { text: \"ESTIMATE # \", bold: true, fontSize: 10 },\r\n              `${params.quoteId}\\n`,\r\n              { text: \"DATE \", bold: true, fontSize: 10 },\r\n              `${formatDate(Quote?.EditTime)}\\n`,\r\n              { text: \"TERMS \", bold: true, fontSize: 10 },\r\n              \"Due on receipt\\n\",\r\n            ],\r\n            alignment: \"right\",\r\n            margin: [0, 20, 0, 20],\r\n            fontSize: 10, // Reduced font size\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        table: {\r\n          headerRows: 1,\r\n          widths: [\"*\", \"auto\", \"auto\", \"auto\", \"auto\"],\r\n          body: buildMaterialTableBody(),\r\n        },\r\n        layout: {\r\n          hLineWidth: function (i, node) {\r\n            return 0; // No horizontal lines\r\n          },\r\n          vLineWidth: function (i, node) {\r\n            return 0; // No vertical lines\r\n          },\r\n        },\r\n      },\r\n      {\r\n        table: {\r\n          headerRows: 1,\r\n          widths: [\"*\", \"auto\", \"auto\", \"auto\", \"auto\", \"auto\"],\r\n          body: buildMachinesTableBody(),\r\n        },\r\n        layout: {\r\n          hLineWidth: function (i, node) {\r\n            return 0; // No horizontal lines\r\n          },\r\n          vLineWidth: function (i, node) {\r\n            return 0; // No vertical lines\r\n          },\r\n        },\r\n      },\r\n      {\r\n        text: \"We appreciate your business and hope you consider us for any future projects!\",\r\n        margin: [0, 20, 0, 20],\r\n        fontSize: 10, // Reduced font size\r\n      },\r\n      {\r\n        columns: [\r\n          {\r\n            width: \"*\",\r\n            text: \"\",\r\n          },\r\n          {\r\n            width: \"auto\",\r\n            table: {\r\n              body: [\r\n                [\r\n                  { text: \"Materials\", alignment: \"right\", fontSize: 10 },\r\n                  {\r\n                    text: `$${Quote?.Material?.Total?.Subtotal?.toFixed(\r\n                      2\r\n                    ).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  { text: \"Delivery\", alignment: \"right\", fontSize: 10 },\r\n                  {\r\n                    text: `$${Quote?.Delivery?.Total?.Subtotal?.toFixed(\r\n                      2\r\n                    ).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  { text: \"Labour\", alignment: \"right\", fontSize: 10 },\r\n                  {\r\n                    text: `$${Number(\r\n                      projectInstallSubtotal + removalsHeader8Subtotal\r\n                    )\r\n                      .toFixed(2)\r\n                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                ...(Number(projectInstallSubtotal + removalsHeader8Subtotal) <=\r\n                525\r\n                  ? [\r\n                      [\r\n                        {\r\n                          text: \"Minimum Labour Fee\",\r\n                          alignment: \"right\",\r\n                          fontSize: 10,\r\n                        },\r\n                        {\r\n                          text: `$${Stored_Values?.MIN_LABOR?.toFixed(2)}`,\r\n                          alignment: \"right\",\r\n                          fontSize: 10,\r\n                        },\r\n                      ],\r\n                    ]\r\n                  : []),\r\n                [\r\n                  {\r\n                    text: \"Machines, Disposals, Site Access\",\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                  {\r\n                    text: `$${(\r\n                      parseFloat(\r\n                        Quote?.Tool?.Total?.Subtotal?.toFixed(2).replace(\r\n                          /,/g,\r\n                          \"\"\r\n                        )\r\n                      ) +\r\n                      parseFloat(\r\n                        Quote?.AccessArea?.Total?.Subtotal?.toFixed(2).replace(\r\n                          /,/g,\r\n                          \"\"\r\n                        )\r\n                      )\r\n                    )\r\n                      .toFixed(2)\r\n                      .toString()\r\n                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  {\r\n                    colSpan: 2,\r\n                    stack: [\r\n                      {\r\n                        canvas: [\r\n                          {\r\n                            type: \"line\",\r\n                            x1: 0,\r\n                            y1: 0,\r\n                            x2: 250,\r\n                            y2: 0,\r\n                            lineWidth: 1,\r\n                            lineColor: \"#169ADB\",\r\n                          },\r\n                        ],\r\n                        alignment: \"right\",\r\n                        margin: [0, 5, 0, 5],\r\n                      },\r\n                    ],\r\n                  },\r\n                  {},\r\n                ],\r\n                [\r\n                  {\r\n                    text: \"Project Subtotal\",\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                  {\r\n                    text: `$${projectSubtotal}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  {\r\n                    text: `${storeTaxes[0]?.TaxCode} (${storeTaxes[0]?.Rate}%)`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                  {\r\n                    text: `$${estimateGST\r\n                      .toString()\r\n                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  {\r\n                    colSpan: 2,\r\n                    stack: [\r\n                      {\r\n                        canvas: [\r\n                          {\r\n                            type: \"line\",\r\n                            x1: 0,\r\n                            y1: 0,\r\n                            x2: 250,\r\n                            y2: 0,\r\n                            lineWidth: 1,\r\n                            lineColor: \"#169ADB\",\r\n                          },\r\n                        ],\r\n                        alignment: \"right\",\r\n                        margin: [0, 5, 0, 5],\r\n                      },\r\n                    ],\r\n                  },\r\n                  {},\r\n                ],\r\n                [\r\n                  {\r\n                    text: \"Project Total\",\r\n                    bold: true,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                  {\r\n                    text: `$${projectGrandTotal\r\n                      .toFixed(2)\r\n                      .toString()\r\n                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`,\r\n                    bold: true,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n                [\r\n                  {\r\n                    text: \"Projected Project Length\",\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                  {\r\n                    text: `${convertHoursToTimeString(\r\n                      Quote?.Labor?.Items?.reduce(\r\n                        (total, o) => total + o?.Quant,\r\n                        0\r\n                      )\r\n                    )}`,\r\n                    alignment: \"right\",\r\n                    fontSize: 10,\r\n                  },\r\n                ],\r\n              ],\r\n            },\r\n            layout: \"noBorders\",\r\n          },\r\n        ],\r\n      },\r\n      {\r\n        stack: [\r\n          {\r\n            canvas: [\r\n              {\r\n                type: \"rect\",\r\n                x: 0,\r\n                y: 0,\r\n                w: 150,\r\n                h: 20,\r\n                r: 5,\r\n                color: \"#169ADB\",\r\n              },\r\n            ],\r\n            margin: [0, 20, 0, 0],\r\n            alignment: \"right\",\r\n          },\r\n          {\r\n            text: \"Pay Deposit\",\r\n            link: currentUrl,\r\n            alignment: \"right\",\r\n            color: \"#ffffff\",\r\n            bold: true,\r\n            fontFamily: \"LeagueSpartan-Bold\",\r\n            fontSize: 12,\r\n            margin: [0, -18, 37, 0], // Adjust margin to align the text within the rectangle\r\n          },\r\n        ],\r\n      },\r\n    ],\r\n    styles: {\r\n      header: {\r\n        fontSize: 18,\r\n        bold: true,\r\n        margin: [0, 10, 0, 10],\r\n      },\r\n      tableHeader: {\r\n        bold: true,\r\n        fontSize: 10,\r\n        color: \"white\",\r\n      },\r\n    },\r\n  };\r\n\r\n  const downloadpdfmake = async () => {\r\n    var date = Date.now();\r\n    var estimateDateString = moment(date).format(\"ll\");\r\n    pdfMake\r\n      .createPdf(dd)\r\n      .download(`${estimateDateString}, ${Case?.Street} Estimate.pdf`);\r\n  };\r\n\r\n  if (Quote !== null && Quote !== undefined) {\r\n    if (Quote.Material !== null && Quote.Material !== undefined) {\r\n      if (window.$ISMOBILE === true) {\r\n        return (\r\n          <Cont>\r\n            <FlexColumn81vwLightGrey id=\"estimate\">\r\n              {/* <TopMentProposalView\r\n                mobilePageProp={estimateName}\r\n                pageProp={\r\n                 \r\n                  projectName \r\n                }\r\n                estimateName={estimateName}\r\n                homeownerName={homeownerName}\r\n                projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n                scrollinfo={() => {\r\n                  scrollToOverview.scrollIntoView();\r\n                }}\r\n                scrollsupply={() => {\r\n                  scrollToSupply.scrollIntoView();\r\n                }}\r\n                scrollinstall={() => {\r\n                  scrollToInstall.scrollIntoView();\r\n                }}\r\n                scrolldesigns={() => {\r\n                  scrollToDesigns.scrollIntoView();\r\n                }}\r\n                scrollcomments={() => {\r\n                  scrollToComments.scrollIntoView();\r\n                }}\r\n                scrollconfirmation={() => {\r\n                  scrollToConfirm.scrollIntoView();\r\n                }}\r\n              ></TopMentProposalView> */}\r\n\r\n              <FlexRowContFlexStartMobileColumn\r\n                height=\"auto\"\r\n                display={\r\n                  Quote.QuoteStatus === QuoteStatus.RevisionRequested\r\n                    ? \"none\"\r\n                    : \"flex\"\r\n                }\r\n              ></FlexRowContFlexStartMobileColumn>\r\n\r\n              {/* Proposal Overview --------------------------------------------------------------- */}\r\n              <RevisionInstructionsWindow\r\n                open={revisionInstructionDisplay}\r\n                CloseWindow={() => {\r\n                  setRevisionInstructionDisplay(false);\r\n                }}\r\n                StartRevising={() => {\r\n                  ChangeUIToMakeRevisions();\r\n                  setRevisionInstructionDisplay(false);\r\n                }}\r\n              ></RevisionInstructionsWindow>\r\n\r\n              <DuplicateProposalWindow\r\n                quoteObj={Quote}\r\n                onClose={() => {\r\n                  setCloneProposalWindowDisplay(false);\r\n                }}\r\n                open={cloneProposalWindowDisplay}\r\n              ></DuplicateProposalWindow>\r\n              <ImageViewWindow\r\n                open={imageGalleryDisplay}\r\n                imgurl={imagePreviewUrl}\r\n                onClose={() => {\r\n                  setImageGalleryDisplay(false);\r\n                  document.body.style.overflow = \"unset\";\r\n                }}\r\n              ></ImageViewWindow>\r\n              <ContentCont77vw\r\n                height=\"auto\"\r\n                width=\"75vw\"\r\n                mobilepaddingbottom=\"0px\"\r\n                mobilemargin=\"0%\"\r\n              ></ContentCont77vw>\r\n              <ContentCont77vw\r\n                id=\"include-on-pdf\"\r\n                width=\"75vw\"\r\n                height=\"auto\"\r\n                justifycontent=\"space-between\"\r\n                mobilepaddingbottom=\"0px\"\r\n                mobilemargin=\"0%\"\r\n              >\r\n                <FlexColumnFullWidthMargins\r\n                  height=\"auto\"\r\n                  justifycontent=\"flex-start\"\r\n                >\r\n                  <Icon200x200\r\n                    width=\"190px\"\r\n                    objfit=\"cover\"\r\n                    height=\"130px\"\r\n                    src=\"/NRCLogoRegularBlack.png\"\r\n                  ></Icon200x200>\r\n                  <br></br>\r\n                  <FlexDivSpaceAround width=\"29%\">\r\n                    <SmallHeader>\r\n                      <b> New Rhodes Construction </b>\r\n                    </SmallHeader>\r\n                    <SmallHeader>\r\n                      12306 McTavish Road Pitt Meadows BC V3Y1Z1\r\n                    </SmallHeader>\r\n                    <SmallHeader>+1 (778-657-5944)</SmallHeader>\r\n                    <SmallHeader>ar@newrhodesconstruction.com</SmallHeader>\r\n                    <SmallHeader>www.newrhodesconstruction.com</SmallHeader>\r\n                    <SmallHeader>\r\n                      GST/HST Registration No. 781153283RT0001\r\n                    </SmallHeader>\r\n                  </FlexDivSpaceAround>\r\n                </FlexColumnFullWidthMargins>\r\n\r\n                <FlexColumnFullWidthMargins\r\n                  height=\"auto\"\r\n                  justifycontent=\"flex-start\"\r\n                >\r\n                  <FlexDivSpaceAround width=\"29%\">\r\n                    <br></br>\r\n                    <SmallHeader>\r\n                      <b> Customer Information </b>\r\n                    </SmallHeader>\r\n                    <SmallHeader>{Case?.Name}</SmallHeader>\r\n                    <SmallHeader>{Case?.Email}</SmallHeader>\r\n                    <SmallHeader>\r\n                      {Case?.Street} {\", \"}\r\n                      {Case?.City}\r\n                    </SmallHeader>\r\n                    <SmallHeader>{Case?.Phone}</SmallHeader>\r\n                    <SmallHeader>\r\n                      Date: {formatDate(Quote?.EditTime)}\r\n                    </SmallHeader>\r\n                    <br></br>\r\n                  </FlexDivSpaceAround>\r\n                </FlexColumnFullWidthMargins>\r\n              </ContentCont77vw>\r\n\r\n              <ContentCont44Percent height=\"auto\" justifycontent=\"space-around\">\r\n                <FlexColumnFullWidthMargins height=\"100%\">\r\n                  <br></br>\r\n                  <FlexRowContFlexStart height=\"auto\">\r\n                    <LeagueSpartanLarge>Estimate Summary</LeagueSpartanLarge>\r\n                    <Icon30x40pxPointer\r\n                      src=\"/download_icon_pdf.svg\"\r\n                      onClick={() => {\r\n                        downloadpdfmake();\r\n                      }}\r\n                      id=\"exclude-from-pdf\"\r\n                    ></Icon30x40pxPointer>\r\n                    {/* <RegularResponsiveButton id='exclude-from-pdf' onClick={downloadPDF}>Download PDF</RegularResponsiveButton> */}\r\n                  </FlexRowContFlexStart>\r\n                  <br></br>\r\n                  <SummaryContainer height=\"100%\" justifycontent=\"space-around\">\r\n                    {/* <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                   <LeagueSpartanHeaderSmall>Material Supply</LeagueSpartanHeaderSmall>\r\n                    </SummaryContainerItems> */}\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Materials:</MediumHeader>\r\n                      <MediumHeader>\r\n                        {\" \"}\r\n                        $\r\n                        {Quote?.Material?.Total?.Subtotal?.toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Delivery?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Delivery:</MediumHeader>\r\n                      <MediumHeader>\r\n                        {\" \"}\r\n                        $\r\n                        {Quote?.Delivery?.Total?.Subtotal?.toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    <br></br>\r\n\r\n                    {/* <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                   <LeagueSpartanHeaderSmall>Installation</LeagueSpartanHeaderSmall>\r\n                    </SummaryContainerItems> */}\r\n\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Number(projectInstallSubtotal).toFixed(2) >\r\n                        Stored_Values.MIN_LABOR\r\n                          ? \"flex\"\r\n                          : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Labour:</MediumHeader>\r\n                      <MediumHeader>\r\n                        $\r\n                        {Number(\r\n                          projectInstallSubtotal + removalsHeader8Subtotal\r\n                        )\r\n                          .toFixed(2)\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems\r\n                      display={\r\n                        Number(projectInstallSubtotal).toFixed(2) >\r\n                        Stored_Values.MIN_LABOR\r\n                          ? \"none\"\r\n                          : \"flex\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Minimum Labour Fee:</MediumHeader>\r\n                      <MediumHeader>\r\n                        ${Stored_Values?.MIN_LABOR?.toFixed(2)}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    <SummaryContainerItems>\r\n                      <MediumHeader>\r\n                        Machines, Disposals, Site Access\r\n                      </MediumHeader>\r\n                      {/* <MediumHeader>\r\n                        ${\" \"}\r\n                        {Quote?.Tool?.Total?.Subtotal?.toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader> */}\r\n                      <MediumHeader>\r\n                        ${\" \"}\r\n                        {(\r\n                          parseFloat(\r\n                            Quote?.Tool?.Total?.Subtotal?.toFixed(2).replace(\r\n                              /,/g,\r\n                              \"\"\r\n                            )\r\n                          ) +\r\n                          parseFloat(\r\n                            Quote?.AccessArea?.Total?.Subtotal?.toFixed(\r\n                              2\r\n                            ).replace(/,/g, \"\")\r\n                          )\r\n                        )\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n                    {/* <SummaryContainerItems\r\n                      display={\r\n                        'flex'\r\n                      }\r\n                    >\r\n                      <MediumHeader>Removals:</MediumHeader>\r\n                      <MediumHeader>\r\n                        ${\" \"}\r\n                        {((removalsHeader8Subtotal))\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n                    {/* <SummaryContainerItems\r\n                      display={\r\n                        Quote?.AccessArea?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                      <MediumHeader>Site Access:</MediumHeader>\r\n                      <MediumHeader>\r\n                        $\r\n                        {Quote?.AccessArea?.Total?.Subtotal?.toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n\r\n                    <StyledHRPropColour\r\n                      border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                    ></StyledHRPropColour>\r\n                    <SummaryContainerItems>\r\n                      <LeagueSpartanHeaderSmall>\r\n                        Project Subtotal:\r\n                      </LeagueSpartanHeaderSmall>\r\n                      <MediumHeader>\r\n                        $\r\n                        {\r\n                          projectSubtotal\r\n                          // .toFixed(2)\r\n                          // .toString()\r\n                          // .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    <SummaryContainerItems>\r\n                      <MediumHeader>\r\n                        {storeTaxes[0]?.TaxCode} ({storeTaxes[0]?.Rate}%)\r\n                      </MediumHeader>\r\n                      <MediumHeader>\r\n                        $\r\n                        {estimateGST\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems>\r\n\r\n                    {/* <SummaryContainerItems>\r\n                  <MediumHeader>\r\n                      {storeTaxes[1]?.TaxCode} ({storeTaxes[1]?.Rate}%)\r\n                    </MediumHeader>\r\n                    <MediumHeader>\r\n                      ${estimatePST.toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                    </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n\r\n                    <StyledHRGreenBreak></StyledHRGreenBreak>\r\n                    <SummaryContainerItems>\r\n                      <LeagueSpartanRegular>\r\n                        Project Total:\r\n                      </LeagueSpartanRegular>\r\n                      <LeagueSpartanRegular>\r\n                        {\" \"}\r\n                        $\r\n                        {projectGrandTotal\r\n                          .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </LeagueSpartanRegular>\r\n                    </SummaryContainerItems>\r\n                    <FlexColumnContCenterAlign>\r\n                     \r\n                    {\r\n  Quote?.QuoteStatus === QuoteStatus.Buy_Install ? (\r\n    <RegularResponsiveButton\r\n      fontsize=\"14px\"\r\n      bgcolor={ColorPalette.PrimaryGreen}\r\n      lineheight=\"30px\"\r\n      width=\"95%\"\r\n      height=\"30px\"\r\n      display={'block'}\r\n      onClick={() => {\r\n        console.log('Deposit Paid!')\r\n      }}\r\n    >Deposit Paid!\r\n    </RegularResponsiveButton>\r\n  ) : (\r\n    <div>\r\n    <RegularResponsiveButton\r\n      fontsize=\"14px\"\r\n      lineheight=\"30px\"\r\n      width=\"95%\"\r\n      height=\"30px\"\r\n      display={'block'}\r\n      onClick={() => {\r\n        ValidateAgreement(supplyOnlySelected, params.caseId, params.quoteId);\r\n      }}\r\n    >\r\n      Pay Deposit $\r\n      {deposit < Stored_Values.MIN_DEPOSIT\r\n        ? Stored_Values.MIN_DEPOSIT.toFixed(2)\r\n            .toString()\r\n            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n        : deposit\r\n            .toFixed(2)\r\n            .toString()\r\n            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}{\" \"}\r\n    </RegularResponsiveButton>\r\n     <TinyTextItalics color={ColorPalette.DarkGrey}>\r\n                        Project deposit is non-refundable. By paying the\r\n                        deposit, you have agreed that you have read and\r\n                        understood our{\" \"}\r\n                        <span>\r\n                          {\" \"}\r\n                          <a\r\n                            rel=\"noreferrer\"\r\n                            href=\"https://newrhodesconstruction.com/rl-terms-of-service/\"\r\n                            target=\"_blank\"\r\n                          >\r\n                            {\" \"}\r\n                            Terms of Service{\" \"}\r\n                          </a>{\" \"}\r\n                        </span>{\" \"}\r\n                      </TinyTextItalics>\r\n\r\n                      {paymentURL !== '' ? (\r\n                          <TinyTextItalics color={ColorPalette.DarkGrey}>\r\n                          Deposit Button Not Working? Click here:{\" \"}\r\n                          <span>\r\n                            {\" \"}\r\n                            <a\r\n                              rel=\"noreferrer\"\r\n                              href={paymentURL}\r\n                            >\r\n                              {\" \"}\r\n                              Pay Deposit{\" \"}\r\n                            </a>{\" \"}\r\n                          </span>{\" \"}\r\n                        </TinyTextItalics>\r\n                      ) : null }\r\n                      </div>\r\n  )\r\n}\r\n\r\n                      {/* <RegularResponsiveButton\r\n                        display={\r\n                          userinfo.Role === UserRole.Manager ? \"block\" : \"none\"\r\n                        }\r\n                        onClick={() => {\r\n                          history.push(\r\n                            `/quoteappointment/${params.Id}/${params.storeId}/${params.quoteId}`\r\n                          );\r\n                        }}\r\n                      >\r\n                        Make Appointment\r\n                      </RegularResponsiveButton> */}\r\n                     \r\n                    </FlexColumnContCenterAlign>\r\n                  </SummaryContainer>\r\n                </FlexColumnFullWidthMargins>\r\n              </ContentCont44Percent>\r\n\r\n              <FlexColumnFullWidthMargins>\r\n                <br></br>\r\n                <FlexRowContFlexStart height=\"auto\">\r\n                  <LeagueSpartanLarge whitespace=\"wrap\">\r\n                    Estimate Details - {estimateName}\r\n                  </LeagueSpartanLarge>\r\n                </FlexRowContFlexStart>\r\n                <TextAreaAutoResizeNoBorder\r\n                  id=\"text\"\r\n                  value={Quote.Notes}\r\n                ></TextAreaAutoResizeNoBorder>\r\n              </FlexColumnFullWidthMargins>\r\n\r\n              <ContentCont77vw\r\n                display={Quote.Photos.length > 0 ? \"block\" : \"none\"}\r\n              >\r\n                <FlexColumnFullWidth>\r\n                  <FlexRowContFlexStart>\r\n                    <LeagueSpartanLarge>Construction Plans</LeagueSpartanLarge>\r\n                  </FlexRowContFlexStart>\r\n\r\n                  <br></br>\r\n                  <GridContainer3Wide>\r\n                    {Quote.Photos.map((o, i) => {\r\n                      return o.File?.includes(\".pdf\") ||\r\n                        o.File?.includes(\".PDF\") ? (\r\n                        <FlexContainerPhotos key={i}>\r\n                          <a\r\n                            id={i}\r\n                            rel=\"noreferrer\"\r\n                            href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                            target={\"_blank\"}\r\n                            style={{ textDecoration: \"none\", color: \"black\" }}\r\n                          >\r\n                            <embed\r\n                              target={\"_blank\"}\r\n                              src={\"/pdficon.png\"}\r\n                              width={\"150px\"}\r\n                              style={{ backgroundColor: \"white\" }}\r\n                              height={\"200px\"}\r\n                            ></embed>\r\n                            <FlexContFullWidthHeightJustifyCenter>\r\n                              <LargeText>{o.Caption}</LargeText>\r\n                            </FlexContFullWidthHeightJustifyCenter>\r\n                          </a>\r\n                        </FlexContainerPhotos>\r\n                      ) : (\r\n                        <FlexContainerPhotos key={i}>\r\n                          <Image375px\r\n                            onClick={() => {\r\n                              DisplayImageInGallery(o.File);\r\n                            }}\r\n                            src={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                          ></Image375px>\r\n                          <FlexContFullWidthHeightJustifyCenter>\r\n                            <LargeText>{o.Caption}</LargeText>\r\n                          </FlexContFullWidthHeightJustifyCenter>\r\n                        </FlexContainerPhotos>\r\n                      );\r\n                    })}\r\n                  </GridContainer3Wide>\r\n                </FlexColumnFullWidth>\r\n              </ContentCont77vw>\r\n\r\n              <FlexRowContAutox100PercentMobileColumn\r\n                alignitems=\"baseline\"\r\n                margin=\"0\"\r\n              >\r\n                <ContentContQuote id=\"install\">\r\n                  <FlexColumnFullWidth>\r\n                    <FlexRowCont100PercentSpaceBetween mobileflexdirection=\"column\">\r\n                      <FlexColumnFullWidth mobilewidth=\"90vw\">\r\n                        <FlexRowContFlexStart>\r\n                          <LeagueSpartanLarge>\r\n                            Project Estimate\r\n                          </LeagueSpartanLarge>\r\n                        </FlexRowContFlexStart>\r\n                      </FlexColumnFullWidth>\r\n                    </FlexRowCont100PercentSpaceBetween>\r\n                  </FlexColumnFullWidth>\r\n\r\n                  <FlexColumnFullWidth\r\n                    display={installEstimateDisplay}\r\n                    height=\"auto\"\r\n                    ref={ref2}\r\n                  >\r\n                    <AutoSizeOverflowY>\r\n                      <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n\r\n                      {Quote.Tags.map((t, j) => {\r\n                        MaterialSum = 0;\r\n                        InstallSum = 0;\r\n                        TotalSum = 0;\r\n                        let totalAggregatedDeliveryCostWithTagId = 0;\r\n\r\n                        const primaryItems = Quote.Material.Items.filter(\r\n                          (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                        );\r\n\r\n                        primaryItems.forEach((o) => {\r\n                          const materialSub = o.SubtotalWithRelatedItems;\r\n                          const installSub = o.LaborSubtotalWithRelatedItems;\r\n\r\n                          MaterialSum += materialSub;\r\n                          InstallSum += installSub;\r\n                          TotalSum += materialSub + installSub;\r\n                        });\r\n\r\n                        Quote.Removal.Items.filter(\r\n                          (removalItem) => removalItem.Tag_Id === t.Id\r\n                        ).forEach((o) => {\r\n                          const removalTotal = o.Price + o.LaborSubtotal;\r\n                          // TotalSum += removalTotal;\r\n                        });\r\n\r\n                        MaterialSum += totalAggregatedDeliveryCostWithTagId;\r\n                        // TotalSum += totalAggregatedDeliveryCostWithTagId;\r\n\r\n                        return (\r\n                          <div>\r\n                            <div>\r\n                              <br></br>\r\n\r\n                              <FlexRowCont100PercentSpaceBetween>\r\n                                <LeagueSpartanRegular>\r\n                                  {t.TagName}\r\n                                </LeagueSpartanRegular>\r\n\r\n                                <LeagueSpartanRegular>\r\n                                  {\"$\" +\r\n                                    TotalSum.toFixed(2).replace(\r\n                                      /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                      \",\"\r\n                                    )}\r\n                                </LeagueSpartanRegular>\r\n                              </FlexRowCont100PercentSpaceBetween>\r\n\r\n                              <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n\r\n                              {Quote.Material.Items.filter(\r\n                                (item) =>\r\n                                  item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                              ).map((o, i) => (\r\n                                <MobileQuoteItem\r\n                                  noChange={o.NoChange}\r\n                                  key={i}\r\n                                  inputheaderposition={headerInputShown}\r\n                                  OutputValue={(value) => {\r\n                                    UpdateQuoteItemQuantity(o.Id, value);\r\n                                  }}\r\n                                  quoteItemObj={o}\r\n                                  parentid={o.Parent_Id}\r\n                                  header1=\"Delete\"\r\n                                  header2={o.Name}\r\n                                  subheader2notes={\r\n                                    o.Notes == null ? \"\" : o.Notes + \"\"\r\n                                  }\r\n                                  subheader2={\r\n                                    o.Description === null ? \"\" : o.Description\r\n                                  }\r\n                                  header3={\r\n                                    o.Quant.toFixed(2).replace(\r\n                                      /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                      \",\"\r\n                                    ) +\r\n                                    \" \" +\r\n                                    o.DisplayUnit\r\n                                  }\r\n                                  header4={\r\n                                    \"$\" +\r\n                                    o.UnitPrice.toFixed(2).replace(\r\n                                      /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                      \",\"\r\n                                    )\r\n                                  }\r\n                                  header5={\r\n                                    \"$\" +\r\n                                    o.Price.toFixed(2).replace(\r\n                                      /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                      \",\"\r\n                                    )\r\n                                  }\r\n                                  header6={\r\n                                    \"$\" + (o.LaborSubtotal / o.Quant).toFixed(4)\r\n                                  }\r\n                                  header7={\r\n                                    \"$\" +\r\n                                    o.LaborSubtotal.toFixed(2).replace(\r\n                                      /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                      \",\"\r\n                                    )\r\n                                  }\r\n                                  header8={\r\n                                    \"$\" +\r\n                                    (\r\n                                      parseFloat(o.Price.toFixed(2)) +\r\n                                      parseFloat(o.LaborSubtotal.toFixed(2))\r\n                                    )\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header3title=\"Quantity\"\r\n                                  header4title=\"Unit Rate\"\r\n                                  header5title=\"Material Subtotal\"\r\n                                  header6title=\"Install Rate\"\r\n                                  header7title=\"Install Subtotal\"\r\n                                ></MobileQuoteItem>\r\n                              ))}\r\n                            </div>\r\n                          </div>\r\n                        );\r\n                      })}\r\n\r\n                      <div>\r\n                        <br></br>\r\n\r\n                        <FlexRowCont100PercentSpaceBetween>\r\n                          <LeagueSpartanRegular\r\n                            display={generalMaterialsHeader}\r\n                          >\r\n                            General Materials\r\n                          </LeagueSpartanRegular>\r\n\r\n\r\n                          {finalUntaggedTotalSubtotal > 0 ? (\r\n\r\n                          <LeagueSpartanRegular>\r\n                            {`$${finalUntaggedTotalSubtotal\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          </LeagueSpartanRegular>\r\n                                                  ) : null}\r\n\r\n                        </FlexRowCont100PercentSpaceBetween>\r\n\r\n\r\n                        <StyledHRGreenBreakThick\r\n                          mobiledisplay={generalMaterialsHeader}\r\n                        ></StyledHRGreenBreakThick>\r\n\r\n                        {Quote.Material.Items.map((o, i) => {\r\n                          return o.Parent_Id === 0 && o.Tag_Id === 0 ? (\r\n                            <MobileQuoteItem\r\n                              key={i}\r\n                              quoteItemObj={o}\r\n                              inputheaderposition={headerInputShown}\r\n                              OutputValue={(value) => {\r\n                                UpdateQuoteItemQuantity(o.Id, value);\r\n                              }}\r\n                              noChange={o.NoChange}\r\n                              parentid={o.Parent_Id}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2={\r\n                                o.Description === null ? \"\" : o.Description\r\n                              }\r\n                              subheader2notes={\r\n                                o.Notes == null ? \"\" : o.Notes + \"\"\r\n                              }\r\n                              header3={o.Quant.toFixed(2) + \" \" + o.DisplayUnit}\r\n                              header4={\r\n                                \"$\" +\r\n                                o.UnitPrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header5={\r\n                                \"$\" +\r\n                                o.Price.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header6={\r\n                                \"$\" + (o.LaborSubtotal / o.Quant).toFixed(4)\r\n                              }\r\n                              header7={\r\n                                \"$\" +\r\n                                o.LaborSubtotal.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header8={\r\n                                \"$\" +\r\n                                (\r\n                                  parseFloat(o.Price.toFixed(2)) +\r\n                                  parseFloat(o.LaborSubtotal.toFixed(2))\r\n                                )\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              }\r\n                              header3title=\"Quantity\"\r\n                              header4title=\"Unit Rate\"\r\n                              header5title=\"Material Subtotal\"\r\n                              header6title=\"Install Rate\"\r\n                              header7title=\"Install Subtotal\"\r\n                            ></MobileQuoteItem>\r\n                          ) : null;\r\n                        })}\r\n                      </div>\r\n\r\n                      <LeagueSpartanRegular display={deliveryHeader}>\r\n                        Delivery\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        display={deliveryHeader}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      {/* {Quote.Delivery.Tools.map((o, i) => ( */}\r\n                      <MobileQuoteItem\r\n                        // key={i}\r\n                        // header1=\" \"\r\n                        header2={\"Delivery Cost\"}\r\n                        header8={\r\n                          \"$\" +\r\n                          deliveryTotal\r\n                            ?.toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      ></MobileQuoteItem>\r\n                      {/* ))} */}\r\n\r\n                      <LeagueSpartanRegular display={removalHeader}>\r\n                        Removals\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        mobiledisplay={removalHeader}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      {Quote.Removal.Items.map((o, i) => (\r\n                        <MobileQuoteItem\r\n                          key={i}\r\n                          header1=\"Delete\"\r\n                          header2={o.Name}\r\n                          subheader2notes={o.Notes == null ? \"\" : o.Notes + \"\"}\r\n                          header3={\r\n                            o.Quant.toFixed(2).replace(\r\n                              /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              \",\"\r\n                            ) +\r\n                            \" \" +\r\n                            o.DisplayUnit\r\n                          }\r\n                          header4={\r\n                            \"$\" +\r\n                            ((o.Price + o.LaborSubtotal) / o.Quant)\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          }\r\n                          header5={\r\n                            \"$\" +\r\n                            (o.Price + o.LaborSubtotal)\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          }\r\n                          header8={\r\n                            \"$\" +\r\n                            (o.Price + o.LaborSubtotal)\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          }\r\n                          header3title=\"Quantity\"\r\n                          header4title=\"Removal Rate\"\r\n                          header5title=\"Removal Subtotal\"\r\n                        ></MobileQuoteItem>\r\n                      ))}\r\n\r\n                      {/* <LeagueSpartanRegular display={accessDisplay}>\r\n                        Access Area\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        display={accessDisplay}\r\n                      ></StyledHRGreenBreakThick> */}\r\n\r\n                      {/* {Quote.AccessArea.Items.map((o, i) => ( */}\r\n\r\n                      {/* ))} */}\r\n\r\n                      <LeagueSpartanRegular display={toolsmachinesHeader}>\r\n                        Machines, Disposal, Access\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        mobiledisplay={toolsmachinesHeader}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      {Quote.Tool.Tools.map((o, i) => {\r\n                        return o?.ToolName.includes(\"Wheelbarrow\") ||\r\n                          o?.ToolName.includes(\"Suggested\") ? null : (\r\n                          <MobileQuoteItem\r\n                            key={i}\r\n                            header1=\"Delete\"\r\n                            header2={o.ToolName}\r\n                            subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                            itemLink={o.VideoUrl}\r\n                            header3={\r\n                              // o.RentalLength > 0\r\n                              //   ? o.RentalLength.toFixed(2).replace(\r\n                              //       /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                              //       \",\"\r\n                              //     ) + \" hr\"\r\n                              //   :\r\n                              o.Quant.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                            header4={\r\n                              o.RentalRate > 0\r\n                                ? \"$\" +\r\n                                  (o.RentalRate * o.RentalLength)\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                : \"$\" +\r\n                                  o.BasePrice.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                            }\r\n                            header5={\r\n                              o.RentalRate > 0 && o.BasePrice > 0\r\n                                ? \"$\" +\r\n                                  o.BasePrice.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                : \"\"\r\n                            }\r\n                            header8={\r\n                              \"$\" +\r\n                              o.Price.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              )\r\n                            }\r\n                            header3title=\"Quantity\"\r\n                            header4title=\"Rental Rate\"\r\n                            header5title={\r\n                              o.RentalRate > 0 && o.BasePrice > 0\r\n                                ? \"Move Cost Per Machine\"\r\n                                : \"\"\r\n                            }\r\n                          ></MobileQuoteItem>\r\n                        );\r\n                      })}\r\n      {accessTotal > 0 ? (\r\n  <MobileQuoteItem\r\n    // key={i}\r\n    // header1=\"Delete\"\r\n    header2=\"Access Area Cost\"\r\n    header8={\r\n      \"$\" +\r\n      accessTotal\r\n        .toFixed(2)\r\n        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n    }\r\n    // subheader2={o.Notes}\r\n    // header3={\r\n    //   o.Quant.toFixed(2).replace(\r\n    //     /\\B(?=(\\d{3})+(?!\\d))/g,\r\n    //     \",\"\r\n    //   ) +\r\n    //   \" \" +\r\n    //   o.DisplayUnit\r\n    // }\r\n    // header4={\r\n    //   \"$\" +\r\n    //   o.UnitPrice.toFixed(2).replace(\r\n    //     /\\B(?=(\\d{3})+(?!\\d))/g,\r\n    //     \",\"\r\n    //   ) +\r\n    //   \"\" +\r\n    //   o.DisplayUnit\r\n    // }\r\n    // header5={\r\n    //   \"$\" +\r\n    //   o.Price.toFixed(2).replace(\r\n    //     /\\B(?=(\\d{3})+(?!\\d))/g,\r\n    //     \",\"\r\n    //   )\r\n    // }\r\n\r\n    // header3title=\"Quantity\"\r\n    // header4title=\"Access Rate\"\r\n    // header5title=\"Access Subtotal\"\r\n  />\r\n) : null}\r\n\r\n\r\n                      <LeagueSpartanRegular display={laborDetailToggleView}>\r\n                        Labour Breakdown (Staff Only)\r\n                      </LeagueSpartanRegular>\r\n\r\n                      <StyledHRGreenBreakThick\r\n                        mobiledisplay={laborDetailToggleView}\r\n                      ></StyledHRGreenBreakThick>\r\n\r\n                      <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n\r\n                      {laborDetailToggleView === \"flex\"\r\n                        ? Quote.Labor.Items.map((o, i) => (\r\n                            <MobileQuoteItem\r\n                              key={i}\r\n                              header1=\"Delete\"\r\n                              header2={o.Name}\r\n                              subheader2={o.Notes}\r\n                              header6={\r\n                                o.Quant.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                ) + \" hr\"\r\n                              }\r\n                              header7={\r\n                                \"$\" +\r\n                                o.UnitPrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                              header8={\r\n                                \"$\" +\r\n                                o.Price.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              }\r\n                            ></MobileQuoteItem>\r\n                          ))\r\n                        : null}\r\n\r\n                      <br></br>\r\n                    </AutoSizeOverflowY>\r\n                  </FlexColumnFullWidth>\r\n                </ContentContQuote>\r\n              </FlexRowContAutox100PercentMobileColumn>\r\n            </FlexColumn81vwLightGrey>\r\n\r\n            <FixedIconToTop\r\n              src=\"/BackToTopArrowAlt.svg\"\r\n              onClick={() => {\r\n                window.scrollTo(0, 0);\r\n              }}\r\n            ></FixedIconToTop>\r\n          </Cont>\r\n        );\r\n      }\r\n      /////////////////////////// MOBILE ->>>>>>>>>>>>>\r\n\r\n      /////////////////////////// DESKTOP ->>>>>>>>>>>>>\r\n\r\n      return (\r\n        <Cont>\r\n          <FlexColumn81vwLightGrey\r\n            minheight=\"auto\"\r\n            height=\"fit-content\"\r\n            id=\"estimate\"\r\n            width=\"100.5vw\"\r\n          >\r\n            {/* <div id='exclude-from-pdf' style={{height: \"100%\", position: \"relative\"}}> */}\r\n            <TopMentProposalView\r\n              id=\"exclude-from-pdf\"\r\n              quoteObj={Quote}\r\n              mobilePageProp={estimateName}\r\n              pageProp={projectName}\r\n              estimateName={estimateName}\r\n              homeownerName={homeownerName}\r\n              projectsbottom={\"4px solid  \" + ColorPalette.PrimaryButtonBlue}\r\n              onBack={() => {\r\n                RouteToPrevious(userinfo.Role);\r\n              }}\r\n              scrollinfo={() => {\r\n                scrollToOverview.scrollIntoView();\r\n              }}\r\n              scrollsupply={() => {\r\n                scrollToSupply.scrollIntoView();\r\n              }}\r\n              scrollinstall={() => {\r\n                scrollToInstall.scrollIntoView();\r\n              }}\r\n              scrolldesigns={() => {\r\n                scrollToDesigns.scrollIntoView();\r\n              }}\r\n              scrollcomments={() => {\r\n                scrollToComments.scrollIntoView();\r\n              }}\r\n              scrollconfirmation={() => {\r\n                scrollToConfirm.scrollIntoView();\r\n              }}\r\n            ></TopMentProposalView>\r\n            {/* </div> */}\r\n            {/* Approval --------------------------------------------------------------- */}\r\n\r\n            <FlexRowContFlexStartMobileColumn\r\n              height=\"auto\"\r\n              display={\r\n                Quote.QuoteStatus === QuoteStatus.RevisionRequested\r\n                  ? \"none\"\r\n                  : \"flex\"\r\n              }\r\n            >\r\n              <FlexRowCont alignitems=\"stretch\" height=\"auto\" width=\"100%\">\r\n                <ContentCont77vw\r\n                  id=\"include-on-pdf\"\r\n                  width=\"75vw\"\r\n                  height=\"auto\"\r\n                  justifycontent=\"space-between\"\r\n                >\r\n                  <FlexRowCont height=\"auto\" justifycontent=\"flex-start\">\r\n                    <Icon200x200\r\n                      width=\"190px\"\r\n                      margin=\"0%\"\r\n                      src=\"/NRCLogoRegularBlack.png\"\r\n                    ></Icon200x200>\r\n                    <hr></hr>\r\n                    <FlexDivSpaceAround width=\"29%\">\r\n                      <br></br>\r\n                      <SmallHeader>\r\n                        <b> Customer Information </b>\r\n                      </SmallHeader>\r\n                      <SmallHeader>{Case?.Name}</SmallHeader>\r\n                      <SmallHeader>{Case?.Email}</SmallHeader>\r\n                      <SmallHeader>\r\n                        {Case?.Street} {\", \"}\r\n                        {Case?.City}\r\n                      </SmallHeader>\r\n                      <SmallHeader>{Case?.Phone}</SmallHeader>\r\n                      <SmallHeader>\r\n                        Date: {formatDate(Quote?.EditTime)}\r\n                      </SmallHeader>\r\n\r\n                      <br></br>\r\n                    </FlexDivSpaceAround>\r\n                    <hr></hr>\r\n                    <FlexDivSpaceAround width=\"29%\">\r\n                      <SmallHeader>\r\n                        <b> New Rhodes Construction </b>\r\n                      </SmallHeader>\r\n                      <SmallHeader>\r\n                        12306 McTavish Road Pitt Meadows BC V3Y1Z1\r\n                      </SmallHeader>\r\n                      <SmallHeader>+1 (778-657-5944)</SmallHeader>\r\n                      <SmallHeader>ar@newrhodesconstruction.com</SmallHeader>\r\n                      <SmallHeader>\r\n                        GST/HST Registration No. 781153283RT0001\r\n                      </SmallHeader>\r\n                    </FlexDivSpaceAround>\r\n                  </FlexRowCont>\r\n\r\n                  <FlexColumnFullWidthMargins>\r\n                    <br></br>\r\n                    <FlexRowContFlexStart height=\"auto\">\r\n                      <LeagueSpartanLarge whitespace=\"pre-wrap\">\r\n                        Estimate Details - {estimateName}\r\n                      </LeagueSpartanLarge>\r\n                    </FlexRowContFlexStart>\r\n\r\n                    <TextAreaAutoResizeNoBorder\r\n                      id=\"text\"\r\n                      value={Quote.Notes}\r\n                    ></TextAreaAutoResizeNoBorder>\r\n                  </FlexColumnFullWidthMargins>\r\n                </ContentCont77vw>\r\n                <ContentCont77vw\r\n                  width=\"75vw\"\r\n                  height=\"auto\"\r\n                  justifycontent=\"space-around\"\r\n                >\r\n                  <FlexColumnFullWidthMargins height=\"100%\">\r\n                    <br></br>\r\n                    <FlexRowContFlexStart height=\"auto\">\r\n                      <LeagueSpartanLarge>Estimate Summary</LeagueSpartanLarge>\r\n                      <Icon30x40pxPointer\r\n                        src=\"/download_icon_pdf.svg\"\r\n                        onClick={() => {\r\n                          downloadpdfmake();\r\n                        }}\r\n                        id=\"exclude-from-pdf\"\r\n                      ></Icon30x40pxPointer>\r\n                      {/* <RegularResponsiveButton id='exclude-from-pdf' onClick={downloadPDF}>Download PDF</RegularResponsiveButton> */}\r\n                    </FlexRowContFlexStart>\r\n                    <SummaryContainer\r\n                      height=\"100%\"\r\n                      justifycontent=\"space-around\"\r\n                    >\r\n                      {/* <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                   <LeagueSpartanHeaderSmall>Material Supply</LeagueSpartanHeaderSmall>\r\n                    </SummaryContainerItems> */}\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Materials:</MediumHeader>\r\n                        <MediumHeader>\r\n                          {\" \"}\r\n                          $\r\n                          {Quote?.Material?.Total?.Subtotal?.toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Quote?.Delivery?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Deliveries:</MediumHeader>\r\n                        <MediumHeader>\r\n                          {\" \"}\r\n                          $\r\n                          {Quote?.Delivery?.Total?.Subtotal?.toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n\r\n                      {/* <SummaryContainerItems\r\n                      display={\r\n                        Quote?.Material?.Total?.Subtotal > 0 ? \"flex\" : \"none\"\r\n                      }\r\n                    >\r\n                   <LeagueSpartanHeaderSmall>Installation</LeagueSpartanHeaderSmall>\r\n                    </SummaryContainerItems> */}\r\n\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Number(projectInstallSubtotal).toFixed(2) >\r\n                          Stored_Values.MIN_LABOR\r\n                            ? \"flex\"\r\n                            : \"none\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Labour:</MediumHeader>\r\n                        <MediumHeader key={removalsHeader8Subtotal}>\r\n                          $\r\n                          {Number(\r\n                            projectInstallSubtotal + removalsHeader8Subtotal\r\n                          )\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems\r\n                        display={\r\n                          Number(projectInstallSubtotal).toFixed(2) >\r\n                          Stored_Values.MIN_LABOR\r\n                            ? \"none\"\r\n                            : \"flex\"\r\n                        }\r\n                      >\r\n                        <MediumHeader>Minimum Labour Fee:</MediumHeader>\r\n                        <MediumHeader>\r\n                          ${Stored_Values?.MIN_LABOR?.toFixed(2)}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems>\r\n                        <MediumHeader>\r\n                          Machines, Disposals, Site Access\r\n                        </MediumHeader>\r\n\r\n                        <MediumHeader>\r\n                          ${\" \"}\r\n                          {(\r\n                            parseFloat(\r\n                              Quote?.Tool?.Total?.Subtotal?.toFixed(2).replace(\r\n                                /,/g,\r\n                                \"\"\r\n                              )\r\n                            ) +\r\n                            parseFloat(\r\n                              Quote?.AccessArea?.Total?.Subtotal?.toFixed(\r\n                                2\r\n                              ).replace(/,/g, \"\")\r\n                            )\r\n                          )\r\n                            .toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      {/* <SummaryContainerItems\r\n                    >\r\n                      <MediumHeader>Removals:</MediumHeader>\r\n                      <MediumHeader>\r\n                        ${\" \"}\r\n                        {((removalsHeader8Subtotal))\r\n                        .toFixed(2)\r\n                          .toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                      </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n\r\n                      <StyledHRPropColour\r\n                        border={`0.5px solid ${ColorPalette.PrimaryButtonBlue}`}\r\n                      ></StyledHRPropColour>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanHeaderSmall>\r\n                          Project Subtotal:\r\n                        </LeagueSpartanHeaderSmall>\r\n                        <MediumHeader>${projectSubtotal}</MediumHeader>\r\n                      </SummaryContainerItems>\r\n\r\n                      <SummaryContainerItems>\r\n                        <MediumHeader>\r\n                          {storeTaxes[0]?.TaxCode} ({storeTaxes[0]?.Rate}%)\r\n                        </MediumHeader>\r\n                        <MediumHeader>\r\n                          $\r\n                          {estimateGST\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </MediumHeader>\r\n                      </SummaryContainerItems>\r\n                      {/* <SummaryContainerItems>\r\n                  <MediumHeader>\r\n                      {storeTaxes[1]?.TaxCode} ({storeTaxes[1]?.Rate}%)\r\n                    </MediumHeader>\r\n                    <MediumHeader>\r\n                      ${estimatePST.toString()\r\n                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                    </MediumHeader>\r\n                    </SummaryContainerItems> */}\r\n                      <StyledHRGreenBreak></StyledHRGreenBreak>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanRegular>\r\n                          Project Total:\r\n                        </LeagueSpartanRegular>\r\n                        <LeagueSpartanRegular>\r\n                          {\" \"}\r\n                          $\r\n                          {projectGrandTotal\r\n                            .toFixed(2)\r\n                            .toString()\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        </LeagueSpartanRegular>\r\n                      </SummaryContainerItems>\r\n                      <SummaryContainerItems>\r\n                        <LeagueSpartanRegular>\r\n                          Projected Project Length:\r\n                        </LeagueSpartanRegular>\r\n                        <LeagueSpartanRegular>\r\n                          {convertHoursToTimeString(\r\n                            Quote.Labor.Items.reduce(\r\n                              (total, o) => total + o?.Quant,\r\n                              0\r\n                            )\r\n                          )}\r\n                        </LeagueSpartanRegular>\r\n                      </SummaryContainerItems>\r\n                      <FlexColumnContCenterAlign id=\"exclude-from-pdf\">\r\n                      {\r\n  Quote?.QuoteStatus === QuoteStatus.Buy_Install ? (\r\n    <RegularResponsiveButton\r\n    fontsize=\"14px\"\r\n    bgcolor={ColorPalette.PrimaryGreen}\r\n    lineheight=\"30px\"\r\n    width=\"95%\"\r\n    height=\"30px\"\r\n    display={'block'}\r\n    onClick={() => {\r\n      console.log('Deposit Paid!')\r\n    }}\r\n  >Deposit Paid!\r\n  </RegularResponsiveButton>      \r\n) : (\r\n  <div>\r\n  <RegularResponsiveButton\r\n  fontsize=\"14px\"\r\n  lineheight=\"30px\"\r\n  width=\"95%\"\r\n  height=\"30px\"\r\n  display={'block'}\r\n  ref={buttonRef}\r\n  onClick={() => {\r\n    ValidateAgreement(\r\n      supplyOnlySelected,\r\n      params.caseId,\r\n      params.quoteId\r\n    );\r\n  }}\r\n>\r\n  Pay Deposit $\r\n  {deposit < Stored_Values.MIN_DEPOSIT\r\n    ? Stored_Values.MIN_DEPOSIT.toFixed(2)\r\n        .toString()\r\n        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n    : deposit\r\n        .toFixed(2)\r\n        .toString()\r\n        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}{\" \"}\r\n</RegularResponsiveButton>\r\n <TinyTextItalics\r\n color={ColorPalette.DarkGrey}\r\n marginleft=\"-5px\"\r\n>\r\n Project deposit is non-refundable. By paying the\r\n deposit, you have agreed that you have read and\r\n understood our{\" \"}\r\n <span>\r\n   {\" \"}\r\n   <a\r\n     rel=\"noreferrer\"\r\n     href=\"https://newrhodesconstruction.com/rl-terms-of-service/\"\r\n     target=\"_blank\"\r\n   >\r\n     {\" \"}\r\n     Terms of Service{\" \"}\r\n   </a>{\" \"}\r\n </span>{\" \"}\r\n</TinyTextItalics>\r\n{paymentURL !== '' ? (\r\n                          <TinyTextItalics color={ColorPalette.DarkGrey}>\r\n                          Deposit Button Not Working? Click here:{\" \"}\r\n                          <span>\r\n                            {\" \"}\r\n                            <a\r\n                              rel=\"noreferrer\"\r\n                              href={paymentURL}\r\n                            >\r\n                              {\" \"}\r\n                              Pay Deposit{\" \"}\r\n                            </a>{\" \"}\r\n                          </span>{\" \"}\r\n                        </TinyTextItalics>\r\n                      ) : null }\r\n</div>\r\n )\r\n}\r\n                       \r\n                      </FlexColumnContCenterAlign>\r\n                    </SummaryContainer>\r\n                  </FlexColumnFullWidthMargins>\r\n                </ContentCont77vw>\r\n              </FlexRowCont>\r\n            </FlexRowContFlexStartMobileColumn>\r\n\r\n            {/* Proposal Overview --------------------------------------------------------------- */}\r\n            <RevisionInstructionsWindow\r\n              open={revisionInstructionDisplay}\r\n              CloseWindow={() => {\r\n                setRevisionInstructionDisplay(false);\r\n              }}\r\n              StartRevising={() => {\r\n                ChangeUIToMakeRevisions();\r\n                setRevisionInstructionDisplay(false);\r\n              }}\r\n            ></RevisionInstructionsWindow>\r\n\r\n            <ImageViewWindow\r\n              open={imageGalleryDisplay}\r\n              imgurl={imagePreviewUrl}\r\n              onClose={() => {\r\n                setImageGalleryDisplay(false);\r\n                document.body.style.overflow = \"unset\";\r\n              }}\r\n            ></ImageViewWindow>\r\n            <DuplicateProposalWindow\r\n              quoteObj={Quote}\r\n              onClose={() => {\r\n                setCloneProposalWindowDisplay(false);\r\n              }}\r\n              open={cloneProposalWindowDisplay}\r\n            ></DuplicateProposalWindow>\r\n\r\n            <ContentCont77vw\r\n              display={Quote.Photos.length > 0 ? \"block\" : \"none\"}\r\n              id=\"exclude-from-pdf\"\r\n              width=\"93.5vw\"\r\n            >\r\n              <FlexColumnFullWidth>\r\n                <FlexRowContFlexStart>\r\n                  <LeagueSpartanLarge>Construction Plans</LeagueSpartanLarge>\r\n                </FlexRowContFlexStart>\r\n\r\n                <br></br>\r\n                <FlexRowCont60PercentSpaceEvenly\r\n                  alignitems=\"baseline\"\r\n                  width=\"100%\"\r\n                  flexwrap=\"wrap\"\r\n                >\r\n                  {Quote.Photos.map((o, i) => {\r\n                    return o.File?.includes(\".pdf\") ||\r\n                      o.File?.includes(\".PDF\") ? (\r\n                      <FlexContainerItem key={i}>\r\n                        <a\r\n                          id={i}\r\n                          rel=\"noreferrer\"\r\n                          href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                          target={\"_blank\"}\r\n                          style={{\r\n                            textDecoration: \"none\",\r\n                            color: \"black\",\r\n                          }}\r\n                        >\r\n                          <embed\r\n                            target={\"_blank\"}\r\n                            href={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                            src={\r\n                              o.File !== \"\"\r\n                                ? window.$IMGURL +\r\n                                  o.File +\r\n                                  \"#toolbar=0&navpanes=0&scrollbar=0\"\r\n                                : \"\"\r\n                            }\r\n                            width={\"350px\"}\r\n                            style={{ backgroundColor: \"white\" }}\r\n                            height={\"200px\"}\r\n                          ></embed>\r\n                          <OverrideEmbedDiv>\r\n                            <OverrideEmbedImage></OverrideEmbedImage>\r\n                          </OverrideEmbedDiv>\r\n                          <FlexContFullWidthHeightJustifyCenter>\r\n                            <LargeText>{o.Caption}</LargeText>\r\n                          </FlexContFullWidthHeightJustifyCenter>\r\n                        </a>\r\n                      </FlexContainerItem>\r\n                    ) : (\r\n                      <FlexContainerItem key={i}>\r\n                        <Image375px\r\n                          onClick={() => {\r\n                            DisplayImageInGallery(o.File);\r\n                          }}\r\n                          src={o.File !== \"\" ? window.$IMGURL + o.File : \"\"}\r\n                        ></Image375px>\r\n                        <FlexContFullWidthHeightJustifyCenter>\r\n                          <LargeText>{o.Caption}</LargeText>\r\n                        </FlexContFullWidthHeightJustifyCenter>\r\n                      </FlexContainerItem>\r\n                    );\r\n                  })}\r\n                </FlexRowCont60PercentSpaceEvenly>\r\n              </FlexColumnFullWidth>\r\n            </ContentCont77vw>\r\n\r\n            <FlexRowContAutox100PercentMobileColumn\r\n              alignitems=\"baseline\"\r\n              margin=\"0\"\r\n            >\r\n              <ContentContQuote id=\"install\">\r\n                <FlexColumnFullWidth>\r\n                  <FlexRowCont100PercentSpaceBetween mobileflexdirection=\"column\">\r\n                    <FlexColumnFullWidth>\r\n                      <FlexRowContFlexStart>\r\n                        <LeagueSpartanLarge>\r\n                          Project Estimate\r\n                        </LeagueSpartanLarge>\r\n                      </FlexRowContFlexStart>\r\n                    </FlexColumnFullWidth>\r\n                  </FlexRowCont100PercentSpaceBetween>\r\n                </FlexColumnFullWidth>\r\n\r\n                <FlexColumnFullWidth\r\n                  display={installEstimateDisplay}\r\n                  height=\"auto\"\r\n                  ref={ref2}\r\n                >\r\n                  <AutoSizeOverflowY>\r\n                    {Quote.Tags.map((t, j) => {\r\n                      let MaterialSum = 0;\r\n                      let InstallSum = 0;\r\n                      let TotalSum = 0;\r\n\r\n                      const RemovalItemsWithTag = Quote.Removal.Items.filter(\r\n                        (removalItem) => removalItem.Tag_Id === t.Id\r\n                      ).map((item) => {\r\n                        const originalRemovalIndex =\r\n                          Quote.Removal.Items.findIndex(\r\n                            (removal) => removal.Id === item.Id\r\n                          );\r\n                        return {\r\n                          ...item,\r\n                        };\r\n                      });\r\n\r\n                      const totalRemovalCost = RemovalItemsWithTag.reduce(\r\n                        (sum, item) => sum + item.Price + item.LaborSubtotal,\r\n                        0\r\n                      );\r\n                      const totalRemovalTime = RemovalItemsWithTag.reduce(\r\n                        (sum, item) => {\r\n                          const originalRemovalIndex =\r\n                            Quote.Removal.Items.findIndex(\r\n                              (removal) => removal.Id === item.Id\r\n                            );\r\n                          return (\r\n                            sum +\r\n                            (totalRemovalsByItem[\r\n                              `${item.Name}_${originalRemovalIndex}`\r\n                            ] || 0)\r\n                          );\r\n                        },\r\n                        0\r\n                      );\r\n\r\n                      const primaryItems = Quote.Material.Items.filter(\r\n                        (item) => item.Tag_Id == t.Id && item.Parent_Id === 0\r\n                      );\r\n\r\n                      const matchedDeliveries = [];\r\n\r\n                      function checkDeliveries(item) {\r\n                        // Check for deliveries related to the item itself\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (item.Id === tool.Item_Id) {\r\n                            matchedDeliveries.push({\r\n                              ...tool,\r\n                              Tag_Id: item.Tag_Id,\r\n                            });\r\n                          }\r\n                        });\r\n\r\n                        // If the item has related items, check for deliveries related to those as well\r\n                        if (item.RelatedItems && item.RelatedItems.length > 0) {\r\n                          item.RelatedItems.forEach((relatedItem) => {\r\n                            checkDeliveries(relatedItem); // Recursive call for nested related items\r\n                          });\r\n                        }\r\n                      }\r\n\r\n                      primaryItems.forEach((primaryItem) => {\r\n                        checkDeliveries(primaryItem);\r\n                      });\r\n\r\n                      let totalAggregatedDeliveryCostWithTagId = 0;\r\n\r\n                      function aggregateDeliveryCost(item) {\r\n                        // Check deliveries for the item itself\r\n                        Quote.Delivery.Tools.forEach((tool) => {\r\n                          if (item.Id === tool.Item_Id) {\r\n                            totalAggregatedDeliveryCostWithTagId += tool.Price;\r\n                          }\r\n                        });\r\n\r\n                        // If the item has related items, check deliveries for those as well\r\n                        if (item.RelatedItems && item.RelatedItems.length > 0) {\r\n                          item.RelatedItems.forEach((relatedItem) => {\r\n                            aggregateDeliveryCost(relatedItem); // Recursive call for nested related items\r\n                          });\r\n                        }\r\n                      }\r\n\r\n                      primaryItems.forEach((primaryItem) => {\r\n                        aggregateDeliveryCost(primaryItem);\r\n                      });\r\n\r\n                      primaryItems.forEach((o) => {\r\n                        const materialSub = o.SubtotalWithRelatedItems;\r\n                        const installSub = o.LaborSubtotalWithRelatedItems;\r\n\r\n                        // Quote.Removal.Items.filter(removalItem => removalItem.Tag_Id === t.Id).forEach((o) => {\r\n                        //   const removalTotal = o.Price + o.LaborSubtotal;\r\n                        //   MaterialSum += removalTotal;  // Assuming removals are treated as material costs\r\n                        //   TotalSum += removalTotal;\r\n                        // });\r\n\r\n                        MaterialSum += materialSub;\r\n                        InstallSum += installSub;\r\n                        TotalSum += materialSub + installSub;\r\n                      });\r\n\r\n                      Quote.Removal.Items.filter(\r\n                        (removalItem) => removalItem.Tag_Id === t.Id\r\n                      ).forEach((o) => {\r\n                        const removalTotal = o.Price + o.LaborSubtotal;\r\n                        // MaterialSum += removalTotal;  // Assuming removals are treated as material costs\r\n                        TotalSum += removalTotal;\r\n                      });\r\n\r\n                      MaterialSum += totalAggregatedDeliveryCostWithTagId;\r\n                      TotalSum += totalAggregatedDeliveryCostWithTagId;\r\n\r\n                      return (\r\n                        <div key={j}>\r\n                          <div>\r\n                            <br></br>\r\n                            {primaryItems.length > 0 ||\r\n                            RemovalItemsWithTag.length > 0 ? (\r\n                              <QuoteItem\r\n                                isHeader={true}\r\n                                header2={t.TagName}\r\n                                // header3=\"Quantity\"\r\n                                // header4=\"Unit Rate\"\r\n                                // header5=\"Material Subtotal\"\r\n                                // header6=\"Install Rate\"\r\n                                // header7=\"Install Subtotal\"\r\n                                // header8=\"Line Subtotal\"\r\n                                bgColor={ColorPalette.White}\r\n                              ></QuoteItem>\r\n                            ) : null}\r\n\r\n                            {primaryItems.length > 0 ||\r\n                            RemovalItemsWithTag.length > 0 ? (\r\n                              <StyledHRGreenBreakThick></StyledHRGreenBreakThick>\r\n                            ) : null}\r\n\r\n                            {primaryItems.map((o, i) => {\r\n                              const materialSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.Price\r\n                                  : o.SubtotalWithRelatedItems;\r\n                              const installSub =\r\n                                displayStatus[o.Id] === true\r\n                                  ? o.LaborSubtotal\r\n                                  : o.LaborSubtotalWithRelatedItems;\r\n\r\n                              return (\r\n                                <QuoteItem\r\n                                  CategoryType={CategoryTypes.Material}\r\n                                  noChange={o.NoChange}\r\n                                  key={i}\r\n                                  showRelatedItems={displayStatus[o.Id]}\r\n                                  onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                                  inputheaderposition={headerInputShown}\r\n                                  OutputValue={(value) => {\r\n                                    UpdateQuoteItemQuantity(o.Id, value);\r\n                                  }}\r\n                                  quoteItemObj={o}\r\n                                  parentid={o.Parent_Id}\r\n                                  header1=\"Delete\"\r\n                                  header2={o.Name}\r\n                                  subheader2notes={\r\n                                    o.Notes == null ? \"\" : o.Notes + \"\"\r\n                                  }\r\n                                  subheader2={\r\n                                    o.Description === null ? \"\" : o.Description\r\n                                  }\r\n                                  header3={\r\n                                    o.Quant.toFixed(2).replace(\r\n                                      /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                      \",\"\r\n                                    ) +\r\n                                    \" \" +\r\n                                    o.DisplayUnit\r\n                                  }\r\n                                  header4={\r\n                                    \"$\" + (materialSub / o.Quant).toFixed(4)\r\n                                  }\r\n                                  header5={\r\n                                    \"$\" +\r\n                                    materialSub\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header6={\r\n                                    \"$\" + (installSub / o.Quant).toFixed(4)\r\n                                  }\r\n                                  header7={\r\n                                    \"$\" +\r\n                                    installSub\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                  header8={\r\n                                    \"$\" +\r\n                                    (\r\n                                      parseFloat(materialSub.toFixed(2)) +\r\n                                      parseFloat(installSub.toFixed(2))\r\n                                    )\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                ></QuoteItem>\r\n                              );\r\n                            })}\r\n\r\n                            {RemovalItemsWithTag.length > 0 ? (\r\n                              <div key={`removal-tag`}>\r\n                                <QuoteItem\r\n                                  CategoryType={CategoryTypes.Removal}\r\n                                  header1=\"Delete\"\r\n                                  header2=\"Removal\"\r\n                                  header3={`${\r\n                                    parseFloat(\r\n                                      RemovalItemsWithTag.reduce(\r\n                                        (accumulator, item) =>\r\n                                          accumulator + item.Quant,\r\n                                        0\r\n                                      )\r\n                                    ).toFixed(2) || \"0.00\"\r\n                                  } ${RemovalItemsWithTag[0].DisplayUnit}`}\r\n                                  RemovalItems={RemovalItemsWithTag}\r\n                                  showRelatedItems={removalDisplayStatus[t.Id]}\r\n                                  RefreshComponentState={() => {\r\n                                    GetProposalInformation(params.quoteId);\r\n                                  }}\r\n                                  deleteItemFromEstimate={(itemId) => {\r\n                                    if (itemId) {\r\n                                      setDeleteItemId(itemId);\r\n                                    } else {\r\n                                      console.log(\"no item passed\");\r\n                                    }\r\n                                    setDeleteItemConfirmDisplay(true);\r\n                                  }}\r\n                                  onToggleDisplay={() =>\r\n                                    toggleRemovalDisplay(t.Id)\r\n                                  }\r\n                                  // header4={\r\n                                  //   removalDisplayStatus === false\r\n                                  //   ? (\r\n                                  //     (() => {\r\n                                  //       const totalQuantity = parseFloat(RemovalItemsNoTag.reduce((accumulator, item) => accumulator + item.Quant, 0));\r\n                                  //       const divisionResult = totalRemovalCost / totalQuantity;\r\n                                  //       return `$${divisionResult.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`;\r\n                                  //     })()\r\n                                  //   )\r\n                                  //   : ''\r\n                                  // }\r\n                                  // header9={removalDisplayStatus[t.Id] === true ? '' :  decimalHoursToTimeString(totalRemovalTime)}\r\n                                  header8={\r\n                                    removalDisplayStatus[t.Id] === true\r\n                                      ? \"\"\r\n                                      : \"$\" +\r\n                                        totalRemovalCost\r\n                                          .toFixed(2)\r\n                                          .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                  }\r\n                                ></QuoteItem>\r\n                              </div>\r\n                            ) : null}\r\n\r\n                            {totalAggregatedDeliveryCostWithTagId > 0 ? (\r\n                              <QuoteItem\r\n                                key={`tagged-aggregated-delivery`}\r\n                                quoteItemObj={{\r\n                                  Price: totalAggregatedDeliveryCostWithTagId,\r\n                                }}\r\n                                showRelatedItems={displayStatus[t.Id]}\r\n                                RefreshComponentState={() => {\r\n                                  GetProposalInformation(params.quoteId);\r\n                                }}\r\n                                deleteItemFromEstimate={async (item_id) => {\r\n                                  setIsLoading(true);\r\n                                  await DeleteQuoteTool(item_id);\r\n                                  GetProposalInformation(params.quoteId);\r\n                                  setIsLoading(false);\r\n                                }}\r\n                                CategoryType={\"Delivery\"}\r\n                                onToggleDisplay={() => toggleDisplay(t.Id)}\r\n                                DeliveryItems={matchedDeliveries}\r\n                                header1=\"Delete\"\r\n                                header2=\"Deliveries\"\r\n                                header3=\"\"\r\n                                header4=\"\"\r\n                                header8={\r\n                                  displayStatus[t.Id] === true\r\n                                    ? \"\"\r\n                                    : \"$\" +\r\n                                      totalAggregatedDeliveryCostWithTagId\r\n                                        .toFixed(2)\r\n                                        .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                }\r\n                              ></QuoteItem>\r\n                            ) : null}\r\n\r\n                            {primaryItems.length > 0 ||\r\n                            RemovalItemsWithTag.length > 0 ? (\r\n                              <QuoteItem\r\n                                isHeader={true}\r\n                                header2=\"Subtotal\"\r\n                                // header5={\"$\" + MaterialSum.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                                // header7={\"$\" + InstallSum.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                                header8={\r\n                                  \"$\" +\r\n                                  TotalSum.toFixed(2).replace(\r\n                                    /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                    \",\"\r\n                                  )\r\n                                }\r\n                                bgColor={ColorPalette.White}\r\n                              ></QuoteItem>\r\n                            ) : null}\r\n                          </div>\r\n                        </div>\r\n                      );\r\n                    })}\r\n\r\n                    {generalMaterialsHeader === \"flex\" ? <br></br> : null}\r\n\r\n                    {generalMaterialsHeader === \"flex\" ? (\r\n                      <QuoteItem\r\n                        isHeader={true}\r\n                        header2=\"General Materials\"\r\n                        // header3=\"Quantity\"\r\n                        // header4=\"Unit Rate\"\r\n                        // header5=\"Material Subtotal\"\r\n                        // header6=\"Install Rate\"\r\n                        // header7=\"Install Subtotal\"\r\n                        // header8=\"Line Subtotal\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItem>\r\n                    ) : null}\r\n\r\n                    <StyledHRGreenBreakThick\r\n                      display={generalMaterialsHeader}\r\n                    ></StyledHRGreenBreakThick>\r\n\r\n                    {Quote?.Material?.Items.map((o, i) => {\r\n                      if (o.Parent_Id === 0 && o.Tag_Id === 0) {\r\n                        const materialSub =\r\n                          displayStatus[o.Id] === true\r\n                            ? o.Price\r\n                            : o.SubtotalWithRelatedItems;\r\n                        const installSub =\r\n                          displayStatus[o.Id] === true\r\n                            ? o.LaborSubtotal\r\n                            : o.LaborSubtotalWithRelatedItems;\r\n\r\n                        return (\r\n                          <QuoteItem\r\n                            CategoryType={CategoryTypes.Material}\r\n                            showRelatedItems={displayStatus[o.Id]}\r\n                            onToggleDisplay={() => toggleDisplay(o.Id)}\r\n                            key={i}\r\n                            quoteItemObj={o}\r\n                            inputheaderposition={headerInputShown}\r\n                            OutputValue={(value) => {\r\n                              UpdateQuoteItemQuantity(o.Id, value);\r\n                            }}\r\n                            noChange={o.NoChange}\r\n                            parentid={o.Parent_Id}\r\n                            header1=\"Delete\"\r\n                            header2={o.Name}\r\n                            subheader2={\r\n                              o.Description === null ? \"\" : o.Description\r\n                            }\r\n                            subheader2notes={\r\n                              o.Notes == null ? \"\" : o.Notes + \"\"\r\n                            }\r\n                            header3={\r\n                              o.Quant.toFixed(2).replace(\r\n                                /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                \",\"\r\n                              ) +\r\n                              \" \" +\r\n                              o.DisplayUnit\r\n                            }\r\n                            header4={\"$\" + (materialSub / o.Quant).toFixed(4)}\r\n                            header5={\r\n                              \"$\" +\r\n                              materialSub\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                            header6={\"$\" + (installSub / o.Quant).toFixed(4)}\r\n                            header7={\r\n                              \"$\" +\r\n                              installSub\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                            header8={\r\n                              \"$\" +\r\n                              (\r\n                                parseFloat(materialSub.toFixed(2)) +\r\n                                parseFloat(installSub.toFixed(2))\r\n                              )\r\n                                .toFixed(2)\r\n                                .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                            }\r\n                          ></QuoteItem>\r\n                        );\r\n                      }\r\n                      return null;\r\n                    }).concat(\r\n                      RemovalItemsNoTag.length > 0 ? (\r\n                        <div key={`removal-no-tag`}>\r\n                          <QuoteItem\r\n                            CategoryType={CategoryTypes.Removal}\r\n                            deleteItemFromEstimate={(itemId) => {\r\n                              if (itemId) {\r\n                                setDeleteItemId(itemId);\r\n                              } else {\r\n                                setDeleteItemId(o.Id);\r\n                              }\r\n                              setDeleteItemConfirmDisplay(true);\r\n                            }}\r\n                            RefreshComponentState={() => {\r\n                              GetProposalInformation(params.quoteId);\r\n                            }}\r\n                            header1=\"Delete\"\r\n                            header2=\"Removal\"\r\n                            header3={`${\r\n                              parseFloat(\r\n                                RemovalItemsNoTag.reduce(\r\n                                  (accumulator, item) =>\r\n                                    accumulator + item.Quant,\r\n                                  0\r\n                                )\r\n                              ).toFixed(2) || \"0.00\"\r\n                            } ${\r\n                              RemovalItemsNoTag.length > 0\r\n                                ? RemovalItemsNoTag[0].DisplayUnit\r\n                                : \"\"\r\n                            }`}\r\n                            RemovalItems={RemovalItemsNoTag}\r\n                            showRelatedItems={removalDisplayStatus}\r\n                            onToggleDisplay={() => {\r\n                              setRemovalDisplayStatus(!removalDisplayStatus);\r\n                            }}\r\n                            // header3={totalRemovalQuantity.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                            // header6={removalDisplayStatus === false ?  \"$\" + (totalRemovalCost / totalRemovalQuantity).toFixed(4): ''}\r\n                            header4={\r\n                              removalDisplayStatus === false\r\n                                ? (() => {\r\n                                    const totalQuantity = parseFloat(\r\n                                      RemovalItemsNoTag.reduce(\r\n                                        (accumulator, item) =>\r\n                                          accumulator + item.Quant,\r\n                                        0\r\n                                      )\r\n                                    );\r\n                                    const divisionResult =\r\n                                      totalRemovalCost / totalQuantity;\r\n                                    return `$${divisionResult\r\n                                      .toFixed(2)\r\n                                      .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`;\r\n                                  })()\r\n                                : \"\"\r\n                            }\r\n                            header8={\r\n                              removalDisplayStatus === false\r\n                                ? \"$\" +\r\n                                  totalRemovalCost\r\n                                    .toFixed(2)\r\n                                    .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                                : \"\"\r\n                            }\r\n                          ></QuoteItem>\r\n                        </div>\r\n                      ) : null,\r\n                      totalAggregatedDeliveryCost > 0 ? (\r\n                        <QuoteItem\r\n                          key={`total-aggregated-delivery`}\r\n                          quoteItemObj={{ Price: totalAggregatedDeliveryCost }}\r\n                          DeliveryItems={DeliveryItemsNoTag}\r\n                          CategoryType={\"Delivery\"}\r\n                          RefreshComponentState={() => {\r\n                            GetProposalInformation(params.quoteId);\r\n                          }}\r\n                          showRelatedItems={deliveryDisplayStatus}\r\n                          onToggleDisplay={() => {\r\n                            setDeliveryDisplayStatus(!deliveryDisplayStatus);\r\n                          }}\r\n                          header1=\"Delete\"\r\n                          header2=\"Deliveries\"\r\n                          header3=\"\"\r\n                          header4=\"\"\r\n                          header8={\r\n                            deliveryDisplayStatus === false\r\n                              ? \"$\" +\r\n                                totalAggregatedDeliveryCost\r\n                                  .toFixed(2)\r\n                                  .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                              : \"\"\r\n                          }\r\n                        ></QuoteItem>\r\n                      ) : null,\r\n                      generalMaterialsHeader === \"flex\" ? (\r\n                        <QuoteItem\r\n                          isHeader={true}\r\n                          key={\"untagged_subtotals\"}\r\n                          header2={\"Subtotal\"}\r\n                          bgColor={\"White\"}\r\n                          // header5={`$${untaggedMaterialSubtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          // header7={`$${untaggedInstallSubtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                          header8={`$${(\r\n                            untaggedTotalSubtotal +\r\n                            totalRemovalCost +\r\n                            totalAggregatedDeliveryCost\r\n                          )\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}`}\r\n                        />\r\n                      ) : null\r\n                    )}\r\n\r\n                    {toolsmachinesHeader === \"flex\" ? (\r\n                      <QuoteItem\r\n                        isHeader={true}\r\n                        header2=\"Machines, Disposal, Access\"\r\n                        bgColor={ColorPalette.White}\r\n                      ></QuoteItem>\r\n                    ) : null}\r\n                    <StyledHRGreenBreakThick\r\n                      display={toolsmachinesHeader}\r\n                    ></StyledHRGreenBreakThick>\r\n                    {Quote.Tool.Tools.sort((a, b) =>\r\n                      a.ToolName.localeCompare(b.ToolName)\r\n                    ).map((o, i) => {\r\n                      if (!o?.ToolName.includes(\"Wheelbarrow\")) {\r\n                        if (o.RentalRate > 0 && o.BasePrice > 0) {\r\n                          toolsHeader7Subtotal += o.BasePrice;\r\n                        }\r\n                        toolsHeader8Subtotal += o.Price;\r\n                      }\r\n\r\n                      return o?.ToolName.includes(\"Wheelbarrow\") ||\r\n                        o?.ToolName.includes(\"Suggested\") ? null : (\r\n                        // <QuoteItem\r\n                        //   CategoryType={'Tool'}\r\n                        //   key={i}\r\n                        //   header1=\"Delete\"\r\n                        //   header2={o.ToolName}\r\n                        //   subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                        //   // header6={\r\n                        //   //   o.RentalRate > 0\r\n                        //   //     ? \"$\" +\r\n                        //   //       (o.RentalRate * o.RentalLength).toFixed(2).replace(\r\n                        //   //         /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                        //   //         \",\"\r\n                        //   //       )\r\n                        //   //     : \"$\" +\r\n                        //   //       o.BasePrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        //   // }\r\n                        //   itemLink={o.VideoUrl}\r\n                        //   header7={\r\n                        //     o.RentalRate > 0 && o.BasePrice > 0\r\n                        //       ? \"$\" +\r\n                        //         o.BasePrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        //       : \"\"\r\n                        //   }\r\n                        //   header5={\r\n                        //     `${o.RentalLength} hours`\r\n\r\n                        //   }\r\n                        //   header3={\r\n                        //     o.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        //   }\r\n                        //   header8={\r\n                        //     \"$\" +\r\n                        //     o.Price.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        //   }\r\n                        // ></QuoteItem>\r\n                        <QuoteItem\r\n                          CategoryType={\"Tool\"}\r\n                          key={i}\r\n                          header1=\"Delete\"\r\n                          header2={o.ToolName}\r\n                          subheader2={o.Notes !== null ? o.Notes : \"\"}\r\n                          header4={\r\n                            o.RentalRate > 0\r\n                              ? `$${o.RentalRate.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`\r\n                              : null\r\n                          }\r\n                          header6={\r\n                            o.BasePrice > 0\r\n                              ? `$${o.BasePrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`\r\n                              : null\r\n                          }\r\n                          header7={\r\n                            o.RentalRate > 0 && o.BasePrice > 0\r\n                              ? `$${o.BasePrice.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )}`\r\n                              : \"\"\r\n                          }\r\n                          header3={\r\n                            o.RentalLength > 0\r\n                              ? `${o.RentalLength} hours`\r\n                              : typeof o?.Quant === \"number\" && !isNaN(o.Quant)\r\n                              ? o.Quant.toFixed(2).replace(\r\n                                  /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                                  \",\"\r\n                                )\r\n                              : \"\"\r\n                          }\r\n                          header9={o.RentalLength > 0 ? o.RentalLength : null}\r\n                          // header3={o?.Quant.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                          // header8={o.RentalRate > 0 && o.BasePrice > 0 ? `$${o.BasePrice.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}` : \"\"}\r\n                          header8={`$${o.Price.toFixed(2).replace(\r\n                            /\\B(?=(\\d{3})+(?!\\d))/g,\r\n                            \",\"\r\n                          )}`}\r\n                          itemLink={o.VideoUrl}\r\n                        ></QuoteItem>\r\n                      );\r\n                    })}\r\n                    {accessTotal > 0 ? (\r\n                      <div>\r\n                        <QuoteItem\r\n                          CategoryType={CategoryTypes.Access}\r\n                          header2={\"Access Area Cost\"}\r\n                          header8={\r\n                            \"$\" +\r\n                            accessTotal\r\n                              .toFixed(2)\r\n                              .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                          }\r\n                        ></QuoteItem>\r\n                      </div>\r\n                    ) : null}\r\n\r\n                    {(toolsHeader7Subtotal > 0 || toolsHeader8Subtotal > 0) && (\r\n                      <QuoteItem\r\n                        isHeader={true}\r\n                        bgColor={ColorPalette.White}\r\n                        header2={`Subtotal`}\r\n                        // header7={\"$\" + toolsHeader7Subtotal.toFixed(2).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")}\r\n                        header8={\r\n                          \"$\" +\r\n                          (toolsHeader8Subtotal + accessTotal)\r\n                            .toFixed(2)\r\n                            .replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n                        }\r\n                      ></QuoteItem>\r\n                    )}\r\n                    {toolsmachinesHeader === \"flex\" ? (\r\n                      <div>\r\n                        <br></br>\r\n                        <br></br>\r\n                      </div>\r\n                    ) : null}\r\n                    <FlexRowContFullWidth\r\n                      id=\"exclude-from-pdf\"\r\n                      onClick={() => {\r\n                        DisplayLaborBreakdown(laborDetailToggle);\r\n                      }}\r\n                    ></FlexRowContFullWidth>\r\n                    <StyledHRGreenBreakThick\r\n                      display={laborDetailToggleView}\r\n                    ></StyledHRGreenBreakThick>\r\n                    <StyledHRPropColour border=\"0.5px solid white\"></StyledHRPropColour>\r\n                  </AutoSizeOverflowY>\r\n                </FlexColumnFullWidth>\r\n              </ContentContQuote>\r\n            </FlexRowContAutox100PercentMobileColumn>\r\n\r\n            {/* Comments  --------------------------------------------------------------- */}\r\n          </FlexColumn81vwLightGrey>\r\n          <FixedIconToTop\r\n            src=\"/BackToTopArrowAlt.svg\"\r\n            onClick={() => {\r\n              window.scrollTo(0, 0);\r\n            }}\r\n          ></FixedIconToTop>\r\n          {Quote?.QuoteStatus === QuoteStatus.Buy_Install ? (\r\n            null ) : (\r\n            <EstimateFooter\r\n            depositAmount={\r\n              deposit < Stored_Values.MIN_DEPOSIT\r\n                ? Stored_Values.MIN_DEPOSIT\r\n                : deposit\r\n            }\r\n            buttonRef={buttonRef}\r\n            depositCallback={() => {\r\n              ValidateAgreement(\r\n                supplyOnlySelected,\r\n                params.caseId,\r\n                params.quoteId\r\n              );\r\n            }}\r\n          ></EstimateFooter>\r\n          )}\r\n       \r\n        </Cont>\r\n      );\r\n    } else {\r\n      return (\r\n        <Cont>\r\n          <Backdrop style={{ zIndex: 2 }} open>\r\n            <CircularProgress color=\"inherit\" />\r\n          </Backdrop>\r\n        </Cont>\r\n      );\r\n    }\r\n  } else {\r\n    return (\r\n      <Cont>\r\n        <Backdrop style={{ zIndex: 2 }} open>\r\n          <CircularProgress color=\"inherit\" />\r\n        </Backdrop>\r\n      </Cont>\r\n    );\r\n  }\r\n};\r\n\r\nViewEstimateNA.defaultProps = {\r\n  ProfileName: \"Default Name\",\r\n};\r\n\r\nexport default ViewEstimateNA;\r\n","//  React Imports ---------------------------------------\r\nimport React, {useState} from \"react\";\r\nimport styled from \"styled-components\";\r\n//  Imported Components ---------------------------------\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport ActionMenu from \"../../comps/MenuComps/TopMenu\";\r\n// Imported Styled Components ---------------------------\r\nimport {\r\n  FlexColumn81vwLightGrey,\r\n  FlexColumnFullWidthMargins,\r\n  FlexDiv,\r\n  LeftCont,\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { Cont, ContentCont77vw } from \"../../StylesheetComps/Projects\";\r\nimport SiteMapper from \"../../comps/SiteMapper\";\r\nimport ViewProposalEstimatorView from \"../../UserProjectPages/ViewProposalEstimate\";\r\nimport { StickyTopMenuCont } from \"../../StylesheetComps/Menu\";\r\n\r\nconst ResizableFlexDiv = styled(FlexDiv)`\r\n  display: flex;\r\n  height: auto;\r\n  width: 100vw;\r\n`;\r\n\r\n// Styled component for the draggable bar\r\nconst DraggableBar = styled.div`\r\n  width: 5px;\r\n  position: sticky;\r\n  top:0;\r\n  cursor: col-resize;\r\n  background-color: #ccc;\r\n  height: 100vh; // Adjust height as needed\r\n  user-select: none; // Prevent text selection while dragging\r\n  z-Index: 999;\r\n`;\r\n\r\nconst SitemapDesktop = ({hideMenu}) => {\r\n\r\n  // State to manage the width of the left panel\r\n  const [leftWidth, setLeftWidth] = useState(80); // Start with 80vw\r\n  const [scrollToItem, setScrollToItem] = useState({}); // Start with 80vw\r\n  const [refreshEstimate, setRefreshEstimate] = useState(false); \r\n\r\n  const startResizing = (mouseDownEvent) => {\r\n    mouseDownEvent.preventDefault();\r\n    // When the mouse moves, adjust the width of the left panel\r\n    const handleMouseMove = (mouseMoveEvent) => {\r\n      let newWidth = (mouseMoveEvent.clientX / window.innerWidth) * 100;\r\n      // Enforce a minimum width of 30vw and a maximum width of 80vw for leftWidth\r\n      newWidth = Math.max(Math.min(newWidth, 80), 50);\r\n      setLeftWidth(newWidth);\r\n    };\r\n\r\n    // Add event listeners for mouse move and mouse up\r\n    document.addEventListener('mousemove', handleMouseMove);\r\n    document.addEventListener('mouseup', () => {\r\n      document.removeEventListener('mousemove', handleMouseMove);\r\n    }, { once: true });\r\n  };\r\n\r\n  // Ensure the SiteMapper component has a minimum of 20vw, \r\n  // and adjust based on the current leftWidth to maintain overall constraints\r\n  const rightWidth = Math.max(100 - leftWidth, 20);\r\n\r\n  const ScrollToItemOnEstimate = async (item) => {\r\n    setScrollToItem(item)\r\n  }\r\n\r\n  const handleResetScrollToItem = () => {\r\n    setScrollToItem(null);\r\n  };  \r\n\r\n  const handleResetRefreshEstimate = () => {\r\n    setRefreshEstimate(false)\r\n  }\r\n\r\n  const RefreshEstimate = () => {\r\n    setRefreshEstimate(true)\r\n  }\r\n\r\n  if (window.$ISMOBILE === true) {\r\n    return (\r\n      <Cont>\r\n        <LeftCont>\r\n          <Menu> </Menu>\r\n        </LeftCont>\r\n        <FlexColumn81vwLightGrey>\r\n          <ActionMenu\r\n            mobilePageProp=\"Sample Page\"\r\n            pageProp={\"Sample Page\"}\r\n          ></ActionMenu>\r\n\r\n          <ContentCont77vw>\r\n            <FlexColumnFullWidthMargins></FlexColumnFullWidthMargins>\r\n          </ContentCont77vw>\r\n        </FlexColumn81vwLightGrey>\r\n      </Cont>\r\n    );\r\n  } else {\r\n    return (\r\n      <div>\r\n        <ResizableFlexDiv>\r\n          <FlexDiv width={`${leftWidth}vw`}>\r\n            <ViewProposalEstimatorView refreshEstimate={refreshEstimate} refreshEstimateFinished={()=>{handleResetRefreshEstimate()}} scrollToItem={scrollToItem} onResetScrollToItem={handleResetScrollToItem}  hideMenu={true} contWidth={`${leftWidth}vw`} />\r\n          </FlexDiv>\r\n          <DraggableBar onMouseDown={startResizing} />\r\n          <StickyTopMenuCont width={`${rightWidth}vw`} height=\"100vh\">\r\n            <SiteMapper RefreshEstimate={()=>{RefreshEstimate()}} DeselectIcon={()=>{handleResetScrollToItem()}} ScrollToItemOnEstimate={(item, itemIndex)=>{ScrollToItemOnEstimate(item, itemIndex)}} contWidth={`${rightWidth}vw`} />\r\n          </StickyTopMenuCont>\r\n        </ResizableFlexDiv>\r\n      </div>\r\n    );\r\n  }\r\n};\r\n\r\nSitemapDesktop.defaultProps = {};\r\n\r\nexport default SitemapDesktop;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport axios from \"axios\";\r\nimport { Link, useHistory, useParams } from \"react-router-dom\";\r\n\r\n// Material-UI (v4) components you already have\r\nimport { \r\n  Backdrop, \r\n  CircularProgress, \r\n  InputLabel, \r\n  Table, \r\n  TableBody, \r\n  TableCell, \r\n  TableContainer, \r\n  TableHead, \r\n  TableRow,\r\n  Paper \r\n} from \"@material-ui/core\";\r\n\r\nimport Menu from \"../../comps/MenuComps/Menu\";\r\nimport EditStoreWindow from \"../../comps/Windows/EditStore\";\r\n\r\nimport {\r\n  FlexCont100vw100vh,\r\n  FlexColumnCont80vwAutoHeight,\r\n  LeftCont,\r\n  FlexDiv\r\n} from \"../../StylesheetComps/Cont\";\r\nimport { RightViewFullWidth } from \"../../StylesheetComps/Cont/RightView\";\r\nimport { \r\n  FlexDiv70x7Percent, \r\n  FlexDivSpaceBetween, \r\n  FlexColumnDiv, \r\n   \r\n} from \"../../StylesheetComps/Div\";\r\n\r\nimport { \r\n  Icon30x40pxPointer, \r\n  Icon20x20 \r\n} from \"../../StylesheetComps/Imgs/Icons\";\r\n\r\nimport {\r\n  LeagueSpartanExtraLargeBold,\r\n  RegularText\r\n} from \"../../StylesheetComps/Titles\";\r\nimport { InputField } from \"../../StylesheetComps/Inputs\";\r\nimport { RegularResponsiveButton } from \"../../StylesheetComps/Components\";\r\nimport { ColorPalette } from \"../../StylesheetComps/Colors\";\r\nimport { UserRole } from \"../../StylesheetComps/UserRoles\";\r\n\r\n// API calls\r\nimport { GetStoreInfo } from \"../../API_Functions/Store_Functions\";\r\nimport { GetStoreProducts, GetStoreTools } from \"../../API_Functions/CatProduct_Functions\";\r\nimport { GetStoreToolKits } from \"../../API_Functions/Tool_Functions\";\r\n\r\n// Example store card\r\nimport StoreCard from \"../../comps/StoreCard\";\r\nimport { CategoryTypes } from \"../../StylesheetComps/CategoryTypes\";\r\n\r\n/* \r\n  InventoryScreen: An \"Excel-like\" display for a store's data\r\n*/\r\nconst InventoryScreen = () => {\r\n  const [storeObj, setStoreObj] = useState({});\r\n  const [originalProductData, setOriginalProductData] = useState([]);\r\n  const [productData, setProductData] = useState([]);\r\n  \r\n  const [originalToolData, setOriginalToolData] = useState([]);\r\n  const [toolData, setToolData] = useState([]);\r\n\r\n  const [originalStaffData, setOriginalStaffData] = useState([]);\r\n  const [staffData, setStaffData] = useState([]);\r\n\r\n  const [originalZoneData, setOriginalZoneData] = useState([]);\r\n  const [zoneData, setZoneData] = useState([]);\r\n\r\n  const [toolkitData, setToolkitData] = useState([]);\r\n\r\n  const [roleNum, setRoleNum] = useState(0);\r\n  const [managerName, setManagerName] = useState([]);\r\n  const [isEditOpen, setIsEditOpen] = useState(false);\r\n\r\n  // Toggles for each dataset\r\n  const [productSelected, setProductSelected] = useState(true);\r\n  const [toolSelected, setToolSelected] = useState(true);\r\n  const [staffSelected, setStaffSelected] = useState(true);\r\n  const [zoneSelected, setZoneSelected] = useState(true);\r\n\r\n  const params = useParams();\r\n  const history = useHistory();\r\n\r\n  // ---------------------------------------------------------------------------\r\n  // Data Retrieval\r\n  // ---------------------------------------------------------------------------\r\n  const GetStore = async (storeId) => {\r\n    try {\r\n      const data = await GetStoreInfo(storeId);\r\n      const prodResp = await GetStoreProducts(storeId);\r\n      const toolResp = await GetStoreTools(storeId);\r\n      const staffResp = await axios.get(`${window.$DBURL}users/roles`);\r\n      const zoneResp  = await axios.get(`${window.$DBURL}store/zonelist/${storeId}`);\r\n      const toolkitResp = await GetStoreToolKits(storeId);\r\n\r\n      if (data) {\r\n        setStoreObj(data); \r\n\r\n        // Sorting function that places items whose names start with a digit at the end\r\n        const sortByName = (a, b) => {\r\n          const startsWithNumberA = /^\\d/.test(a.Name);\r\n          const startsWithNumberB = /^\\d/.test(b.Name);\r\n          if (startsWithNumberA && !startsWithNumberB) return 1; \r\n          if (!startsWithNumberA && startsWithNumberB) return -1; \r\n          return a.Name.localeCompare(b.Name, undefined, { sensitivity: 'base' });\r\n        };\r\n\r\n        // 1. Products\r\n        const sortedProducts = prodResp.products.sort(sortByName);\r\n        setOriginalProductData(sortedProducts);\r\n        setProductData(sortedProducts);\r\n\r\n        // 2. Tools\r\n        const sortedTools = toolResp.tools.sort(sortByName);\r\n        setOriginalToolData(sortedTools);\r\n        setToolData(sortedTools);\r\n\r\n        // 3. Staff\r\n        const sortedStaff = staffResp.data.roles.sort((a, b) => {\r\n          return a.Role.localeCompare(b.Role, undefined, {sensitivity: 'base'});\r\n        });\r\n        setOriginalStaffData(sortedStaff);\r\n        setStaffData(sortedStaff);\r\n\r\n        // 4. Zones\r\n        const sortedZones = zoneResp.data.zones.sort(sortByName);\r\n        setOriginalZoneData(sortedZones);\r\n        setZoneData(sortedZones);\r\n\r\n        // 5. Toolkits (no sort in example, adapt if needed)\r\n        setToolkitData(toolkitResp.toolkit);\r\n      }\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  const GetProfileInfo = async () => {\r\n    const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    if (userInfo) {\r\n      setManagerName(userInfo.Name);\r\n    }\r\n  };\r\n\r\n  const GetSuppliers = async () => {\r\n    const resp = await axios.get(`${window.$DBURL}store/${params.Id}/supplier`);\r\n    if (resp.status === 200 && resp.data !== null) {\r\n      // if (resp.data.suppliers !== null) ...\r\n      // code for retrieving or storing suppliers\r\n    }\r\n    const userInfo = JSON.parse(sessionStorage.getItem(\"userInfo\"));\r\n    if (userInfo) {\r\n      setRoleNum(userInfo.Role);\r\n    }\r\n  };\r\n\r\n  // ---------------------------------------------------------------------------\r\n  // Search Logic\r\n  // ---------------------------------------------------------------------------\r\n  const handleSearch = (searchText) => {\r\n    const lowerCaseText = searchText.toLowerCase();\r\n    const textArray = lowerCaseText.split(\" \");\r\n\r\n    // Generalized filter function\r\n    const filterData = (dataList, keyToFilter) => {\r\n      return dataList.filter((item) => {\r\n        // Exclude items with 'DNU' in uppercase in their name\r\n        if (item[keyToFilter] && item[keyToFilter].toUpperCase().includes('DNU')) {\r\n          return false;\r\n        }\r\n        // Must match all words in search\r\n        return textArray.every((word) =>\r\n          item[keyToFilter] && item[keyToFilter].toLowerCase().includes(word)\r\n        );\r\n      });\r\n    };\r\n\r\n    // Filter each dataset\r\n    setProductData(filterData(originalProductData, 'Name'));\r\n    setToolData(filterData(originalToolData, 'Name'));\r\n    // For staff, the key is \"Role\" instead of \"Name\"\r\n    setStaffData(filterData(originalStaffData, 'Role'));\r\n    setZoneData(filterData(originalZoneData, 'Name'));\r\n  };\r\n\r\n  // ---------------------------------------------------------------------------\r\n  // Lifecycle\r\n  // ---------------------------------------------------------------------------\r\n  useEffect(() => {\r\n    GetStore(params.Id);\r\n    GetProfileInfo();\r\n    GetSuppliers();\r\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n  useEffect(() => {\r\n    window.scrollTo(0, 0);\r\n  }, []);\r\n\r\n  // ---------------------------------------------------------------------------\r\n  // Render If Manager\r\n  // ---------------------------------------------------------------------------\r\n  if (roleNum !== UserRole.Manager) {\r\n    return (\r\n      <Backdrop style={{ zIndex: 2 }} open>\r\n        <CircularProgress color=\"inherit\" />\r\n      </Backdrop>\r\n    );\r\n  }\r\n\r\n  // ---------------------------------------------------------------------------\r\n  // Rendering Functions: Tables\r\n  // ---------------------------------------------------------------------------\r\n\r\n  const renderProductTable = () => {\r\n    return (\r\n        // Add some horizontal scrolling so columns don't overflow\r\n        <TableContainer component={Paper} style={{ maxWidth: \"100%\", overflowX: \"auto\" }}>\r\n          <Table size=\"small\" aria-label=\"products-table\">\r\n            <TableHead>\r\n              <TableRow style={{ backgroundColor: \"#f1f1f1\" }}>\r\n                <TableCell><strong>ID</strong></TableCell>\r\n                {/* <TableCell><strong>Code</strong></TableCell> */}\r\n                {/* <TableCell><strong>CateType</strong></TableCell> */}\r\n                <TableCell><strong>Name</strong></TableCell>\r\n                <TableCell><strong>Description</strong></TableCell>\r\n                {/* <TableCell><strong>OriginalPrice</strong></TableCell> */}\r\n                {/* <TableCell><strong>Markup</strong></TableCell> */}\r\n                <TableCell><strong>UnitPrice</strong></TableCell>\r\n                <TableCell><strong>Unit</strong></TableCell>\r\n                <TableCell><strong>InstallSpeed</strong></TableCell>\r\n                <TableCell><strong>SalesTax</strong></TableCell>\r\n                <TableCell><strong>Stock</strong></TableCell>\r\n                <TableCell><strong>SaleQuant</strong></TableCell>\r\n                <TableCell><strong>ImageUrl</strong></TableCell>\r\n                <TableCell><strong>Category_Id</strong></TableCell>\r\n                <TableCell><strong>RelatedProducts</strong></TableCell>\r\n                <TableCell><strong>Disclaimer</strong></TableCell>\r\n                <TableCell><strong>Position</strong></TableCell>\r\n                <TableCell><strong>RoundUp</strong></TableCell>\r\n                <TableCell><strong>RoundToHalf</strong></TableCell>\r\n                <TableCell><strong>Supplier(s)</strong></TableCell>\r\n                <TableCell><strong>RelatedTools</strong></TableCell>\r\n                <TableCell><strong>Minimum</strong></TableCell>\r\n                <TableCell><strong>RFactor</strong></TableCell>\r\n                <TableCell><strong>ReStock</strong></TableCell>\r\n                <TableCell><strong>PackSize</strong></TableCell>\r\n                <TableCell><strong>Charge_Rate</strong></TableCell>\r\n                <TableCell><strong>Convert</strong></TableCell>\r\n                <TableCell><strong>Denominator</strong></TableCell>\r\n                <TableCell><strong>DisplayUnit</strong></TableCell>\r\n                <TableCell><strong>Notes</strong></TableCell>\r\n                <TableCell><strong>Allowance</strong></TableCell>\r\n                <TableCell><strong>SetupTime</strong></TableCell>\r\n                <TableCell><strong>ProductLink</strong></TableCell>\r\n                <TableCell><strong>Addons</strong></TableCell>\r\n              </TableRow>\r\n            </TableHead>\r\n    \r\n            <TableBody>\r\n              {productData.map((prod) => (\r\n                <TableRow\r\n                  key={prod.Id}\r\n                  hover\r\n                  style={{ cursor: \"pointer\" }}\r\n                  // onClick={() => {\r\n                  //   history.push(`/productlist/${params.Id}/${prod.Category_Id}/${prod.Id}`);\r\n                  // }}\r\n                >\r\n                  <TableCell>{prod.Id}</TableCell>\r\n                  {/* <TableCell>{prod.Code ?? \"\"}</TableCell> */}\r\n                  {/* <TableCell>{prod.CateType ?? \"\"}</TableCell> */}\r\n                  <TableCell>{prod.Name ?? \"\"}</TableCell>\r\n                  <TableCell>{prod.Description ?? \"\"}</TableCell>\r\n                  {/* <TableCell>{prod.OriginalPrice ?? 0}</TableCell> */}\r\n                  {/* <TableCell>{prod.Markup ?? 0}</TableCell> */}\r\n                  <TableCell>{(prod.UnitPrice ?? 0).toFixed(2)}</TableCell>\r\n                  <TableCell>{prod.Unit ?? \"\"}</TableCell>\r\n                  <TableCell>{prod.InstallSpeed ?? 0}</TableCell>\r\n                  <TableCell>\r\n                    {/* If SalesTax is an array of objects, show their names (or IDs) */}\r\n                    {prod.SalesTax && prod.SalesTax.length > 0\r\n                      ? prod.SalesTax.map((st) => st.TaxName || \"Tax\").join(\", \")\r\n                      : \"\"}\r\n                  </TableCell>\r\n                  <TableCell>{prod.Stock ?? 0}</TableCell>\r\n                  <TableCell>{prod.SaleQuant ?? 0}</TableCell>\r\n                  <TableCell>{prod.ImageUrl ?? \"\"}</TableCell>\r\n                  <TableCell>{prod.Category_Id ?? \"\"}</TableCell>\r\n                  <TableCell>\r\n                    {prod.RelatedProducts && prod.RelatedProducts.length > 0\r\n                      ? prod.RelatedProducts.map((rp) => rp.Name || rp.Id).join(\", \")\r\n                      : \"\"}\r\n                  </TableCell>\r\n                  <TableCell>{prod.Disclaimer ?? \"\"}</TableCell>\r\n                  <TableCell>{prod.Position ?? 0}</TableCell>\r\n                  <TableCell>{prod.RoundUp ? \"true\" : \"false\"}</TableCell>\r\n                  <TableCell>{prod.RoundToHalf ? \"true\" : \"false\"}</TableCell>\r\n                  <TableCell>\r\n                    {prod.Supplier && prod.Supplier.length > 0\r\n                      ? prod.Supplier.map((s) => s.SupplierName).join(\", \")\r\n                      : \"\"}\r\n                  </TableCell>\r\n                  <TableCell>\r\n                    {prod.RelatedTools && prod.RelatedTools.length > 0\r\n                      ? prod.RelatedTools.map((rt) => rt.Name || rt.Id).join(\", \")\r\n                      : \"\"}\r\n                  </TableCell>\r\n                  <TableCell>{prod.Minimum ?? 0}</TableCell>\r\n                  <TableCell>{prod.RFactor ?? 0}</TableCell>\r\n                  <TableCell>{prod.ReStock ? \"true\" : \"false\"}</TableCell>\r\n                  <TableCell>{prod.PackSize ?? 0}</TableCell>\r\n                  <TableCell>{prod.Charge_Rate ?? 0}</TableCell>\r\n                  <TableCell>{prod.Convert ? \"true\" : \"false\"}</TableCell>\r\n                  <TableCell>{prod.Denominator ?? 0}</TableCell>\r\n                  <TableCell>{prod.DisplayUnit ?? \"\"}</TableCell>\r\n                  <TableCell>{prod.Notes ?? \"\"}</TableCell>\r\n                  <TableCell>{prod.Allowance ?? 0}</TableCell>\r\n                  <TableCell>{prod.SetupTime ?? 0}</TableCell>\r\n                  <TableCell>{prod.ProductLink ?? \"\"}</TableCell>\r\n                  <TableCell>\r\n                    {prod.Addons && prod.Addons.length > 0\r\n                      ? prod.Addons.map((a) => a.Name || a.Id).join(\", \")\r\n                      : \"\"}\r\n                  </TableCell>\r\n                </TableRow>\r\n              ))}\r\n            </TableBody>\r\n          </Table>\r\n        </TableContainer>\r\n      );\r\n  };\r\n\r\n  const renderToolTable = () => {\r\n    return (\r\n      <TableContainer component={Paper}>\r\n        <Table size=\"small\" aria-label=\"tools-table\">\r\n          <TableHead>\r\n            <TableRow style={{ backgroundColor: \"#f1f1f1\" }}>\r\n              <TableCell><strong>Name</strong></TableCell>\r\n              <TableCell><strong>ToolKit</strong></TableCell>\r\n            </TableRow>\r\n          </TableHead>\r\n\r\n          <TableBody>\r\n            {toolData.map((tool) => {\r\n              // Find the name of the toolkit that matches tool.ToolKit_Id\r\n              const tk = toolkitData.find(t => t.Id === tool.ToolKit_Id);\r\n              return (\r\n                <TableRow \r\n                  key={tool.Id}\r\n                  hover \r\n                  style={{ cursor: \"pointer\" }}\r\n                  onClick={() => {\r\n                    const toolKitName = tk ? tk.Name : \"Unknown\";\r\n                    history.push(`/toollist/${params.Id}/${tool.ToolKit_Id}/${toolKitName}`);\r\n                  }}\r\n                >\r\n                  <TableCell>\r\n                    <FlexDiv>\r\n                      <Icon20x20 src=\"/Tools.svg\" />\r\n                      <RegularText style={{ marginLeft: 8 }}>{tool.Name}</RegularText>\r\n                    </FlexDiv>\r\n                  </TableCell>\r\n                  <TableCell>{tk ? tk.Name : \"\"}</TableCell>\r\n                </TableRow>\r\n              );\r\n            })}\r\n          </TableBody>\r\n        </Table>\r\n      </TableContainer>\r\n    );\r\n  };\r\n\r\n  const renderStaffTable = () => {\r\n    return (\r\n      <TableContainer component={Paper}>\r\n        <Table size=\"small\" aria-label=\"staff-table\">\r\n          <TableHead>\r\n            <TableRow style={{ backgroundColor: \"#f1f1f1\" }}>\r\n              <TableCell><strong>Role</strong></TableCell>\r\n            </TableRow>\r\n          </TableHead>\r\n\r\n          <TableBody>\r\n            {staffData.map((staff) => (\r\n              <TableRow \r\n                key={staff.Role}\r\n                hover \r\n                style={{ cursor: \"pointer\" }}\r\n                onClick={() => history.push(`/rolelist/${params.Id}/${staff.Role}`)}\r\n              >\r\n                <TableCell>\r\n                  <FlexDiv>\r\n                    <Icon20x20 src=\"/Workforce.svg\" />\r\n                    <RegularText style={{ marginLeft: 8 }}>{staff.Role}</RegularText>\r\n                  </FlexDiv>\r\n                </TableCell>\r\n              </TableRow>\r\n            ))}\r\n          </TableBody>\r\n        </Table>\r\n      </TableContainer>\r\n    );\r\n  };\r\n\r\n  const renderZoneTable = () => {\r\n    return (\r\n      <TableContainer component={Paper}>\r\n        <Table size=\"small\" aria-label=\"zones-table\">\r\n          <TableHead>\r\n            <TableRow style={{ backgroundColor: \"#f1f1f1\" }}>\r\n              <TableCell><strong>Name</strong></TableCell>\r\n            </TableRow>\r\n          </TableHead>\r\n\r\n          <TableBody>\r\n            {zoneData.map((zone) => (\r\n              <TableRow \r\n                key={zone.Id} \r\n                hover \r\n                style={{ cursor: \"pointer\" }}\r\n                onClick={() => history.push(`/Zone/${params.Id}/${zone.Id}`)}\r\n              >\r\n                <TableCell>\r\n                  <FlexDiv>\r\n                    <Icon20x20 src=\"/Zones.svg\" />\r\n                    <RegularText style={{ marginLeft: 8 }}>{zone.Name}</RegularText>\r\n                  </FlexDiv>\r\n                </TableCell>\r\n              </TableRow>\r\n            ))}\r\n          </TableBody>\r\n        </Table>\r\n      </TableContainer>\r\n    );\r\n  };\r\n\r\n  // ---------------------------------------------------------------------------\r\n  // Final Render\r\n  // ---------------------------------------------------------------------------\r\n  return (\r\n    <FlexCont100vw100vh>\r\n      {/* Left Menu */}\r\n      <LeftCont>\r\n        <Menu />\r\n      </LeftCont>\r\n\r\n      <FlexColumnCont80vwAutoHeight>\r\n        <RightViewFullWidth>\r\n          {/* Header Section */}\r\n          <FlexDiv70x7Percent height=\"auto\" margin=\"15px\">\r\n            <FlexColumnDiv>\r\n              <FlexDiv>\r\n                <LeagueSpartanExtraLargeBold>\r\n                  {storeObj.Name} Inventory Management\r\n                </LeagueSpartanExtraLargeBold>\r\n                <Icon30x40pxPointer\r\n                  onClick={() => setIsEditOpen(true)}\r\n                  src=\"/pencil.svg\"\r\n                  style={{ marginLeft: 10 }}\r\n                />\r\n              </FlexDiv>\r\n              \r\n              <FlexDiv>\r\n                <RegularText>\r\n                  {storeObj.Address} - {storeObj.Phone}\r\n                </RegularText>\r\n              </FlexDiv>\r\n\r\n              {/* Cards (Links to dedicated sub-pages) */}\r\n              <FlexDiv>\r\n                <Link\r\n                  to={\"/productcategory/\" + params.Id}\r\n                  style={{ textDecoration: \"none\", color: \"black\", marginRight: 12 }}\r\n                >\r\n                  <StoreCard\r\n                    StoreCardHeader=\"Manage Products\"\r\n                    StoreCardImgUrl=\"/Inventory.svg\"\r\n                  />\r\n                </Link>\r\n                <Link\r\n                  to={\"/toolkit/\" + params.Id}\r\n                  style={{ textDecoration: \"none\", color: \"black\", marginRight: 12 }}\r\n                >\r\n                  <StoreCard\r\n                    StoreCardHeader=\"Manage Tools\"\r\n                    StoreCardImgUrl=\"/Tools.svg\"\r\n                  />\r\n                </Link>\r\n                <Link\r\n                  to={\"/rolecat/\" + params.Id}\r\n                  style={{ textDecoration: \"none\", color: \"black\", marginRight: 12 }}\r\n                >\r\n                  <StoreCard\r\n                    StoreCardHeader=\"Manage Staff\"\r\n                    StoreCardImgUrl=\"/Workforce.svg\"\r\n                  />\r\n                </Link>\r\n                <Link\r\n                  to={\"/Zonelist/\" + params.Id}\r\n                  style={{ textDecoration: \"none\", color: \"black\" }}\r\n                >\r\n                  <StoreCard\r\n                    StoreCardHeader=\"Manage Zones\"\r\n                    StoreCardImgUrl=\"/Zones.svg\"\r\n                  />\r\n                </Link>\r\n              </FlexDiv>\r\n            </FlexColumnDiv>\r\n          </FlexDiv70x7Percent>\r\n\r\n          {/* Edit Store Window */}\r\n          <EditStoreWindow\r\n            storeobj={storeObj}\r\n            open={isEditOpen}\r\n            onClose={() => setIsEditOpen(false)}\r\n          />\r\n\r\n          <hr />\r\n          <br />\r\n\r\n          {/* Search + Toggles */}\r\n          <FlexDiv70x7Percent>\r\n            <FlexColumnDiv width=\"90%\">\r\n              <FlexDivSpaceBetween>\r\n                <InputLabel>Search for what you are looking for...</InputLabel>\r\n                <FlexDiv>\r\n                  <RegularResponsiveButton\r\n                    bgcolor={productSelected ? ColorPalette.PrimaryButtonBlue : ColorPalette.PrimaryGrey}\r\n                    onClick={() => setProductSelected(!productSelected)}\r\n                  >\r\n                    Products\r\n                  </RegularResponsiveButton>\r\n\r\n                  <RegularResponsiveButton\r\n                    bgcolor={toolSelected ? ColorPalette.PrimaryButtonBlue : ColorPalette.PrimaryGrey}\r\n                    onClick={() => setToolSelected(!toolSelected)}\r\n                    style={{ marginLeft: 8 }}\r\n                  >\r\n                    Tools\r\n                  </RegularResponsiveButton>\r\n\r\n                  <RegularResponsiveButton\r\n                    bgcolor={staffSelected ? ColorPalette.PrimaryButtonBlue : ColorPalette.PrimaryGrey}\r\n                    onClick={() => setStaffSelected(!staffSelected)}\r\n                    style={{ marginLeft: 8 }}\r\n                  >\r\n                    Staff\r\n                  </RegularResponsiveButton>\r\n\r\n                  <RegularResponsiveButton\r\n                    bgcolor={zoneSelected ? ColorPalette.PrimaryButtonBlue : ColorPalette.PrimaryGrey}\r\n                    onClick={() => setZoneSelected(!zoneSelected)}\r\n                    style={{ marginLeft: 8 }}\r\n                  >\r\n                    Zones\r\n                  </RegularResponsiveButton>\r\n                </FlexDiv>\r\n              </FlexDivSpaceBetween>\r\n\r\n              <br />\r\n              <InputField\r\n                onChange={(e) => {\r\n                  const searchText = e.target.value;\r\n                  if (!searchText.trim()) {\r\n                    // Reset data if empty\r\n                    setProductData(originalProductData);\r\n                    setToolData(originalToolData);\r\n                    setStaffData(originalStaffData);\r\n                    setZoneData(originalZoneData);\r\n                  } else {\r\n                    handleSearch(searchText);\r\n                  }\r\n                }}\r\n              />\r\n            </FlexColumnDiv>\r\n          </FlexDiv70x7Percent>\r\n\r\n          <br />\r\n\r\n          {/* \"Excel-like\" Tables */}\r\n          <FlexDiv70x7Percent width=\"78%\" alignitems=\"flex-start\" justifycontent=\"flex-start\">\r\n            <FlexColumnDiv width=\"100%\">\r\n              {/* PRODUCTS TABLE */}\r\n              {productSelected && (\r\n                <>\r\n                  <RegularText style={{ marginBottom: 8, marginTop: 16 }}>Products</RegularText>\r\n                  {renderProductTable()}\r\n                </>\r\n              )}\r\n\r\n              {/* TOOLS TABLE */}\r\n              {toolSelected && (\r\n                <>\r\n                  <RegularText style={{ marginBottom: 8, marginTop: 16 }}>Tools</RegularText>\r\n                  {renderToolTable()}\r\n                </>\r\n              )}\r\n\r\n              {/* STAFF TABLE */}\r\n              {staffSelected && (\r\n                <>\r\n                  <RegularText style={{ marginBottom: 8, marginTop: 16 }}>Staff</RegularText>\r\n                  {renderStaffTable()}\r\n                </>\r\n              )}\r\n\r\n              {/* ZONES TABLE */}\r\n              {zoneSelected && (\r\n                <>\r\n                  <RegularText style={{ marginBottom: 8, marginTop: 16 }}>Zones</RegularText>\r\n                  {renderZoneTable()}\r\n                </>\r\n              )}\r\n            </FlexColumnDiv>\r\n          </FlexDiv70x7Percent>\r\n        </RightViewFullWidth>\r\n      </FlexColumnCont80vwAutoHeight>\r\n    </FlexCont100vw100vh>\r\n  );\r\n};\r\n\r\nInventoryScreen.defaultProps = {};\r\n\r\nexport default InventoryScreen;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom/cjs/react-router-dom.min';\r\nimport styled from 'styled-components';\r\nimport { GetQuoteByIdForUserDisplay } from '../../API_Functions/CaseQuote_Functions';\r\nimport { FlexDiv, LeftCont } from '../../StylesheetComps/Cont';\r\nimport Menu from '../../comps/MenuComps/Menu';\r\nimport { ColorPalette } from '../../StylesheetComps/Colors';\r\nimport { GreyTinyTextItalics } from '../../StylesheetComps/Titles';\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\n/* --------------------------- Responsive Styled Components --------------------------- */\r\n\r\n// Wrap the FlexDiv to change layout direction on mobile\r\nconst ResponsiveFlexDiv = styled(FlexDiv)`\r\n  @media (max-width: 768px) {\r\n    flex-direction: column;\r\n  }\r\n`;\r\n\r\n// Hide the left sidebar on mobile devices\r\nconst MobileLeftCont = styled(LeftCont)`\r\n  @media (max-width: 768px) {\r\n    display: none;\r\n  }\r\n`;\r\n\r\n// Top-level container\r\nconst PageContainer = styled.div`\r\n  display: flex;\r\n  width: 100%;\r\n  flex-direction: column;\r\n  height: 100vh;\r\n  background: #f8f8f8;\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,\r\n    Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n  @media (max-width: 768px) {\r\n    height: auto;\r\n  }\r\n`;\r\n\r\n// Header with Title + Buttons\r\nconst HeaderBar = styled.div`\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  background: #fff;\r\n  padding: 1rem 2rem;\r\n  box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);\r\n  @media (max-width: 768px) {\r\n    flex-direction: column;\r\n    align-items: flex-start;\r\n    padding: 1rem;\r\n  }\r\n`;\r\n\r\nconst Title = styled.h1`\r\n  font-size: 1.4rem;\r\n  margin: 0;\r\n  @media (max-width: 768px) {\r\n    font-size: 1.2rem;\r\n    margin-top: 0.5rem;\r\n  }\r\n`;\r\n\r\nconst ButtonGroup = styled.div`\r\n  display: flex;\r\n  gap: 1rem;\r\n  @media (max-width: 768px) {\r\n    width: 100%;\r\n    flex-wrap: wrap;\r\n    margin-top: 1rem;\r\n    button {\r\n      flex: 1;\r\n      margin-bottom: 0.5rem;\r\n    }\r\n  }\r\n`;\r\n\r\nconst Button = styled.button`\r\n  background-color: ${(props) => (props.primary ? '#007aff' : '#e0e0e0')};\r\n  color: ${(props) => (props.primary ? '#fff' : '#333')};\r\n  border: none;\r\n  padding: 0.6rem 1.2rem;\r\n  font-size: 0.9rem;\r\n  border-radius: 6px;\r\n  cursor: pointer;\r\n  box-shadow: ${(props) =>\r\n    props.primary ? '0 2px 6px rgba(0, 122, 255, 0.4)' : 'none'};\r\n  transition: background-color 0.2s;\r\n  \r\n  &:hover {\r\n    background-color: ${(props) =>\r\n      props.primary ? '#005bb5' : 'rgba(0,0,0,0.05)'};\r\n  }\r\n  @media (max-width: 768px) {\r\n    padding: 0.5rem 1rem;\r\n    font-size: 0.85rem;\r\n  }\r\n`;\r\n\r\n// Toggle for multi-select\r\nconst ToggleButton = styled(Button)`\r\n  background-color: #ffa500;\r\n  &:hover {\r\n    background-color: #cc8400;\r\n  }\r\n`;\r\n\r\n// Main content area for the table and form info\r\nconst Content = styled.div`\r\n  flex: 1;\r\n  overflow: auto;\r\n  padding: 1rem 2rem;\r\n  @media (max-width: 768px) {\r\n    padding: 1rem;\r\n  }\r\n`;\r\n\r\n/* --------------------------- Table & Related Styled Components --------------------------- */\r\n\r\nconst TableContainer = styled.div`\r\n  border: 1px solid #ddd;\r\n  background: #fff;\r\n  border-radius: 8px;\r\n  overflow-x: auto;\r\n`;\r\n\r\nconst StyledTable = styled.table`\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n`;\r\n\r\nconst TableHead = styled.thead`\r\n  background: #f2f2f2;\r\n`;\r\n\r\nconst TableRow = styled.tr`\r\n  height: 50px;\r\n  background-color: ${(props) => (props.isDefault ? '#f0f0f0' : 'inherit')};\r\n  border-top: ${(props) => (props.dropIndicator ? '4px solid #007aff' : 'none')};\r\n  &:hover {\r\n    background-color: ${(props) => (props.isHeader ? 'inherit' : '#fafafa')};\r\n  }\r\n  transition: background-color 0.15s;\r\n  @media (max-width: 768px) {\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nconst TableHeaderCell = styled.th`\r\n  text-align: left;\r\n  padding: 0.75rem;\r\n  background-color: ${ColorPalette.GreyGreen};\r\n  border-bottom: 1px solid #ddd;\r\n  font-weight: 600;\r\n  width: ${(props) => (props.select ? '5%' : props.wide ? '40%' : '15%')};\r\n  @media (max-width: 768px) {\r\n    padding: 0.5rem;\r\n    font-size: 0.85rem;\r\n  }\r\n`;\r\n\r\nconst TableBody = styled.tbody``;\r\n\r\nconst TableCell = styled.td`\r\n  border-bottom: 1px solid #eee;\r\n  padding: 0.75rem;\r\n  vertical-align: middle;\r\n  height: 50px;\r\n  width: ${(props) => (props.select ? '5%' : props.wide ? '40%' : '10%')};\r\n  @media (max-width: 768px) {\r\n    padding: 0.5rem;\r\n    font-size: 0.85rem;\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nconst TableInput = styled.input`\r\n  width: 100%;\r\n  border: none;\r\n  background: transparent;\r\n  font-size: 0.95rem;\r\n  outline: none;\r\n  padding: 0.2rem;\r\n  &:focus {\r\n    background: #fffceb;\r\n    border-radius: 4px;\r\n  }\r\n  @media (max-width: 768px) {\r\n    font-size: 0.85rem;\r\n  }\r\n`;\r\n\r\nconst TableSelect = styled.select`\r\n  width: 100%;\r\n  border: none;\r\n  background: transparent;\r\n  font-size: 0.95rem;\r\n  outline: none;\r\n  padding: 0.2rem;\r\n  &:focus {\r\n    background: #fffceb;\r\n    border-radius: 4px;\r\n  }\r\n  @media (max-width: 768px) {\r\n    font-size: 0.85rem;\r\n  }\r\n`;\r\n\r\nconst AddRow = styled.tr`\r\n  background: #f9fffa;\r\n  height: 50px;\r\n  &:hover {\r\n    background: #f2fff1;\r\n  }\r\n  @media (max-width: 768px) {\r\n    height: auto;\r\n  }\r\n`;\r\n\r\nconst AddCell = styled.td`\r\n  padding: 0.75rem;\r\n  border-top: 2px solid #ccc;\r\n  text-align: center;\r\n  cursor: pointer;\r\n  color: #007aff;\r\n  font-weight: 500;\r\n  @media (max-width: 768px) {\r\n    padding: 0.5rem;\r\n    font-size: 0.9rem;\r\n  }\r\n`;\r\n\r\n// Action buttons\r\nconst DeleteButton = styled.button`\r\n  background: transparent;\r\n  border: none;\r\n  color: red;\r\n  cursor: pointer;\r\n  font-size: 1.2rem;\r\n  margin-right: 0.5rem;\r\n  @media (max-width: 768px) {\r\n    font-size: 1rem;\r\n    margin-right: 0.3rem;\r\n  }\r\n`;\r\n\r\nconst DuplicateButton = styled.button`\r\n  background: transparent;\r\n  border: none;\r\n  color: ${ColorPalette.PrimaryButtonBlue};\r\n  cursor: pointer;\r\n  font-size: 1.2rem;\r\n  @media (max-width: 768px) {\r\n    font-size: 1rem;\r\n  }\r\n`;\r\n\r\n// Options for question type\r\nconst actionOptions = ['Short Text', 'Long Text', 'File Upload', 'Number'];\r\n\r\n/* ---------------------- Styled Components for Form Info ---------------------- */\r\n\r\nconst FormInfoContainer = styled.div`\r\n  background: #fff;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  padding: 1rem;\r\n  margin-bottom: 1rem;\r\n  @media (max-width: 768px) {\r\n    padding: 0.75rem;\r\n  }\r\n`;\r\n\r\nconst FormInputLabel = styled.label`\r\n  display: block;\r\n  font-size: 0.9rem;\r\n  font-weight: bold;\r\n  margin-bottom: 0.5rem;\r\n  @media (max-width: 768px) {\r\n    font-size: 0.85rem;\r\n  }\r\n`;\r\n\r\nconst FormInput = styled.input`\r\n  width: 95%;\r\n  padding: 0.75rem;\r\n  font-size: 1rem;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  margin-bottom: 1rem;\r\n  box-sizing: border-box;\r\n  &:focus {\r\n    border-color: #007aff;\r\n  }\r\n  @media (max-width: 768px) {\r\n    width: 100%;\r\n    padding: 0.5rem;\r\n    font-size: 0.95rem;\r\n  }\r\n`;\r\n\r\nconst FormTextArea = styled.textarea`\r\n  width: 95%;\r\n  padding: 0.75rem;\r\n  font-size: 1rem;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  margin-bottom: 1rem;\r\n  box-sizing: border-box;\r\n  &:focus {\r\n    border-color: #007aff;\r\n  }\r\n  @media (max-width: 768px) {\r\n    width: 100%;\r\n    padding: 0.5rem;\r\n    font-size: 0.95rem;\r\n  }\r\n`;\r\n\r\n/* --------------------------- CreateForm Component --------------------------- */\r\n\r\nfunction CreateForm() {\r\n  const [estimate, setEstimate] = useState(null);\r\n  const params = useParams();\r\n  const history = useHistory();\r\n  \r\n  // Drag & drop state\r\n  const [draggedIndex, setDraggedIndex] = useState(null);\r\n  const [dropTargetIndex, setDropTargetIndex] = useState(null);\r\n\r\n  // Multi-select state\r\n  const [multiSelectMode, setMultiSelectMode] = useState(false);\r\n  const [selectedRows, setSelectedRows] = useState([]);\r\n\r\n  // Default \"core\" questions\r\n  const defaultQuestions = [\r\n    {\r\n      questionTitle: 'Date',\r\n      description: 'Enter the date your submission',\r\n      questionType: 'Short Text',\r\n      category: 'default',\r\n      isDefault: true,\r\n    },\r\n    {\r\n      questionTitle: 'Site Lead',\r\n      description: 'Enter the site lead name',\r\n      questionType: 'Short Text',\r\n      category: 'default',\r\n      isDefault: true,\r\n    },\r\n    {\r\n      questionTitle: 'Project Name',\r\n      description: 'Enter the project name',\r\n      questionType: 'Short Text',\r\n      category: 'default',\r\n      isDefault: true,\r\n    },\r\n    {\r\n      questionTitle: 'Crew Hours',\r\n      description: 'Enter total crew hours',\r\n      questionType: 'Number',\r\n      category: 'default',\r\n      isDefault: true,\r\n    },\r\n    {\r\n      questionTitle: 'EWO',\r\n      description: 'Upload a file for the EWO',\r\n      questionType: 'File Upload',\r\n      category: 'default',\r\n      isDefault: true,\r\n      maxFiles: 1,\r\n    },\r\n    {\r\n      questionTitle: 'Site Photos',\r\n      description: 'Upload up to 10 site photos',\r\n      questionType: 'File Upload',\r\n      category: 'default',\r\n      isDefault: true,\r\n      maxFiles: 10,\r\n    },\r\n    {\r\n      questionTitle: 'Material & Sub Trade Slips',\r\n      description: 'Upload up to 10 images for material and sub trade slips',\r\n      questionType: 'File Upload',\r\n      category: 'default',\r\n      isDefault: true,\r\n      maxFiles: 10,\r\n    },\r\n    {\r\n      questionTitle: 'Equipment Used',\r\n      description: 'Enter the equipment used',\r\n      questionType: 'Short Text',\r\n      category: 'default',\r\n      isDefault: true,\r\n    },\r\n    {\r\n      questionTitle: 'Notes',\r\n      description: 'Enter any notes needed by the project coordinator',\r\n      questionType: 'Short Text',\r\n      category: 'default',\r\n      isDefault: true,\r\n    },\r\n  ];\r\n\r\n  // The overall list of questions\r\n  const [questions, setQuestions] = useState(defaultQuestions);\r\n\r\n  // New state for form title and description\r\n  const [formTitle, setFormTitle] = useState('');\r\n  const [formDescription, setFormDescription] = useState('');\r\n\r\n  // 1) Fetch the estimate from your custom API\r\n  const GetEstimateInformation = async (estimateId) => {\r\n    try {\r\n      const data = await GetQuoteByIdForUserDisplay(estimateId);\r\n      setEstimate(data.quote);\r\n    } catch (err) {\r\n      console.error(err);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (params?.estimateId) {\r\n      GetEstimateInformation(params.estimateId);\r\n    }\r\n  }, [params?.estimateId]);\r\n\r\n  // 2) Once estimate is loaded, create question objects from Material + Removal\r\n  useEffect(() => {\r\n    if (!estimate) return;\r\n    const materialItems = estimate?.Material?.Items || [];\r\n    const removalItems = estimate?.Removal?.Items || [];\r\n\r\n    const matQuestions = materialItems.map((item) => ({\r\n      questionTitle: item.Name || 'Material Item',\r\n      description: '',\r\n      questionType: 'Number',\r\n      category: 'material',\r\n      isDefault: false,\r\n      price: item.Price || 0,\r\n      quantity: item.Quant || 0,\r\n    }));\r\n\r\n    const remQuestions = removalItems.map((item) => ({\r\n      questionTitle: item.Name || 'Removal Item',\r\n      description: '',\r\n      questionType: 'Number',\r\n      category: 'removal',\r\n      isDefault: false,\r\n      price: item.Price || 0,\r\n      quantity: item.Quant || 0,\r\n    }));\r\n\r\n    setQuestions([...defaultQuestions, ...matQuestions, ...remQuestions]);\r\n  }, [estimate]);\r\n\r\n  /* -------------------- Local UI Handlers (Drag, Duplicate, Combine) -------------------- */\r\n\r\n  const handleChange = (index, key, value) => {\r\n    setQuestions((prev) => {\r\n      const updated = [...prev];\r\n      updated[index] = { ...updated[index], [key]: value };\r\n      return updated;\r\n    });\r\n  };\r\n\r\n  const handleDelete = (index) => {\r\n    setQuestions((prev) => prev.filter((_, i) => i !== index));\r\n  };\r\n\r\n  const handleDuplicate = (index) => {\r\n    setQuestions((prev) => {\r\n      const newQuestions = [...prev];\r\n      const duplicate = { ...newQuestions[index], isDefault: false };\r\n      newQuestions.splice(index + 1, 0, duplicate);\r\n      return newQuestions;\r\n    });\r\n  };\r\n\r\n  const handleAddRow = () => {\r\n    setQuestions((prev) => [\r\n      ...prev,\r\n      {\r\n        questionTitle: '',\r\n        description: '',\r\n        questionType: 'Short Text',\r\n        category: '',\r\n        isDefault: false,\r\n      },\r\n    ]);\r\n  };\r\n\r\n  const handleDragStart = (e, index) => {\r\n    if (questions[index].isDefault) {\r\n      e.preventDefault();\r\n      return;\r\n    }\r\n    setDraggedIndex(index);\r\n  };\r\n\r\n  const handleDragOver = (e, index) => {\r\n    if (questions[index].isDefault) return;\r\n    e.preventDefault();\r\n    setDropTargetIndex(index);\r\n  };\r\n\r\n  const handleDragLeave = () => {\r\n    setDropTargetIndex(null);\r\n  };\r\n\r\n  const handleDrop = (e, index) => {\r\n    if (draggedIndex === null) return;\r\n    if (questions[index].isDefault) return;\r\n\r\n    let newIndex = index;\r\n    if (draggedIndex < index) {\r\n      newIndex = index - 1;\r\n    }\r\n\r\n    if (newIndex === draggedIndex) {\r\n      setDraggedIndex(null);\r\n      setDropTargetIndex(null);\r\n      return;\r\n    }\r\n\r\n    setQuestions((prev) => {\r\n      const updated = [...prev];\r\n      const draggedItem = updated[draggedIndex];\r\n      updated.splice(draggedIndex, 1);\r\n      updated.splice(newIndex, 0, draggedItem);\r\n      return updated;\r\n    });\r\n\r\n    setDraggedIndex(null);\r\n    setDropTargetIndex(null);\r\n  };\r\n\r\n  const handleSelectRow = (index) => {\r\n    setSelectedRows((prev) =>\r\n      prev.includes(index)\r\n        ? prev.filter((i) => i !== index)\r\n        : [...prev, index]\r\n    );\r\n  };\r\n\r\n  const handleCombineSelected = () => {\r\n    const indices = selectedRows.filter((i) => !questions[i].isDefault);\r\n    if (indices.length < 2) {\r\n      alert('Select at least two non-default rows to combine.');\r\n      return;\r\n    }\r\n    const mainIndex = Math.min(...indices);\r\n    let combinedPrice = 0;\r\n    let combinedQuantity = 0;\r\n    indices.forEach((i) => {\r\n      const row = questions[i];\r\n      combinedPrice += Number(row.price) || 0;\r\n      combinedQuantity += Number(row.quantity) || 0;\r\n    });\r\n\r\n    setQuestions((prev) => {\r\n      const updated = [...prev];\r\n      updated[mainIndex] = {\r\n        ...updated[mainIndex],\r\n        price: combinedQuantity > 0 ? combinedPrice / combinedQuantity : 0,\r\n        quantity: combinedQuantity,\r\n        questionTitle: updated[mainIndex].questionTitle + ' (Combined)',\r\n      };\r\n      const toRemove = indices.filter((i) => i !== mainIndex).sort((a, b) => b - a);\r\n      toRemove.forEach((i) => {\r\n        updated.splice(i, 1);\r\n      });\r\n      return updated;\r\n    });\r\n    setSelectedRows([]);\r\n  };\r\n\r\n  /* -------------------- Supabase REST Insert Handlers -------------------- */\r\n\r\n  const handleSaveProgress = async () => {\r\n    try {\r\n      // 1. Check if a form exists for this estimate.\r\n      const existingFormResp = await fetch(\r\n        `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/forms?estimate_number=eq.${params.estimateId}`,\r\n        {\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            Authorization: window.$POLYGONAUTHKEY,\r\n            'Content-Type': 'application/json',\r\n          },\r\n        }\r\n      );\r\n      const existingForms = await existingFormResp.json();\r\n      let formId;\r\n      if (existingForms.length > 0) {\r\n        // Form exists: update its title and description.\r\n        formId = existingForms[0].id;\r\n        const updateFormResp = await fetch(\r\n          `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/forms?id=eq.${formId}`,\r\n          {\r\n            method: 'PATCH',\r\n            headers: {\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n              'Content-Type': 'application/json',\r\n            },\r\n            body: JSON.stringify({\r\n              title: formTitle,\r\n              description: formDescription,\r\n            }),\r\n          }\r\n        );\r\n        if (!updateFormResp.ok) throw new Error('Error updating form');\r\n      } else {\r\n        // No form exists: create one.\r\n        const newFormBody = {\r\n          title: formTitle,\r\n          description: formDescription,\r\n          estimate_number: params.estimateId,\r\n          project_number: params.caseId,\r\n        };\r\n        const newFormResp = await fetch(\r\n          'https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/forms',\r\n          {\r\n            method: 'POST',\r\n            headers: {\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n              'Content-Type': 'application/json',\r\n              Prefer: 'return=representation',\r\n            },\r\n            body: JSON.stringify([newFormBody]),\r\n          }\r\n        );\r\n        if (!newFormResp.ok) throw new Error('Error creating form');\r\n        const newFormData = await newFormResp.json();\r\n        formId = newFormData[0].id;\r\n      }\r\n  \r\n      // 2. Delete existing questions for this form.\r\n      await fetch(\r\n        `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/questions?form_id=eq.${formId}`,\r\n        {\r\n          method: 'DELETE',\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            Authorization: window.$POLYGONAUTHKEY,\r\n            'Content-Type': 'application/json',\r\n          },\r\n        }\r\n      );\r\n  \r\n      // 3. Insert the current questions.\r\n      const questionRows = questions.map((q, idx) => ({\r\n        form_id: formId,\r\n        question_title: q.questionTitle,\r\n        description: q.description,\r\n        question_type: q.questionType,\r\n        sort_order: idx,\r\n        is_item: false,\r\n      }));\r\n  \r\n      const questionResp = await fetch(\r\n        'https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/questions',\r\n        {\r\n          method: 'POST',\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            Authorization: window.$POLYGONAUTHKEY,\r\n            'Content-Type': 'application/json',\r\n            Prefer: 'resolution=merge-duplicates',\r\n          },\r\n          body: JSON.stringify(questionRows),\r\n        }\r\n      );\r\n      if (!questionResp.ok) throw new Error('Error inserting questions');\r\n  \r\n      alert('Progress saved successfully!');\r\n    } catch (error) {\r\n      console.error(error);\r\n      alert('Failed to save progress.');\r\n    }\r\n  };\r\n  \r\n  const handleCreateForm = async () => {\r\n    try {\r\n      // 1. Check if a form exists for this estimate.\r\n      const existingFormResp = await fetch(\r\n        `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/forms?estimate_number=eq.${params.estimateId}`,\r\n        {\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            Authorization: window.$POLYGONAUTHKEY,\r\n            'Content-Type': 'application/json',\r\n          },\r\n        }\r\n      );\r\n      const existingForms = await existingFormResp.json();\r\n      let formId;\r\n      if (existingForms.length > 0) {\r\n        // Update existing form with new title and description.\r\n        formId = existingForms[0].id;\r\n        const updateFormResp = await fetch(\r\n          `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/forms?id=eq.${formId}`,\r\n          {\r\n            method: 'PATCH',\r\n            headers: {\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n              'Content-Type': 'application/json',\r\n            },\r\n            body: JSON.stringify({\r\n              title: formTitle,\r\n              description: formDescription,\r\n            }),\r\n          }\r\n        );\r\n        if (!updateFormResp.ok) throw new Error('Error updating form');\r\n      } else {\r\n        // No form exists: create one.\r\n        const newFormBody = {\r\n          title: formTitle,\r\n          description: formDescription,\r\n          estimate_number: params.estimateId,\r\n          project_number: params.caseId,\r\n        };\r\n        const newFormResp = await fetch(\r\n          'https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/forms',\r\n          {\r\n            method: 'POST',\r\n            headers: {\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n              'Content-Type': 'application/json',\r\n              Prefer: 'return=representation',\r\n            },\r\n            body: JSON.stringify([newFormBody]),\r\n          }\r\n        );\r\n        if (!newFormResp.ok) throw new Error('Error creating form');\r\n        const newFormData = await newFormResp.json();\r\n        formId = newFormData[0].id;\r\n      }\r\n  \r\n      // 2. Delete existing questions for this form.\r\n      await fetch(\r\n        `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/questions?form_id=eq.${formId}`,\r\n        {\r\n          method: 'DELETE',\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            Authorization: window.$POLYGONAUTHKEY,\r\n            'Content-Type': 'application/json',\r\n          },\r\n        }\r\n      );\r\n  \r\n      // 3. Insert the final set of questions.\r\n      const questionRows = questions.map((q, idx) => ({\r\n        form_id: formId,\r\n        question_title: q.questionTitle,\r\n        description: q.description,\r\n        question_type: q.questionType,\r\n        sort_order: idx,\r\n        is_item: false,\r\n      }));\r\n  \r\n      const questionResp = await fetch(\r\n        'https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/questions',\r\n        {\r\n          method: 'POST',\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            Authorization: window.$POLYGONAUTHKEY,\r\n            'Content-Type': 'application/json',\r\n            Prefer: 'resolution=merge-duplicates',\r\n          },\r\n          body: JSON.stringify(questionRows),\r\n        }\r\n      );\r\n      if (!questionResp.ok) throw new Error('Error inserting questions');\r\n        \r\n      history.push(`/viewcase/${params.Id}/${params.storeId}/${params.caseId}`);\r\n    } catch (error) {\r\n      console.error(error);\r\n      alert('Failed to create form.');\r\n    }\r\n  };  \r\n\r\n  /* ------------------------------ Render ------------------------------ */\r\n\r\n  // Table columns\r\n  const columns = [\r\n    ...(multiSelectMode ? [{ key: 'select', label: 'Select', select: true }] : []),\r\n    { key: 'questionTitle', label: 'Question Title', wide: true },\r\n    { key: 'description', label: 'Description', wide: true },\r\n    { key: 'questionType', label: 'Question Type' },\r\n    { key: 'action', label: 'Action' },\r\n  ];\r\n\r\n  return (\r\n    <div>\r\n      <ResponsiveFlexDiv>\r\n        <MobileLeftCont>\r\n          <Menu />\r\n        </MobileLeftCont>\r\n        <PageContainer>\r\n          {/* Header */}\r\n          <HeaderBar>\r\n            <div>\r\n              <GreyTinyTextItalics color={ColorPalette.PrimaryButtonBlue}>\r\n                Field Reporting System Form Creator\r\n              </GreyTinyTextItalics>\r\n              <Title>\r\n                {estimate?.Tittle} - {estimate?.Address}\r\n              </Title>\r\n            </div>\r\n            <ButtonGroup>\r\n              <ToggleButton onClick={() => setMultiSelectMode(!multiSelectMode)}>\r\n                {multiSelectMode ? 'Disable Combine Items' : 'Enable Combine Items'}\r\n              </ToggleButton>\r\n              {multiSelectMode && (\r\n                <Button onClick={handleCombineSelected}>\r\n                  Combine Selected\r\n                </Button>\r\n              )}\r\n              {/* <Button onClick={handleSaveProgress}>Save Progress</Button> */}\r\n              <Button primary onClick={handleCreateForm}>\r\n                Create Form\r\n              </Button>\r\n            </ButtonGroup>\r\n          </HeaderBar>\r\n\r\n          {/* Form Info Section */}\r\n          <Content>\r\n            <FormInfoContainer>\r\n              <FormInputLabel>Form Title</FormInputLabel>\r\n              <FormInput \r\n                type=\"text\" \r\n                value={formTitle} \r\n                onChange={(e) => setFormTitle(e.target.value)} \r\n                placeholder=\"Enter form title\" \r\n              />\r\n              <FormInputLabel>Form Description</FormInputLabel>\r\n              <FormTextArea \r\n                value={formDescription} \r\n                onChange={(e) => setFormDescription(e.target.value)} \r\n                placeholder=\"Enter form description\" \r\n                rows=\"3\"\r\n              />\r\n            </FormInfoContainer>\r\n\r\n            {/* Table for Questions */}\r\n            <TableContainer>\r\n              <StyledTable>\r\n                <TableHead>\r\n                  <TableRow isHeader>\r\n                    {columns.map((col) => (\r\n                      <TableHeaderCell\r\n                        key={col.key}\r\n                        wide={col.wide}\r\n                        select={col.select}\r\n                      >\r\n                        {col.label}\r\n                      </TableHeaderCell>\r\n                    ))}\r\n                  </TableRow>\r\n                </TableHead>\r\n                <TableBody>\r\n                  {questions.map((row, rowIndex) => {\r\n                    const rowStyle = rowIndex === draggedIndex ? { opacity: 0.5 } : {};\r\n                    return (\r\n                      <TableRow\r\n                        key={rowIndex}\r\n                        style={rowStyle}\r\n                        draggable={!row.isDefault}\r\n                        isDefault={row.isDefault}\r\n                        dropIndicator={dropTargetIndex === rowIndex}\r\n                        onDragStart={(e) => handleDragStart(e, rowIndex)}\r\n                        onDragOver={(e) => handleDragOver(e, rowIndex)}\r\n                        onDragLeave={handleDragLeave}\r\n                        onDrop={(e) => handleDrop(e, rowIndex)}\r\n                      >\r\n                        {columns.map((col) => {\r\n                          if (col.key === 'select') {\r\n                            return (\r\n                              <TableCell key={col.key} select={col.select}>\r\n                                {!row.isDefault && (\r\n                                  <input\r\n                                    type=\"checkbox\"\r\n                                    checked={selectedRows.includes(rowIndex)}\r\n                                    onChange={() => handleSelectRow(rowIndex)}\r\n                                  />\r\n                                )}\r\n                              </TableCell>\r\n                            );\r\n                          }\r\n                          if (col.key === 'questionType') {\r\n                            return (\r\n                              <TableCell key={col.key} wide={col.wide}>\r\n                                <TableSelect\r\n                                  value={row.questionType}\r\n                                  onChange={(e) =>\r\n                                    handleChange(rowIndex, 'questionType', e.target.value)\r\n                                  }\r\n                                >\r\n                                  {actionOptions.map((opt) => (\r\n                                    <option key={opt} value={opt}>\r\n                                      {opt}\r\n                                    </option>\r\n                                  ))}\r\n                                </TableSelect>\r\n                              </TableCell>\r\n                            );\r\n                          }\r\n                          if (col.key === 'action') {\r\n                            return (\r\n                              <TableCell key={col.key} wide={col.wide}>\r\n                                {!row.isDefault && (\r\n                                  <>\r\n                                    <DuplicateButton\r\n                                      onClick={() => handleDuplicate(rowIndex)}\r\n                                      title=\"Duplicate\"\r\n                                    >\r\n                                      ⧉\r\n                                    </DuplicateButton>\r\n                                    <DeleteButton\r\n                                      onClick={() => handleDelete(rowIndex)}\r\n                                      title=\"Delete\"\r\n                                    >\r\n                                      &#10005;\r\n                                    </DeleteButton>\r\n                                  </>\r\n                                )}\r\n                              </TableCell>\r\n                            );\r\n                          }\r\n                          return (\r\n                            <TableCell key={col.key} wide={col.wide}>\r\n                              <TableInput\r\n                                type=\"text\"\r\n                                value={row[col.key] || ''}\r\n                                onChange={(e) =>\r\n                                  handleChange(rowIndex, col.key, e.target.value)\r\n                                }\r\n                              />\r\n                            </TableCell>\r\n                          );\r\n                        })}\r\n                      </TableRow>\r\n                    );\r\n                  })}\r\n                  <AddRow>\r\n                    <AddCell colSpan={columns.length} onClick={handleAddRow}>\r\n                      + Add New Question\r\n                    </AddCell>\r\n                  </AddRow>\r\n                </TableBody>\r\n              </StyledTable>\r\n            </TableContainer>\r\n          </Content>\r\n        </PageContainer>\r\n      </ResponsiveFlexDiv>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default CreateForm;\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport axios from 'axios';\r\nimport styled from 'styled-components';\r\nimport { UploadFileToCloud } from '../../API_Functions/Utility_Functions';\r\n\r\n// ---------------------- Styled Components ----------------------\r\n\r\nconst PageContainer = styled.div`\r\n  max-width: 600px;\r\n  margin: 0 auto;\r\n  padding: 1rem;\r\n  background: #f8f8f8;\r\n  min-height: 100vh;\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,\r\n    Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n`;\r\n\r\nconst FormHeader = styled.div`\r\n  margin-bottom: 2rem;\r\n  text-align: center;\r\n`;\r\n\r\nconst FormTitle = styled.h1`\r\n  margin: 0;\r\n  font-size: 2rem;\r\n  font-weight: 600;\r\n`;\r\n\r\nconst FormDescription = styled.p`\r\n  margin: 0.5rem 0 0;\r\n  font-size: 1rem;\r\n  color: #555;\r\n`;\r\n\r\nconst QuestionContainer = styled.div`\r\n  margin-bottom: 1.5rem;\r\n`;\r\n\r\nconst QuestionLabel = styled.label`\r\n  display: block;\r\n  font-size: 1rem;\r\n  font-weight: 600;\r\n  margin-bottom: 0.25rem;\r\n`;\r\n\r\nconst QuestionDescription = styled.p`\r\n  margin: 0 0 0.5rem 0;\r\n  font-size: 0.9rem;\r\n  color: #777;\r\n`;\r\n\r\nconst ResponseInput = styled.input`\r\n  width: 95%;\r\n  padding: 0.75rem;\r\n  font-size: 1rem;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  outline: none;\r\n  transition: border-color 0.2s;\r\n  &:focus {\r\n    border-color: #007aff;\r\n  }\r\n`;\r\n\r\nconst ResponseTextarea = styled.textarea`\r\n  width: 100%;\r\n  padding: 0.75rem;\r\n  font-size: 1rem;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  resize: vertical;\r\n  outline: none;\r\n  transition: border-color 0.2s;\r\n  &:focus {\r\n    border-color: #007aff;\r\n  }\r\n`;\r\n\r\nconst SubmitButton = styled.button`\r\n  background-color: #007aff;\r\n  color: #fff;\r\n  padding: 1rem;\r\n  width: 100%;\r\n  font-size: 1.1rem;\r\n  border: none;\r\n  border-radius: 10px;\r\n  cursor: pointer;\r\n  box-shadow: 0 4px 10px rgba(0, 122, 255, 0.3);\r\n  transition: background-color 0.2s;\r\n  &:hover {\r\n    background-color: #005bb5;\r\n  }\r\n`;\r\n\r\nconst DatePicker = styled(ResponseInput).attrs({ type: 'date' })`\r\n  &::-webkit-calendar-picker-indicator {\r\n    opacity: 1;\r\n    display: block;\r\n    cursor: pointer;\r\n  }\r\n`;\r\n\r\n// Simple Login UI styles\r\nconst LoginContainer = styled.div`\r\n  max-width: 400px;\r\n  margin: 100px auto;\r\n  padding: 2rem;\r\n  background: #fff;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  text-align: center;\r\n`;\r\n\r\nconst LoginInput = styled.input`\r\n  width: 90%;\r\n  padding: 0.75rem;\r\n  margin-bottom: 1rem;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  font-size: 1rem;\r\n`;\r\n\r\nconst LoginButton = styled.button`\r\n  background-color: #007aff;\r\n  color: #fff;\r\n  padding: 0.75rem;\r\n  width: 95%;\r\n  border: none;\r\n  border-radius: 8px;\r\n  font-size: 1rem;\r\n  cursor: pointer;\r\n  &:hover {\r\n    background-color: #005bb5;\r\n  }\r\n`;\r\n\r\nconst ThankYouContainer = styled.div`\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: center;\r\n  align-items: center;\r\n  min-height: 100vh;\r\n  background: #f8f8f8;\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,\r\n    Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n`;\r\n\r\nconst ThankYouMessage = styled.h1`\r\n  font-size: 2rem;\r\n  font-weight: 600;\r\n  color: #007aff;\r\n`;\r\n\r\n// ---------------------- ViewForm Component ----------------------\r\n\r\nfunction ViewForm() {\r\n  const { formId } = useParams();\r\n\r\n  // Authentication state\r\n  const [isAuthenticated, setIsAuthenticated] = useState(\r\n    !!sessionStorage.getItem('token')\r\n  );\r\n  const [loginUsername, setLoginUsername] = useState('');\r\n  const [loginPassword, setLoginPassword] = useState('');\r\n  const [loginError, setLoginError] = useState('');\r\n\r\n  // Form & question state\r\n  const [form, setForm] = useState(null);\r\n  const [questions, setQuestions] = useState([]);\r\n  // responses maps question_id to answer (or file URL(s) for file uploads)\r\n  const [responses, setResponses] = useState({});\r\n\r\n  // Submission state\r\n  const [submitted, setSubmitted] = useState(false);\r\n\r\n  // ---------------------- Authentication Handler ----------------------\r\n  const handleLogin = async () => {\r\n    try {\r\n      const resp = await axios.post(window.$DBURL + 'users/session/login', {\r\n        Username: loginUsername,\r\n        Password: loginPassword,\r\n      });\r\n      if (resp.status === 200) {\r\n        const token = resp.data.Session.AuthToken;\r\n        sessionStorage.setItem('token', token);\r\n        axios.defaults.headers.common['Authorization'] = 'Basic ' + token;\r\n        sessionStorage.setItem('userInfo', JSON.stringify(resp.data.User));\r\n        setIsAuthenticated(true);\r\n        setLoginError('');\r\n      }\r\n    } catch (error) {\r\n      console.error('Login failed:', error);\r\n      setLoginError('Login failed. Please check your credentials.');\r\n    }\r\n  };\r\n\r\n  // ---------------------- Fetch Form Data ----------------------\r\n  useEffect(() => {\r\n    if (!isAuthenticated) return; // Only fetch if authenticated\r\n\r\n    const fetchForm = async () => {\r\n      try {\r\n        const res = await fetch(\r\n          `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/forms?id=eq.${formId}`,\r\n          {\r\n            headers: {\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n              'Content-Type': 'application/json',\r\n            },\r\n          }\r\n        );\r\n        const data = await res.json();\r\n        setForm(data[0]);\r\n      } catch (err) {\r\n        console.error(err);\r\n      }\r\n    };\r\n\r\n    fetchForm();\r\n  }, [formId, isAuthenticated]);\r\n\r\n  // ---------------------- Fetch Questions ----------------------\r\n  useEffect(() => {\r\n    if (!isAuthenticated) return;\r\n\r\n    const fetchQuestions = async () => {\r\n      try {\r\n        const res = await fetch(\r\n          `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/questions?form_id=eq.${formId}&order=sort_order.asc`,\r\n          {\r\n            headers: {\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n              'Content-Type': 'application/json',\r\n            },\r\n          }\r\n        );\r\n        const data = await res.json();\r\n        setQuestions(data);\r\n      } catch (err) {\r\n        console.error(err);\r\n      }\r\n    };\r\n\r\n    fetchQuestions();\r\n  }, [formId, isAuthenticated]);\r\n\r\n  // ---------------------- Response Handler ----------------------\r\n  const handleResponseChange = (questionId, value) => {\r\n    setResponses((prev) => ({\r\n      ...prev,\r\n      [questionId]: value,\r\n    }));\r\n  };\r\n\r\n  // ---------------------- File Upload Handler ----------------------\r\n  const handleFileUpload = async (questionId, fileList) => {\r\n    const uploadedUrls = [];\r\n    for (let i = 0; i < fileList.length; i++) {\r\n      const file = fileList[i];\r\n      try {\r\n        const url = await UploadFileToCloud(file);\r\n        if (url) {\r\n          uploadedUrls.push(url);\r\n        }\r\n      } catch (error) {\r\n        console.error(`Error uploading file: ${file.name}`, error);\r\n      }\r\n    }\r\n    // Save the returned URLs (comma-separated; adjust if needed)\r\n    handleResponseChange(questionId, uploadedUrls.join(','));\r\n  };\r\n\r\n  // ---------------------- Submit Handler ----------------------\r\n  const handleSubmit = async () => {\r\n    try {\r\n      // Create a submission record.\r\n      const submissionBody = {\r\n        form_id: formId,\r\n      };\r\n\r\n      const subResp = await fetch(\r\n        'https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/submissions',\r\n        {\r\n          method: 'POST',\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            Authorization: window.$POLYGONAUTHKEY,\r\n            'Content-Type': 'application/json',\r\n            Prefer: 'return=representation',\r\n          },\r\n          body: JSON.stringify([submissionBody]),\r\n        }\r\n      );\r\n      if (!subResp.ok) throw new Error('Error creating submission');\r\n      const subData = await subResp.json();\r\n      const submissionId = subData[0].id;\r\n\r\n      // Insert answers.\r\n      const answerRows = questions.map((q) => ({\r\n        submission_id: submissionId,\r\n        question_id: q.id,\r\n        answer: responses[q.id] || '',\r\n      }));\r\n\r\n      const ansResp = await fetch(\r\n        'https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/answers',\r\n        {\r\n          method: 'POST',\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            Authorization: window.$POLYGONAUTHKEY,\r\n            'Content-Type': 'application/json',\r\n            Prefer: 'return=representation',\r\n          },\r\n          body: JSON.stringify(answerRows),\r\n        }\r\n      );\r\n      if (!ansResp.ok) throw new Error('Error submitting answers');\r\n\r\n      // Instead of an alert, set the submitted state to true.\r\n      setSubmitted(true);\r\n    } catch (err) {\r\n      console.error(err);\r\n      alert('Submission failed.');\r\n    }\r\n  };\r\n\r\n  // ---------------------- Conditional Rendering ----------------------\r\n  if (!isAuthenticated) {\r\n    return (\r\n      <LoginContainer>\r\n        <h2>Please Log In</h2>\r\n        {loginError && <p style={{ color: 'red' }}>{loginError}</p>}\r\n        <LoginInput\r\n          type=\"text\"\r\n          placeholder=\"Username\"\r\n          value={loginUsername}\r\n          onChange={(e) => setLoginUsername(e.target.value)}\r\n        />\r\n        <LoginInput\r\n          type=\"password\"\r\n          placeholder=\"Password\"\r\n          value={loginPassword}\r\n          onChange={(e) => setLoginPassword(e.target.value)}\r\n        />\r\n        <LoginButton onClick={handleLogin}>Log In</LoginButton>\r\n      </LoginContainer>\r\n    );\r\n  }\r\n\r\n  // Show thank-you screen if the form was successfully submitted.\r\n  if (submitted) {\r\n    return (\r\n      <ThankYouContainer>\r\n        <ThankYouMessage>Thank you for submitting</ThankYouMessage>\r\n      </ThankYouContainer>\r\n    );\r\n  }\r\n\r\n  // ---------------------- Render ViewForm ----------------------\r\n  return (\r\n    <PageContainer>\r\n      <FormHeader>\r\n        <FormTitle>{form ? form.title : 'Loading Form...'}</FormTitle>\r\n        {form && form.description && (\r\n          <FormDescription>{form.description}</FormDescription>\r\n        )}\r\n      </FormHeader>\r\n\r\n      {questions.map((q) => (\r\n        <QuestionContainer key={q.id}>\r\n          <QuestionLabel>{q.question_title}</QuestionLabel>\r\n          {q.description && (\r\n            <QuestionDescription>{q.description}</QuestionDescription>\r\n          )}\r\n          {q.question_title === 'Date' ? (\r\n            <DatePicker\r\n              value={responses[q.id] || ''}\r\n              onChange={(e) => handleResponseChange(q.id, e.target.value)}\r\n            />\r\n          ) : q.question_type === 'Short Text' ? (\r\n            <ResponseInput\r\n              type=\"text\"\r\n              value={responses[q.id] || ''}\r\n              onChange={(e) => handleResponseChange(q.id, e.target.value)}\r\n            />\r\n          ) : q.question_type === 'Long Text' ? (\r\n            <ResponseTextarea\r\n              rows=\"4\"\r\n              value={responses[q.id] || ''}\r\n              onChange={(e) => handleResponseChange(q.id, e.target.value)}\r\n            />\r\n          ) : q.question_type === 'Number' ? (\r\n            <ResponseInput\r\n              type=\"number\"\r\n              value={responses[q.id] || ''}\r\n              onChange={(e) => handleResponseChange(q.id, e.target.value)}\r\n            />\r\n          ) : q.question_type === 'File Upload' ? (\r\n            <ResponseInput\r\n              type=\"file\"\r\n              multiple={q.maxFiles && q.maxFiles > 1}\r\n              onChange={(e) => handleFileUpload(q.id, e.target.files)}\r\n            />\r\n          ) : null}\r\n        </QuestionContainer>\r\n      ))}\r\n\r\n      <SubmitButton onClick={handleSubmit}>Submit</SubmitButton>\r\n    </PageContainer>\r\n  );\r\n}\r\n\r\nexport default ViewForm;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\nimport styled from 'styled-components';\r\nimport Menu from '../../comps/MenuComps/Menu';\r\nimport { FlexDiv, LeftCont } from '../../StylesheetComps/Cont';\r\n\r\n// ---------------- Styled Components ----------------\r\n\r\nconst PageContainer = styled.div`\r\n  width: 81%;\r\n  margin: 0 auto;\r\n  padding: 1rem;\r\n  background: #f8f8f8;\r\n  min-height: 100vh;\r\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,\r\n    Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\r\n`;\r\n\r\nconst FormHeader = styled.div`\r\n  text-align: center;\r\n  margin-bottom: 0.5rem;\r\n`;\r\n\r\nconst FormNameDisplay = styled.div`\r\n  text-align: left;\r\n  font-size: 1.1rem;\r\n  font-weight: bold;\r\n  margin-bottom: 0.5rem;\r\n`;\r\n\r\nconst FormTitle = styled.h1`\r\n  font-size: 1.5rem;\r\n  margin: 0;\r\n  font-weight: 600;\r\n`;\r\n\r\nconst FormDescription = styled.p`\r\n  margin: 0.25rem 0 0;\r\n  font-size: 0.9rem;\r\n  color: #555;\r\n`;\r\n\r\nconst TableContainer = styled.div`\r\n  overflow: auto;\r\n  background: #fff;\r\n  border: 1px solid #ddd;\r\n  border-radius: 8px;\r\n  padding: 0.5rem;\r\n  white-space: nowrap;\r\n`;\r\n\r\nconst StyledTable = styled.table`\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n  font-size: 0.75rem;\r\n`;\r\n\r\nconst TableHead = styled.thead`\r\n  background: #f2f2f2;\r\n`;\r\n\r\nconst TableRow = styled.tr`\r\n  &:hover {\r\n    background-color: #fafafa;\r\n  }\r\n  line-height: 1.2;\r\n`;\r\n\r\nconst TableHeaderCell = styled.th`\r\n  text-align: left;\r\n  padding: 0.4rem;\r\n  border-bottom: 1px solid #ddd;\r\n  border-right: 1px solid #ddd;\r\n  min-width: 100px;\r\n  max-width: 200px;\r\n  font-weight: 600;\r\n  overflow: hidden;\r\n`;\r\n\r\n// Sticky header cell for frozen columns\r\nconst StickyHeaderCell = styled(TableHeaderCell)`\r\n  position: sticky;\r\n  left: ${props => props.left};\r\n  background: #f2f2f2;\r\n  z-index: 3;\r\n`;\r\n\r\nconst TableBody = styled.tbody``;\r\n\r\nconst TableCell = styled.td`\r\n  padding: 0.4rem;\r\n  border-bottom: 1px solid #eee;\r\n  vertical-align: top;\r\n`;\r\n\r\n// Sticky table cell for frozen columns\r\nconst StickyTableCell = styled(TableCell)`\r\n  position: sticky;\r\n  left: ${props => props.left};\r\n  background: #fff;\r\n  z-index: 2;\r\n`;\r\n\r\n// ---------------- Main Component ----------------\r\n\r\nfunction FormStatistics() {\r\n  const params = useParams();\r\n\r\n  const [form, setForm] = useState(null);\r\n  const [questions, setQuestions] = useState([]);\r\n  const [submissions, setSubmissions] = useState([]);\r\n  const [answers, setAnswers] = useState([]);\r\n  const [loading, setLoading] = useState(true);\r\n\r\n  // ---------------- Fetch the Form ----------------\r\n  useEffect(() => {\r\n    const fetchForm = async () => {\r\n      try {\r\n        const resp = await fetch(\r\n          `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/forms?id=eq.${params.formId}`,\r\n          {\r\n            headers: {\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n              'Content-Type': 'application/json',\r\n            },\r\n          }\r\n        );\r\n        const data = await resp.json();\r\n        setForm(data[0]);\r\n      } catch (err) {\r\n        console.error('Error fetching form:', err);\r\n      }\r\n    };\r\n\r\n    if (params.formId) {\r\n      fetchForm();\r\n    }\r\n  }, [params.formId]);\r\n\r\n  // ---------------- Fetch Questions ----------------\r\n  useEffect(() => {\r\n    const fetchQuestions = async () => {\r\n      try {\r\n        const resp = await fetch(\r\n          `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/questions?form_id=eq.${params.formId}&order=sort_order.asc`,\r\n          {\r\n            headers: {\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n              'Content-Type': 'application/json',\r\n            },\r\n          }\r\n        );\r\n        const data = await resp.json();\r\n        setQuestions(data);\r\n      } catch (err) {\r\n        console.error('Error fetching questions:', err);\r\n      }\r\n    };\r\n\r\n    if (params.formId) {\r\n      fetchQuestions();\r\n    }\r\n  }, [params.formId]);\r\n\r\n  // ---------------- Fetch Submissions ----------------\r\n  useEffect(() => {\r\n    const fetchSubmissions = async () => {\r\n      try {\r\n        const resp = await fetch(\r\n          `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/submissions?form_id=eq.${params.formId}&order=created_at.asc`,\r\n          {\r\n            headers: {\r\n              apikey: window.$POLYGONAPIKEY,\r\n              Authorization: window.$POLYGONAUTHKEY,\r\n              'Content-Type': 'application/json',\r\n            },\r\n          }\r\n        );\r\n        const data = await resp.json();\r\n        setSubmissions(data);\r\n      } catch (err) {\r\n        console.error('Error fetching submissions:', err);\r\n      }\r\n    };\r\n\r\n    if (params.formId) {\r\n      fetchSubmissions();\r\n    }\r\n  }, [params.formId]);\r\n\r\n  // ---------------- Fetch Answers ----------------\r\n  useEffect(() => {\r\n    const fetchAllAnswers = async () => {\r\n      try {\r\n        const submissionIds = submissions.map((s) => s.id);\r\n        if (submissionIds.length === 0) {\r\n          setLoading(false);\r\n          return;\r\n        }\r\n        const inList = submissionIds.join(',');\r\n        const url = `https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/answers?submission_id=in.(${inList})`;\r\n        const resp = await fetch(url, {\r\n          headers: {\r\n            apikey: window.$POLYGONAPIKEY,\r\n            Authorization: window.$POLYGONAUTHKEY,\r\n            'Content-Type': 'application/json',\r\n          },\r\n        });\r\n        const data = await resp.json();\r\n        setAnswers(data);\r\n        setLoading(false);\r\n      } catch (err) {\r\n        console.error('Error fetching answers:', err);\r\n        setLoading(false);\r\n      }\r\n    };\r\n\r\n    if (submissions.length > 0) {\r\n      fetchAllAnswers();\r\n    } else {\r\n      setLoading(false);\r\n    }\r\n  }, [submissions]);\r\n\r\n  // ---------------- Prepare Data for Display ----------------\r\n  const answerLookup = {};\r\n  answers.forEach((ans) => {\r\n    const { submission_id, question_id, answer } = ans;\r\n    if (!answerLookup[submission_id]) {\r\n      answerLookup[submission_id] = {};\r\n    }\r\n    answerLookup[submission_id][question_id] = answer;\r\n  });\r\n\r\n  if (loading) {\r\n    return (\r\n      <PageContainer>\r\n        <h2>Loading Form Statistics...</h2>\r\n      </PageContainer>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      <FlexDiv>\r\n        <LeftCont>\r\n          <Menu />\r\n        </LeftCont>\r\n        <PageContainer>\r\n          {/* Display form name at the top left */}\r\n          <FormNameDisplay>{form ? form.title : 'Form Not Found'}</FormNameDisplay>\r\n          {form && form.description && (\r\n              <FormDescription>{form.description}</FormDescription>\r\n          )}\r\n\r\n          <br></br>\r\n\r\n          <h3 style={{ margin: '0.5rem 0', fontSize: '1rem' }}>\r\n            Submissions Summary\r\n          </h3>\r\n\r\n          {submissions.length === 0 ? (\r\n            <p>No submissions yet for this form.</p>\r\n          ) : (\r\n            <TableContainer>\r\n              <StyledTable>\r\n                <TableHead>\r\n                  <TableRow>\r\n                    {/* Frozen (sticky) columns */}\r\n                    {/* <StickyHeaderCell left=\"0\" style={{ width: '80px' }}>\r\n                      Submission ID\r\n                    </StickyHeaderCell> */}\r\n                    <StickyHeaderCell left=\"-9px\" style={{ width: '129px' }}>\r\n                      Submitted By\r\n                    </StickyHeaderCell>\r\n                    <StickyHeaderCell left=\"71px\" style={{ width: '140px' }}>\r\n                      Submission Date\r\n                    </StickyHeaderCell>\r\n                    {/* Remaining columns */}\r\n                    {questions.map((q) => (\r\n                      <TableHeaderCell key={q.id}>\r\n                        {q.question_title}\r\n                      </TableHeaderCell>\r\n                    ))}\r\n                  </TableRow>\r\n                </TableHead>\r\n                <TableBody>\r\n                  {submissions.map((sub) => (\r\n                    <TableRow key={sub.id}>\r\n                      {/* <StickyTableCell left=\"0\" style={{ width: '80px' }}>\r\n                        {sub.id}\r\n                      </StickyTableCell> */}\r\n                      <StickyTableCell left=\"-9px\" style={{ width: '129px' }}>\r\n                        {sub.submitted_by || 'N/A'}\r\n                      </StickyTableCell>\r\n                      <StickyTableCell left=\"71px\" style={{ width: '140px' }}>\r\n                        {new Date(sub.created_at).toLocaleString()}\r\n                      </StickyTableCell>\r\n                      {questions.map((q) => {\r\n                        const ans =\r\n                          answerLookup[sub.id] && answerLookup[sub.id][q.id]\r\n                            ? answerLookup[sub.id][q.id]\r\n                            : '';\r\n                        return <TableCell key={q.id}>{ans}</TableCell>;\r\n                      })}\r\n                    </TableRow>\r\n                  ))}\r\n                </TableBody>\r\n              </StyledTable>\r\n            </TableContainer>\r\n          )}\r\n        </PageContainer>\r\n      </FlexDiv>\r\n    </div>\r\n  );\r\n}\r\n\r\nexport default FormStatistics;\r\n","//TOOLKIT IMPORT\r\nimport React from \"react\";\r\nimport { Route, Switch } from \"react-router-dom\";\r\nimport { BrowserRouter as Router } from \"react-router-dom\";\r\nimport ScrollToTop from \"./comps/ScrollToTop\";\r\n\r\n//PAGES IMPORT\r\nimport ProfileScreen from \"./pages/Profile\";\r\nimport EstimateScreen from \"./pages/Estimate\";\r\nimport ManagerListScreen from \"./pages/ManagerList\";\r\nimport RoleListScreen from \"./pages/RoleList\";\r\nimport MetroCatScreen from \"./pages/MetroCat\";\r\nimport RoleCatScreen from \"./pages/RoleCat\";\r\nimport StoreScreen from \"./pages/Store\";\r\nimport MetroIDScreen from \"./pages/SingleMetro\";\r\nimport ProductCategoryScreen from \"./pages/ProductCat\";\r\nimport ZoneScreen from \"./pages/SingleZone\";\r\nimport CasesScreen from \"./pages/Cases\";\r\nimport ProductListScreen from \"./pages/ProductList\";\r\nimport ToolListScreen from \"./pages/ToolList\";\r\nimport QuoteScreen from \"./pages/Quote\";\r\nimport ZoneListScreen from \"./pages/ZoneList\";\r\nimport ViewListOfStoresScreen from \"./pages/StoreManager\";\r\nimport StoreAdminListScreen from \"./pages/StoreListAdmin\";\r\nimport StoreAdminScreen from \"./pages/StoreAdmin\";\r\nimport ActivateScreen from \"./pages/Activate\";\r\nimport ViewQuotePage from \"./pages/ViewQuotePage\";\r\nimport UpdateCasePage from \"./pages/UpdateCasePage\";\r\nimport MyCalendarScreen from \"./pages/MyCalendar\";\r\nimport StoreCalendarScreen from \"./pages/StoreCalendar\";\r\nimport StoreScheduleScreen from \"./pages/StoreSchedule\";\r\nimport StoreInstallersScreen from \"./pages/StoreInstallers\";\r\nimport StoreWorkersScreen from \"./pages/StoreWorkers\";\r\nimport InstallerSetupScreen from \"./pages/InstallerAvailability\";\r\nimport WorkerScheduleScreen from \"./pages/MySchedule\";\r\nimport ClockInOutScreen from \"./pages/ClockInOut\";\r\nimport ClockSchedule from \"./pages/ClockSchedule\";\r\nimport InstallerCalendarScreen from \"./pages/InstallerCalendar\";\r\nimport AcceptOrderScreen from \"./pages/AcceptOrder\";\r\nimport RejectOrderScreen from \"./pages/RejectOrder\";\r\nimport StoreListInstallerScreen from \"./pages/StoreListInstallers\";\r\nimport StoreListCalendarScreen from \"./pages/StoreCalendarList\";\r\nimport StoreListInstallersAvailableScreen from \"./pages/InstallersAvailableOn\";\r\nimport InstallerPersonalCalendar from \"./pages/InstallerPersonalCalendar\";\r\nimport ClockScheduleSummary from \"./pages/ClockScheduleSummary\";\r\nimport StoreScheduleDayScreen from \"./pages/StoreScheduleDay\";\r\nimport StoreListEstimateScreen from \"./pages/StoreEstimateList\";\r\nimport PaymentSuccessScreen from \"./pages/PaySuccess\";\r\nimport PaymentSuccessTransitScreen from \"./pages/PaySuccessTransit\";\r\nimport PaymentFailScreen from \"./pages/PayFail\";\r\nimport QuoteAppointmentScreen from \"./pages/QuoteAppointment\";\r\nimport UserCasesScreen from \"./pages/UserCases\";\r\nimport ToolKitScreen from \"./pages/Toolkits\";\r\nimport LoginPage from \"./pages/AuthPages/Login\";\r\nimport SignUpPage from \"./pages/AuthPages/SignUp\";\r\nimport InstallerRegisterPage from \"./pages/AuthPages/InstallerRegister\";\r\nimport DashboardScreen from \"./pages/Dashboard\";\r\nimport MyProjectsScreen from \"./UserProjectPages/MyProjects\";\r\nimport ViewProjectUserView from \"./UserProjectPages/ViewProjectUser\";\r\nimport ViewProposalUserView from \"./UserProjectPages/ViewProposalUser\";\r\nimport BidQuotePage from \"./Bidding/BidQuotePage\";\r\nimport BillingScreen from \"./pages/Billing\";\r\nimport ViewProjectGuideView from \"./ProjectGuideView/ViewStoreProject\";\r\nimport PaymentOptionsScreen from \"./UserProjectPages/PaymentOptions\";\r\nimport PaymentPendingScreen from \"./pages/PayPending\";\r\nimport MyAccountScreen from \"./pages/MyAccount\";\r\nimport DashboardWelcomeScreen from \"./pages/DashboardWelcome\";\r\nimport InvoiceGenerator from \"./InvoicePages/InvoiceGenerator\";\r\nimport ProjectBidListScreen from \"./UserProjectPages/ProjectBidList\";\r\nimport ViewProposalConstructionView from \"./UserProjectPages/ConstructionView\";\r\nimport SiteMapper from \"./comps/SiteMapper\";\r\nimport ViewProposalEstimatorView from \"./UserProjectPages/ViewProposalEstimate\";\r\nimport ViewProposalAccountantView from \"./UserProjectPages/ViewProjectAccountant\";\r\nimport ViewEstimateNA from \"./UserProjectPages/ViewOnlyEstimate\";\r\nimport SitemapDesktop from \"./pages/SitemapDesktop\";\r\nimport InventoryScreen from './pages/Inventory'\r\nimport CreateForm from \"./FRSPages/CreateForm\";\r\nimport ViewForm from \"./FRSPages/ViewForm\";\r\nimport FormStatistics from \"./FRSPages/FormStatistics\";\r\n\r\nfunction App() {\r\n  return (\r\n    <Router>\r\n      <ScrollToTop />\r\n      <div>\r\n        <Switch>\r\n          {/* Default Route / Login Page */}\r\n          <Route exact path=\"/\" component={LoginPage} />\r\n\r\n          {/* Billing Page, User can view all of their invoices across every project */}\r\n          <Route path=\"/billing\" component={BillingScreen} />\r\n\r\n          {/* Signup Page */}\r\n          <Route path=\"/signup\" component={SignUpPage} />\r\n\r\n          {/* Installer Register Page */}\r\n          <Route path=\"/installer_register\" component={InstallerRegisterPage} />\r\n\r\n          {/* Dashboard */}\r\n          <Route path=\"/home\" component={DashboardScreen} />\r\n\r\n          {/* Profile Page */}\r\n          <Route path=\"/profile\" component={ProfileScreen} />\r\n\r\n          {/* New Project Form */}\r\n          <Route path=\"/estimate/:Id/:storeId\" component={EstimateScreen} />\r\n\r\n          {/* List of Managers */}\r\n          <Route path=\"/managerlist\" component={ManagerListScreen} />\r\n\r\n          {/* List of Roles */}\r\n          <Route path=\"/rolecat/:Id\" component={RoleCatScreen} />\r\n\r\n          {/* List of Staff under a specific Role */}\r\n          <Route path=\"/rolelist/:Id/:role\" component={RoleListScreen} />\r\n\r\n          {/* List of All Regions */}\r\n          <Route path=\"/metrolist\" component={MetroCatScreen} />\r\n\r\n          {/* Store Page */}\r\n          <Route path=\"/store/:Id\" component={StoreScreen} />\r\n\r\n          {/* Inventory Page */}\r\n          <Route path=\"/inventory/:Id\" component={InventoryScreen} />\r\n\r\n          {/* Edit Metro Information Page */}\r\n          <Route path=\"/MetroID/:Id\" component={MetroIDScreen} />\r\n\r\n          {/* View Product Categories of a Store */}\r\n          <Route\r\n            path=\"/productcategory/:Id\"\r\n            component={ProductCategoryScreen}\r\n          />\r\n\r\n          {/* View Products of a specific Category */}\r\n          <Route\r\n            path=\"/ProductList/:Id/:cateId/:productId\"\r\n            component={ProductListScreen}\r\n          />\r\n\r\n          {/* View Toolkits of a Sotre */}\r\n          <Route path=\"/toolkit/:Id\" component={ToolKitScreen} />\r\n\r\n          {/* View Tools of a specific Toolkit */}\r\n          <Route\r\n            path=\"/ToolList/:Id/:kitId/:kitName\"\r\n            component={ToolListScreen}\r\n          />\r\n\r\n          {/* Edit Zone Information */}\r\n          <Route path=\"/Zone/:Id/:zoneId\" component={ZoneScreen} />\r\n\r\n          {/* Staff View of Store Projects */}\r\n          <Route path=\"/Cases/:Id/:storeId\" component={CasesScreen} />\r\n\r\n          {/* User View of their own Projects */}\r\n          <Route\r\n            path=\"/CasesPersonal/:Id/:storeId\"\r\n            component={MyProjectsScreen}\r\n          />\r\n\r\n          {/* Guide creating an Estimate for the first time */}\r\n          <Route path=\"/quote/:Id/:storeId/:caseId\" component={QuoteScreen} />\r\n\r\n          {/* List of all Zones of a Region */}\r\n          <Route path=\"/ZoneList/:Id/\" component={ZoneListScreen} />\r\n\r\n          {/* Select a Store from a store list */}\r\n          <Route path=\"/listofstores/:Id\" component={ViewListOfStoresScreen} />\r\n\r\n          {/* Staff View of a Project */}\r\n          <Route\r\n            path=\"/viewcase/:Id/:storeId/:caseId\"\r\n            component={ViewProjectGuideView}\r\n          />\r\n\r\n          {/* User View of their Project */}\r\n          <Route\r\n            path=\"/viewcaseuser/:Id/:storeId/:caseId\"\r\n            component={ViewProjectUserView}\r\n          />\r\n\r\n          {/* User can update their project page */}\r\n          <Route\r\n            path=\"/updatecase/:Id/:storeId/:caseId\"\r\n            component={UpdateCasePage}\r\n          />\r\n\r\n          {/* List of Stores (Admin View) */}\r\n          <Route path=\"/storeadminlist/:Id\" component={StoreAdminListScreen} />\r\n\r\n          {/* Edit Store (Admin View) */}\r\n          <Route path=\"/storeadmin/:Id/:storeId\" component={StoreAdminScreen} />\r\n\r\n          {/* User activates their account */}\r\n          <Route path=\"/activate/:activateCode\" component={ActivateScreen} />\r\n\r\n          {/* Guide View of Editing an Estimate */}\r\n          <Route\r\n            path=\"/viewquote/:Id/:storeId/:caseId/:quoteId/:viewId\"\r\n            component={ViewQuotePage}\r\n          />\r\n\r\n          {/* Guide View of Editing an Estimate */}\r\n          <Route\r\n            path=\"/viewestimatestaff/:Id/:storeId/:caseId/:quoteId/:viewId\"\r\n            component={ViewProposalEstimatorView}\r\n          />\r\n\r\n<Route\r\n            path=\"/viewestimateaccountant/:Id/:storeId/:caseId/:quoteId/:viewId\"\r\n            component={ViewProposalAccountantView}\r\n          />\r\n\r\n\r\n          {/* ViewProposalUser / User View of a Quote */}\r\n          <Route\r\n            path=\"/viewquoteuser/:Id/:storeId/:caseId/:quoteId/:numberofquotes/:lastrevision\"\r\n            component={ViewProposalUserView}\r\n          />\r\n\r\n          {/* ViewProposalUser NO AUTH / User View of a Quote */}\r\n          <Route\r\n            path=\"/viewestimate/:Id/:storeId/:caseId/:quoteId/:numberofquotes/:lastrevision/:viewonly\"\r\n            component={ViewEstimateNA}\r\n          />\r\n\r\n           {/* ViewProposalUser / User View of a Quote */}\r\n           <Route\r\n            path=\"/viewestimateconstruction/:Id/:storeId/:caseId/:quoteId/:numberofquotes/:lastrevision\"\r\n            component={ViewProposalConstructionView}\r\n          />\r\n\r\n            {/* Bid Estimate / Installers Bid on Projects */}\r\n                    <Route\r\n            path=\"/bidquote/:Id/:storeId/:caseId/:quoteId/:numberofquotes/:lastrevision\"\r\n            component={BidQuotePage}\r\n          />\r\n\r\n          {/* Users own Calendar Page */}\r\n          <Route path=\"/calendar\" component={MyCalendarScreen} />\r\n\r\n          {/* Store Calendar Page */}\r\n          <Route\r\n            path=\"/storecalendar/:Id/:storeId\"\r\n            component={StoreCalendarScreen}\r\n          />\r\n\r\n          {/* User views available times that an installer has available */}\r\n          <Route\r\n            path=\"/installercalendar/:Id/:storeId/:eventId/:instUserId/:instName/:routeId/:year/:month/:day/:quoteId\"\r\n            component={InstallerCalendarScreen}\r\n          />\r\n\r\n          {/* Installers own Calendar Page */}\r\n          <Route\r\n            path=\"/installerpersonalcalendar\"\r\n            component={InstallerPersonalCalendar}\r\n          />\r\n\r\n          {/* Store Schedule page */}\r\n          <Route path=\"/storeschedule\" component={StoreScheduleScreen} />\r\n\r\n          {/* List of Installers of a Store  */}\r\n          <Route\r\n            path=\"/storeinstallers/:Id/:storeId\"\r\n            component={StoreInstallersScreen}\r\n          />\r\n\r\n          {/* List of Workers of a Store */}\r\n          <Route path=\"/storeworkers\" component={StoreWorkersScreen} />\r\n\r\n          {/* Installers Business Hours Setup */}\r\n          <Route path=\"/installersetup\" component={InstallerSetupScreen} />\r\n\r\n          {/* Worker views their own schedule */}\r\n          <Route\r\n            path=\"/workerschedule/:storeId/:workerId/:workerName\"\r\n            component={WorkerScheduleScreen}\r\n          />\r\n\r\n          {/* Worker Clock In/Out Page */}\r\n          <Route path=\"/clockinout\" component={ClockInOutScreen} />\r\n\r\n          {/* View the Schedule of a Worker */}\r\n          <Route\r\n            path=\"/clockschedule/:storeId/:userId/:roleNum/:workerName\"\r\n            component={ClockSchedule}\r\n          />\r\n\r\n          {/* Payment Options for User */}\r\n          <Route\r\n            path=\"/payment/:amount/:caseId/:quoteId/:invoiceid\"\r\n            component={PaymentOptionsScreen}\r\n          />\r\n\r\n          {/* Supplier accepts order Page */}\r\n          <Route\r\n            path=\"/order/accept/quote/:quoteid/item/:itemid\"\r\n            component={AcceptOrderScreen}\r\n          />\r\n\r\n          {/* Supplier rejects order Page */}\r\n          <Route\r\n            path=\"/order/reject/quote/:quoteid/item/:itemid\"\r\n            component={RejectOrderScreen}\r\n          />\r\n\r\n          {/* List Stores before viewing Installers */}\r\n          <Route\r\n            path=\"/storelistinstallers/:Id\"\r\n            component={StoreListInstallerScreen}\r\n          />\r\n\r\n          {/* List Stores before viewing Store Calendar */}\r\n          <Route\r\n            path=\"/storelistcalendars/:Id\"\r\n            component={StoreListCalendarScreen}\r\n          />\r\n\r\n          {/* View all installers available at the time selected after paying deposit */}\r\n          <Route\r\n            path=\"/installersavailable/:Id/:storeId/:storeMonth/:storeDay/:storeYear/:instId/:quoteId\"\r\n            component={StoreListInstallersAvailableScreen}\r\n          />\r\n\r\n          {/* View all installers available on the day from the Store Schedule */}\r\n          <Route\r\n            path=\"/storescheduleday/:Id/:storeId/:storeMonth/:storeDay/:storeYear\"\r\n            component={StoreScheduleDayScreen}\r\n          />\r\n\r\n          {/* View the schedules of all workers for a store */}\r\n          <Route\r\n            path=\"/clockschedulesummary/:Id\"\r\n            component={ClockScheduleSummary}\r\n          />\r\n\r\n          {/* View all stores available before Landscape form */}\r\n          <Route\r\n            path=\"/storelistestimate/:Id\"\r\n            component={StoreListEstimateScreen}\r\n          />\r\n\r\n          {/* Redirect User here after payment was successful */}\r\n          <Route\r\n            path=\"/paymentsuccess/:quoteId/:storeId/:token/:transactionid/:amount/:currency/:invoiceid\"\r\n            component={PaymentSuccessScreen}\r\n          />\r\n\r\n          {/* Redirect User here after payment was successful */}\r\n          <Route\r\n            path=\"/paymentsuccesstransit/:quoteId/:storeId/:token/:transactionid/:amount/:currency/:invoiceid\"\r\n            component={PaymentSuccessTransitScreen}\r\n          />\r\n\r\n          {/* Redirect User here after payment fails */}\r\n          <Route\r\n            path=\"/paymentfailed/:quoteId/:token\"\r\n            component={PaymentFailScreen}\r\n          />\r\n\r\n          {/* Redirect User here after payment method was selected */}\r\n          <Route\r\n            path=\"/paymentpending/:amount/:caseId/:quoteId\"\r\n            component={PaymentPendingScreen}\r\n          />\r\n\r\n          {/* User books appointment page */}\r\n          <Route\r\n            path=\"/quoteappointment/:metroId/:storeId/:quoteId\"\r\n            component={QuoteAppointmentScreen}\r\n          />\r\n\r\n          {/* Staff View Cases of a Specific User */}\r\n          <Route\r\n            path=\"/usercases/:Id/:storeId/:userId/:userName\"\r\n            component={UserCasesScreen}\r\n          />\r\n\r\n          {/* Mobile Only My Account Page */}\r\n          <Route path=\"/myaccount\" component={MyAccountScreen} />\r\n\r\n          {/* First Time Login will redirect users here instead of Dashboard */}\r\n          <Route path=\"/welcometoyardhack\" component={DashboardWelcomeScreen} />\r\n\r\n          {/* Invoice Generator Page */}\r\n          <Route\r\n            path=\"/invoicegenerator/:Id/:storeId/:caseId/:quoteId/:numberofquotes/:lastrevision\"\r\n            component={InvoiceGenerator}\r\n          />\r\n\r\n          {/* List of all projects up for bid */}\r\n          <Route\r\n            path={`/projectbidlist/:metroId/:storeId`}\r\n            component={ProjectBidListScreen}\r\n          />\r\n\r\n          <Route\r\n            path={'/sitemapper/:Id/:storeId/:caseId/:quoteId'}\r\n            component={SiteMapper}\r\n            />\r\n\r\n          <Route\r\n            path={'/sitemapperdesktop/:Id/:storeId/:caseId/:quoteId'}\r\n            component={SitemapDesktop}\r\n            />\r\n\r\n            <Route path={'/create-form/:Id/:storeId/:caseId/:estimateId'} component={CreateForm}/>\r\n\r\n            <Route path={'/view-form/:formId'} component={ViewForm}/>\r\n\r\n            <Route path={'/form-statistics/:formId'} component={FormStatistics}/>\r\n\r\n          {/* <Route path=\"/form-stats/:formId\" element={<FormStatistics />} /> */}\r\n            \r\n        </Switch>\r\n      </div>\r\n    </Router>\r\n  );\r\n}\r\n\r\nexport default App;\r\n","const reportWebVitals = onPerfEntry => {\r\n  if (onPerfEntry && onPerfEntry instanceof Function) {\r\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n      getCLS(onPerfEntry);\r\n      getFID(onPerfEntry);\r\n      getFCP(onPerfEntry);\r\n      getLCP(onPerfEntry);\r\n      getTTFB(onPerfEntry);\r\n    });\r\n  }\r\n};\r\n\r\nexport default reportWebVitals;\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://cra.link/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.0/8 are 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\nexport function register(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.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(\r\n            'This web app is being served cache-first by a service ' +\r\n              'worker. To learn more, visit https://cra.link/PWA'\r\n          );\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, 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(\r\n                'New content is available and will be used when all ' +\r\n                  'tabs for this page are closed. See https://cra.link/PWA.'\r\n              );\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, config) {\r\n  // Check if the service worker can be found. If it can't reload the page.\r\n  fetch(swUrl, {\r\n    headers: { 'Service-Worker': 'script' },\r\n  })\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 (\r\n        response.status === 404 ||\r\n        (contentType != null && contentType.indexOf('javascript') === -1)\r\n      ) {\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\r\n      .then((registration) => {\r\n        registration.unregister();\r\n      })\r\n      .catch((error) => {\r\n        console.error(error.message);\r\n      });\r\n  }\r\n}\r\n","/* eslint-disable */\r\n\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport \"./index.css\";\r\nimport App from \"./App\";\r\nimport reportWebVitals from \"./reportWebVitals\";\r\nimport * as serviceWorkerRegistration from \"./serviceWorkerRegistration\";\r\n\r\nwindow.$DBURL = \"https://yardhackbackendtest.azurewebsites.net/api/\";\r\nwindow.$IMGURL = \"https://yardhack.blob.core.windows.net/images/\";\r\nwindow.$POLYGONURL = \"https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/shapemodel\"\r\nwindow.$PLOTICONURL = 'https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/plottingmodel'\r\nwindow.$POLYGONAPIKEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InB1dXB6bXdzYnhxdGRta2ZwcGl1Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MDY1NjQxMzksImV4cCI6MjAyMjE0MDEzOX0.540c8iZoWhmJLM_sb3uN3ObTKfVxxaGW89bxi10t1FQ'\r\nwindow.$POLYGONAUTHKEY = 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InB1dXB6bXdzYnhxdGRta2ZwcGl1Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MDY1NjQxMzksImV4cCI6MjAyMjE0MDEzOX0.540c8iZoWhmJLM_sb3uN3ObTKfVxxaGW89bxi10t1FQ'\r\nwindow.$LOCKINURL = 'https://puupzmwsbxqtdmkfppiu.supabase.co/rest/v1/lockedestimates'\r\nwindow.$ISMOBILE = false;\r\nif(window.innerWidth < 768){\r\n  window.$ISMOBILE = true;\r\n}\r\n else if ( (\r\n  /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\r\n    navigator.userAgent\r\n  ) ||\r\n  /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n    navigator.userAgent.substr(0, 4))\r\n  )\r\n  && window.innerWidth < 768) {\r\n  window.$ISMOBILE = true;\r\n}\r\n\r\nReactDOM.render(\r\n  // <React.StrictMode>\r\n  <App />,\r\n  // </React.StrictMode>,\r\n  document.getElementById(\"root\")\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\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://cra.link/PWA\r\n\r\nserviceWorkerRegistration.register();\r\nreportWebVitals();\r\n"],"sourceRoot":""}