{"version":3,"sources":["constants/actionTypes.js","selectors/ee.js","reducers/view.js","reducers/ee.js","reducers/register.js","reducers/public.js","reducers/setting.js","reducers/search.js","reducers/index.js","util/configureStore.js","containers/HomeContainer.jsx","actions/view.js","actions/ee.js","actions/setting.js","actions/register.js","util/urlUtil.js","actions/api.js","icons/SearchSvg.jsx","containers/TopNavContainer.jsx","containers/AboutUsContainer.jsx","containers/Covid19Container.jsx","containers/HowItWorksContainer.jsx","containers/HowItWorksProviderContainer.jsx","components/PasswordField.jsx","components/EmailField.jsx","components/Login.jsx","containers/LoginContainer.jsx","register/components/CodeOfEthics.js","containers/CodeOfEthicsContainer.jsx","register/components/termsOfUse.js","containers/TermOfUseContainer.jsx","containers/FooterContainer.jsx","icons/DeleteIconSvg.jsx","icons/EditIconSvg.jsx","dashboard/components/ProjectList.jsx","dashboard/containers/ProjectListContainer.jsx","icons/MessageIconSvg.jsx","dashboard/components/ProposalList.jsx","dashboard/containers/ProposalListContainer.jsx","dashboard/components/ReviewList.jsx","dashboard/containers/ReviewListContainer.jsx","dashboard/components/ExpansionPanelComponent.jsx","dashboard/containers/DashboardContainer.jsx","containers/NotificationContainer.jsx","message/containers/MessageDialogContainer.jsx","icons/CheckedIconSvg.jsx","icons/UncheckedIconSvg.jsx","project/components/ProjectDetail.jsx","project/components/ProposalScopeList.jsx","project/containers/ProposalScopeListContainer.jsx","project/components/ProposalList.jsx","project/containers/ProposalListContainer.jsx","review/components/ReviewList.jsx","project/containers/ReviewListContainer.jsx","components/ProviderList.jsx","util/phoneUtil.js","project/containers/ProviderListContainer.jsx","project/containers/ProjectDetailContainer.jsx","project/components/EditProject.jsx","project/containers/EditProjectContainer.jsx","proposal/components/EditProposal.jsx","proposal/containers/EditProposalContainer.jsx","register/components/RegisterCommon.jsx","register/containers/RegisterCommonContainer.jsx","components/ExpansionPanelComponent.jsx","register/components/Agreements.jsx","register/components/RegisterProvider.jsx","register/components/termsOfUseProvider.js","register/containers/RegisterProviderContainer.jsx","register/components/SaveCompany.jsx","register/containers/SaveCompanyContainer.jsx","register/components/WorkZone.jsx","register/containers/WorkZoneContainer.jsx","register/components/WorkHour.jsx","register/containers/WorkHourContainer.jsx","components/Address.jsx","containers/AddressContainer.jsx","components/Phone.jsx","containers/PhoneContainer.jsx","register/components/License.jsx","register/containers/LicenseContainer.jsx","profile/components/ProfileImage.jsx","profile/containers/ProfileImageContainer.jsx","register/components/HourlyRate.jsx","register/containers/HourlyRateContainer.jsx","register/components/Profile.jsx","register/containers/ProfileContainer.jsx","register/containers/RegisterContainer.jsx","components/SimpleList.jsx","selectors/public.js","profile/containers/ReviewListContainer.jsx","profile/components/Public.jsx","profile/containers/PublicContainer.jsx","project/components/WriteReview.jsx","project/containers/WriteReviewContainer.jsx","profile/components/AccountActivation.jsx","profile/containers/AccountActiviationContainer.jsx","profile/components/NotificationSetting.jsx","profile/containers/NotificationSettingContainer.jsx","profile/components/PasswordSetting.jsx","profile/containers/PasswordContainer.jsx","profile/components/ForgotPassword.jsx","profile/containers/ForgotPasswordContainer.jsx","profile/components/ResetPassword.jsx","profile/containers/ResetPasswordContainer.jsx","components/Loader.jsx","containers/TitleContainer.jsx","help/components/Contact.jsx","help/containers/ContactContainer.jsx","containers/PrivacyPolicyContainer.jsx","register/components/privacyPolicy.js","containers/CCPAContainer.jsx","register/components/ccpa.js","messageWrapper/components/UserMessageList.jsx","messageWrapper/containers/UserActionListContainer.jsx","messageWrapper/containers/UserMessageFromListContainer.jsx","messageWrapper/containers/UserMessageToListContainer.jsx","messageWrapper/containers/MessageTabContainer.jsx","proposal/components/QuickOffer.jsx","proposal/containers/QuickOfferContainer.jsx","search/containers/SearchWrapper.jsx","containers/WrapperContainer.jsx","components/Root.jsx","serviceWorker.js","index.jsx"],"names":["LOAD_USER","LOGOUT","ENABLE_LOGIN_LINK","UPDATE_RESET_EMAIL","UPDATE_EMAIL","UPDATE_PASSWORD","SELECT_SCOPE","DIALOG_OPEN","DIALOG_CLOSE","SHOW_SPINNER","HIDE_SPINNER","UPDATE_CONTACT","UPDATE_TITLE","UPDATE_INBOX_TAB_VALUE","UPDATE_CUSTOM_SCOPE_FIELD","UPDATE_SEARCH_VALUE","INIT_CONTACT","RECEIVED_DASHBOARD","RECEIVED_PUBLIC_DASHBOARD","RECEIVED_PROFILE_IMAGE","RECEIVED_SCOPES","RECEIVED_PROJECT","SELECT_SAVED","RECEIVED_PROJECT_PROJECT","RECEIVED_PROPOSAL","RECEIVED_QUICKOFFER","RECEIVED_WORKZONE","RECEIVED_PROFILE","RECEIVED_WORKHOUR","RECEIVED_PHONE","UPDATE_DISPLAY","UPDATE_MESSAGE_DIALOG","CLOSE_MESSAGE_DIALOG","UPDATE_MESSAGE_DIALOG_TEXT","DISABLE_MESSAGE_SUBMIT","ENABLE_MESSAGE_SUBMIT","UPDATE_PROJECT_VALUE","ADD_CUSTOM_SCOPE","UPDATE_PROPOSAL_VALUE","UPDATE_PROPOSAL_SCOPE_VALUE","UPDATE_SCOPE_DETAIL","PREPARE_EDIT_SCOPE_DETAIL","SELECT_PROPOSAL_SCOPE","UPDATE_SCOPE_TYPE","ADD_PROPOSAL_SCOPE","CANCLE_PROPOSAL_SCOPE","DELETE_PROPOSAL_SCOPE","UPDATE_QUICK_OFFER_VALUE","UPDATE_REGISTER_VALUE","UPDATE_STEP","UPDATE_USER_TYPE","UPDATE_COMPANY_VALUE","UPDATE_USER_COMPANY","UPDATE_LICENSE_VALUE","UPDATE_USER_LICENSE","UPDATE_WORK_ZONE_COUNTY","UPDATE_HOURLY_RATE","UPDATE_ADDRESS_VALUE","UPDATE_PHONE_VALUE","UPDATE_WORKHOUR_VALUE","UPDATE_PROFILE_IMAGE_FILE_VALUE","UPDATE_REVIEW_VALUE","UPDATE_REVIEW_PROJECTID_PROVIDERID","UPDATE_ACCOUNT_ACTIVATION_STATUS","UPDATE_NOTIFICATION_SETTING","UPDATE_NOTIFICATION_SETTING_BY_TYPE","UPDATE_PASSWORD_VALUE","INIT_UPDATE_PASSWORD","UPDATE_TOKEN_EMAIL","RECEIVED_SEARCH_PROVIDER_RESULT","getScopes","state","view","scopes","getProjectRawData","ee","project","getProjectStatus","status","parseOffers","offers","map","offer","Object","objectSpread","projectId","providerId","providerDisplayName","cost","material","createdDate","moment","format","creation","updateDate","updation","comment","parseOffer","getProposals","createSelector","dashboard","proposals","parseProposals","getProjectProposals","parseProposal","proposal","scopeList","scopeDetailList","total","forEach","scope","scopeDescription","description","length","scopeId","name","push","scopeDetail","proposalId","id","type","label","Number","costTotal","scopeTotalCost","unit","hour","userRate","selected","projectStatus","undefined","title","estimatedTime","expectTime","getProjectReviews","reviews","review","processed","displayName","recommend","quality","responsiveness","professionalism","subjectMatterExpertise","adherenceToCost","adherenceToSchedule","overall","date","completed","getFromUserMessages","userMessages","userMessage","replyName","fromDisplay","replyId","fromId","text","getToUserMessages","userMessagesTo","toDisplay","toId","getUserActions","userActions","userAction","sentByDisplay","sentBy","readCheck","blocked","folder","getReviews","getProject","projectScope","addedScope","emergency","startDate","startTime","endTime","updatedDate","endBiddingDate","day","value","sun","mon","tue","wed","thu","fri","sat","getCompleted","initAddScope","showSpinner","initialView","login","email","password","tableBody","notification","display","toast","TYPE","INFO","message","open","replyDisplay","submitDisabled","customScopeFieldEnabled","selectedScopes","unSelectedScopes","addScope","resetEmail","loginLinkEnabled","finalSelectedScope","dialogOpen","contact","subject","inbox","initUnselectScope","action","cleanProposal","proposalResponse","getNewScopeValue","deleteProposalScope","arguments","targetScope","filter","i","splice","clickScope","scopeName","key","pushAddScopeToSelectedScopes","addScopeList","isAction","addScopeValue","getAddScopeFromScopeDetail","updateScopeDetail","initUser","userType","userDisplayName","u","verified","step","initialState","_project","user","projects","budgetMax","budgetMin","owner","supportingInfo","zipcode","defineProperty","quickOffer","update","workZoneStates","workZoneCounties","NJ","NY","states","initialCompany","registeredAt","companyId","initialLicense","no","issuedBy","issuedAt","initialWorkzone","firstName","lastName","verifyPassword","providerType","error","agreement","codeOfEthics","termsOfUse","termsOfUseProvider","company","license","address","insurance","permit","registerStep","workzone","workHour","workHourList","updateInsurance","updaetPremit","profileImage","file","image","rate","processWorkZone","workzones","NJWorkZoneList","NYWorkZoneList","county","location","since","rateAverage","workingProjectCount","completedProjectCount","projectCount","reviewsCount","userCompany","licenseList","permitList","insuranceList","accountActivation","enabled","notificationSetting","oldPassword","newPwasword","verifyNewPassword","code","queryToArray","queryStr","queryArr","replace","split","queryParams","q","qArrLength","qArr","keyword","providerList","searchValue","combineReducers","newState","prevState","types","actionProposal","scopeType","userId","projectResponse","newProject","test","response","customScope","register","userLicense","phone","Array","isArray","profile","website","workZone","publicReducer","setting","c","token","search","searchResponse","configureStore","createStore","reducer","compose","applyMiddleware","thunk","window","devToolsExtension","f","HomeContainer","_this$props","this","props","pushHome","history","classes","_this$props2","showGetStarted","react_default","a","createElement","className","mainText","Button","href","root","role","Component","connect","ownProps","dispatch","withStyles","theme","_root","fontFamily","width","overflowX","color","boxShadow","textTransform","fontSize","padding","border","lineHeight","backgroundColor","borderColor","formBox","wide","maxWidth","narrow","dense","marginTop","margin","marginBottom","marginRight","margin20","smallText","fontWeight","updateNotification","updateMessageDialog","closeMessaegDialog","hideSpinner","updateProjectValue","updateProposalValue","prepareEditScopeDetail","updateUserType","updateQuickOfferValue","updateAccountActivation","updateNotificationSetting","updatePasswordValue","updateRegisterValue","updateStep","updateUserCompany","updateProfileImageFile","cookies","Cookies","postReq","body","method","headers","Accept","Content-Type","JSON","stringify","credentials","evaluateResponseBufferWithErrorMessage","isRedirect","ok","arrayBuffer","json","then","jsonErrorHandler","evaluateResponseNoJsonWithErrorMessage","statusText","Error","evaluateResponseWithErrorMessage","isJson","errorLines","toHome","WARN","join","error_message","errors","validationResult","receivedLogoutRequest","receiveUser","receivedProfileImage","receiveProject","receiveProposal","receivedWorkZone","workZoneResponse","receivedWorkHour","workHourResponse","fetchDashboard","fetch","receiveDashboard","console","catch","err","ERROR","fetchPublicDashboard","dashboardURL","receivedPublicDashboard","arrayBufferToBase64","buffer","binary","bytes","Uint8Array","len","byteLength","String","fromCharCode","btoa","fetchSaveProfileImage","getState","formData","FormData","append","postReqFormData","profile_image","fetchAllScopes","receiveScopes","fetchGetProject","buildScopeURL","projectScopes","isSelect","url","fetchRemoveProject","removeProjectURL","concat","SUCCESS","fetchCloseProject","projectURL","fetchRemoveProposal","removeProposalURL","fetchSelect","scopeIds","data","fetchGetQuickOffer","receiveQuickOffer","fetchSaveQuickOffer","extendUserCookieExpiry","savePassword","requestData","fetchSaveLicense","Date","updatedLicense","fetchProfile","receivedProfile","fetchUpdatePhone","updatePhoneURL","fetchContactSendRequest","includes","extendCookieExpiry","cookieValue","now","setMinutes","getMinutes","set","path","uValue","get","processLogin","fetchResetPasswordRequest","logout","remove","reload","fetchSendMessage","sendMessageUrl","userActionId","buildSendMessageUrl","fetchDeleteMessage","messageId","fetchSearch","input","receivedSearchProviderResult","SearchIconSvg","xmlns","height","viewBox","fill","d","TopNavContainer","_this","showCompleteProfile","publicPath","searchPath","Navbar","collapseOnSelect","expand","variant","sticky","Brand","Toggle","aria-controls","Collapse","Nav","Link","Form","inline","Row","Col","xs","Control","placeholder","onChange","event","updateSearch","target","SearchSvg","IconButton","aria-label","Email_default","NavDropdown","Item","Divider","onClick","logoutProcess","updateSearchValue","handleSearchSubmit","AboutUsContainer","component","clsx","HowItWorksContainer","data-src","alt","src","data-holder-rendered","HowItWorksProviderContainer","_props$minStrength","minStrength","_props$thresholdLengt","thresholdLength","validatePasswordStrong","_props$hasErrors","hasErrors","required","fieldId","_props$showStrength","showStrength","newMinStrength","Math","max","min","newThresholdLength","strength","zxcvbn","score","passwordLength","passwordLong","counterClass","trim","strengthClass","TextField","helperText","data-strength","& .MuiTextField-root","spacing","validate","autoComplete","Login","handleEmailChange","handlePasswordChange","onSubmitClick","react_router","to","Container","smallFont","components_EmailField","components_PasswordField","disabled","defaultProps","displayColorPicker","updateEmail","updatePassword","CODE_OF_ETHICS","class","parse","TERMS_OF_USE","footer","flexWrap","textAlign","verticalAlign","Grid","container","alignItems","alignContent","justifyContent","item","DeleteIconSvg","EditIconSvg","paddingBottom","table","minWidth","th","paddingLeft","paddingRight","cursor","row","&:nth-of-type(odd)","palette","background","default","trs","handleClickRemoveProject","editProject","Fab","size","icon","icons_EditIconSvg","filteredTrs","e","Paper","classname","Table","TableHead","TableRow","tr","align","TableCell","TableBody","hover","icons_DeleteIconSvg","proposalCount","ProjectList","MessageIconSvg","dashboardTrs","handleClickMessageDialogOpen","handleProposalDeleteClick","companyName","tableIcon","icons_MessageIconSvg","hiddenColumns","col","indexOf","detailsTrs","isDashboardView","ProposalList","head","messageType","reivews","ReviewList","heading","typography","pxToRem","fontWeightBold","panelDetails","panelDetailsTypography","details","ExpansionPanel","ExpansionPanelSummary","expandIcon","ExpandMore_default","Typography","ExpansionPanelDetails","DashboardContainer","getScopeData","getDashboardData","components_ExpansionPanelComponent","ProjectListContainer","ProposalListContainer","ReviewListContainer","NotificationContainer","react_toastify","enableMultiContainer","position","POSITION","TOP_CENTER","info","MessageDialogContainer","handleClose","handleMessageChange","handleSubmit","Dialog","onClose","aria-labelledby","DialogTitle","DialogContent","DialogContentText","autoFocus","fullWidth","DialogActions","updateMessageDialogText","CHeckedIconSvg","UncheckedIconSvg","fontColor","weight","removed","grey","selectedScope","creationInfo","checkbox","select","borderRadius","saveSelect","selectDisabled","boarder","selectContent","buttons","marginLeft","handleCloseProjectClick","showCompleted","handleEditProjectClick","handleProjectDeleteClick","handleReopenProjectClick","handleScopeSelectSave","handleDialogOpen","handleDialogClose","showEditProject","showCloseProject","showOffer","selectedCount","unselectedScopeList","editProposalPath","ButtonGroup","ownerDisplayName","aria-describedby","style","CheckedIconSvg","icons_UncheckedIconSvg","listItem","tableActions","subLabel","button","right","isEdit","handleEditProposalScopeClick","handleDeleteProposalScope","handleScopeSelectClick","abledEdit","List","ListItem","sm","selectScope","ProposalScopeList","heavy","borderTop","borderBottom","proposalTitle","underline","textDecoration","handleSelectSave","abledDelete","showSelect","showWriteReview","comments","ProposalScopeListContainer","rating","recom","green","Box","Rating","readOnly","overflow","block","option","marginRgiht","option:before","bgColorGreen","bgColorGrey","w400","divider","pr16","yellow","width100","bb","buttongroup","provider","Favorite_default","FavoriteBorder_default","Star_default","StarHalf_default","CheckBox_default","CheckBoxOutlineBlank_default","License","match","formatPhoneNumber","tel","ProviderList","ProjectDetailContainer","getProjectData","newProps","components_ProjectDetail","ProviderListContainer","containers_ProposalListContainer","hasReview","containers_ReviewListContainer","params","selectScopesURL","arginLeft","flex","zIndex0","zIndex","top","marginLeft5","useHistory","handleChange","handleScopeChange","handleWorkDayChange","handleAddCustomScope","onSaveClick","scopeDefaultValue","scopeOptions","find","element","titleError","isLength","zipcodeError","isPostalCode","FormControl","InputLabel","htmlFor","react_select_browser_esm","isMulti","options","classNamePrefix","selection","InputProps","startAdornment","InputAdornment","defaultValue","InputLabelProps","shrink","inputProps","FormControlLabel","control","Checkbox","checked","multiline","maxRows","minRows","EditProjectContainer","components_EditProject","log","selectionList","scopeCount","projectTitle","fetchSaveProject","marginTop20","handleScopeValueChange","handleSelectScopeClick","handleScopeType","handleAddProposalScope","handleCancelProposalScope","handleAddProposal","handleCancelProposal","selectedScopeType","scopeSelected","defaultExpectStartDate","showScopeDescription","noValidate","endAdornment","goBack","EditProposalContainer","getProposalDataByProjectId","components_EditProposal","addProposalScope","editProposalScope","cancelProposalScope","addProposal","handleEditScopeClick","fetchGetProposal","updateProposalScopeValue","proposalScopes","expectStartDate","selectProposalScopeClick","updateScopeType","handleRegister","registerDisabled","handleCancelRegister","isAlpha","entries","customer","_ref","_ref2","slicedToArray","typeDescription","margin30","newUser","fetchSaveRegisterNewUser","RegisterCommon","paddingTop","handleCheckbox","content","formControl","labelPlacement","FormHelperText","eeColor","guideText","handleTermsOfUse","handleTermsOfUseProvider","handleCodeOfEthics","data-toggle","data-placement","licensedCompany","licensedIndividual","unlicensedIndividual","src_components_ExpansionPanelComponent","Agreements","RegisterProvider","isUpdate","handleSaveCompany","formattedRegisteredAt","updateCompanyValue","fetchSaveCompany","handleCancelhandleSaveCompany","handleRemoveCompany","SaveCompany","handleWorkZoneCounty","handleSaveWorkZone","workzoneNY","workzoneNJ","workZoneNYCountyOptions","workZoneNJCountyOptions","isClearable","handleWorkZoneState","workZoneState","updateWorkZoneState","updateWorkZoneCounty","NYWorkZone","NJWorkZone","workZoneRequestData","WorkZone","link","handleAddWorkHour","handleRemoveWorkHour","dayOptions","timeOptions","workHourday","workHourStart","start","workHourEnd","end","workhour","updateWorkHourValue","fetchRemoveWorkHour","WorkHour","handleUpdateAddress","stateOptions","city","stateProvince","updateAddressValue","Address","handleUpdatePhone","updatePhoneValue","Phone","handleSaveLicense","handleCancelhandleSaveLicense","formattedIssuedAt","updateLicenseValue","handleRemoveLicense","handleUpdateProfileImage","onDrop","compiled_default","withIcon","buttonText","imgExtension","maxFileSize","files","imageList","addUpdateIndex","ProfileImage","handleSaveHourlyRate","isNaN","inputMode","pattern","updateHourlyRate","HourlyRate","showLicense","showCompany","isProvider","companyDisabled","licenseDisabled","ProfileImageContainer","AddressContainer","PhoneContainer","WorkHourContainer","WorkZoneContainer","HourlyRateContainer","SaveCompanyContainer","LicenseContainer","ProfileContainer","getProfile","components_Profile","isRegister","companyRegisteredAt","fetchSaveRegisterProfile","RegisterContainer","RegisterCommonContainer","RegisterProviderContainer","containers_ProfileContainer","rowData","column","getInsurance","validUntil","getPermit","font","lightGrey","publicTopDay","float","bottom","publicTopLeft","publicTopRight","reviewTitle","handleSendRequestCall","reviewAvarage","ng-show","reviewCount","profile_containers_ReviewListContainer","SimpleList","PublicDashboardContainer","getPublicDashboardData","getProfileImage","components_Public","pid","fetchProfileImage","buttonBlock","ng-click","mb","newValue","WriteReviewContainer","setProjectIdProviderId","components_WriteReview","updateProjectIdProviderId","updateReviewValue","buildSaveReviewUrl","fetchSaveReview","handleSaveAccountActivationAction","AccountActivationContainer","getActivationStatus","AccountActivation","activation","saveAccountActivationURL","WARNING","handleSaveNotificationSetting","handleNotificationSettingChange","NotificationSettingContainer","getNotificationSettingStatus","components_NotificationSetting","updateNotificationSettingByType","handleUpdatePassword","currentPassword","newPassword","PasswordSetting","marginTop16","handleResetEmailChange","onResetClick","roots","ForgotPassword","ResetPasswordContainer","verify","setTokenEmail","components_ResetPassword","origin","fetchVerify","updateTokenEmail","Wrapper","styled","div","_templateObject","taggedTemplateLiteral","Animation","_templateObject2","Loader","show","Loader_Wrapper","TitleContainer","breadcrumb","onSendRequestClick","containers_TitleContainer","updateContact","Contact","messages","handleDeleteMessageClick","fetchDeleteUserAction","UserMessageList","TabPanel","children","index","other","objectWithoutProperties","assign","hidden","p","AppBar","Tabs","indicatorColor","textColor","centered","Tab","UserActionListContainer","UserMessageFromListContainer","UserMessageToListContainer","updateInboxTabValue","flexGrow","togglebutton","paddingBotton","handleQuickOfferValueChange","handleSaveQuickOffer","handleCancelQuickOffer","InfoOutlined_default","ToggleButtonGroup","exclusive","ToggleButton","getQuickOfferByProjectId","components_QuickOffer","SearchWrapper","getProviderList","components_ProviderList","classCallCheck","_super","call","idleTimer","onAction","_onAction","bind","assertThisInitialized","onActive","_onActive","onIdle","_onIdle","_this2","react_router_dom","index_es","ref","document","debounce","timeout","containers_NotificationContainer","containers_MessageDialogContainer","containers_TopNavContainer","components_Loader","exact","LoginContainer","QuickOfferContainer","PublicContainer","AccountActiviationContainer","PasswordContainer","ForgotPasswordContainer","TermOfUseContainer","CodeOfEthicsContainer","PrivacyPolicyContainer","CCPAContainer","ContactContainer","MessageTabContainer","Covid19Container","containers_FooterContainer","React","createBrowserHistory","Root","store","configure","autoClose","draggable","hideProgressBar","closeOnClick","rtl","pauseOnHover","react","react_redux_es","WrapperContainer","Boolean","hostname","addEventListener","render","components_Root","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.74b6bd79.chunk.js","sourcesContent":["//view\nexport const LOAD_USER = 'LOAD_USER';\nexport const LOGOUT = 'LOGOUT';\nexport const ENABLE_LOGIN_LINK = 'ENABLE_LOGIN_LINK';\nexport const UPDATE_RESET_EMAIL = 'UPDATE_RESET_EMAIL';\nexport const UPDATE_EMAIL = 'UPDATE_EMAIL';\nexport const UPDATE_PASSWORD = 'UPDATE_PASSWORD';\nexport const SELECT_SCOPE = 'SELECT_SCOPE';\nexport const DIALOG_OPEN = 'DIALOG_OPEN';\nexport const DIALOG_CLOSE = 'DIALOG_CLOSE';\nexport const SHOW_SPINNER = 'SHOW_SPINNER';\nexport const HIDE_SPINNER = 'HIDE_SPINNER';\nexport const UPDATE_CONTACT = 'UPDATE_CONTACT';\nexport const UPDATE_TITLE = 'UPDATE_TITLE';\nexport const UPDATE_INBOX_TAB_VALUE = 'UPDATE_INBOX_TAB_VALUE';\nexport const UPDATE_CUSTOM_SCOPE_FIELD = 'UPDATE_CUSTOM_SCOPE_FIELD';\nexport const UPDATE_SEARCH_VALUE = 'UPDATE_SEARCH_VALUE';\n\n//contact\nexport const INIT_CONTACT = 'INIT_CONTACT';\n\nexport const RECEIVED_DASHBOARD = 'RECEIVED_DASHBOARD';\nexport const RECEIVED_PUBLIC_DASHBOARD = 'RECEIVED_PUBLIC_DASHBOARD';\nexport const RECEIVED_PROFILE_IMAGE = 'RECEIVED_PROFILE_IMAGE';\nexport const RECEIVED_SCOPES = 'RECEIVED_SCOPES';\nexport const RECEIVED_PROJECT = 'RECEIVED_PROJECT';\nexport const SELECT_SAVED = 'SELECT_SAVED';\nexport const RECEIVED_PROJECT_PROJECT = 'RECEIVED_PROJECT_PROJECT';\nexport const RECEIVED_PROPOSAL = 'RECEIVED_PROPOSAL';\nexport const RECEIVED_QUICKOFFER = 'RECEIVED_QUICKOFFER'\nexport const RECEIVED_WORKZONE = 'RECEIVED_WORKZONE';\nexport const RECEIVED_PROFILE = 'RECEIVED_PROFILE';\nexport const RECEIVED_WORKHOUR = 'RECEIVED_WORKHOUR';\nexport const RECEIVED_PHONE = 'RECEIVED_PHONE';\nexport const RECEIVED_HOURLY_RATE = 'RECEIVED_HOURLY_RATE';\n\nexport const UPDATE_DISPLAY = 'UPDATE_DISPLAY';\n\nexport const UPDATE_MESSAGE_DIALOG = 'UPDATE_MESSAGE_DIALOG';\nexport const CLOSE_MESSAGE_DIALOG = 'CLOSE_MESSAGE_DIALOG';\nexport const UPDATE_MESSAGE_DIALOG_TEXT = 'UPDATE_MESSAGE_DIALOG_TEXT';\nexport const DISABLE_MESSAGE_SUBMIT = 'DISABLE_MESSAGE_SUBMIT';\nexport const ENABLE_MESSAGE_SUBMIT = 'ENABLE_MESSAGE_SUBMIT';\n\nexport const UPDATE_PROJECT_VALUE = 'UPDATE_PROJECT_VALUE';\nexport const ADD_CUSTOM_SCOPE = 'ADD_CUSTOM_SCOPE';\n\nexport const UPDATE_PROPOSAL_VALUE = 'UPDATE_PROPOSAL_VALUE';\nexport const UPDATE_PROPOSAL_SCOPE_VALUE = 'UPDATE_PROPOSAL_SCOPE_VALUE'\nexport const UPDATE_SCOPE_DETAIL = 'UPDATE_SCOPE_DETAIL';\nexport const PREPARE_EDIT_SCOPE_DETAIL = 'PREPARE_EDIT_SCOPE_DETAIL';\nexport const SELECT_PROPOSAL_SCOPE = 'SELECT_PROPOSAL_SCOPE';\nexport const UPDATE_SCOPE_TYPE = 'UPDATE_SCOPE_TYPE';\nexport const ADD_PROPOSAL_SCOPE = 'ADD_PROPOSAL_SCOPE';\nexport const CANCLE_PROPOSAL_SCOPE = 'CANCLE_PROPOSAL_SCOPE';\nexport const DELETE_PROPOSAL_SCOPE = 'DELETE_PROPOSAL_SCOPE';\nexport const EDIT_PROPOSAL_SCOPE = 'EDIT_PROPOSAL_SCOPE';\nexport const UPDATE_PROPOSAL = 'UPDATE_PROPOSAL';\nexport const UPDATE_QUICK_OFFER_VALUE = 'UPDATE_QUICK_OFFER_VALUE';\n\nexport const UPDATE_REGISTER_VALUE = 'UPDATE_REGISTER_VALUE';\nexport const UPDATE_STEP = 'UPDATE_STEP';\nexport const UPDATE_USER_TYPE = 'UPDATE_USER_TYPE';\nexport const UPDATE_COMPANY_VALUE = 'UPDATE_COMPANY_VALUE';\nexport const UPDATE_USER_COMPANY = 'UPDATE_USER_COMPANY';\nexport const UPDATE_LICENSE_VALUE = 'UPDATE_LICENSE_VALUE';\nexport const UPDATE_USER_LICENSE = 'UPDATE_USER_LICENSE';\nexport const UPDATE_WORK_ZONE_STATE = 'UPDATE_WORK_ZONE_STATE';\nexport const UPDATE_WORK_ZONE_COUNTY = 'UPDATE_WORK_ZONE_COUNTY';\nexport const UPDATE_HOURLY_RATE = 'UPDATE_HOURLY_RATE';\nexport const UPDATE_ADDRESS_VALUE = 'UPDATE_ADDRESS_VALUE';\nexport const UPDATE_PHONE_VALUE = 'UPDATE_PHONE_VALUE';\nexport const UPDATE_WORKHOUR_VALUE = 'UPDATE_WORKHOUR_VALUE';\nexport const UPDATE_INSURANCE_VALUE = 'UPDATE_INSURANCE_VALUE';\nexport const UPDATE_PERMIT_VALUE = 'UPDATE_PERMIT_VALUE';\nexport const ADD_WORKHOUR = 'ADD_WORKHOUR';\nexport const UPDATE_PROFILE_IMAGE_FILE_VALUE = 'UPDATE_PROFILE_IMAGE_FILE_VALUE';\n\nexport const UPDATE_REVIEW_VALUE = 'UPDATE_REVIEW_VALUE';\nexport const UPDATE_REVIEW_PROJECTID_PROVIDERID = 'UPDATE_REVIEW_PROJECTID_PROVIDERID';\n\nexport const UPDATE_ACCOUNT_ACTIVATION_STATUS = 'UPDATE_ACCOUNT_ACTIVATION_STATUS';\nexport const UPDATE_NOTIFICATION_SETTING = 'UPDATE_NOTIFICATION_SETTING';\nexport const UPDATE_NOTIFICATION_SETTING_BY_TYPE = 'UPDATE_NOTIFICATION_SETTING_BY_TYPE'\nexport const UPDATE_PASSWORD_VALUE = 'UPDATE_PASSWORD_VALUE';\nexport const INIT_UPDATE_PASSWORD = 'INIT_UPDATE_PASSWORD';\nexport const UPDATE_TOKEN_EMAIL = 'UPDATE_TOKEN_EMAIL';\n\n//search\nexport const RECEIVED_SEARCH_PROVIDER_RESULT = 'RECEIVED_SEARCH_PROVIDER_RESULT';","import { createSelector } from 'reselect';\nimport moment from 'moment';\n\nexport const SIMPLE_DAY_DATE_FORMAT_REGISTER = 'YYYY-MM-DD';\n\n //export const getScopes = ({scopes});\nconst getDashboardProposals = state => state.ee.dashboard.proposals;\nconst getScopes = state => state.view.scopes;\nconst getDashboardFromUserMessages = state => state.ee.dashboard.userMessages;\nconst getDashboardToUserMessages = state => state.ee.dashboard.userMessagesTo;\nconst getDashboardUserActions = state => state.ee.dashboard.userActions;\nconst getDashboardReviews = state => state.ee.dashboard.reviews;\nconst getProjectRawData = state => state.ee.project;\nconst getDashboardOfferData = state => state.ee.dashboard.offers;\nconst getProjectOfferData = state => state.ee.project.offers;\nexport const getProjectStatus = state => state.ee.project.status;\n\nexport const parseOffer = (offer) => {\n return {\n ...offer,\n project: offer.projectId,\n providerId: offer.providerId,\n providerDisplayName: offer.providerDisplayName,\n cost: '$' + offer.cost,\n material: '$' + offer.material,\n createdDate: moment(offer.createdDate).format('LL'),\n creation: moment(offer.createdDate).format('LLL'),\n updateDate: moment(offer.updateDate).format('LL'),\n updation: moment(offer.updateDate).format('LLL'),\n comment: offer.comment,\n } \n}\n\nexport const parseOffers = (offers) => {\n const parsedOffers = offers.map((offer) => {\n return parseOffer(offer);\n });\n return parsedOffers;\n}\n\nexport const getOffers = createSelector(\n getDashboardOfferData,\n (offers) => {\n const parsedOffers = parseOffers(offers);\n return parsedOffers;\n }\n);\n\nexport const getProjectOffers = createSelector(\n getProjectOfferData,\n (offers) => {\n const parsedOffers = parseOffers(offers);\n return parsedOffers;\n }\n);\n\nexport const getProposals = createSelector(\n getDashboardProposals,\n getScopes,\n (proposals, scopes) => {\n const parsedProposals = parseProposals(proposals, scopes);\n return parsedProposals;\n }\n);\n\nexport const getProjectProposals = createSelector(\n getProjectRawData,\n getScopes,\n (project, scopes) => {\n const parsedProposals = parseProposals(project.proposals, scopes, project);\n return parsedProposals;\n }\n);\n\nexport const parseProposal = (proposal, scopes, project) => {\n let scopeList = [];\n let scopeDetailList = [];\n let total = 1;\n if(proposal && proposal.scopes) {\n proposal.scopes.forEach( function (scope) {\n let scopeDescription;\n if (scope.description) {\n scopeDescription = scope.description\n } else if(!scope.description && scopes && scopes.length > 0 ) {\n scopeDescription = scopes[scope.scopeId].name; \n } else {\n scopeDescription = 'Scope Description'; \n }\n scopeList.push(scopeDescription);\n let scopeDetail = {};\n scopeDetail = scope;\n scopeDetail.proposalId = proposal.id;\n scopeDetail.providerId = proposal.providerId;\n scopeDetail.providerDisplayName = proposal.providerDisplayName;\n scopeDetail.description = scopeDescription;\n if (scope.type === 'FP' || scope.type.label === 'Fixed price') {\n scopeDetail.type = 'Fixed price';\n scopeDetail.cost = Number(scope.cost) || Number(scope.costTotal);\n scopeDetail.scopeTotalCost = scope.cost * scope.unit;\n } else if (scope.type === 'HY' || scope.type.label === 'Hourly') {\n scopeDetail.type = 'Hourly';\n if(!scopeDetail.scopeTotalCost) {\n scopeDetail.scopeTotalCost = (scope.hour * Number(proposal.userRate) + Number(scope.material));\n }\n }\n\n total += scopeDetail.scopeTotalCost;\n scopeDetail.providerId = proposal.providerId;\n scopeDetail.providerDisplayName = proposal.providerDisplayName;\n scopeDetail.comment = scope.comment;\n scopeDetail.userRate = proposal.userRate;\n let selected = false;\n const projectStatus = (project && project.status) ? project.status : undefined;\n if (projectStatus && projectStatus === 'SELECTING') {\n selected = false;\n } else if (projectStatus && projectStatus === 'SELECTED') {\n if (scope.status === 'SELECTED') {\n selected = true;\n } else {\n selected = false;\n }\n }\n scopeDetail.selected = selected;\n scopeDetailList.push(scopeDetail);\n });\n return {\n ...proposal,\n title: proposal.title,\n project: proposal.project,\n providerId: proposal.providerId,\n providerDisplayName: proposal.providerDisplayName,\n estimatedTime: proposal.expectTime + 'day(s)',\n createdDate: moment(proposal.createdDate).format('LL'),\n creation: moment(proposal.createdDate).format('LLL'),\n updateDate: moment(proposal.updateDate).format('LL'),\n updation: moment(proposal.updateDate).format('LLL'),\n comment: proposal.comment,\n scopeDetailList: scopeDetailList,\n total: '$' + total,\n } \n } else if (project) {\n return {\n ...proposal,\n title: \"new project\",\n project: project.id,\n estimatedTime: proposal.expectTime + 'day(s)',\n createdDate: moment().format('LL'),\n creation: moment().format('LLL'),\n updateDate: moment().format('LL'),\n updation: moment().format('LLL'),\n scopeDetailList: scopeDetailList,\n total: '$' + total,\n } \n }\n}\n\nexport const parseProposals = (proposals, scopes, project) => {\n const parsedProposals = proposals.map((proposal) => {\n return parseProposal(proposal, scopes, project);\n });\n return parsedProposals;\n}\n\nexport const getProjectReviews = createSelector(\n getProjectRawData,\n getScopes,\n (project, scopes) => {\n const parsedReviews = project.reviews.map((review) => {\n let processed = {};\n processed.id = review.id;\n processed.displayName = review.displayName;\n // processed.scope = scopes[review.scopeId].name;\n processed.recommend = review.recommend;\n processed.quality = review.quality;\n processed.responsiveness = review.responsiveness;\n processed.professionalism = review.professionalism;\n processed.subjectMatterExpertise = review.subjectMatterExpertise;\n processed.adherenceToCost = review.adherenceToCost;\n processed.adherenceToSchedule = review.adherenceToSchedule;\n processed.comment = review.comment;\n processed.overall = review.overall;\n processed.date = moment(review.createdDate).format('LL');\n processed.completed = review.completed;\n return processed;\n });\n return parsedReviews;\n }\n);\n\nexport const getFromUserMessages = createSelector(\n getDashboardFromUserMessages,\n (userMessages) => {\n const parsedUserMessages = userMessages.map((userMessage) => {\n let processed = {};\n processed.id = userMessage.id;\n processed.replyName = userMessage.fromDisplay;\n processed.replyId = userMessage.fromId;\n processed.text = userMessage.text;\n processed.projectId = userMessage.projectId;\n processed.date = moment(userMessage.date).format('LL');\n return processed;\n });\n return parsedUserMessages;\n }\n);\n\nexport const getToUserMessages = createSelector(\n getDashboardToUserMessages,\n (userMessages) => {\n const parsedUserMessages = userMessages.map((userMessage) => {\n let processed = {};\n processed.id = userMessage.id;\n processed.replyName = userMessage.toDisplay;\n processed.replyId = userMessage.toId;\n processed.text = userMessage.text;\n processed.projectId = userMessage.projectId;\n processed.date = moment(userMessage.date).format('LL');\n return processed;\n });\n return parsedUserMessages;\n }\n);\n\nexport const getUserActions = createSelector(\n getDashboardUserActions,\n (userActions) => {\n const parsedUserActions = userActions.map((userAction) => {\n let processed = {};\n // processed.key = key;\n processed.id = userAction.id;\n processed.replyName = userAction.sentByDisplay;\n processed.replyId = userAction.sentBy;\n processed.text = userAction.text;\n processed.projectId = userAction.projectId;\n processed.proposalId = (userAction.proposalId)? userAction.proposalId : 'Undefined'\n processed.text = userAction.text;\n processed.date = moment(userAction.date).format('LL');\n processed.readCheck = userAction.readCheck;\n processed.blocked = (userAction.folder === 'blocked') ? true : false;\n processed.type = userAction.type;\n return processed;\n });\n return parsedUserActions;\n }\n);\n\nexport const getReviews = createSelector(\n getDashboardReviews,\n (reviews) => {\n const parsedReviews = reviews.map((review) => {\n let processed = {};\n // processed.key = key;\n processed.id = review.id;\n processed.displayName = review.displayName;\n processed.projectId = review.projectId;\n processed.scopeId = review.scopeId;\n processed.recommend = review.recommend;\n processed.quality = review.quality;\n processed.responsiveness = review.responsiveness;\n processed.professionalism = review.professionalism;\n processed.subjectMatterExpertise = review.subjectMatterExpertise;\n processed.adherenceToCost = review.adherenceToCost;\n processed.adherenceToSchedule = review.adherenceToSchedule;\n processed.comment = review.comment;\n processed.overall = review.overall;\n processed.date = moment(review.date).format('LL');\n return processed;\n });\n\n return parsedReviews;\n }\n);\n\nexport const getProjectScopes = createSelector(\n getProjectRawData,\n (project) => {\n let processedScopes = project.scopes.map((projectScope) => {\n let addedScope = {};\n addedScope['id'] = projectScope.scopeId || projectScope.id;\n addedScope['name'] = projectScope.name;\n return addedScope;\n });\n return processedScopes;\n }\n);\n\nexport const getProject = createSelector(\n getProjectRawData,\n (project) => {\n let processed = project;\n processed.emergency = project.emergency;\n processed.startDate = moment(project.startDate).format(SIMPLE_DAY_DATE_FORMAT_REGISTER);\n processed.startTime = project.startTime;\n processed.endTime = project.endTime;\n processed.createdDate = project.createdDate ? moment(project.createdDate).format('LL') : '';\n processed.updatedDate = project.updatedDate ? moment(project.updatedDate).format('LL') : '';\n processed.endBiddingDate = moment(project.endBiddingDate).format(SIMPLE_DAY_DATE_FORMAT_REGISTER);\n processed.day = [\n {\n day: 'sun',\n value: project.sun === true ? true:false\n },\n {\n day: 'mon',\n value: project.mon === true ? true:false\n },\n {\n day: 'tue',\n value: project.tue === true ? true:false\n },\n {\n day: 'wed',\n value: project.wed === true ? true:false\n },\n {\n day: 'thu',\n value: project.thu === true ? true:false\n },\n {\n day: 'fri',\n value: project.fri === true ? true:false\n },\n {\n day: 'sat',\n value: project.sat === true ? true:false\n },\n ]; \n // processed.blocked = project.blocked;\n\n processed.scopes = project.scopes.map((projectScope) => {\n let addedScope = {};\n addedScope['id'] = projectScope.scopeId || projectScope.id;\n addedScope['name'] = projectScope.name;\n addedScope['providerDisplayName'] = projectScope.providerDisplayName;\n return addedScope;\n });\n return processed;\n }\n);\n\nexport const getCompleted = createSelector(\n getProjectReviews,\n (reviews) => {\n const length = reviews.length;\n let completed = 0;\n reviews.map((review) => {\n completed++;\n return review;\n });\n if(completed === length && completed !== 0) return 'COMPLETED'\n if(completed < length && completed !== 0) return 'PARTIALLY COMPLETED'\n return 'INCOMPLETED';\n }\n);\n","import * as types from '../constants/actionTypes';\nimport { toast } from 'react-toastify';\nimport { parseProposal } from '../selectors/ee';\n\nconst initAddScope = {\n type: {\n value: 'fixed_price',\n label: 'Fixed price',\n },\n hour: 10,\n material: 0,\n comment: '',\n unit: 0,\n cost: 0,\n showSpinner: false,\n};\n\nexport const initialView = () => ({\n login: {\n email: '',\n password: '',\n },\n scopes: [],\n tableBody: {\n project: false,\n proposal: false,\n },\n notification: {\n display: false,\n text: '',\n type: toast.TYPE.INFO,\n },\n message: {\n open: false,\n replyDisplay: 'Get Electrician',\n replyId: 1,\n text: '',\n submitDisabled: false,\n },\n project: {\n customScopeFieldEnabled: false,\n },\n proposal: {\n selectedScopes: [],\n unSelectedScopes: [],\n addScope: initAddScope,\n scopes:[],\n scopeDetailList: [],\n },\n resetEmail: undefined,\n loginLinkEnabled: false,\n finalSelectedScope: {},\n dialogOpen: false,\n contact: {\n subject: undefined,\n comment: undefined,\n },\n title: undefined,\n inbox: {},\n});\n\nconst initUnselectScope = (state, action, cleanProposal) => {\n const project = action.proposalResponse.project;\n let unSelectedScopes = [];\n project.scopes.forEach( function (scope) {\n const projectScope = {\n scopeId: scope.scopeId, \n description: scope.name,\n selected: false,\n }\n unSelectedScopes.push(projectScope);\n });\n return {\n ...state,\n project: project,\n proposal: {\n ...cleanProposal,\n selectedScopes: [],\n unSelectedScopes: unSelectedScopes,\n }\n }\n\n}\n\nconst getNewScopeValue = (state, userRate) => {\n const scopes = state.scopes;\n let addScope = state.proposal.addScope;\n if(addScope.type.value === 'fixed_price' || addScope.type === 'FP') {\n return {\n ...addScope,\n type: {\n label: 'Fixed price',\n value: 'fixed_price',\n },\n description: addScope.description || scopes[addScope.id].name,\n hour: Number(addScope.hour),\n cost: Number(addScope.cost) || Number(addScope.costTotal),\n unit: Number(addScope.unit),\n scopeTotalCost: addScope.cost * addScope.unit,\n }\n } else if(addScope.type.value === 'hourly' || addScope.type === 'HY') {\n return {\n ...addScope,\n type: {\n label: 'Hourly',\n value: 'Hourly',\n },\n description: addScope.description || scopes[addScope.id].name,\n hour: Number(addScope.hour),\n material: Number(addScope.material),\n scopeTotalCost: userRate * Number(addScope.hour) + Number(addScope.material),\n }\n }\n return {\n ...addScope,\n }\n}\n\nconst deleteProposalScope = (state, scopeId, addScope = initAddScope) => {\n let selectedScopes = state.proposal.selectedScopes;\n let unSelectedScopes = state.proposal.unSelectedScopes;\n\n const targetScope = selectedScopes.filter(scope => scope.scopeId === scopeId)[0];\n\n for(var i=0; i {\n let unSelectedScopes = state.proposal.unSelectedScopes\n let selected = false;\n\n // const addScopeScopeId = state.proposal.addScope.scopeId; //why???\n unSelectedScopes = unSelectedScopes.map((scope) => {\n // if(scope.scopeId === addScopeScopeId || scope.scopeId === scopeId) { //why?\n if(scope.scopeId === scopeId) {\n scope.selected = !scope.selected;\n selected = scope.selected; \n } else {\n scope.selected = false;\n }\n return scope;\n });\n\n if(selected) {\n return {\n ...state,\n proposal: {\n ...state.proposal,\n unSelectedScopes: unSelectedScopes,\n addScope: {\n ...state.proposal.addScope,\n key: scopeName, \n scopeId: scopeId,\n id: scopeId,\n description: scopeName,\n }\n },\n }\n }\n \n return {\n ...state,\n proposal: {\n ...state.proposal,\n unSelectedScopes:unSelectedScopes,\n addScope: initAddScope,\n },\n }\n}\n\nconst pushAddScopeToSelectedScopes = (state, addScopeList, isAction) => {\n let selectedScopes = state.proposal.selectedScopes;\n let unSelectedScopes = state.proposal.unSelectedScopes;\n addScopeList.map((addScopeValue) => {\n let scopeId;\n if (!addScopeValue.scopeId) {\n addScopeValue.scopeId = addScopeValue.id;\n } \n scopeId = addScopeValue.scopeId;\n if (scopeId) {\n for(var i=0; i {\n let selectedScopes = state.proposal.selectedScopes;\n let addScope = selectedScopes.filter(scope => scope.scopeId === scopeId)[0];\n addScope.type = (addScope.type === 'Fixed price') ? {label: 'Fixed price', value: \"fixed_price\"} : {label: 'Hourly', value: \"hourly\"}; \n return addScope;\n}\n\nconst updateScopeDetail = (state) => {\n //TODO: update here\n}\n\nexport default function view(prevState = initialView(), action) {\n const state = {\n ...prevState,\n };\n let selectedScopes;\n let newState;\n let cleanProposal; \n switch (action.type) {\n case types.UPDATE_EMAIL:\n return {\n ...state,\n login : {\n ...state.login,\n email: action.email,\n }\n };\n case types.UPDATE_PASSWORD:\n return {\n ...state,\n login : {\n ...state.login,\n password: action.password,\n }\n };\n case types.UPDATE_RESET_EMAIL:\n return {\n ...state,\n resetEmail : action.resetEmail,\n };\n case types.ENABLE_LOGIN_LINK:\n return {\n ...state,\n loginLinkEnabled: true,\n }\n case types.RECEIVED_SCOPES:\n return {\n ...state,\n scopes: action.scopes,\n }\n case types.UPDATE_DISPLAY:\n return {\n ...state,\n notification: action.notification,\n }\n case types.UPDATE_MESSAGE_DIALOG:\n return {\n ...state,\n message: action.message,\n }\n case types.CLOSE_MESSAGE_DIALOG:\n return {\n ...state,\n message: initialView().message,\n }\n case types.UPDATE_MESSAGE_DIALOG_TEXT:\n return {\n ...state,\n message: {\n ...state.message,\n text: action.text,\n }\n }\n case types.DISABLE_MESSAGE_SUBMIT :\n return {\n ...state,\n message: {\n ...state.message,\n submitDisabled: true,\n }\n }\n case types.ENABLE_MESSAGE_SUBMIT :\n return {\n ...state,\n message: {\n ...state.message,\n submitDisabled: false,\n }\n }\n case types.RECEIVED_PROPOSAL:\n const actionProposal = action.proposalResponse.proposal ? action.proposalResponse.proposal : undefined;\n if(state.scopes && state.scopes.length > 0 && actionProposal) {\n cleanProposal = parseProposal(actionProposal, state.scopes, action.proposalResponse.project);\n newState = initUnselectScope(state, action, cleanProposal);\n return pushAddScopeToSelectedScopes(newState, newState.proposal.scopeDetailList); \n } else {\n return initUnselectScope(state, action, state.proposal);\n }\n case types.SELECT_PROPOSAL_SCOPE:\n return clickScope(state, action.id, action.name);\n case types.ADD_PROPOSAL_SCOPE:\n const addScopeList = getNewScopeValue(state, action.userRate)\n const isAction = true;\n newState = pushAddScopeToSelectedScopes(state, [addScopeList], isAction);\n cleanProposal = parseProposal(newState.proposal, state.scopes);\n return {\n ...state,\n proposal: {\n ...cleanProposal,\n addScope: initAddScope,\n }\n }\n case types.DELETE_PROPOSAL_SCOPE:\n newState = deleteProposalScope(state, action.scopeId);\n cleanProposal = parseProposal(newState.proposal, state.scopes);\n return {\n ...state,\n proposal: {\n ...cleanProposal,\n }\n }\n case types.CANCLE_PROPOSAL_SCOPE:\n return clickScope(state, undefined, undefined);\n case types.PREPARE_EDIT_SCOPE_DETAIL:\n const addScope = getAddScopeFromScopeDetail(state, action.scopeId);\n newState = deleteProposalScope(state, action.scopeId, addScope);\n cleanProposal = parseProposal(newState.proposal, state.scopes);\n return {\n ...state,\n proposal: {\n ...cleanProposal,\n }\n }\n case types.UPDATE_SCOPE_DETAIL:\n return updateScopeDetail(state);\n case types.UPDATE_SCOPE_TYPE:\n return {\n ...state,\n proposal: {\n ...state.proposal,\n addScope: {\n ...state.proposal.addScope,\n type: action.scopeType,\n }\n }\n }\n case types.UPDATE_PROPOSAL_VALUE:\n return {\n ...state,\n proposal: {\n ...state.proposal,\n [action.name]: action.value,\n }\n }\n case types.UPDATE_PROPOSAL_SCOPE_VALUE:\n return {\n ...state,\n proposal: {\n ...state.proposal,\n addScope: {\n ...state.proposal.addScope,\n [action.name]: action.value,\n }\n }\n }\n case types.DIALOG_OPEN:\n return {\n ...state,\n dialogOpen: true,\n }\n \n case types.DIALOG_CLOSE:\n return {\n ...state,\n dialogOpen: false,\n }\n case types.SHOW_SPINNER:\n return {\n ...state,\n showSpinner: true,\n };\n case types.HIDE_SPINNER:\n return {\n ...state,\n showSpinner: false,\n };\n case types.UPDATE_CONTACT:\n return {\n ...state,\n contact: {\n ...state.contact, \n [action.name]: action.value,\n }\n }\n case types.UPDATE_TITLE:\n return {\n ...state,\n title: action.title,\n };\n case types.INIT_CONTACT:\n return {\n ...state,\n contact: {\n subject: undefined,\n comment: undefined,\n }\n }\n case types.UPDATE_INBOX_TAB_VALUE:\n return {\n ...state,\n inbox: {\n value: action.value,\n }\n }\n case types.UPDATE_CUSTOM_SCOPE_FIELD:\n return {\n ...state,\n project: {\n customScopeFieldEnabled: action.value,\n }\n }\n default:\n return { ...state };\n }\n}\n","import * as types from '../constants/actionTypes';\nimport { push } from 'react-router-redux'\nimport moment from 'moment';\n\nexport const SIMPLE_DAY_DATE_FORMAT_REGISTER = 'YYYY-MM-DD';\n\nconst initUser = { \n userType: 's',\n userDisplayName: 'Stranger',\n u: '',\n verified: false,\n step: 0,\n};\n\nexport const initialState = () => ({\n user: initUser,\n scopes: [],\n dashboard: {\n projects: [],\n proposals: [],\n userMessages: [],\n userMessagesTo: [],\n userActions: [],\n reviews: [],\n offers: []\n },\n project: {\n title: 'new project',\n blocked: false,\n budgetMax: 3000,\n budgetMin: 200,\n emergency: false,\n owner: 43,\n status: \"DRAFT\",\n supportingInfo: \"\",\n zipcode: \"10001\",\n scopes: [],\n proposals: [],\n offers: [],\n reviews: [],\n emergency: false,\n company: false,\n insurance: false,\n license: false,\n startTime: '06:00',\n endTime: '17:00',\n startDate: moment().format(SIMPLE_DAY_DATE_FORMAT_REGISTER),\n endBiddingDate: moment().format(SIMPLE_DAY_DATE_FORMAT_REGISTER),\n customScope: 'Custom Scope',\n providerList: [],\n sun: true,\n mon: true, \n tue: true, \n wed: true, \n thu: true, \n fri: true,\n sat: true,\n },\n review: {\n completed: true,\n recommend: true,\n status: 'completed',\n quality: 1,\n responsiveness: 1,\n professionalism: 1,\n subjectMatterExpertise: 1,\n adherenceToCost: 1,\n adherenceToSchedule: 1,\n projectId: 1,\n providerId: 1,\n },\n proposal: {},\n quickOffer: {\n update: false,\n },\n});\n\nexport default function ee(prevState = initialState(), action) {\n const state = {\n ...prevState,\n };\n\n switch (action.type) {\n case types.LOAD_USER:\n const userId = (action.user && action.user.u) ? action.user.u.split('.')[0] : undefined;\n if (action.user.step) {\n const user = {\n ...action.user,\n step: Number(action.user.step),\n id: userId,\n }\n return {\n ...state,\n user: user\n }; \n }\n return {\n ...state,\n user: action.user,\n id: userId,\n };\n case types.LOGOUT:\n return {\n ...state,\n user: initUser,\n };\n case types.RECEIVED_SCOPES:\n return {\n ...state,\n scopes: action.scopes,\n }\n case types.RECEIVED_DASHBOARD:\n return {\n ...state,\n dashboard: action.dashboard, \n }\n case types.SELECT_SAVED:\n return {\n ...state,\n project: {\n ...state.project,\n ...action.projectResponse.project,\n proposals: action.projectResponse.proposals,\n }\n }\n case types.RECEIVED_PROJECT:\n return {\n ...state,\n project: {\n ...action.projectResponse.project,\n proposals: action.projectResponse.proposals,\n reviews: action.projectResponse.reviews,\n offers: action.projectResponse.offers,\n providerList: action.projectResponse.providerList,\n }\n }\n case types.RECEIVED_PROJECT_PROJECT:\n const newProject = {\n ...action.project,\n proposals: state.project.proposals,\n reviews: state.project.reviews,\n }\n return {\n ...state,\n project: newProject,\n }\n case types.RECEIVED_PROPOSAL:\n const projectProposals = state.project.proposals;\n return {\n ...state,\n project: {\n ...action.proposalResponse.project,\n proposals: state.project.proposals,\n test:'test',\n },\n proposal: action.proposalResponse.proposal,\n }\n case types.RECEIVED_QUICKOFFER:\n return {\n ...state,\n quickOffer: {\n ...action.response,\n update: true,\n }\n }\n case types.UPDATE_PROJECT_VALUE:\n if(action.name === 'emergency') {\n return {\n ...state,\n project: {\n ...state.project,\n [action.name]: !state.project.emergency,\n }\n } \n }\n if(action.name === 'company') {\n return {\n ...state,\n project: {\n ...state.project,\n [action.name]: !state.project.company,\n }\n } \n }\n if(action.name === 'insurance') {\n return {\n ...state,\n project: {\n ...state.project,\n [action.name]: !state.project.insurance,\n }\n } \n }\n if(action.name === 'license') {\n return {\n ...state,\n project: {\n ...state.project,\n [action.name]: !state.project.license,\n }\n }\n }\n if (action.name === 'custom_scope') {\n return {\n ...state,\n project: {\n ...state.project,\n customScope: action.value,\n }\n } \n }\n return {\n ...state,\n project: {\n ...state.project,\n [action.name]: action.value,\n }\n }\n case types.ADD_CUSTOM_SCOPE:\n let scope = state.project.scopes;\n scope.push({\n 'name': state.project.customScope, \n 'scopeId' : 58,\n 'type': 'custom'\n }) \n return {\n ...state,\n project: {\n ...state.project,\n scopes: scope,\n customScope: undefined,\n }\n } \n case types.UPDATE_REVIEW_VALUE:\n return {\n ...state,\n review: {\n ...state.review,\n [action.name]: action.value,\n }\n }\n case types.UPDATE_REVIEW_PROJECTID_PROVIDERID:\n return {\n ...state,\n review: {\n ...state.review,\n projectId: action.projectId,\n providerId: action.providerId,\n }\n } \n case types.UPDATE_USER_TYPE:\n return {\n ...state,\n user: {\n ...state.user,\n userType: action.userType,\n }\n }\n case types.SELECT_SCOPE:\n const scopeDetail = action.scopeDetail;\n const scopes = state.project.scopes.map(scope => {\n if(scope.scopeId === scopeDetail.scopeId) {\n scope.providerId = scopeDetail.providerId;\n scope.proposalId = scopeDetail.proposalId;\n scope.providerDisplayName = scopeDetail.providerDisplayName; \n };\n return scope;\n })\n return {\n ...state,\n project: {\n ...state.project,\n scopes: scopes,\n }\n }\n case types.UPDATE_QUICK_OFFER_VALUE:\n return {\n ...state,\n quickOffer: {\n ...state.quickOffer,\n [action.name]: action.value,\n }\n }\n default:\n return {\n ...state\n };\n }\n}\n","import * as types from '../constants/actionTypes';\n\nconst workZoneStates = [\"NJ\", \"NY\"]\nconst workZoneCounties = {\n NJ : ['Bergen', 'Burlington', 'Camden', 'Cape May', 'Cumberland', 'Essex', 'Gloucester', 'Hudson', 'Hunterdon', 'Mercer', 'Middlesex',\n 'Monmouth', 'Morris', 'Ocean', 'Passaic', 'Salem', 'Somerset', 'Sussex' , 'Union'],\n NY: ['New York','Bronx', 'Kings', 'Queens', 'Richmond']\n};\n\nconst states = [\"AL\", \"AK\", \"AZ\", \"AR\", \"CA\", \"CO\", \"CT\", \"DE\", \"FL\", \"GA\", \"HI\", \"ID\", \"IL\", \"IN\", \"IA\", \"KS\", \"KY\",\n\"LA\", \"ME\", \"MD\", \"MA\", \"MI\", \"MN\", \"MS\", \"MO\", \"MT\", \"NE\", \"NV\", \"NH\", \"NJ\", \"NM\", \"NY\", \"NC\", \"ND\",\n \"OH\", \"OK\", \"OR\", \"PA\", \"RI\", \"SC\", \"SD\", \"TN\", \"TX\", \"UT\", \"VT\", \"VA\", \"WA\", \"WV\", \"WI\", \"WY\"];\n\nconst initialCompany = {\n name: undefined,\n registeredAt: undefined,\n companyId: undefined,\n};\n\nconst initialLicense = {\n name: undefined,\n no: undefined,\n issuedBy: undefined,\n issuedAt: undefined,\n};\n\nconst initialWorkzone = {\n NJ: [],\n NY: [],\n};\n\nexport const initialState = () => ({\n firstName: undefined,\n lastName: undefined,\n displayName: undefined,\n email: undefined,\n password: undefined,\n verifyPassword: undefined,\n type: 'customer',\n providerType: 'licensedCompany',\n error: {},\n agreement: {\n codeOfEthics: false,\n termsOfUse: false,\n termsOfUseProvider: false,\n },\n company: initialCompany,\n license: initialLicense,\n address: {},\n insurance: [],\n permit: [],\n registerStep: 0,\n workZoneStates: workZoneStates,\n workZoneCounties: workZoneCounties,\n workzone: initialWorkzone,\n workHour: {},\n workHourList: [],\n states: states,\n updateInsurance: false,\n updaetPremit: false,\n profileImage: {\n file: undefined,\n image: undefined,\n },\n rate: 0,\n});\n\nconst processWorkZone = (workzones) => {\n let NJWorkZoneList = [];\n let NYWorkZoneList = [];\n workzones.map((workzone) => {\n if(workzone.state === 'NY') {\n NYWorkZoneList.push({\n value: workzone.county,\n label: workzone.county\n });\n }\n if(workzone.state === 'NJ') {\n NJWorkZoneList.push({\n value: workzone.county,\n label: workzone.county\n });\n }\n })\n return {\n NY: NYWorkZoneList,\n NJ: NJWorkZoneList,\n }\n}\n\nexport default function register(prevState = initialState(), action) {\n const state = {\n ...prevState,\n };\n\n switch (action.type) {\n case types.UPDATE_REGISTER_VALUE:\n if(action.name === 'termsOfUse' || action.name === 'termsOfUseProvider' || action.name === 'codeOfEthics') {\n const value = state.agreement[action.name];\n return {\n ...state,\n agreement: {\n ...state.agreement,\n [action.name]: !value,\n }\n } \n }\n return {\n ...state,\n [action.name]: action.value,\n }\n case types.UPDATE_STEP: {\n return {\n ...state,\n registerStep: action.step,\n }\n }\n case types.UPDATE_COMPANY_VALUE: {\n return {\n ...state, \n company: {\n ...state.company,\n [action.name]: action.value,\n }\n }\n }\n case types.UPDATE_LICENSE_VALUE: {\n return {\n ...state, \n license: {\n ...state.license,\n [action.name]: action.value,\n }\n }\n }\n case types.UPDATE_USER_COMPANY: {\n return {\n ...state, \n company: {\n ...state.company,\n name: action.userCompany.name,\n registeredAt: action.userCompany.registeredAt,\n companyId: action.userCompany.companyId,\n }\n }\n }\n case types.UPDATE_USER_LICENSE: {\n return {\n ...state, \n license: action.userLicense,\n }\n }\n case types.RECEIVED_WORKZONE: {\n return {\n ...state,\n workzone: processWorkZone(action.workzone),\n } \n }\n case types.UPDATE_WORK_ZONE_COUNTY: {\n return {\n ...state,\n workzone: {\n ...state.workzone,\n [action.state]: action.workZoneCounties,\n }\n }\n }\n case types.RECEIVED_WORKHOUR: {\n return {\n ...state,\n workHourList: action.workHour\n }\n }\n case types.UPDATE_WORKHOUR_VALUE: {\n return {\n ...state,\n workHour: {\n ...state.workHour,\n [action.name]: action.value,\n }\n } \n }\n case types.UPDATE_ADDRESS_VALUE: {\n return {\n ...state,\n address: {\n ...state.address,\n [action.name]: action.value,\n }\n }\n }\n case types.UPDATE_PHONE_VALUE: {\n return {\n ...state,\n phone: action.value,\n }\n }\n case types.UPDATE_PROFILE_IMAGE_FILE_VALUE: {\n return {\n ...state,\n profileImage: {\n ...state.profileImage,\n file: action.value,\n image: action.value,\n }\n }\n }\n case types.RECEIVED_PROFILE: {\n // GET /v1/register/profile returns the user's whole profile in JSON,\n // and a part of the profile is a **list** of the user's licenses.\n // as of Jan 26th 2023, we assume a user has only one license.\n // no change made for the API but here we try to get only the first element of the array\n var userLicense = !Array.isArray(action.profile.license) ? action.profile.license : action.profile.license[0];\n\n const newProfile = {\n ...state,\n address: action.profile.address || {},\n phone: action.profile.phone,\n company: action.profile.company || initialCompany,\n insurance: action.profile.insurance,\n permit: action.profile.permit,\n license: userLicense || initialLicense,\n workHourList: action.profile.workHour || [],\n website: action.profile.website,\n workzone: processWorkZone(action.profile.workZone || []),\n rate: action.profile.rate,\n profileImage: 'data:image/png;base64,' + action.profile.profileImage,\n }\n return newProfile;\n }\n case types.RECEIVED_PHONE: {\n return {\n ...state,\n phone: action.phone,\n }\n }\n case types.UPDATE_HOURLY_RATE: {\n return {\n ...state,\n rate: action.value,\n }\n }\n default:\n return {\n ...state\n };\n }\n}\n","import * as types from '../constants/actionTypes';\n\nconst workZoneStates = [\"NJ\", \"NY\"]\nconst workZoneCounties = {\n NJ : ['Bergen', 'Burlington', 'Camden', 'Cape May', 'Cumberland', 'Essex', 'Gloucester', 'Hudson', 'Hunterdon', 'Mercer', 'Middlesex',\n 'Monmouth', 'Morris', 'Ocean', 'Passaic', 'Salem', 'Somerset', 'Sussex' , 'Union'],\n NY: ['New York','Bronx', 'Kings', 'Queens', 'Richmond']\n};\n\nconst states = [\"AL\", \"AK\", \"AZ\", \"AR\", \"CA\", \"CO\", \"CT\", \"DE\", \"FL\", \"GA\", \"HI\", \"ID\", \"IL\", \"IN\", \"IA\", \"KS\", \"KY\",\n\"LA\", \"ME\", \"MD\", \"MA\", \"MI\", \"MN\", \"MS\", \"MO\", \"MT\", \"NE\", \"NV\", \"NH\", \"NJ\", \"NM\", \"NY\", \"NC\", \"ND\",\n \"OH\", \"OK\", \"OR\", \"PA\", \"RI\", \"SC\", \"SD\", \"TN\", \"TX\", \"UT\", \"VT\", \"VA\", \"WA\", \"WV\", \"WI\", \"WY\"];\n\nexport const initialState = () => ({\n name: undefined,\n location: undefined,\n since: undefined,\n rateAverage: undefined,\n workingProjectCount: 0,\n completedProjectCount: 0,\n projectCount: 0,\n reviewsCount: 0,\n reviews: [],\n userCompany: {},\n licenseList: [],\n permitList: [],\n insuranceList: [],\n workHourList: [],\n profileImage: undefined,\n});\n\nexport default function publicReducer(prevState = initialState(), action) {\n const state = {\n ...prevState,\n };\n\n switch (action.type) {\n case types.RECEIVED_PUBLIC_DASHBOARD:\n return {\n ...action.dashboard, \n }\n case types.RECEIVED_PROFILE_IMAGE:\n return {\n ...state,\n profileImage: action.profileImage,\n }\n default:\n return {\n ...state\n };\n }\n}\n","import * as types from '../constants/actionTypes';\n\nexport const initialState = () => ({\n accountActivation: {\n type: '',\n action: 'Deactivate',\n enabled: true, \n message: '',\n },\n notificationSetting: {\n email: false,\n },\n password: {\n oldPassword: undefined,\n newPwasword: undefined,\n verifyNewPassword: undefined,\n code: undefined,\n enabled: false,\n verified: false,\n }\n});\n\nconst queryToArray = (queryStr) => {\n const queryArr = queryStr.replace('?','').split('&');\n const queryParams = [];\n\n for (var q = 0, qArrLength = queryArr.length; q < qArrLength; q++) {\n var qArr = queryArr[q].split('=');\n queryParams[qArr[0]] = qArr[1];\n }\n\n return queryParams;\n};\n\nexport default function setting(prevState = initialState(), action) {\n const state = {\n ...prevState,\n };\n\n switch (action.type) {\n case types.UPDATE_ACCOUNT_ACTIVATION_STATUS:\n return {\n ...state,\n accountActivation: {\n ...state.accountActivation,\n action: action.accountActivation.action,\n enabled: action.accountActivation.enabled,\n message: action.accountActivation.message,\n }\n } \n case types.UPDATE_NOTIFICATION_SETTING:\n return {\n ...state,\n notificationSetting: action.notificationSetting,\n } \n case types.UPDATE_NOTIFICATION_SETTING_BY_TYPE:\n if(action.name === 'email') {\n return {\n ...state,\n notificationSetting: {\n ...state.notificationSetting,\n 'email': !state.notificationSetting.email,\n }\n } \n }\n return {\n ...state\n };\n case types.UPDATE_PASSWORD_VALUE:\n return {\n ...state,\n password: {\n ...state.password,\n [action.name]: action.value,\n }\n }\n case types.INIT_UPDATE_PASSWORD: {\n return {\n ...state,\n password: {\n oldPassword: undefined,\n newPwasword: undefined,\n verifyNewPassword: undefined,\n enabled: false,\n }\n } \n }\n case types.UPDATE_TOKEN_EMAIL: {\n const queryParams = queryToArray(action.queryStr)\n return {\n ...state,\n password: {\n ...state.password,\n code: queryParams.c,\n token: action.token,\n email: queryParams.email,\n }\n }\n }\n default:\n return {\n ...state\n };\n }\n}\n","\nimport * as types from '../constants/actionTypes';\n\nexport const initialState = () => ({\n company: false,\n license: false,\n insurance: false,\n permit: false,\n keyword: '',\n providerList: [],\n searchValue: '',\n});\n\nexport default function searchReducer(prevState = initialState(), action) {\n const state = {\n ...prevState,\n };\n\n switch (action.type) {\n case types.UPDATE_SEARCH_VALUE:\n return {\n ...state,\n searchValue: action.value,\n }\n case types.RECEIVED_SEARCH_PROVIDER_RESULT:\n return {\n ...state,\n providerList: action.searchResponse.providerList,\n };\n default:\n return {\n ...state\n };\n }\n}","import { combineReducers } from 'redux';\nimport view from './view';\nimport ee from './ee';\nimport register from './register';\nimport publicReducer from './public';\nimport setting from './setting';\nimport search from './search';\n\nexport default combineReducers({\n view,\n ee,\n register,\n publicReducer,\n setting,\n search,\n});\n","import { createStore, applyMiddleware, compose } from 'redux';\nimport thunk from 'redux-thunk';\nimport reducer from '../reducers';\n\nconst configureStore = () => {\n const initialState = {};\n const store = createStore(\n reducer,\n initialState,\n compose(\n applyMiddleware(thunk),\n window.devToolsExtension ? window.devToolsExtension() : f => f\n )\n );\n\n return store;\n};\n\nexport default configureStore;\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n // maxWidth: '425px',\n // paddingBottom: '30px'\n color: 'white',\n boxShadow: 'none',\n textTransform: 'none',\n fontSize: 16,\n padding: '6px 12px',\n border: '1px solid',\n lineHeight: 1.5,\n backgroundColor: '#468847',\n borderColor: '#0063cc',\n width: '180px',\n marginRight: '16px',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginTop: '20px',\n marginBottom: '10px',\n marginRight: '4px',\n display: 'flex',\n },\n margin20: {\n marginBottom: '20px',\n },\n smallText: {\n fontSize: '12px',\n lineHeight: '1.6',\n },\n mainText: {\n fontFamily: \"'Noto Sans', sans-serif\",\n fontWeight: 500,\n width: '1110px',\n }\n});\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user : state.ee.user,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n pushHome: (history) => {\n history.push('/');\n },\n});\n\nclass HomeContainer extends Component {\n componentDidUpdate() {\n const { \n user,\n pushHome,\n history,\n classes,\n } = this.props;\n }\n\n render() {\n const { user, history, classes } = this.props;\n const showGetStarted = user.userType === 's' ? true : false;\n return (\n
\n
\n
\n
Your
\n
Electrical Services
\n
Marketplace ™
\n
\n {showGetStarted && \n Get started \n }\n \n How it works \n \n
\n
\n
\n
\n

Get started with getElectrician

\n

At GetElectrician.com our goal is to help both customers find electrical providers and electrical providers find customers for all their electrical needs. \nTo learn more how to navigate our services,

\n

Learn more »

\n
\n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(withStyles(styles)(HomeContainer));\n","import * as types from '../constants/actionTypes';\n\nexport const updateNotification = (notification) => {\n return {\n type: types.UPDATE_DISPLAY,\n notification\n }\n};\n\nexport const updateMessageDialog = (message) => {\n return {\n type: types.UPDATE_MESSAGE_DIALOG,\n message,\n }\n};\n\nexport const closeMessaegDialog = () => {\n return {\n type: types.CLOSE_MESSAGE_DIALOG,\n }\n}\n\nexport const updateMessageDialogText = (text) => {\n return {\n type: types.UPDATE_MESSAGE_DIALOG_TEXT,\n text,\n }\n};\n\nexport const disableMessageSubmit = (text) => {\n return {\n type: types.DISABLE_MESSAGE_SUBMIT,\n text,\n }\n};\n\nexport const enableMessageSubmit = (text) => {\n return {\n type: types.ENABLE_MESSAGE_SUBMIT,\n text,\n }\n};\n\nexport const updateResetEmail = (resetEmail) => {\n return {\n type: types.UPDATE_RESET_EMAIL,\n resetEmail,\n }\n}\n\nexport const updateContact = (name, value) => {\n return {\n type: types.UPDATE_CONTACT,\n name,\n value,\n }\n}\n\nexport const initContact = () => ({\n type: types.INIT_CONTACT,\n})\n\nexport const dialogOpen = () => ({\n type: types.DIALOG_OPEN,\n});\n\nexport const dialogClose = () => ({\n type: types.DIALOG_CLOSE,\n});\n\nexport const showSpinner = () => ({\n type: types.SHOW_SPINNER,\n});\n\nexport const hideSpinner = () => ({\n type: types.HIDE_SPINNER,\n})\n\nexport const updateInboxTabValue = (value) => ({\n type: types.UPDATE_INBOX_TAB_VALUE,\n value: value\n})\n\nexport const updateCustomScopeField = (value) => ({\n type: types.UPDATE_CUSTOM_SCOPE_FIELD,\n value,\n})\n\nexport const updateSearchValue = (value) => ({\n type: types.UPDATE_SEARCH_VALUE,\n value,\n})\n","import * as types from '../constants/actionTypes';\n\nexport const updateEmail = email => ({\n type: types.UPDATE_EMAIL,\n email\n});\n\nexport const updatePassword = password => ({\n type: types.UPDATE_PASSWORD,\n password\n});\n\nexport const updateProjectValue = (name, value) => ({\n type: types.UPDATE_PROJECT_VALUE,\n name,\n value,\n});\n\nexport const selectProposalScopeClick = (id, name) => ({\n type: types.SELECT_PROPOSAL_SCOPE,\n id,\n name,\n});\n\nexport const updateScopeType = (scopeType) => ({\n type: types.UPDATE_SCOPE_TYPE,\n scopeType,\n});\n\nexport const updateProposalValue = (name, value) => ({\n type: types.UPDATE_PROPOSAL_VALUE,\n name,\n value,\n});\n\nexport const updateProposalScopeValue = (name, value) => ({\n type: types.UPDATE_PROPOSAL_SCOPE_VALUE,\n name,\n value,\n});\n\nexport const addProposalScope = (userRate) => ({\n type: types.ADD_PROPOSAL_SCOPE, userRate\n});\n\nexport const cancleProposalScope = () => ({\n type: types.CANCLE_PROPOSAL_SCOPE,\n});\n\nexport const deleteProposalScope = (scopeId) => ({\n type: types.DELETE_PROPOSAL_SCOPE, scopeId,\n});\n\nexport const updateProposal = () => ({\n type: types.UPDATE_PROPOSAL,\n});\n\nexport const prepareEditScopeDetail = (scopeId) => ({\n type: types.PREPARE_EDIT_SCOPE_DETAIL,\n scopeId,\n});\n\nexport const updateUserType = (userType) => ({\n type: types.UPDATE_USER_TYPE,\n userType,\n})\n\nexport const updateReviewValue = (name, value) => ({\n type: types.UPDATE_REVIEW_VALUE,\n name,\n value,\n});\n\nexport const updateProjectIdProviderId = (projectId, providerId) => ({\n type: types.UPDATE_REVIEW_PROJECTID_PROVIDERID,\n projectId,\n providerId,\n});\n\nexport const selectScope = (scopeDetail) => {\n return {\n type: types.SELECT_SCOPE,\n scopeDetail,\n }\n}\n\nexport const addCustomScope = () =>{\n return {\n type: types.ADD_CUSTOM_SCOPE,\n }\n}\n\nexport const updateQuickOfferValue = (name, value) => ({\n type: types.UPDATE_QUICK_OFFER_VALUE,\n name,\n value,\n});\n","import * as types from '../constants/actionTypes';\n\nexport const updateRegisterValue = (name, value) => ({\n type: types.UPDATE_REGISTER_VALUE,\n name,\n value,\n});\n\nexport const updateAccountActivation = (accountActivation) => ({\n type: types.UPDATE_ACCOUNT_ACTIVATION_STATUS,\n accountActivation,\n})\n\nexport const updateNotificationSetting = (notificationSetting) => ({\n type: types.UPDATE_NOTIFICATION_SETTING,\n notificationSetting,\n})\n\nexport const updateNotificationSettingByType = (name, value) => ({\n type: types.UPDATE_NOTIFICATION_SETTING_BY_TYPE,\n name,\n value,\n}) \n\nexport const updatePasswordValue = (name, value) => ({\n type: types.UPDATE_PASSWORD_VALUE,\n name,\n value,\n})\n\nexport const updateTokenEmail = (token, queryStr) => ({\n type: types.UPDATE_TOKEN_EMAIL,\n token,\n queryStr,\n})","import * as types from '../constants/actionTypes';\n\nexport const updateRegisterValue = (name, value) => ({\n type: types.UPDATE_REGISTER_VALUE,\n name,\n value,\n});\n\nexport const updateStep = (step) => ({\n type: types.UPDATE_STEP,\n step,\n})\n\nexport const updateCompanyValue = (name, value) => ({\n type: types.UPDATE_COMPANY_VALUE,\n name,\n value,\n});\n\nexport const updateLicenseValue = (name, value) => ({\n type: types.UPDATE_LICENSE_VALUE,\n name,\n value,\n});\n\nexport const updateUserCompany = (userCompany) => ({\n type: types.UPDATE_USER_COMPANY,\n userCompany,\n})\n\nexport const updateUserLicense = (userLicense) => ({\n type: types.UPDATE_USER_LICENSE,\n userLicense,\n})\n\nexport const updateWorkZoneState = (workZoneState) => ({\n type: types.UPDATE_WORK_ZONE_STATE,\n workZoneState,\n})\n\nexport const updateWorkZoneCounty = (state, workZoneCounties) => ({\n type: types.UPDATE_WORK_ZONE_COUNTY,\n state,\n workZoneCounties,\n})\n\nexport const updateAddressValue = (name, value) => ({\n type: types.UPDATE_ADDRESS_VALUE,\n name,\n value,\n});\n\nexport const receivedProfile = (profile) => ({\n type: types.RECEIVED_PROFILE,\n profile,\n})\n\nexport const updateWorkHourValue = (name, value) => ({\n type: types.UPDATE_WORKHOUR_VALUE,\n name,\n value,\n});\n\nexport const updateInsuranceValue = (name, value) => ({\n type: types.UPDATE_INSURANCE_VALUE,\n name,\n value,\n});\n\nexport const updatePermitValue = (name, value) => ({\n type: types.UPDATE_PERMIT_VALUE,\n name,\n value,\n});\n\nexport const updatePhoneValue = (value) => ({\n type: types.UPDATE_PHONE_VALUE,\n value,\n});\n\nexport const updateProfileImageFile = (value) => ({\n type: types.UPDATE_PROFILE_IMAGE_FILE_VALUE,\n value,\n});\n\nexport const updateHourlyRate = (name, value) => ({\n type: types.UPDATE_HOURLY_RATE,\n name,\n value,\n});\n","export function queryToArray(queryStr) {\n const queryArr = queryStr.replace('?','').split('&');\n const queryParams = [];\n\n for (var q = 0, qArrLength = queryArr.length; q < qArrLength; q++) {\n var qArr = queryArr[q].split('=');\n queryParams[qArr[0]] = qArr[1];\n }\n\n return queryParams;\n};\n","import Cookies from 'universal-cookie';\nimport { toast } from 'react-toastify';\nimport { push } from 'react-router-redux'\nimport moment from 'moment';\nimport * as types from '../constants/actionTypes';\nimport { updateNotification, \n closeMessaegDialog, \n enableMessageSubmit,\n hideSpinner,\n showSpinner,\n initContact,\n} from '../actions/view';\nimport { updateUserType } from '../actions/ee';\nimport { updateAccountActivation, updateNotificationSetting } from './setting'\nimport { updateStep, updateUserCompany, updateUserLicense, receivedProfile } from '../actions/register';\nimport { queryToArray } from '../util/urlUtil';\n\nconst cookies = new Cookies();\n \nconst getReq = () => ({ credentials: 'same-origin' });\n\nconst getBuffer = () => ({\n method: 'GET',\n headers: {\n 'Accept': 'application/pdf',\n },\n responseType: 'arraybuffer'\n})\n\nconst putReq = body => ({\n method: 'PUT',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n credentials: 'same-origin',\n});\n\nconst postReq = body => ({\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n credentials: 'same-origin',\n});\n\nconst postReqFormData = file => {\n const formData = new FormData();\n formData.append('file', file.file);\n formData.append('image', file.image);\n formData.append('name', file.file.name);\n return {\n method: 'POST',\n body: formData,\n credentials: 'same-origin', \n }\n}\n\nconst postNonJsonReq = body => ({\n method: 'POST',\n headers: {\n Accept: 'application/json, */*',\n },\n body,\n credentials: 'same-origin',\n});\n\nexport const evaluateResponseBufferWithErrorMessage = (response, isJson = false, isRedirect = false) => {\n if (response.ok) {\n return response.arrayBuffer();\n }\n\n return response.json().then((json) => {\n jsonErrorHandler(json, isRedirect);\n });\n};\n\nexport const evaluateResponseNoJsonWithErrorMessage = (response, isJson = false, history) => {\n if (response.ok) {\n return response;\n }\n\n if (response.statusText === 'USER NOT FOUND') {\n if (history) {\n history.push('/login');\n }\n } else {\n throw new Error(response.statusText);\n }\n};\n\nexport const evaluateResponseWithErrorMessage = (response, isJson = true, history, dispatch) => {\n if (response.ok) {\n return (isJson) ? response.json() : response;\n }\n\n return response.json().then((json) => {\n jsonErrorHandler(json, history, dispatch);\n });\n};\n\nconst jsonErrorHandler = (json, history = undefined, dispatch = undefined, toHome = false) => {\n let errorLines;\n if (json.message === 'USER NOT FOUND' || json.error === 'USER NOT FOUND') {\n if (history) {\n history.push('/login');\n }\n dispatch(updateNotification({\n display: true, \n text: 'Login required',\n type: toast.TYPE.WARN\n })); \n \n errorLines = [json.message];\n throw new Error(errorLines.join('\\n'));\n } else {\n if (json.error_message) {\n errorLines = [json.error_message];\n } else if (json.errors) {\n errorLines = [json.errors];\n } else if (json.validationResult && json.validationResult.errors) {\n errorLines = json.validationResult.errors;\n } else if (json.error) {\n errorLines = [json.error];\n }\n \n if(history & toHome) {\n history.push('/');\n }\n throw new Error(errorLines.join('\\n'));\n }\n}\n\n// export const evaluateUser = user => (\n// (dispatch) => {\n// if(user.userType === 's') {\n// logout();\n// }\n// }\n// );\n\n\n// export const evaluateResponse = (response) => {\n// if (response.status >= 400) {\n// console.error('Error Response', response);\n// throw new Error('There was an error with the request');\n// }\n// return response.json();\n// };\n\nexport const receivedLogoutRequest = ({\n type: types.LOGOUT,\n});\n\nexport const receiveUser = user => ({\n type: types.LOAD_USER, user,\n});\n\nexport const receiveDashboard = dashboard => ({\n type: types.RECEIVED_DASHBOARD, dashboard,\n});\n\nexport const receivedPublicDashboard = dashboard => ({\n type: types.RECEIVED_PUBLIC_DASHBOARD, dashboard,\n})\n\nexport const receivedProfileImage = profileImage => ({\n type: types.RECEIVED_PROFILE_IMAGE, profileImage,\n})\n\nexport const receiveScopes = scopes => ({\n type: types.RECEIVED_SCOPES, scopes,\n})\n\nexport const receiveProject = projectResponse => ({\n type: types.RECEIVED_PROJECT, projectResponse,\n});\n\nexport const selectSaved = projectResponse => ({\n type: types.SELECT_SAVED, projectResponse,\n})\n\nexport const receiveProjectProject = projectResponse => ({\n type: types.RECEIVED_PROJECT_PROJECT, projectResponse\n})\n\nexport const receiveProposal = proposalResponse => ({\n type: types.RECEIVED_PROPOSAL, proposalResponse,\n});\n\nexport const receiveQuickOffer = response => ({\n type: types.RECEIVED_QUICKOFFER, response,\n});\n\nexport const receivedWorkZone = workZoneResponse => ({\n type: types.RECEIVED_WORKZONE, \n workzone: workZoneResponse,\n});\n\nexport const receivedWorkHour = workHourResponse => ({\n type: types.RECEIVED_WORKHOUR, \n workHour: workHourResponse,\n});\n\nexport const receivedPhone = phone => ({\n type: types.RECEIVED_PHONE,\n phone: phone,\n})\n\nexport const receivedHourlyRate = userHourlyRateResponse => ({\n type: types.RECEIVED_HOURLY_RATE,\n rate: userHourlyRateResponse,\n});\n\nexport const loadUser = () => ({\n type: types.LOAD_USER,\n user: {\n type: 's',\n email: '',\n },\n});\n\nexport const initUpdatePassword = () => ({\n type: types.INIT_UPDATE_PASSWORD, \n})\n\nexport const ableLoginLink = () => ({\n type: types.ENABLE_LOGIN_LINK,\n});\n\nexport const fetchUser = (userId) => (\n (dispatch) => {\n const loginCheckURL = '/v1/home/check';\n return fetch(loginCheckURL, getReq())\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n if (response) {\n const user = response;\n dispatch(receiveUser(user));\n } else {\n console.error('user not found');\n }\n })\n .catch((err) => {\n console.error('Error Fetching user data', err);\n });\n }\n);\n\nexport const fetchDashboard = history => (\n (dispatch) => {\n const dashboardURL = '/v1/dashboard';\n return fetch(dashboardURL, getReq())\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n if (response) {\n const dashboard = response;\n dispatch(receiveDashboard(dashboard));\n } else {\n console.error('dashboard not found');\n history.push('/');\n }\n })\n .catch((err) => {\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching dashboard',\n type: toast.TYPE.ERROR\n }));\n history.push('/');\n });\n }\n);\n\nexport const fetchPublicDashboard = providerId => (\n (dispatch) => {\n let dashboardURL = '/v1/dashboard/public';\n if(providerId) {\n\t dashboardURL = dashboardURL + '?pid=' + providerId;\n\t }\n return fetch(dashboardURL, getReq())\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n if (response) {\n const dashboard = response;\n dispatch(receivedPublicDashboard(dashboard));\n } else {\n console.error('public dashboard not found');\n }\n })\n .catch((err) => {\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching public dashboard',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nconst arrayBufferToBase64 = function(buffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa( binary );\n};\n\nexport const fetchProfileImage = providerId => (\n (dispatch) => {\n let url = '/v1/dashboard/profileImage';\n if(providerId) {\n url = url + '?pid=' + providerId;\n\t }\n return fetch(url, getReq())\n .then(evaluateResponseBufferWithErrorMessage)\n .then((response) => {\n const profile_image = response;\n if(profile_image) {\n dispatch(receivedProfileImage('data:image/png;base64,'+arrayBufferToBase64(profile_image)));\n } else {\n console.error('profile image not found');\n }\n })\n .catch((err) => {\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching profile image',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchSaveProfileImage = history => (\n (dispatch, getState) => {\n let profileImage = { ...getState().register.profileImage };\n const url = '/v1/profile/update/profileImage'; \n \n dispatch(showSpinner());\n return fetch(url, postReqFormData(profileImage))\n .then(evaluateResponseBufferWithErrorMessage)\n .then((response) => {\n const profile_image = response;\n if(profile_image) {\n dispatch(hideSpinner());\n dispatch(receivedProfileImage('data:image/png;base64,'+arrayBufferToBase64(profile_image)));\n } else {\n console.error('profile image not found');\n }\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching profile image',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchAllScopes = history => (\n (dispatch) => {\n const scopeUrl = '/v1/scope';\n return fetch(scopeUrl, getReq())\n .then((response) => evaluateResponseWithErrorMessage(response, true, history, dispatch))\n .then((response) => {\n if (response) {\n let scopes = [];\n response.scopes.map(scope => (\n scopes[scope.id] = scope\n ));\n dispatch(receiveScopes(scopes));\n } else {\n console.error('error Fetching data');\n }\n })\n .catch((err) => {\n console.error('error Fetching data', err);\n });\n }\n);\n\nexport const fetchGetProject = projectId => (\n (dispatch) => {\n const projectURL = '/v1/project?id=' + projectId;\n return fetch(projectURL, getReq())\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n if (response) {\n dispatch(receiveProject(response));\n } else {\n console.error('project not found');\n }\n })\n .catch((err) => {\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching project',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nconst buildScopeURL = function(projectScopes, isSelect = false) {\n let url ='';\n for(let i = 0; i < projectScopes.length; i++){\n const projectScope = projectScopes[i];\n if(!isSelect || (isSelect && projectScope.providerId && projectScope.providerDisplayName)) {\n const jsonString = JSON.stringify(projectScope);\n url += '&scope=' + jsonString; \n }\n }\n return url;\n}\n\nconst buildProjectUrl = function(project) {\n var url = '';\n url += 'title=' + project.title;\n url += '&budgetMax=' + project.budgetMax;\n url += '&budgetMin=' + project.budgetMin;\n url += '&date=' + Date.now();\n url += '&endBiddingDate=' + new Date(project.endBiddingDate).getTime();\n url += '&expectStartDate=' + new Date(project.startDate).getTime();\n url += '&startTime=' + project.startTime;\n url += '&endTime=' + project.endTime;\n url += '&sun=' + project.sun;\n url += '&mon=' + project.mon;\n url += '&tue=' + project.tue;\n url += '&wed=' + project.wed;\n url += '&thu=' + project.thu;\n url += '&fri=' + project.fri;\n url += '&sat=' + project.sat;\n url += '&emergency=' + project.emergency;\n url += '&company=' + project.company;\n url += '&license=' + project.license;\n url += '&insurance=' + project.insurance;\n url += '&supportingInfo=' + project.supportingInfo;\n url += '&zipcode=' + project.zipcode;\n if(project.id) {\n url += '&id=' + project.id;\n }\n url += buildScopeURL(project.scopes);\n\n return url;\n}\n\nexport const fetchSaveProject = history => (\n (dispatch, getState) => {\n let project = { ...getState().ee.project };\n //TODO: use post with data(not using params)\n\n // validateTitle();\n\t\t// validateWorkDay();\n\t\t// validateScope();\n\t\t// var url = buildProjectUrl(project);\n // const saveProjectURL = '/v1/project/save?' + url; \n const saveProjectURL = '/v1/project/save'; \n delete project.blocked;\n delete project.owner;\n delete project.offers;\n delete project.proposals;\n delete project.providerList;\n delete project.reviews;\n delete project.customScope;\n delete project.createdDate;\n delete project.updatedDate;\n delete project.day;\n delete project.proposalCount;\n delete project.scopeCount;\n\n dispatch(showSpinner());\n return fetch(saveProjectURL, postReq(project))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n const projectTitle = response.title;\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: `Project \"${projectTitle}\" is saved.`,\n type: toast.TYPE.SUCCESS,\n }));\n history.push(`/project/${response.projectId}`);\n })\n .catch((err) => {\n dispatch(hideSpinner());\n console.error(err);\n });\n }\n);\n\nexport const fetchRemoveProject = (projectId, history) => (\n (dispatch, getState) => {\n let user = { ...getState().ee.user };\n let removeProjectURL;\n if(user.userType === 'c' || user.userType === 'a') {\n removeProjectURL = '/v1/project/archive?id=' + projectId;\n } else {\n removeProjectURL = '/v1/project/delete?id=' + projectId; \n }\n\n dispatch(showSpinner());\n return fetch(removeProjectURL, postReq({}))\n .then(evaluateResponseNoJsonWithErrorMessage)\n .then((json) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: `Project ${projectId} is removed.`,\n type: toast.TYPE.SUCCESS,\n }));\n history.push('/dashboard');\n })\n .catch((err) => {\n dispatch(hideSpinner());\n console.error(err);\n });\n }\n);\n\nexport const fetchCloseProject = (projectId, history) => (\n (dispatch, getState) => {\n let user = { ...getState().ee.user };\n if(user.userType === 'c' || user.userType === 'a') {\n const projectURL = '/v1/project/close?id=' + projectId;\n dispatch(showSpinner());\n return fetch(projectURL, postReq({}))\n .then(evaluateResponseNoJsonWithErrorMessage)\n .then((response) => {\n if (response) {\n const project = response;\n dispatch(receiveProject(project));\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: `Project ${projectId} is closed.`,\n type: toast.TYPE.SUCCESS,\n }));\n history.push(`/project/${response.project.id}`);\n } else {\n console.error('project not found');\n }\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching project',\n type: toast.TYPE.ERROR\n }));\n });\n\n } else {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: `Erro Project ${projectId} removing.`,\n type: toast.TYPE.ERROR,\n }));\n }\n } \n);\n\nexport const fetchRemoveProposal = (proposalId) => (\n (dispatch, getState) => {\n let removeProposalURL = '/v1/proposal/delete?id=' + proposalId;\n dispatch(showSpinner());\n return fetch(removeProposalURL, postReq({}))\n .then(evaluateResponseNoJsonWithErrorMessage)\n .then((json) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: `Proposal ${proposalId} is removed.`,\n type: toast.TYPE.SUCCESS,\n }));\n })\n .catch((err) => {\n console.error(err);\n });\n }\n);\n\nexport const fetchSelect = (proposalId, projectId, providerId, scopes) => (\n (dispatch, getState) => {\n let user = { ...getState().ee.user };\n const scopeIds = scopes.map(scope => (scope.scopeId))\n let removeProposalURL = '/v1/project/select/' + proposalId;\n const data = {\n scopes: scopeIds,\n projectId: projectId,\n providerId: providerId\n };\n dispatch(showSpinner());\n return fetch(removeProposalURL, postReq(data))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(hideSpinner());\n dispatch(selectSaved(response));\n dispatch(updateNotification({\n display: true, \n text: `${proposalId} is selected.`,\n type: toast.TYPE.SUCCESS,\n }));\n // history.push(`/project/${response.project.id}`);\n })\n .catch((err) => {\n console.error(err);\n });\n }\n);\n\nexport const SIMPLE_DAY_DATE_FORMAT = 'YYYYMMDD';\nexport const SIMPLE_DAY_DATE_FORMAT_REGISTER = 'YYYY-MM-DD';\n\nvar buildSaveReviewUrl = (review) => {\n var url = '';\n url += 'projectId=' + review.projectId;\n url += '&providerId=' + review.providerId;\n url += '&status=' + review.status;\n url += '&recommend=' + review.recommend;\n url += '&responsiveness=' + review.responsiveness;\n url += '&quality=' + review.quality;\n url += '&professionalism=' + review.professionalism;\n url += '&subjectMatterExpertise=' + review.subjectMatterExpertise;\n url += '&adherenceToCost=' + review.adherenceToCost;\n url += '&adherenceToSchedule=' + review.adherenceToSchedule;\n url += '&comments=' + review.comment;\n\n return url;\n}\n\nexport const fetchGetProposal = projectId => (\n (dispatch) => {\n const proposalURL = '/v1/proposal/get?pid=' + projectId;\n return fetch(proposalURL, getReq())\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n if (response) {\n dispatch(receiveProposal(response));\n } else {\n console.error('proposal not found');\n }\n })\n .catch((err) => {\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching proposal',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchGetQuickOffer = projectId => (\n (dispatch) => {\n const proposalURL = '/v1/proposal/quickoffer?pid=' + projectId;\n return fetch(proposalURL, getReq())\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n if (response) {\n dispatch(receiveQuickOffer(response.offer));\n } else {\n console.error('quickOffer not found');\n }\n })\n .catch((err) => {\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching quickOffer',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchAcceptOffer = quickOfferlId => (\n (dispatch, getState) => {\n const user = { ...getState().ee.user };\n // const quickOffer = { ...getState().ee.quickOffer };\n const acceptOfferlURL = '/v1/proposal/quickoffer/accept?id=' + quickOfferlId;\n const requestData = { \n userId: user.id,\n quickOfferId: quickOfferlId,\n };\n dispatch(showSpinner());\n return fetch(acceptOfferlURL, postReq({}))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: `You accepted the Offer ID ${quickOfferlId}`,\n type: toast.TYPE.SUCCESS,\n }));\n })\n .catch((err) => {\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching quickOffer',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\n\nconst getProposalScope = selectedScopes => {\n const proposalScopes = selectedScopes.map((selected) => {\n return {\n proposalId: selected.proposalId,\n scopeId: selected.scopeId,\n type: selected.type,\n key: selected.key, \n description: selected.description,\n costTotal: selected.scopeTotalCost,\n hour: selected.hour,\n unit: selected.unit,\n material: selected.material,\n comment: selected.comment,\n }\n })\n return proposalScopes;\n}\n\nexport const fetchSaveProposal = history => (\n (dispatch, getState) => {\n const proposal = { ...getState().view.proposal };\n const project = { ...getState().view.project };\n let proposalId;\n if (proposal.id) {\n proposalId = proposal.id;\n }\n if(proposal.proposalId) {\n proposalId = proposal.proposalId;\n }\n \n const expectStartDate = moment(proposal.startDate).format(SIMPLE_DAY_DATE_FORMAT)\n let requestData = {\n projectId: project.id,\n expectStartDate: expectStartDate,\n expectTime: proposal.expectTime,\n comment: proposal.comment,\n scopes: getProposalScope(proposal.selectedScopes),\n }\n if (proposalId) {\n requestData = {\n ...requestData,\n id: proposalId,\n }\n }\n \n const saveProposalURL = '/v1/proposal/save';\n dispatch(showSpinner());\n return fetch(saveProposalURL, postReq(requestData))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: `Proposal is saved.`,\n type: toast.TYPE.SUCCESS,\n }));\n dispatch(receiveProposal(response));\n // history.push('/editProposal/${response.project.id}');\n // history.push(`/project/${response.project.id}`);\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching proposal',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchSaveQuickOffer = (history, projectId) => (\n (dispatch, getState) => {\n let quickOffer = { \n ...getState().ee.quickOffer,\n projectId: projectId,\n providerId: getState().ee.user.id,\n providerDisplayName: getState().ee.user.userDisplayName,\n company: getState().ee.user.company\n };\n delete quickOffer.update;\n // var requestData = {\n // 'name' : newUser.company.name,\n // 'registeredAt' : newUser.company.registeredAt,\n // 'companyId' : newUser.company.companyId\n // };\n\n const saveQuickOfferyURL = '/v1/proposal/quickoffer';\n dispatch(showSpinner());\n return fetch(saveQuickOfferyURL, postReq(quickOffer))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n extendUserCookieExpiry();\n dispatch(updateUserCompany(response.quickOffer))\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'QuickOffer Saved.',\n type: toast.TYPE.SUCCESS,\n }));\n history.push('/dashboard'); \n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching QuickOffer',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchSaveSelectScopes = projectId => (\n (dispatch, getState) => {\n let project = { ...getState().ee.project };\n var url = buildScopeURL(project.scopes, true);\n const selectScopesURL = `/v1/project/select?projectId=${project.id}${url}`;\n dispatch(showSpinner());\n return fetch(selectScopesURL, postReq({}))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(updateNotification({\n display: true,\n text: `Scope is selected.`,\n type: toast.TYPE.SUCCESS,\n }));\n // dispatch(receiveProjectProject(response));\n dispatch(receiveProject(response));\n dispatch(receiveProposal(response.proposals));\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching selection',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchSaveReview = (history) => (\n (dispatch, getState) => {\n let review = { ...getState().ee.review };\n var url = buildSaveReviewUrl(review);\n const saveReviewURL = '/v1/review?';\n delete review.status;\n dispatch(showSpinner());\n return fetch(saveReviewURL, postReq(review))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: `Review is saved.`,\n type: toast.TYPE.SUCCESS,\n }));\n // dispatch(receiveProject(response));\n history.push(`/project/${review.projectId}`);\n //redirect to project\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching review',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchSaveRegisterNewUser = history => (\n (dispatch, getState) => {\n let newUser = { ...getState().register};\n const requestData = {\n 'firstName' : newUser.firstName,\n 'lastName' : newUser.lastName,\n 'displayName' : newUser.displayName,\n 'email' : newUser.email,\n 'password' : newUser.password,\n 'verifyPassword' : newUser.verifyPassword,\n 'type' : newUser.type\n };\n const saveRegisterURL = '/v1/register';\n dispatch(showSpinner());\n return fetch(saveRegisterURL, postReq(requestData))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n extendCookieExpiry(response.u);\n dispatch(receiveUser(response));\n dispatch(hideSpinner());\n if(response.userType === 'c') {\n dispatch(updateNotification({\n display: true,\n text: `Welcome, ${response.userDisplayName}! Start with the new project`,\n type: toast.TYPE.SUCCESS,\n }));\n history.push('/editProject/new'); \n } else if(response.userType === 'p1') {\n dispatch(updateStep(1));\n dispatch(updateNotification({\n display: true,\n text: `Welcome, ${response.userDisplayName}!`,\n type: toast.TYPE.SUCCESS,\n }));\n }\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: err.message,\n type: toast.TYPE.ERROR\n }));\n });\n }\n)\n \nconst savePassword = (url, requestData, dispatch) => {\n return fetch(url, postReq(requestData))\n .then(evaluateResponseNoJsonWithErrorMessage)\n .then((response) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Saved.',\n type: toast.TYPE.SUCCESS,\n }));\n dispatch(initUpdatePassword());\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching password updated',\n type: toast.TYPE.ERROR\n }));\n }); \n\n}\n\nexport const fetchUpdatePassword = password => (\n (dispatch, getState) => {\n let password = { ...getState().setting.password};\n var requestData = {\n 'currentPassword': password.currentPassword,\n 'newPassword': password.newPassword,\n 'verifyNewPassword': password.verifyNewPassword\n };\n \n const updatePasswordURL = '/v1/account/pw';\n return savePassword(updatePasswordURL, requestData, dispatch);\n }\n);\n\nexport const fetchVerify = (token, queryStr) => (dispatch, getState) => {\n const queryParams = queryToArray(queryStr)\n const requestData = {\n 'email': queryParams.email,\n 'code': queryParams.c,\n 'url': window.location.origin,\n }\n const url = '/v1/password/rs/' + token\n return fetch(url, postReq(requestData))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n window.location = `/resetPassword/${response.token}?email=${queryParams.email}`;\n })\n .catch((err) => {\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching reset password',\n type: toast.TYPE.ERROR\n }));\n }); \n};\n\nexport const fetchResetPassword = password => (\n (dispatch, getState) => {\n const password = { ...getState().setting.password};\n const requestData = {\n 'email': password.email,\n 'newPassword': password.newPassword,\n 'verifyNewPassword': password.verifyNewPassword\n }\n const url = `/v1/password/update/${password.token}/`;\n return savePassword(url, requestData, dispatch);\n }\n);\n\nexport const fetchSaveRegisterProviderTypeAndAgreement = register => (\n (dispatch, getState) => {\n let newUser = { ...getState().register};\n var requestData = {\n 'type' : newUser.providerType,\n 'termsOfUse' : newUser.agreement.termsOfUse,\n 'termsOfUseProvider' : newUser.agreement.termsOfUseProvider,\n 'codeOfEthics' : newUser.agreement.codeOfEthics\n };\n \n const saveRegisterURL = '/v1/register/provider/typeAgreement';\n dispatch(showSpinner());\n return fetch(saveRegisterURL, postReq(requestData))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n extendUserCookieExpiry();\n dispatch(updateUserType(response.userType)); \n dispatch(updateStep(2));\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Saved.',\n type: toast.TYPE.SUCCESS,\n }));\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching register',\n type: toast.TYPE.ERROR\n }));\n }); \n }\n);\n\nexport const fetchSaveRegisterProfile = history => (\n (dispatch, getState) => {\n let register = { ...getState().register};\n //phone, address, company, workzone\n const license = {\n ...register.license,\n issuedAt: moment(register.license.issuedAt).format(SIMPLE_DAY_DATE_FORMAT_REGISTER),\n }\n const requestData = {\n 'address' : register.address.address,\n 'city' : register.address.city,\n 'stateProvince' : register.address.stateProvince,\n 'zipcode' : register.address.zipcode,\n 'phone' : register.phone,\n 'companyId' : register.company.companyId,\n 'companyName' : register.company.name,\n 'companyRegisteredAt' : moment(register.company.registeredAt).format(SIMPLE_DAY_DATE_FORMAT_REGISTER),\n 'license' : license,\n 'website' : register.website,\n 'rate': register.rate,\n };\n\n const saveRegisterURL = '/v1/register/provider/detail';\n dispatch(showSpinner());\n return fetch(saveRegisterURL, postReq(requestData))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n extendUserCookieExpiry();\n dispatch(updateUserType(response.userType)); \n dispatch(updateStep(3));\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Saved.',\n type: toast.TYPE.SUCCESS,\n }));\n history.push('/dashboard');\n })\n\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching register',\n type: toast.TYPE.ERROR\n }));\n }); \n }\n);\n\nexport const fetchSaveCompany = history => (\n (dispatch, getState) => {\n let newUser = { ...getState().register};\n var requestData = {\n 'name' : newUser.company.name,\n // Date-only strings (e.g. \"1970-01-01\") are treated as UTC, while date-time strings (e.g. \"1970-01-01T12:00\") are treated as local.\n 'registeredAt' : new Date(newUser.company.registeredAt + \"T12:00\"),\n 'companyId' : newUser.company.companyId\n };\n\n const saveCompanyURL = '/v1/profile/update/company';\n dispatch(showSpinner());\n return fetch(saveCompanyURL, postReq(requestData))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n extendUserCookieExpiry();\n dispatch(updateUserCompany(response))\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Company Saved.',\n type: toast.TYPE.SUCCESS,\n }));\n history.push('/dashboard'); //TODO: add insurance page and move there\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching register',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchSaveLicense = company => (\n (dispatch, getState) => {\n let register = { ...getState().register};\n const requestData = {\n ...register.license,\n // Date-only strings (e.g. \"1970-01-01\") are treated as UTC, while date-time strings (e.g. \"1970-01-01T12:00\") are treated as local.\n issuedAt: new Date(register.license.issuedAt + \"T12:00\"),\n };\n delete requestData.userId; // to avoid UnrecognizedPropertyException: Unrecognized field \"userId\" (class com.eelectricians.request.LicenseRequest)\n const saveLicenseURL = '/v1/profile/update/license';\n dispatch(showSpinner());\n return fetch(saveLicenseURL, postReq(requestData))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n // POST /v1/update/license returns a **list** of the updated license(s) of the user if succeeded,\n // as of Jan 26th 2023, we assume a user has only one license.\n // no change made for the API but here we try to get only the first element of the array\n const updatedLicense = !Array.isArray(response.license) ? response.license : response.license[0];\n\n extendUserCookieExpiry();\n dispatch(updateUserLicense(updatedLicense))\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'License Saved.',\n type: toast.TYPE.SUCCESS,\n }));\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching register',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchProfile = history => (\n (dispatch) => {\n const profileURL = '/v1/register/profile';\n return fetch(profileURL, getReq())\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n extendUserCookieExpiry();\n const profile = response;\n dispatch(hideSpinner());\n dispatch(receivedProfile(profile))\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching profile',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchUpdateAddress = history => ( \n (dispatch, getState) => {\n let address = { ...getState().register.address};\n delete address.userId;\n delete address.date;\n const updateAddressURL = '/v1/profile/update/address';\n dispatch(showSpinner());\n return fetch(updateAddressURL, postReq(address))\n .then(evaluateResponseNoJsonWithErrorMessage)\n .then(() => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Saved Address',\n type: toast.TYPE.SUCCESS,\n })); \n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error saving address',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchUpdatePhone = history => ( \n (dispatch, getState) => {\n const register = { ...getState().register};\n const updatePhoneURL = `/v1/profile/update/phone?phone=${register.phone}`;\n dispatch(showSpinner());\n return fetch(updatePhoneURL, postReq({}))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(hideSpinner());\n dispatch(receivedPhone(response.phone));\n dispatch(updateNotification({\n display: true,\n text: 'Saved phone',\n type: toast.TYPE.SUCCESS,\n })); \n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error saving phone',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchGetActivationStatus = company => (\n (dispatch) => {\n const profileURL = '/v1/account/activation/status';\n return fetch(profileURL, getReq())\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n const activation = response;\n dispatch(hideSpinner());\n dispatch(updateAccountActivation(activation))\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching get account activation status',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\n\nexport const fetchGetNotificationSettingStatus = () => (\n (dispatch) => {\n const profileURL = '/v1/account/notification/get';\n return fetch(profileURL, getReq())\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n const notification = response;\n dispatch(hideSpinner());\n dispatch(updateNotificationSetting(notification))\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching get account activation status',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchSaveNotificationSetting = () => (\n (dispatch, getState) => {\n let setting = { ...getState().setting};\n const notificationSetting = setting.notificationSetting;\n const saveAccountActivationURL = '/v1/account/notification'\n dispatch(showSpinner());\n return fetch(saveAccountActivationURL, postReq(notificationSetting))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n const notification = response;\n dispatch(hideSpinner());\n dispatch(updateNotificationSetting(notification))\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Saved.',\n type: toast.TYPE.WARNING,\n })); \n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching register',\n type: toast.TYPE.ERROR\n }));\n });\n }\n)\n\nexport const fetchSaveAccountActivation = type => (\n (dispatch, getState) => {\n let setting = { ...getState().setting};\n const type = setting.accountActivation.action || type;\n const saveAccountActivationURL = '/v1/account/activation?type=' + type\n dispatch(showSpinner());\n return fetch(saveAccountActivationURL, postReq({}))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(updateAccountActivation(response))\n if(response.message) {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: response.message,\n type: toast.TYPE.WARNING,\n })); \n } else {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Account Activation Updated. (Cannot change your status in 24 hours)',\n type: toast.TYPE.SUCCESS,\n })); \n }\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Error Fetching register',\n type: toast.TYPE.ERROR\n }));\n });\n }\n);\n\nexport const fetchContactSendRequest = history => (\n (dispatch, getState) => {\n const contact = { ...getState().view.contact};\n const requestContactUs = '/v1/help/contact'\n dispatch(showSpinner());\n return fetch(requestContactUs, postReq(contact))\n .then((response) => evaluateResponseWithErrorMessage(response, false, history, dispatch))\n .then((response) => {\n // dispatch(updateAccountActivation(response))\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Successfully requested! We will reach out you soon!',\n type: toast.TYPE.SUCCESS,\n }));\n dispatch(initContact());\n })\n .catch((err) => {\n dispatch(hideSpinner());\n if(!err.includes(\"UER NOT FOUND\")) {\n dispatch(updateNotification({\n display: true, \n text: 'Error fetching',\n type: toast.TYPE.ERROR\n })); \n }\n });\n }\n);\n\n//TODO: extend Cookie Expiry in response evaluator....\nconst extendCookieExpiry = function(cookieValue) {\n const now = new Date();\n const expiresValue = new Date(now);\n expiresValue.setMinutes(now.getMinutes() + 60);\n cookies.set('u', cookieValue, { path: '/' });\n}\n\nconst extendUserCookieExpiry = function() {\n const now = new Date();\n const expiresValue = new Date(now);\n expiresValue.setMinutes(now.getMinutes() + 60);\n const uValue = cookies.get('u');\n cookies.set('u', uValue, { path: '/' });\n}\n\nconst processLogin = function(user) {\n if(user.userType !== 's') {\n extendCookieExpiry(user.u);\n // checkProfileProgress(data.step);\n // $scope.verified = data.verified || false;\n }\n};\n\nexport const login = history => (\n (dispatch, getState) => {\n let login = { ...getState().view.login };\n // login.url = 'localhost:8080/home';\n const loginURL = '/v1/home';\n dispatch(showSpinner());\n return fetch(loginURL, postReq(login))\n .then(evaluateResponseWithErrorMessage)\n .then((json) => {\n if (json) {\n const user = json;\n processLogin(user);\n dispatch(receiveUser(user));\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'Logged in successfully.',\n type: toast.TYPE.SUCCESS\n }));\n push('/dashboard');\n } else {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'We cannot find your information',\n type: toast.TYPE.ERROR,\n }));\n\n throw new Error('User not found');\n }\n })\n .catch((err) => {\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true, \n text: 'We cannot find your information',\n type: toast.TYPE.ERROR,\n }));\n console.error(err);\n });\n }\n);\n\nexport const fetchResetPasswordRequest = history => (\n (dispatch, getState) => {\n let view = { ...getState().view };\n let resetEmail= view.resetEmail;\n\t\tconst requestData = {\n 'email' : resetEmail,\n 'url': window.location.href,\n };\n const url = '/v1/password/rs';\n return fetch(url, postReq(requestData))\n .then(evaluateResponseWithErrorMessage)\n .then((json) => {\n if (json) {\n dispatch(updateNotification({\n display: true, \n text: `Sent a reset password information to ${resetEmail}`,\n type: toast.TYPE.SUCCESS\n }));\n dispatch(ableLoginLink());\n } else {\n dispatch(updateNotification({\n display: true, \n text: 'Something is wrong. Try again',\n type: toast.TYPE.ERROR,\n }));\n }\n })\n .catch((err) => {\n console.error(err);\n });\n }\n);\n\nexport const logout = history => (\n (dispatch) => {\n dispatch(receivedLogoutRequest);\n cookies.remove('u', { path: '/' });\n history.push(\"/\");\n window.location.reload();\n }\n);\n\nconst buildSendMessageUrl = function (message) {\n var url = '';\n url += 'toId=' + message.replyId;\n url += '&text=' + message.text;\n if (message.projectId && message.projectId != undefined) {\n url += '&projectId=' + message.projectId;\n }\n if (message.userActionId && message.userActionId != undefined) {\n url += '&uid=' + message.userActionId;\n }\n return url;\n}\n\nexport const fetchSendMessage = (message, history) => (\n (dispatch, getState) => {\n let message = { ...getState().view.message };\n if(message.replyDisplay && message.replyId) {\n const sendMessageUrl = '/v1/um?' + buildSendMessageUrl(message);\n return fetch(sendMessageUrl, postReq({}))\n .then(evaluateResponseWithErrorMessage)\n .then((json) => {\n dispatch(enableMessageSubmit())\n dispatch(closeMessaegDialog());\n dispatch(updateNotification({\n display: true,\n text: `message is sent to ${message.replyDisplay});`,\n type: toast.TYPE.SUCCESS,\n }));\n push('/dashboard');\n })\n .catch((err) => {\n console.error(err);\n });\n } else {\n dispatch(updateNotification({\n display: true,\n text: 'Please specify a recipient',\n type: toast.TYPE.ERROR,\n }));\n }\n }\n);\n\nexport const fetchDeleteMessage = (messageId, history) => (\n (dispatch, getState) => {\n const sendMessageUrl = `/v1/um/delete?id=${messageId}`;\n return fetch(sendMessageUrl, postReq({}))\n .then(evaluateResponseNoJsonWithErrorMessage)\n .then(() => {\n dispatch(closeMessaegDialog());\n dispatch(updateNotification({\n display: true,\n text: 'removed message successfully.',\n type: toast.TYPE.SUCCESS,\n }));\n push('/dashboard');\n })\n .catch((err) => {\n console.error(err);\n });\n }\n);\n\nexport const fetchDeleteUserAction = (userActionId, history) => (\n (dispatch, getState) => {\n const sendMessageUrl = `/v1/useraction/delete?id=${userActionId}`;\n dispatch(showSpinner());\n return fetch(sendMessageUrl, postReq({}))\n .then(evaluateResponseNoJsonWithErrorMessage)\n .then(() => {\n dispatch(closeMessaegDialog());\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'removed notification successfully.',\n type: toast.TYPE.SUCCESS,\n }));\n push('/dashboard');\n })\n .catch((err) => {\n dispatch(hideSpinner());\n console.error(err);\n });\n } \n);\n\nexport const fetchSaveWorkZone = history => (\n (dispatch, getState) => {\n const workzone = { ...getState().register.workzone };\n let NYWorkZone = [];\n let NJWorkZone = [];\n if(workzone['NY']) {\n NYWorkZone = workzone['NY'].map((county) => {\n return {\n state: 'NY',\n county: county.value,\n };\n }) \n }\n if(workzone['NJ']) {\n NJWorkZone = workzone['NJ'].map((county) => {\n return {\n state: 'NJ',\n county: county.value,\n };\n })\n }\n const workZoneRequestData = NYWorkZone.concat(NJWorkZone);\n const workZoneURL = '/v1/profile/update/workzonelist';\n dispatch(showSpinner());\n return fetch(workZoneURL, postReq(workZoneRequestData))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n //TODO: dispatch workzone\n dispatch(receivedWorkZone(response))\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Saved Work Zone.',\n type: toast.TYPE.SUCCESS,\n }));\n })\n .catch((err) => {\n dispatch(hideSpinner());\n console.error(err);\n });\n } \n);\n\nexport const fetchWorkZone = history => (\n (dispatch, getState) => {\n const workZoneURL = '/v1/profile/update/workzonelist';\n return fetch(workZoneURL, getReq({}))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(receivedWorkZone(response))\n dispatch(updateNotification({\n display: true,\n text: 'Saved Work Zone.',\n type: toast.TYPE.SUCCESS,\n }));\n })\n .catch((err) => {\n console.error(err);\n });\n } \n);\n\nexport const fetchSaveWorkHour = history => (\n (dispatch, getState) => {\n let workhour = { ...getState().register.workHour };\n delete workhour.id;\n delete workhour.userId;\n delete workhour.date;\n const workHourURL = '/v1/profile/update/workhour';\n dispatch(showSpinner());\n return fetch(workHourURL, postReq(workhour))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(receivedWorkHour(response))\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Saved Work Hour.',\n type: toast.TYPE.SUCCESS,\n }));\n })\n .catch((err) => {\n dispatch(hideSpinner());\n console.error(err);\n });\n }\n);\n\nexport const fetchRemoveWorkHour = day => (\n (dispatch) => {\n const requestData = {\n day: day,\n };\n const workHourURL = '/v1/profile/delete/workhour';\n return fetch(workHourURL, postReq(requestData))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(receivedWorkHour(response))\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Updated Work Hour.',\n type: toast.TYPE.SUCCESS,\n }));\n })\n .catch((err) => {\n dispatch(hideSpinner());\n console.error(err);\n });\n }\n);\n\nexport const saveUserHourlyRate = history => (\n (dispatch, getState) => {\n let userRate = {\n rate: getState().register.rate,\n }\n const saveUserHourlyRateURL = '/v1/profile/update/rate';\n return fetch(saveUserHourlyRateURL, postReq(userRate))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n dispatch(receivedHourlyRate(response.rate))\n dispatch(hideSpinner());\n dispatch(updateNotification({\n display: true,\n text: 'Updated Hourly Rate.',\n type: toast.TYPE.SUCCESS,\n }));\n })\n .catch((err) => {\n dispatch(hideSpinner());\n });\n }\n);\n\nexport const fetchSearch = keyword => (\n (dispatch, getState) => {\n const search = getState().search.searchValue;\n let input = keyword || search;\n const searchURL = '/v1/search/provider?input=' + input;\n return fetch(searchURL, getReq(input))\n .then(evaluateResponseWithErrorMessage)\n .then((response) => {\n if (response) {\n dispatch(receivedSearchProviderResult(response));\n // history.push('/search/'+ input);\n } else {\n console.error('provider not found');\n }\n })\n .catch((err) => {\n dispatch(hideSpinner());\n console.error(err);\n });\n }\n)\n\nexport const receivedSearchProviderResult = searchResponse => ({\n type: types.RECEIVED_SEARCH_PROVIDER_RESULT, searchResponse,\n})\n\n\n// \t$scope.resetPassword = function() {\n// var errorMessageData = [];\n// \t\t$http.defaults.headers.post['Content-Type'] = 'application/json;';\n// \t\tvar requestData = {\n// \t\t 'email' : $scope.email,\n// 'url' : $window.location.origin,\n// };\n// $http({\n// method: 'GET',\n// url: '/v1/password/rs',\n// data: JSON.stringify(requestData)\n// }).then(function successCallback(response) {\n// var messageData = [];\n// messageData.type = \"success\";\n// messageData.message = \"Sent a reset password information to \" + $scope.email;\n// $rootScope.$broadcast('alertMessage', messageData);\n// // $location.path('/login');\n// }, function errorCallback(response) {\n// sendErrorMessage(response.data);\n// });\n// \t}\n\n// var sendErrorMessage = function(error) {\n// var errorMessageData = [];\n// errorMessageData.type = 'warning';\n// errorMessageData.message = 'Server is not responding. Try again!';\n// errorMessageData.console = error;\n// $rootScope.$broadcast('alertMessage', errorMessageData);\n// }\n","import React from 'react';\n\nconst SearchIconSvg = () => (\n \n);\n\nexport default SearchIconSvg;","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport Navbar from 'react-bootstrap/Navbar'\nimport Nav from 'react-bootstrap/Nav'\nimport NavDropdown from 'react-bootstrap/NavDropdown'\nimport EmailIcon from '@material-ui/icons/Email';\nimport IconButton from '@material-ui/core/IconButton';\nimport Form from 'react-bootstrap/Form';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport { updateSearchValue } from '../actions/view'\n\nimport { logout, fetchSearch } from '../actions/api';\nimport SearchIconSvg from '../icons/SearchSvg';\n\nconst mapStateToProps = (state, ownProps) => ({\n user : state.ee.user,\n searchValue: state.search.searchValue,\n history: ownProps.history,\n location: ownProps\n});\n\nconst mapDispatchToProps = dispatch => ({\n logoutProcess: (history) => {\n dispatch(logout(history));\n },\n updateSearch: (value) => {\n dispatch(updateSearchValue(value));\n },\n handleSearchSubmit: (history) => {\n dispatch(fetchSearch(history));\n }\n});\n\n\nclass TopNavContainer extends Component {\n render() {\n const { user, searchValue, history } = this.props;\n const registerStep = this.props.register && this.props.register.registerStep || this.props.user.step;\n const showCompleteProfile = (user.userType !== 'c' && user.userType !== 's') && registerStep < 3;\n const publicPath = `/public/${user.id}`;\n const searchPath = `/search/${searchValue}`;\n\n return (\n
\n \n GetElectrician\n \n Beta\n \n \n \n \n \n
\n {user.userType === 's' && Register}\n {user.userType === 's' && Sign in}\n {user.userType === 'a' && Admin}\n {user.userType !== 's' && \n \n \n \n } \n {user.userType !== 's' && \n \n Account Activation\n Notification Setting\n Update Password\n Update Profile\n { showCompleteProfile && Complete Profile}\n {(user.userType !== 'c' && user.userType !== 's') && My Public Profile} \n \n { this.props.logoutProcess(this.props.history) }}>Log out\n \n }\n
\n
\n
\n
\n )\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(TopNavContainer);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport Link from '@material-ui/core/Link';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n // maxWidth: '425px',\n // paddingBottom: '30px'\n color: 'white',\n boxShadow: 'none',\n textTransform: 'none',\n fontSize: 16,\n padding: '6px 12px',\n border: '1px solid',\n lineHeight: 1.5,\n backgroundColor: '#468847',\n borderColor: '#0063cc',\n width: '180px',\n marginRight: '16px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n narrow: {\n width: 200,\n },\n margin20: {\n marginBottom: '20px',\n },\n smallText: {\n fontSize: '12px',\n lineHeight: '1.6',\n }\n});\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user : state.view.user,\n history: ownProps.history,\n }\n};\n\nclass AboutUsContainer extends Component {\n componentDidUpdate() {\n const { user } = this.props;\n }\n\n render() {\n const { user, history, classes } = this.props;\n return (\n
\n
\n
\n

About US

\n
\n

Over Two Decades of Experience

\n Over two decades of experience, serving customers all over 5 boroughs of New York City, Long Island, New Jersey and Connecticut \n\n

Service like no other

\n As Electrical Services Marketplace, with GetElectrician.com customers can post their electrical job on our portal, and with a click of a button receive proposals directly from Electrical providers servicing their areas. Customers can then obtain more information by going back and forth using our state-of-the-art platform, select final electrical provider, have electrical provider complete the job and lastly provide ratings of service provided to help other customers in the future\n onResetClick(history)}\n className={clsx(classes.wide, 'flex')}>\n HOW IT WORKS \n \n\n

Customer Satisfaction is Our Goal

\n Our focus is to ensure our customer’s satisfaction. We welcome all feedback which we use to continuously improve our service \n\n

Constant Improvements

\n At GetElectrician.com, we constantly make improvements to services we provide based on feedback received from our customers. No matter how small the feedback, we always take it very seriously and welcome all feedback. \n onResetClick(history)}\n className={clsx(classes.wide, 'flex')}>\n Help and Support\n \n\n
\n \n
\n
\n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n null,\n)(withStyles(styles)(AboutUsContainer));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport Link from '@material-ui/core/Link';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user : state.view.user,\n history: ownProps.history,\n }\n};\n\n// const mapDispatchToProps = dispatch => ({\n// });\n\nclass HowItWorksContainer extends Component {\n componentDidUpdate() {\n const { user } = this.props;\n }\n\n render() {\n return (\n
\n
\n
\n

GetElectrician and COVID-19

\n
\n

Staying safe during coronavirus while hiring electrical providers

\n It is more important than ever to ensure safety during the worse pandemic that hit our nation and the globe. Your home still requires improvements / fixes, and safety is our goal, and with safety in mind, we have been educating our electrical service providers on the best methods to ensure everyone’s safety while performing electrical related jobs. \n Listed below are steps we have taken to ensure safest experience for both customers and electrical providers. \n \n We have created additional section on electrical providers’ profile allowing electrical providers to list specific steps and precautions they are taking to ensure safety. This includes wearing protective gear, such as mouth and nose covering when around others, gloves, shoes coverings etc. \n \n \n We have provided an ability for our customers to specify additional requirements they may have related to coronavirus pandemic such as contact – less interaction as possible with electrical provider, cashless payments using payment applications such as Wenmo, paypal, etc, \n \n \n We encouraged customers and electrical providers to use technology to minimize contact such as provide additional pictures via our portal or via text video messaging to ensure most effective and smooth communication. \n \n \n We have asked both customers and electrical providers to sanitize before and after work as much as possible in accordance with Center for Disease Control and Prevention (CDC Guidance). \n \n We have asked both customers and electrical providers to monitor your health daily and be alert of symptoms. Should any of the symptoms be present, we ask both customers and electrical providers to postpone the service appointment until later time. \n \n \n We are constantly providing guidance to both electrical providers and customers related to best practices as listed on Centers for Disease Control and Prevention CDC Guidance).\n \n
\n
\n
\n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n null,\n)(HowItWorksContainer);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user : state.view.user,\n history: ownProps.history,\n }\n};\n\n// const mapDispatchToProps = dispatch => ({\n// });\n\nclass HowItWorksContainer extends Component {\n componentDidUpdate() {\n const { user } = this.props;\n }\n\n render() {\n return (\n
\n
\n
\n
\n
\n

Are you an electrical provider?

\n
Go to see `How it works` for electrical provider
\n \n
\n
\n
\n

For customers looking to hire electrical providers

\n
\n
\n
\n
\n

Step 1\n

\n

Post your electrical project

\n
\n
\n \"500x500\"\n
\n
\n
\n
\n
\n

Step 2.\n

\n

Await electrician's proposals

\n
\n
\n \"500x500\"\n
\n
\n
\n
\n
\n

Step 3.\n

\n

Compare price estimates, electrician's profile and any customer review

\n
\n
\n \"500x500\"\n
\n
\n
\n
\n
\n

Step 4.\n

\n

Select provider and communicate with electrical providers.

\n
\n
\n \"500x500\"\n
\n
\n
\n
\n
\n

Step 5.\n

\n

Have your project completed by most qualified and best priced electrical provider.

\n
\n
\n \"500x500\"\n
\n
\n
\n
\n
\n

Step 6.\n

\n

Post reviews about completed job.

\n
\n
\n \"500x500\"\n
\n
\n
\n \n
\n
\n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n null,\n)(HowItWorksContainer);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user : state.view.user,\n history: ownProps.history,\n }\n};\n\n// const mapDispatchToProps = dispatch => ({\n// });\n\nclass HowItWorksProviderContainer extends Component {\n componentDidUpdate() {\n const { user } = this.props;\n }\n\n render() {\n return (\n
\n
\n
\n
\n
\n

Are you looking for electrical providers?

\n
Go to see `How it works` for customer
\n \n
\n
\n
\n

For electrical providers looking for new customers

\n
\n
\n
\n
\n

Step 1\n

\n

rofessional profile

\n
\n
\n \"500x500\"\n
\n
\n
\n
\n
\n

Step 2.\n

\n

Receive project requests from customers seeking electrical providers in your area

\n
\n
\n \"500x500\"\n
\n
\n
\n
\n
\n

Step 3.\n

\n

Submit proposals and communicate directly with customers

\n
\n
\n \"500x500\"\n
\n
\n
\n
\n
\n

Step 4.\n

\n

Complete electrical project

\n
\n
\n \"500x500\"\n
\n
\n
\n
\n
\n

Step 5.\n

\n

Get paid for completed project

\n
\n
\n \"500x500\"\n
\n
\n
\n\n \n\n
\n
\n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n null,\n)(HowItWorksProviderContainer);\n","import React from 'react';\nimport zxcvbn from 'zxcvbn';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%'\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n margin: {\n marginBottom: '4px !important',\n marginTop: '4px !important',\n }\n});\n\n//Should check this in the onChange function\nconst validatePasswordStrong = value => {\n if (value.length <= this.thresholdLength) throw new Error(\"Password is short\");\n if (zxcvbn(value).score < this.minStrength) throw new Error(\"Password is weak\");\n};\n\n\nconst PasswordField = (props) => {\n const {\n classes,\n user,\n register,\n history,\n minStrength = 3, \n thresholdLength = 7,\n password,\n validatePasswordStrong,\n onChange,\n hasErrors = false,\n errors,\n required,\n fieldId,\n label,\n placeholder,\n description,\n showStrength = false,\n } = props;\n\n const newMinStrength = typeof minStrength === 'number' ? Math.max( Math.min(minStrength, 4), 0 ): 3;\n const newThresholdLength = typeof thresholdLength === 'number' ? Math.max(thresholdLength, 7) : 7;\n const strength = zxcvbn(password).score\n const passwordLength = password.length;\n const passwordStrong = strength >= newMinStrength;\n const passwordLong = passwordLength > newThresholdLength;\n\n const counterClass = ['badge badge-pill', passwordLong ? passwordStrong ? 'badge-success' : 'badge-warning' : 'badge-danger'].join(' ').trim();\n\n const strengthClass = ['strength-meter mt-2', passwordLength > 0 ? 'visible' : 'invisible'].join(' ').trim();\n\n return (\n
\n {description && \n {description} \n }\n
\n \n {showStrength &&
\n { passwordLength ? passwordLong ? `${thresholdLength}+` : passwordLength : '' }\n
}\n {showStrength &&
\n
\n
}\n
\n\n
\n );\n};\n\nexport default withStyles(styles)(PasswordField);","import React from 'react';\nimport zxcvbn from 'zxcvbn';\nimport clsx from 'clsx';\nimport { validate } from 'isemail';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Container from '@material-ui/core/Container';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n '& .MuiTextField-root': {\n margin: theme.spacing(1),\n width: 200,\n },\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n margin: {\n marginBottom: '4px !important',\n marginTop: '4px !important',\n }\n});\n\nconst EmailField = (props) => {\n const {\n classes,\n email,\n onChange,\n errors,\n required,\n fieldId,\n label,\n placeholder,\n description,\n } = props;\n const hasErrors = !validate(email);\n\n return (\n
\n {description && \n {description} \n }\n \n
\n );\n};\n\nexport default withStyles(styles)(EmailField);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Container from '@material-ui/core/Container';\nimport Button from '@material-ui/core/Button';\nimport { Redirect } from 'react-router-dom'\nimport { withStyles } from '@material-ui/core/styles';\nimport PasswordField from '../components/PasswordField';\nimport EmailField from '../components/EmailField';\nimport clsx from 'clsx';\n\n//if user is defined redirect to dashboard\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%'\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n margin: {\n margin: '0 auto'\n },\n smallFont: {\n fontSize: '16px',\n }\n});\n\nconst Login = (props) => {\n const {\n classes,\n login,\n user,\n history,\n handleEmailChange,\n handlePasswordChange,\n onSubmitClick,\n } = props;\n\n if(user && user.userType !== 's') {\n return \n }\n\n const enabled = login.email && login.password;\n return (\n \n
\n
\n

Log in GetElectrician

\n \n \n
\n \n Register\n forgot password?\n
\n \n
\n
\n );\n};\n\nLogin.propTypes = {\n handleEmailChange: PropTypes.func.isRequired,\n handlePasswordChange: PropTypes.func.isRequired,\n};\n\nLogin.defaultProps = {\n displayColorPicker: {}\n};\n\nexport default withStyles(styles)(Login);","import { connect } from 'react-redux';\nimport {\n updateEmail,\n updatePassword,\n} from '../actions/ee';\nimport Login from '../components/Login';\nimport { login } from '../actions/api';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n login: state.view.login,\n user: state.ee.user,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleEmailChange: (email) => {\n dispatch(updateEmail(email.target.value));\n },\n handlePasswordChange: (password) => {\n dispatch(updatePassword(password.target.value));\n },\n onSubmitClick: (event, history) => {\n dispatch(login(history));\n }\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Login);\n","export const CODE_OF_ETHICS=`\n

getElectrician

\n\n

This Ethics Policy was last modified on April 17, 2020.

\n\n The following Code of Ethics applies to all Service Providers who offer their services through our Web site and/or Mobile App. This Code of Ethics contains the legal and ethical business practice standards that are required for such Service Providers and is meant to be read alongside the general Terms of Use and our Service Provider Terms of Use, which themselves contain many ethics rules and policies. We view these ethical rules as fundamental standards underlying our approach to doing business, and we expect all Service Providers to adhere to these standards as well. Please review this Code of Ethics frequently and consider providing it to your Clients.\n\n

Reputation

\n\n A good reputation is difficult to earn, easy to lose and almost impossible to regain. Not only shall Service Provider endeavor to always work to maintain and improve his, her or its own reputation, but, by providing services via the Web site and/or Mobile App, Service Provider also plays a role in impacting E-Electrician’s reputation as well as that of the industry as a whole. In all events and circumstances, Service Provider must conduct himself, herself or itself in a way that does no damage to the reputation and goodwill of getElectrician and help to maintain its place as a market leader for electrical services.\n\n

Grievance Management

\n\n In the event of any grievance, Service Provider shall follow the dispute resolution provisions contained in the Terms of Use and as may be otherwise required by the licensing commission. At all times, Service Provider shall defend the integrity of the trade and its members while also accepting responsibility for truthful grievances and promptly working to correct such issues.\n\n

Compliance with Laws

\n\n We expect that each and every Service Provider will conduct his, her or its business in an ethical and proper manner at all times and in full compliance with all local, state, and federal laws, rules, ordinance and regulations.\n\n

Bribery, Gifts Prohibited

\n\n Service Provider shall act with integrity of the highest standard in all circumstances. In no event shall a Service Provider accept a bribe or otherwise participate in corruption. This means that no Service Provider shall engage in any form of corruption, bribery, kickback, extortion, embezzlement or money laundering. This also shall be read to prohibit the acceptance of gifts, regardless of monetary value. In the event Service Provider is offered a bribe, gift, kickback, or solicited for any other form of corruption by a Client, Service Provider is encouraged to promptly notify getElectrician in writing at customerservice@getElectrician.com.\n\n

Public Safety

\n\n Service Provider must work to maintain his, her or its own safety as well as the safety of contractors, Clients, and the general public. This shall be done by ensuring that all standards of workmanship are beyond reproach and that all work performed strictly complies with the applicable licensing commission regulations.\n\n Service Provider shall immediately bring to the attention of the proper authorities the existence of any electrical conditions which are unsafe to life and property.\n\n

Continued Education

\n\n Service Provider shall never quit learning. By staying abreast of new technologies and processes, participating in industry associations, and attending business-related meetings and functions Service Provider will be able to provide the most energy- and cost-efficient solutions to Clients.\n\n

Communication

\n\n All communication with Clients shall be professional, punctual and documented. This applies whether the communication is through the Web site or Mobile App, telephone, email, or in-person. All phone calls, emails, and messages shall be returned within one (1) business hour in the event of an emergency and no later than one (1) business day in non-emergency circumstances.\n\n

Advertisement of Services, Skills

\n\n No Service Provider shall falsely advertise himself, herself or itself as having skills appropriate to a specific project. Such misrepresentations hurt not only the reputation of Service Provider but of getElectrician and the industry as a whole. Service Provider shall only take on projects for which he, she or it is qualified and shall let a Client know if a project exceeds such qualifications. All advertisements should be fair, truthful, and in compliance with all governing regulations.\n\n

Guarantee of Workmanship

\n\n Service Provider shall stand behind his, her or its work and provide a minimum twelve- (12-) months workmanship guarantee.\n\n

Staff & Employment

\n\n Any and all staff and apprentices shall receive training of the highest level. Service Provider shall provide encouragement to and support apprentices and staff to improve work practices, work professionally, and generally raise the standard of the work performed in the electrician trade.\n\n Service Provider shall in no event discriminate in his, her or its, recruitment, hiring, employment, or retention practices on the basis of race, national origin, gender, age, sexual orientation, citizenship, marital status, disability, veteran status or religion. Service Provider shall provide a workplace free from unlawful harassment.\n\n Service Provider shall comply with all applicable laws and regulations regarding employment, including but not limited to such laws and regulations related to minimum wage, maximum work hours, overtime and benefits and shall only employ individuals who are above the minimum working age as set forth in applicable laws and regulations. Service Provider shall not engage in, facilitate or use forced or involuntary labor or otherwise facilitate slavery or human trafficking.\n\n Service Provider shall only employ workers with a legal right to work and shall validate the eligibility to work by reviewing relevant documents, as permitted by applicable laws and regulations.\n\n

Client Confidentiality

\n\n Service Provide shall agree to keep any and all Client information strictly confidential. This means that names, address, emails and other private information must not be disclosed except in exceptional circumstances. For more information, please review to the general Terms of Use and our Privacy Policy.\n\n

On-Site Conduct

\n\n All work shall be performed safely, sanitarily, efficiently and professionally. Leave any workplace as you found it, in a clean, tidy, and safe condition. While on site, Service Provider shall properly identify himself or herself as an electrician (if applicable) and wear identifying insignia, such as a company-branded polo shirt or cap (if applicable.) Service Provider shall wear at all times appropriate protective equipment and otherwise ensure compliance with applicable environmental, health and safety laws, rules and regulations.\n\n

Environmental Considerations

\n\n Service Provider shall at all times act in an environmentally-responsible manner. We recognize the importance of our environment and natural resources, and encourage Service Provider to embrace the responsibility to society for prudently using natural resources and preventing harm to the environment. Every Service Provider shall comply with applicable environmental laws and regulations, including but not limited to obtaining required environmental permits, providing required environmental reports, properly controlling air, land and water emissions and properly disposing of chemicals and waste products.\n\n

Accounting

\n\n It is our policy to comply with accepted accounting rules, controls and disclosures at all times and to ensure that all work performed is accurately reported via the Web site and/or Mobile App. No Service Provider shall knowingly participate in any scheme to avoid such accounting rules, controls or disclosures or to otherwise avoid paying a Project Fee as defined in the Service Provider Terms of Use. Service Provider shall not encourage any Client to circumvent his, her, or its relationship with getElectrician.\n\n

Intellectual Property

\n\n Every Service Provider shall respect the intellectual property rights of others and shall comply with applicable laws and regulations related to patents, copyrights, trademarks and trade secrets.\n\n

Conflicts of Interest

\n\n Service Provider shall use all reasonable measures to ensure no conflict of interest arises.\n\n

Questions? Comments?

\n\n In the event a Service Provider has an ethical question, he, she or it is encouraged to contact its regulatory commission and/or E-Electrician’s customer service before deciding on a course of action.\n`;","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport { CODE_OF_ETHICS } from '../register/components/CodeOfEthics';\nimport parse from 'html-react-parser';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n padding: '10px',\n },\n});\n\n\nconst CodeOfEthicsContainer = (props) => {\n const {\n classes,\n } = props;\n\n return (\n
\n {parse(CODE_OF_ETHICS)}\n
\n )\n}\n\nexport default withStyles(styles)(CodeOfEthicsContainer);","export const TERMS_OF_USE=`\n

GetElectrician

\n\n

These Terms of Use were last modified on April 17, 2020.

\n\n
The Web site and Mobile App are provided by Xavior, Inc., d/b/a GetElectrician, a New York corporation with a principal place of business located at 40 First Avenue, #15C, New York, NY 10009.
\n\n

SECTION I: DEFINITIONS, AGREEMENT TO BE BOUND

\n\n
1.1 \tDefinitions.
\n\n
References to “Dispute” mean any claim, conflict, controversy, or disagreement between the Parties arising out of, or related in any way to, these Terms (or any Terms, supplement or amendment contemplated by these Terms,) including, without limitation, any action in tort, contract or otherwise, at equity or at law, or any alleged breach, including, without limitation, any matter with respect to the meaning, effect, validity, performance, termination, interpretation or enforcement of these Terms or any terms contemplated by the Terms.
\n\n
References to a “Client” mean an individual and/or entity who seeks the services of a Services Provider via a Listing on the Web site and/or the Mobile App.
\n\n
References to a “Listing” means a description of project needing the services of a Service Provider.
\n\n
References to a “Material Breach” mean any breach of these Terms upon the occurrence of which a reasonable person in the position of the non-breaching Party would wish to immediately terminate these Terms because of that breach.
\n\n
References to the “Mobile App” mean the mobile software application by the name of “eelectricians,” available on both the Google Play and iTunes stores.
\n\n
References to a “Service Provider” mean any person who offers electrician services via the Web site and/or the Mobile App.
\n\n
References to the “Terms” and/or “Agreement,” mean this, these Terms of Use, as set forth herein.
\n\n
References to “us,” “we,” “our,” and/or “GetElectrician,” means Xavior, Inc., d/b/a GetElectrician, and its parents, subsidiaries, and assigns.
\n\n
References to the “Web site” mean the Web site bearing the URL www.getelectrician.com.
\n\n
References to “you,” and/or “User” mean the user of the Web site and/or the Mobile App.
\n\n
1.2. \tAgreement to be Bound.
\n\n
The following Terms of Use, together with the relevant information set out on the Web site and the Mobile App, including any features and services available, such as RSS feeds, podcasts, video and photographs, publications, and other materials, are subject to the Terms of Use set forth below. Please read them carefully as any of use of the Web site and/or the Mobile App constitutes an agreement, without acceptance, to be bound thereby by the User. By using the Web site or the Mobile App, and, upon registration therefor, by clicking that you agree to these Terms, you represent that you are at least eighteen (18) years old, have read and understand the Terms of Use, and that you agree to be bound by these Terms of Use as set forth below.
\n\n
These Terms of Use are subject to the Privacy Policy and our Service Provider Terms of Use, which also govern your use of the Web site and the Mobile App.
\n\n

SECTION II: GENERAL PROVISIONS

\n\n
2.1. \tAbout Us; GetElectrician not Vendor; No Endorsement.
\n\n
GetElectrician acts as a marketplace to allow Users to post, search, recommend, and staff electrical jobs through an online marketplace. As an online service provider, we do not endorse or promote any Clients or Service Providers, and we have no control over the quality, legitimacy, accuracy, safety, morality or legality of any aspect of any Service Provider listing or job posting, the truth or accuracy of the same, the ability of any Service Provider to provide the services required by any Listing or any Client’s ability to pay for such services, or the identity of any person or entity. If you rely on any of the information provided by or on the Web site, you do so solely at your own risk.
\n\n
You acknowledge and agree that we do not sell, offer to sell, invite to sell, make or solicit any job offers. IN ALL INSTANCES, ALL OFFERS OF EMPLOYMENT ARE ADVERTISED, SOLICITED, OFFERED, ACCEPTED, MADE AND DELIVERED BY AND BETWEEN CLIENTS AND SERVICE PROVIDER WHO CONTRACT DIRECTLY. AT NO TIME WILL AN EMPLOYER/EMPLOYEE RELATIONSHIP EXIST BETWEEN US. In all instances, any solicitation, invitation, offer, advertisement or communication is void where prohibited by law.
\n\n
All employment decisions shall be made in the Client’s sole and exclusive discretion. GetElectrician is strictly not liable for any employment decisions.
\n\n
2.2. \tUse of the Services at your Own Risk; No Verification.
\n\n YOU HEREBY ACKNOWLEDGE AND AGREE THAT WHILE WE MAY PROVIDE INFORMATION ABOUT SERVICE PROVIDERS OR CLIENTS WE ARE NOT RESPONSIBLE FOR THE ACCURACY OF SUCH INFORMATION. YOU FURTHER AGREE AND ACKNOWLEDGE THAT WE PROVIDE SUCH INFORMATION SOLELY FOR INFORMATIONAL PURPOSES ONLY, AND IT IS NOT TO BE CONSTRUED AS A PROFESSIONAL REFERENCE, RECOMMENDATION, OR ENDORSEMENT. User authentication on the Internet is difficult, and GetElectrician cannot, does not, and will not verify that each User is who he, she, or it claims to be. You assume all the risks inherent in the use of the Web site, including, but not limited to, the risks of bodily harm, the risk of dealing with strangers or persons underage, and any risks affiliated with foreign nationals and other users with whom you come into contact as a result of using the Web site or the Mobile App. It is your responsibility to evaluate the truth and accuracy, completeness, usefulness, or validity of all the opinions, advice, service, promotions, advertisements, awards, prizes, or other information that you receive as a result of your use of the Web site or the Mobile App. You are solely and uniquely responsible for conducting your own due diligence.\n
2.3. \tAccuracy, Completeness and Timeliness of Information.
\n\n We are not responsible if information made available on the Web site the Mobile App is not accurate, complete or current. You acknowledge that the Web site and the Mobile App are provided for general information only and should not be relied upon or used as the sole basis for making decisions without consulting primary, more accurate, more complete or more timely sources of information. You acknowledge further that any reliance on the Web site or the Mobile App is at your own risk.\n\n
2.4.\tErrors in Web site or the Mobile App.
\n 
We do not warrant that any errors in the Web site and/or the Mobile App will be corrected.\n\n
2.5. \tModifications and Changes to Terms of Use.
\n\n We may modify, add to, suspend or delete these Terms of Use or other agreements, in whole or in part, in our sole discretion at any time, with such modifications, additions or deletions being immediately effective upon their posting to the Web site and the Mobile App. Your use of the Web site and/or the Mobile App after modification, addition or deletion of these Terms of Use shall be deemed to constitute acceptance by you of the modification, addition or deletion.\n\n
2.6. \tModifications and Changes to the Web Site or the Mobile App.
\n\n We may modify, add to, suspend, or delete any aspect of the Web site and/or the Mobile App offered by us, in whole or in part, at our sole discretion at any time, with such modifications, additions or deletions being immediately effective. Such modifications, additions or deletions may include but are not limited to content offered, hours of availability, and equipment needed for access or use.\n\n
2.7. \tAccess to Web site and the Mobile App.
\n\n Though we try to make the Web site and the Mobile App available twenty-four (24) hours a day, seven (7) days a week, except for planned down-time for maintenance, we do not warrant that the Web site or the Mobile App will be at all times available.\n\n We do not warrant that your computer, tablet, and/or smartphone will be able to access and/or support the Web site or the Mobile App.\n\n
2.8.\tRight of Refusal, Limitation, Discontinuation, and Termination.
\n\n We reserve the right to refuse to provide access to the Web site and/or the Mobile App for any reason at any time in our sole and exclusive discretion. We may, in our sole and exclusive discretion, limit or cancel a User Account for any reason whatsoever, including but not limited to a breach or violation by the User of any of the terms or provisions of the Terms of Use or any published GetElectrician policy or procedure; a discredit of GetElectrician by a User; misrepresentation of GetElectrician by making claims contrary to GetElectrician literature; ethical or legal violations that may cause GetElectrician to suffer damages; or any other material cause, in the sole discretion of GetElectrician.\n\n In the event that we make a change to or cancel an Account, we may attempt to notify you by contacting the e-mail and/or billing address/phone number provided at the time your Account was created; however, the failure to do so shall not result in any liability, including liability for lost data deleted as a result of the Account termination. In the event we terminate your Account, you shall no longer be eligible to be a GetElectrician User at any time in the future, unless permission is granted to you, in writing, by us, in our sole and exclusive discretion.\n\n In addition, although the Web site and the Mobile App are intended to be accessible worldwide, the Web site may not be available to all persons in all geographic locations or jurisdictions. GetElectrician reserves the right to limit the availability of the Web site and/or the Mobile App to any person, geographic area or jurisdiction it so desires, in our sole discretion, and to limit the quantities of any such product or service that it provides. Any offer for any product or service made via the Web site or the Mobile App is void where prohibited. By choosing to access the Web site and/or the Mobile App from any location other than the United States, you accept full responsibility for compliance with all local laws. You are also subject to U.S. export controls and are responsible for any violations of U.S. embargoes or other federal rules and regulations restricting exports. The United States controls the export of products and information to certain countries including, Iraq, Libya, North Korea, Cuba (or a Cuban national or resident), Syria, and Iran, and to anyone on the Department of Commerce Table of Deny Orders and the Treasury Department's list of Specially Designated Nationals. You agree to comply with all such restrictions and not to export or re-export the any Material, as defined herein, to countries or persons prohibited under the export control laws. By downloading the Material, you are agreeing that you are not in a country where such export is prohibited or are a person or entity to which such export is prohibited. You are responsible for compliance with the laws of your local jurisdiction regarding the export, import, or re-export of and products or services.\n
2.9. \tProhibited Uses of Web site and the Mobile App.
\n\n In addition to the other restrictions on use set forth herein, you agree and acknowledge that you shall not use the Web site or the Mobile App: (a) for any unlawful purpose; (b) to solicit Users to perform or participate in any unlawful acts or to engage in acts that are unrelated to the purpose(s) of the Web site and/or the Mobile App; (c) to violate any international, governmental, federal, provincial or state regulations, rules, laws, or local ordinances; (d) to infringe upon or violate our intellectual property rights or the intellectual property rights of others; (e) to harass, abuse, insult, harm, defame, slander, disparage, intimidate, or discriminate based on gender, sexual orientation, religion, ethnicity, race, age, national origin, or disability; (f) to submit false or misleading information; (g) to upload or transmit viruses or any other type of malicious code that will or may be used in any way that will affect the functionality or operation of the Web site or the Mobile App; (h) to collect or track the personal information of others; (i) to spam, phish, pharm, pretext, spider, crawl, or scrape; (j) for any obscene or immoral purpose; or (k) to interfere with or circumvent the security features of the Web site or the Mobile App. We reserve the right to terminate your use of the Web site and/or the Mobile App for violating any of the prohibited uses or for any other reason in our sole and exclusive decision.\n\n

SECTION III: ACCOUNTS; USE OF THE WEB SITE, MOBILE APP

\n

3.1. \tOnline Accounts, Generally.
\n\n Users shall be given the opportunity to register via an online registration form to create a User account, (your “Account,”) that will allow you to receive information from us and/or to participate in certain features of the Web site and/or the Mobile App. We will use the information you provide in accordance with our Privacy Policy. By registering with us, you represent and warrant that all information you provide on the registration form is current, complete and accurate to the best of your knowledge. You agree to maintain and promptly update your registration information so that it remains current, complete and accurate. During the registration process, you will be required to choose a password. You acknowledge and agree that we may rely on this password to identify you. You are responsible for all use of your Account, regardless of whether you authorized such access or use, and for ensuring that all use of your Account complies fully with the provisions of these Terms of Use. Accounts may be cancelled at any time via the Account settings. Users agree further and acknowledge that any Account profile they create may be edited, removed, modified, published, transmitted, and displayed by us, and they waive any rights they may have in having the material altered or changed in a manner not agreeable to them.\n\n
3.2. \tTransfer Prohibited.
\n\n You agree you shall not sell, trade or transfer that Account to any other person or entity except as provided for herein.\n\n
3.3. \tAccount Types.
\n\n Use of the Web site, however, Service Providers wishing to offer their services via Web site may be required to pay a fee as set forth on the Web site at all times, including at the time of purchase, and which may be subject to change in our sole and exclusive discretion, without notice. Such services shall be governed by our Service Provider Terms of Service.\n\n
3.4. \tAccount Guidelines.
\n\n The Web site and/or the Mobile App may contain the ability to communicate with other Users, share via social media; participate in any comments sections, discussion forums, Web sites, landing pages, social media outlets, sales channels, and/or other interactive features, (collectively \"Interactive Areas,”) in which Users and third parties may communicate. By participating in Interactive Areas, you agree and acknowledge that you:\n\n
    \n
  • Shall not upload, distribute or otherwise publish to the Web site or the Mobile App any libelous, defamatory, obscene, pornographic, abusive, or otherwise illegal material; and
  • \n\n
  • Shall not threaten or verbally abuse other Users, use defamatory language, or deliberately disrupt discussions with repetitive messages, meaningless messages or \"spam”; and
  • \n\n
  • Shall not to use language that abuses or discriminates on the basis of race, religion, nationality, gender, sexual preference, age, region, disability, etc. Hate speech of any kind is grounds for immediate and permanent suspension of access to the Web site; and
  • \n\n
  • Shall not personally attack another User. Personal attacks are a direct violation of these Terms of Use and are grounds for immediate and permanent suspension of access to the Web site; and
  • \n\n
  • Shall not use the Interactive Areas to distribute or otherwise publish any material containing any solicitation of funds, advertising or solicitation for goods or services except as envisioned by the express purpose of the Web site; and
  • \n\n
  • Shall not upload, post or otherwise transmit any content that violates any state, national or international law or engage in activity that would constitute a criminal offense or give rise to a civil liability; and
  • \n\n
  • Shall not post unauthorized commercial communications (such as spam); and
  • \n\n
  • Shall not upload, post or otherwise transmit any content that advocates or provides instruction on illegal activity or discuss illegal activities with the intent to commit them; and
  • \n\n
  • Shall not upload, post or otherwise transmit content that does not generally pertain to the designated topic or theme of any Interactive Area; and
  • \n\n
  • Shall not impersonate any person or entity, including, but not limited to, any of our employees, or falsely state or otherwise misrepresent your affiliation with any person or entity; and
  • \n\n
  • Shall not interfere with any other User's right to privacy, including by harvesting or collecting personally-identifiable information about other Users or distributing private information about another User or any third party; and
  • \n\n
  • Shall not engage in unlawful multi-level marketing, such as a pyramid scheme; and
  • \n\n
  • Shall not upload, post or otherwise transmit any “chain letters”; and
  • \n\n
  • Shall not upload, post or otherwise transmit any content, software or other materials which contain a virus, malicious code or other harmful, damaging, interfering, injuring or disruptive component; and
  • \n\n
  • Shall not post false or misleading indications of origin or statements of fact; and
  • \n\n
  • Shall not upload, post or otherwise transmit any content, software or other materials which restrict or inhibit any other User from using and enjoying the Web site or the Mobile App; and
  • \n\n
  • Shall not interfere with or disrupt the Web site, the Mobile App, the Interactive Areas or the servers or networks connected to the same, or disobey any requirements, procedures, policies or regulations of networks connected to the Web site, the Mobile App and/or the Interactive Areas; and
  • \n\n
  • Shall not intentionally supply incorrect information about yourself or a Client on any form, resume, listing, group or event; and
  • \n\n
  • Shall not violate, plagiarize or infringe the rights of third parties including, without limitation, copyright, trademark, patent, rights of privacy or publicity or any other proprietary right; and
  • \n\n
  • Shall not facilitate or encourage any violations of these Terms of Use or our policies.
  • \n
\n
3.5. \tRights in Submissions.
\n\n Should you submit, display, publish or otherwise post any content to an Interactive Area, (a “Submission,”) you agree to grant to us and our partners and affiliates a perpetual, irrevocable, transferable limited, non-exclusive, sub-licensable, worldwide, fully-paid, royalty-free license to use, modify, publish, edit, perform, publicly perform, publicly display, reproduce, and distribute such Submission in any and all forms, media, and technologies now known or hereinafter developed, alone or as part of other works, for hosting, indexing, caching, distributing, tagging, marketing, and for all other lawful purposes without the requirement to make payment to or seek permission from you or any third party. You acknowledge that Submissions are not confidential, and your communications may be read or intercepted by others. You acknowledge that by submitting Submissions to GetElectrician, no confidential, fiduciary, contractually implied, or other relationship is created between you and GetElectrician other than pursuant to this Agreement.\n\n You represent and warrant that you own or have a valid license to use any and all Submissions and otherwise have the right to grant the license set forth herein, and the displaying, publishing or posting of any Submissions does not and will not violate the privacy rights, publicity rights, copyrights, trademark rights, patents, contract rights or any other intellectual property rights or other rights of any person or entity.\n\n
3.6. \tRight to Monitor.
\n\n We shall have the right to monitor your Account in our sole and exclusive discretion.\n\n
3.7.\tAccount Security.
\n\n For security purposes, we strongly advise you to keep your User ID and password confidential and to change your Password if you think it may have been compromised. You are entirely responsible for maintaining the secrecy of this information. In addition, we recommend that you quit your entire browser application when you have completed your time on the Web site. This is particularly important when you are using the Web site at a public location, such as an Internet café, library, or workplace or on a public device. You agree to immediately notify GetElectrician in the event of any security breach or unauthorized use of your User ID, password, or any or all of your registration information. So that you can take advantage of the latest security technology, we recommend that you use the most recent version of your browser.\n\n
3.8.\tNo Responsibility for User Submissions.
\n\n GetElectrician is not liable for Submissions provided by any Users or third parties. Such Submissions do not represent the views of GetElectrician, its subsidiaries, or its partners.\n\n
3.9.\tUser Communications.
\n\n GetElectrician does not screen communications in advance and is not responsible for screening or monitoring material and content posted by users. If a User notifies GetElectrician of communications, which allegedly do not conform to these Terms, GetElectrician may investigate the allegation to determine, in good faith and its sole discretion, whether to remove or to request the removal of the communication. GetElectrician has no liability or responsibility to users for performance or nonperformance of such activities.\n\n
3.10.\tTermination.
\n\n You may terminate your use of the Web site and/or the Mobile App at any time by writing to us at customerservice@getelectrician.com. In no event shall a refund be due or owing should a User elect to terminate use of the Web site or the Mobile App.\n\n

SECTION IV: HIRING, FEES

\n\n
4.1.\tFees.
\n\n At the present, the placing of a Listing on the Web site and/or the Mobile App is free; however, we may charge a listing or other fees to Clients in the future. In such an event, we shall update these Terms accordingly.\n\n
4.2. \tUnauthorized Business.
\n\n In addition to the prohibited uses set forth in these Terms, the Web site may not be used by an Client to cause us to advertise on his, her, or its behalf employment in any of the following service areas, (“Unauthorized Business:”) (a) sale of adult goods or services; (b) sale of products or services in the following sectors: gambling, securities, drugs, arms and weapons or other highly-regulated sectors; or (c) for sales of illegal goods or services, which shall include but not be limited to illegal software or illegal downloads such as music, films or games.\n\n
4.3. \tAccuracy of Listing; Non-Disclosure of Client.
\n\n Client shall be responsible for ensuring any and all Listings are complete and accurate at all times, including but not limited to the salary, qualifications required, benefits, and job location. We undertake no responsibility and shall have no liability for verifying or failing to verify any information provided to us from an Client when creating a Listing.\n\n
4.4.\tCompliance with Laws.
\n\n In addition to the other requirements to comply with laws, regulations, and terms set forth herein, Clients who post Listings to the Web site agree to obey any and all local, state, and federal regulations and laws regarding offers of employment and pre-screening therefor.\n\n
4.5.\tRight to Revise.
\n\n GetElectrician shall have the right to revise any Listing to correct any errors or omissions, in its sole and exclusive discretion, but shall not be obligated to do so. You agree and acknowledge that GetElectrician shall not be liable for any errors in revisions.\n\n
4.6. Payment for Services.
\n\n Clients may pay for Services per the payment agreement with the Service Provider. Payment shall be made via the Web site, using one of our select payment processors, which include Stripe and PayPal.\n\n
4.7. \tRefunds and Returns.
\n\n Due to the nature of the Web site and the Mobile App, no refunds or returns shall be granted at any time, including but not limited to erroneous Listing information, lack of Listings, failure to locate a qualified Service Provider, failure to win a project, business closure, or cancellation.\n

SECTION V: INTELLECTUAL PROPERTY; PRIVACY

\n\n
5.1.\tIntellectual Property Rights Not Waived.
\n\n This is an Agreement for access to and use of the Web site and the Mobile App, and you are not granted a license to any software or intellectual property by these Terms of Use aside from the limited right to use the Mobile App. The Web site and the Mobile App are protected by U.S. and, where applicable, international intellectual property laws. The Web site and the Mobile App belongs to us and are the property of us or our licensors (if any). We retain all ownership rights in the Web site and the Mobile App.\n\n Furthermore, all material displayed or transmitted on this Web site and the Mobile App, including but not limited to text, logos, icons, the HTML-based computer programs used to generate the Web site, photographs, images, illustrations, video clips, audio clips, and graphics, (“Materials,”) are owned by us and are protected by U.S. and international copyright, trademarks, service marks, and other proprietary rights, laws and treaties.\n\n Except as provided, you may not copy, reproduce, publish, transmit, transfer, sell, rent, modify, create derivative works from, distribute, repost, perform, display, or in any way commercially exploit the Materials, nor may you infringe upon any of the copyrights or other intellectual property rights contained in the Materials. You may not remove or alter, nor cause to be removed or altered, any copyright, trademark, or other proprietary notices or visual marks and logos from the Materials. You may not register any domain names that may confuse or contain any portion of the GetElectrician trade names or marks.\n\n You may make a single print copy of any Materials provided by us on the Web site for personal, non-commercial use only, provided that you do not remove nor cause to be removed any copyright, trademarks, or other proprietary notices or visual marks or logos from the Materials. You may not archive or retain any of the Materials accessed on the Web site without our express written permission. All requests for archiving, republication or retention of any part of the Materials must be in writing to us and must clearly state the purpose and manner in which the Material will be used. Requests for permission to archive, retain, or republish any part of the Materials may be submitted to legal@ getelectrician.com.\n\n GetElectrician makes no claims that the Materials are appropriate or may be downloaded outside the United States. Access to the Materials may not be legal by certain persons or in certain countries. If you access the Web site from outside the United States, you do so at your own risk and are responsible for compliance with the laws of your jurisdiction, including those relating to privacy.\n\n You acquire no rights or licenses whatsoever in the Materials other than the limited rights to use the Web site in accordance with these Terms of Use. Any of the Materials accessed or downloaded from this site must be accessed or downloaded in accordance with the Terms of Use specified in this Agreement. We reserve any rights not expressly granted under these Terms of Use.\n\n Any software that is made available for downloading from the Web site or the Mobile App, (\"Software,\") or any affiliate and/or partner Web site is protected by U.S. copyright and may be protected by other rights. The use of such Software is governed by the terms of the software End-User License Agreement or designated \"Legal Notice,\" as may be in force.\n\n
5.2.\tFeedback.
\n\n You may have the opportunity to provide reviews, suggestions, ideas, and feedback, (collectively, “Feedback.”) Should you so provide such Feedback you grant us sole ownership of the same, which includes, without limitation, the right for us or any third party we designate, to use, copy, transmit, excerpt, publish, distribute, publicly display, publicly perform, create derivative works of, host, index, cache, tag, encode, modify and adapt (including without limitation the right to adapt to streaming, downloading, broadcast, mobile, digital, thumbnail, scanning or other technologies) in any form or media now known or hereinafter developed. All such Feedback shall be treated as non-confidential.\n\n If it is determined that you retain moral rights (including rights of attribution or integrity) in the content submitted by you, you hereby declare that (a) you do not require that any personally-identifying information be used in connection with the content, or any derivative works of or upgrades or updates thereto; (b) you have no objection to the publication, use, modification, deletion and exploitation of the content by us or our licensees, successors and assigns; (c) you forever waive and agree not to claim or assert any entitlement to any and all moral rights of an author in any of the content; and (d) you forever release us, and our licensees, successors and assigns, from any claims that you could otherwise assert against us by virtue of any such moral rights. You also permit any other User to access, view, store or reproduce the content for that User's personal use.\n Notwithstanding the foregoing, you acknowledge that your Feedback may contain concepts, ideas, materials, proposals, suggestions and the like relating to GetElectrician or its initiatives, (your “Ideas.”) With respect to your Ideas you acknowledge that: (a) we receive numerous submissions from many parties and/or may have independently-developed and/or considered ideas similar to your Ideas, and that our review of your Ideas is not an admission of novelty, priority or originality; and (b) our use of any ideas similar to your Ideas, whether based on your Feedback or Submissions, provided to us by third parties, or independently-developed or considered by us, shall be without obligation to you.\n\n
5.3.\tGrant of License.
\n\n You agree to grant us a non-exclusive, worldwide, perpetual, irrevocable, royalty-free, sub-licensable (through multiple tiers) right to exercise the copyright, publicity, and database rights (but no other rights) you have in any content contained in any Listing or your Account profile, in any media now known or not currently known, with respect to the same. You agree to allow GetElectrician to store or re-format your content and display your content in any way as we so choose. GetElectrician will only use personal information in accordance with our Privacy Policy.\n\n
5.4.\tConfidential Information of Users.
\n\n Users may obtain personal information from another User as a result of their use of the Web site and the Mobile App. Without obtaining prior permission from the User, this personal information shall only be used for the express purpose for which it is provided or for GetElectrician-related communications and shall be held in strict confidence in accordance with our Privacy Policy. We have not granted you a license to use the information for unsolicited commercial messages. Without limiting the foregoing, without express consent from the User, you are not licensed to add any contact, Client or other User to your email or physical mail list. For more information, see our Privacy Policy.\n\n

SECTION VI: Third party Advertisements, Promotions, and Links

\n\n
6.1.\tThird Party Advertisements and Promotions.
\n\n We may, from time to time, run advertisements and promotions from third parties on the Web site and/or the Mobile App. Your dealings or correspondence with, or participation in promotions of, advertisers other than us, and any terms, conditions, warranties or representations with such dealings, are solely between you and such third party. We are not responsible or liable for any loss or damage of any sort incurred as the result of any such dealings or as the result of the presence of third party advertisers on the Web site or the Mobile App.\n\n
6.2. \tUse of Third Party Tools.
\n\n We may provide you with access to third party tools over which we neither monitor nor have any control nor input.\n\n You acknowledge and agree that we provide access to such tools “as is” and “as available” without any warranties, representations or conditions of any kind and without any endorsement. We shall have no liability whatsoever arising from or relating to your use of optional third party tools.\n\n Any use by you of optional tools offered through the Web site and/or the Mobile App is entirely at your own risk and discretion, and you should ensure that you are familiar with and approve of the terms on which tools are provided by the relevant third party provider(s).\n\n We may also, in the future, offer new services and/or features through the Web site and/or the Mobile App, including but not limited to the release of new tools. Such new features and/or services shall also be subject to these Terms of Use.\n\n
6.3. \tThird Party Links.
\n\n Certain content, products and services available via our Web site and the Mobile App may include materials from third parties.\n\n Third party links on the Web site may direct you to third party Web sites and/or services that are not affiliated with us. We are not responsible for examining or evaluating the content or accuracy, and we do not warrant and will not have any liability or responsibility for any third party materials or Web sites and/or services, or for any other materials, products, or services of third parties.\n\n We are not liable for any harm or damages related to the purchase or use of goods, services, resources, content, or any other transactions made in connection with any third party with whom you connect via the Web site and/or the Mobile App. Please review carefully the third party's policies and practices and make sure you understand them before you engage in any transaction. Complaints, claims, concerns, or questions regarding third party transactions should be directed to the third party.\n\n

SECTION VII: DISCLAIMERS; LIMITATIONS OF LIABILITY; INDEMNIFICATION

\n\n
7.1. \tDisclaimer of Warranty; Limitation of Liability.
\n\n
    \n
  • (A) YOU AGREE THAT USE OF THE WEB SITE AND/OR THE MOBILE APP IS AT YOUR SOLE RISK. NEITHER US nor our AFFILIATES NOR ANY RESPECTIVE DIRECTORS, OFFICERS, USERS, EMPLOYEES, CONTRACTORS, PARENTS, SUBSIDIARIES, AGENTS, THIRD PARTY CONTENT PROVIDERS or LICENSORS, WARRANT THAT THE use of the Web site OR THE SERVICE PROVIDER SHALL BE UNINTERRUPTED OR ERROR FREE; NOR DO we MAKE ANY WARRANTY AS TO THE RESULTS THAT MAY BE OBTAINED FROM USE OF THE WEB SITE AND/OR THE MOBILE APP OR AS TO THE ACCURACY, RELIABILITY OR CONTENT OF ANY INFORMATION PROVIDED.\n\n
  • (B) ANY DOWNLOADABLE SOFTWARE, PRODUCTS OR OTHER MATERIALS, WITHOUT LIMITATION, IS PROVIDED ON AN \"AS IS\" AND “AS AVAILABLE” BASIS WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE OR IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE AGAINST INFRINGEMENT, OTHER THAN THOSE WARRANTIES WHICH ARE IMPLIED BY AND INCAPABLE OF EXCLUSION, RESTRICTION OR MODIFICATION UNDER THE LAWS APPLICABLE TO THESE TERMS OF USE.
  • \n\n
  • (C) ALTHOUGH ALL INFORMATION AND MATERIALS CARRIED ON THE WEB SITE ARE BELIEVED TO BE RELIABLE, WE MAKE NO REPRESENTATIONS, NEITHER EXPRESSLY NOR IMPLIEDLY, AS TO THE ACCURACY, COMPLETENESS, TIMELINESS OR RELIABILITY OF THE WEB SITE.
  • \n\n
  • (D) IN NO EVENT SHALL WE, our AFFILIATES NOR ANY RESPECTIVE DIRECTORS, OFFICERS, USERS, EMPLOYEES, CONTRACTORS, PARENTS, SUBSIDIARIES, AGENTS, THIRD PARTY CONTENT PROVIDERS or LICENSORS BE LIABLE TO YOU OR ANYONE ELSE FOR ANY LOSS OR DAMAGES WHATSOEVER, INCLUDING BUT NOT LIMITED TO ANY DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, PUNITIVE, OR OTHER DAMAGES, INCLUDING BUT NOT LIMITED TO EXEMPLARY, RELIANCE, OR CONSEQUENTIAL DAMAGES, LOSS OF PROFITS, DAMAGES RESULTING FROM LOST DATA OR BUSINESS INTERRUPTION, personal injury or death, property damage, EXEMPLARY REPUTATIONAL HARM, OR LOSS OF INFORMATION OR DATA, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE THE WEB SITE AND/OR THE MOBILE APP, ANY INTERACTIONS WITH A USER, AND/OR ANY employment and/or employee/Client relationships facilitated by or through the web site AND/OR THE MOBILE APP.
  • \n\n
  • (E) WE DISCLAIM ANY AND ALL LIABILITY OF ANY KIND FOR ANY UNAUTHORIZED ACCESS TO OR USE OF YOUR PERSONALLY-IDENTIFIABLE INFORMATION. BY utilizing THE WEB SITE AND/OR THE MOBILE APP YOU ACKNOWLEDGE AND AGREe TO OUR DISCLAIMER OF ANY SUCH LIABILITY. IF YOU DO NOT AGREE, YOU SHOULD NOT ACCESS OR OTHERWISE Utilize THE WEB SITE or the mobile app.
  • \n
  • (F) GetElectrician' LIABILITY, AND (AS APPLICABLE) THE LIABILITY OF our AFFILIATES AND ANY RESPECTIVE DIRECTORS, OFFICERS, USERS, EMPLOYEES, CONTRACTORS, PARENTS, SUBSIDIARIES, AGENTS, THIRD PARTY CONTENT PROVIDERS AND LICENSORS TO YOU OR ANY THIRD PARTIES IN ANY CIRCUMSTANCE IS LIMITED TO THE GREATER OF (A) THE AMOUNT OF FEES YOU PAY TO GetElectrician IN THE TWELVE (12) MONTHS PRIOR TO THE ACTION GIVING RISE TO LIABILITY, OR (B) ONE HUNDRED U.S. DOLLARS ($100.00,) WHICHEVER IS GREATER.
  • \n
\n SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO CERTAIN USERS.\n\n The above limitations shall survive these Terms and inure to the benefit of us and our affiliates and respective directors, officers, Users, employees, contractors, parents, subsidiaries, agents, Third party content providers and licensors.\n\n
7.2. \tINDEMNIFICATION.
\n You agree to defend, indemnify and hold us harmless, as well as our AFFILIATES NOR ANY RESPECTIVE DIRECTORS, OFFICERS, USERS, EMPLOYEES, CONTRACTORS, PARENTS, SUBSIDIARIES, AGENTS, THIRD PARTY CONTENT PROVIDERS or LICENSORS, from and against all claims, SUITS, and expenses, including attorneys' fees, arising out of OR RELATED TO (a) YOUR USE OF THE WEB SITE AND/OR THE MOBILE APP; (B) your noncompliance with or breach of this Agreement; (C) your use of third party SERVICES, products, links, advertisements, and/or tools; (D) YOUR VIOLATIONS OF ANY THIRD PARTY RIGHTS, INCLUDING THIRD PARTY INTELLECTUAL PROPERTY RIGHTS; or (E) the unauthorized use of the Web site AND/OR THE MOBILE APP by any other person using your information. GetElectrician shall provide notice to you promptly of any such claim, suit, or proceeding and may assist you, at your expense, in defending any such claim, suit or proceeding.\n\n

SECTION VII: GOVERNING LAW; ARBITRATION

\n
8.1. \tGoverning Law.
\n\n These Terms shall be governed and construed in accordance with the laws of the state of Michigan without regard to its conflicts of law provisions. You agree to submit to the personal jurisdiction of the courts located in New York County, New York, and any cause of action that relates to or arises from these Terms, Web site and/or the Mobile App must be filed therein unless subject to the binding arbitration provisions of Section 8.2, infra.\n\n
8.2. \tArbitration.
\n\n The Parties agree that any dispute concerning, relating, or referring to these Terms, Web site, and/or the Mobile App shall be resolved exclusively by binding arbitration in accordance with the substantive laws of the state of New York and shall be brought for arbitration in New York County, New York, pursuant to the Commercial Arbitration Rules of the American Arbitration Association. The arbitrator and not any federal, state, or local court or agency shall have exclusive authority to resolve any dispute relating to the interpretation, applicability, enforceability, conscionability, or formation of this contract, including but not limited to any claim that all or any part of this contract is void or voidable. Nothing herein prevents either Party from seeking any interim injunction it deems necessary in order to preserve the status quo prior to the resolution of any dispute, in any jurisdiction. Either or both Parties may initiate the arbitration proceedings, and both shall share the expenses and fees of the arbitration equally.\n\n

SECTION IX: MISCELLANEOUS

\n
10.1. \tCustomer Service.
\n\n Should you have any questions, comments or concerns regarding the Web site, customer service may be contacted at any time via email at customerservice@getelectrician.com. We strive to return all customer service inquires within forty-eight (48) business hours, between 8 a.m. and 8 p.m. EST/EDT.\n\n
9.2. \tAffiliate Disclosure.
\n\n We may have an affiliate relationship with third parties and affiliates to whose products and/or services we link and promote. Because of this relationship we may earn a commission on products purchased by you from a third party affiliate.\n\n
9.3. \tAuthority.
\n\n Each Party represents and warrants to the other that it has full power and authority to enter into this Agreement and that it is binding upon such Party and enforceable in accordance with its Terms.\n\n
9.4. \tWaiver.
\n\n Any waiver of a right under these Terms of Use shall only be effective if agreed or declared in writing. No waiver of any term of this Agreement shall be deemed a further or continuing waiver of such term or any other term and shall not prevent a Party from exercising that right in the future. The rights and remedies herein provided are cumulative and not exclusive of any rights and remedies provided by law.\n\n
9.5. \tForce Majeure.
\n\n We shall not be bound to meet any obligation if prevented from doing so as a consequence of acts of god or force majeure, including but not limited to measures taken or imposed by any government or public authority or in case of any other event beyond our control, including but not limited to natural disasters (such as storm, hurricane, fire, flood, earthquake), war, civil unrest, terrorist activities, states of emergency, government sanctions, embargos, nationalizations, strikes and breakdowns of public utilities (such as of electricity or telecommunication services). We shall use all reasonable efforts to notify you of the circumstances causing the delay and to resume performance as soon as possible, both without undue delay.\n\n
9.6. \tAssignment.
\n\n We shall have the right to assign and/or transfer these Terms of Use and our rights and obligations hereunder to any third party after notifying you as provided for herein. You agree and acknowledge that you shall not assign or transfer its rights or sub-contract or delegate the performance of any of your obligations under these Terms of Use without our prior written consent in our sole and exclusive discretion or as provided for herein.\n\n
9.7. \tRights of Third Parties.
\n\n These Terms do not give any right to any third party unless explicitly stated herein.\n\n
9.8. \tRelationship of the Parties.
\n\n The Parties are independent contractors under these Terms, and nothing herein shall be construed to create an employment agreement, partnership, joint venture, franchise relationship or agency relationship between them. Neither Party has authority to enter into Terms of any kind in the name of the other Party. You are an independent contractor responsible for controlling your own time and actions. GetElectrician is not to be considered a Client, and GetElectrician will not be responsible in any way for any employment decision made by any User and/or Client.\n\n
9.9. \tSeverability.
\n\n If any part of this Agreement is determined to be invalid or unenforceable by applicable law, then the invalid or unenforceable provision will be deemed superseded by a valid, enforceable provision that most closely matches the intent of the original provision and the remainder of this Agreement will continue in effect.\n\n
9.10.\tNotices.
\n\n Except as explicitly stated otherwise, any notices shall be given by postal mail to Xavior, Inc., d/b/a GetElectrician, a New York corporation with a principal place of business located at 40 First Avenue, #15C, New York, NY 10009, or, in the case of any User, to the email address you provide to us (either during the registration process or when your email address changes.) Notice shall be deemed given twenty-four (24) hours after email is sent, unless the sending party is notified that the email address is invalid. Alternatively, we may give you notice by certified mail, postage prepaid and return receipt requested, to the address provided to us upon Account registration. In such case, notice shall be deemed given three (3) days after the date of mailing.\n\n
9.11. \tEntire Agreement.
\n\n This Agreement constitutes the entire Agreement between the Parties, and no other representations or promises of any kind shall be binding between the same. If any portion of this Agreement is held to be invalid, the balance of this Agreement shall remain in full force and effect.\n`;","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport { TERMS_OF_USE } from '../register/components/termsOfUse';\nimport parse from 'html-react-parser';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n padding: '10px',\n },\n});\n\n\nconst TermsOfUseContainer = (props) => {\n const {\n classes,\n } = props;\n\n return (\n
\n {parse(TERMS_OF_USE)}\n
\n )\n}\n\nexport default withStyles(styles)(TermsOfUseContainer);","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport Grid from '@material-ui/core/Grid';\nconst styles = theme => ({\n footer: {\n fontFamily: \"'Noto Sans', sans-serif\",\n display: 'flex',\n flexWrap: 'wrap',\n padding: '0',\n width: '100%',\n },\n text: {\n textAlign: 'center',\n margin: 'auto',\n verticalAlign: 'middle',\n },\n});\n\nconst FooterContainer = (props) => {\n const {\n classes,\n } = props;\n\n return (\n \n )\n}\n\nexport default withStyles(styles)(FooterContainer);\n","\nimport React from 'react';\n\nconst DeleteIconSvg = () => (\n \n);\n\nexport default DeleteIconSvg;","\nimport React from 'react';\n\nconst EditIconSvg = () => (\n \n);\n\nexport default EditIconSvg;","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Paper from '@material-ui/core/Paper';\nimport Fab from '@material-ui/core/Fab';\nimport DeleteIconSvg from '../../icons/DeleteIconSvg';\nimport EditIconSvg from '../../icons/EditIconSvg';\nimport { Link } from '@material-ui/core';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n paddingBottom: '100px'\n },\n table: {\n width: \"100%\",\n minWidth: 700,\n },\n th: {\n paddingLeft: '2px',\n paddingRight: '2px',\n },\n title: {\n cursor: 'pointer',\n paddingLeft: '2px',\n paddingRight: '2px',\n fontWeight: '600',\n color: '#3cb63c',\n },\n row: {\n '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n },\n});\n\n//if user is defined redirect to dashboard\nconst ProjectList = (props) => {\n const {\n classes,\n user,\n projects,\n trs,\n handleClickRemoveProject,\n history,\n } = props;\n\n const editProject = (project, user) => {\n const editProjectEnabled = (project.status !== 'COMPLETED' && project.status !== 'CLOSED' && project.status !== 'ARCHIVED' && !user.userType.includes('p')) ? true : false;\n if(editProjectEnabled) {\n return { history.push(`/editProject/${project.id}`) }}\n id=\"icon\"\n >\n \n \n\n } \n return \"\";\n }\n\n let filteredTrs = trs;\n if (user.userType.includes(\"p\")) {\n filteredTrs = trs.filter(function(e) { return e !== 'Proposal #' })\n }\n return (\n \n \n \n \n {filteredTrs.map(tr => {\n const align = tr === 'Proposal #' || tr === 'Actions' || tr === 'ID' ? 'center' : 'left';\n return {tr}\n })}\n \n \n \n \n {\n projects.map(row => {\n if (user.userType !== 's' && user.userType.includes(\"p\")) {\n return (\n \n {row.id}\n \n { history.push(`/project/${row.id}`) }}\n >{row.title}\n {row.createdDate}\n {row.updatedDate}\n {row.endBiddingDate}\n \n {editProject(row, user)}\n handleClickRemoveProject(row.id, history)}\n id=\"icon\"\n >\n \n \n \n \n );\n }\n return (\n \n \n {row.id}\n \n { history.push(`/project/${row.id}`) }}\n >{row.title}\n {row.createdDate}\n {row.updatedDate}\n {row.endBiddingDate}\n {row.proposalCount}\n \n {editProject(row, user)}\n handleClickRemoveProject(row.id, history)}\n id=\"icon\"\n >\n \n \n \n \n\n );\n })\n }\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(ProjectList);\n\n","import { connect } from 'react-redux';\nimport ProjectList from '../components/ProjectList';\nimport { fetchRemoveProject } from '../../actions/api'\n\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n projects: (state.ee.dashboard && state.ee.dashboard.projects) ? state.ee.dashboard.projects : [],\n trs: ['ID', 'Title', 'Create date', 'Update date', 'Bidding date', 'Proposal #', 'Actions'],\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleClickRemoveProject: (projectId, history) => {\n dispatch(fetchRemoveProject(projectId, history));\n }\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ProjectList);\n","\nimport React from 'react';\n\nconst MessageIconSvg = () => (\n \n);\n\nexport default MessageIconSvg;","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Paper from '@material-ui/core/Paper';\nimport Fab from '@material-ui/core/Fab';\nimport DeleteIconSvg from '../../icons/DeleteIconSvg';\nimport MessageIconSvg from '../../icons/MessageIconSvg';\nimport IconButton from '@material-ui/core/IconButton';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n },\n table: {\n width: \"100%\",\n minWidth: 700,\n },\n th: {\n paddingLeft: '2px',\n paddingRight: '2px',\n },\n row: {\n '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n },\n project: {\n cursor: 'pointer',\n paddingLeft: '2px',\n paddingRight: '2px',\n fontWeight: '600',\n color: '#3cb63c',\n },\n});\n\nconst ProposalList = (props) => {\n const {\n classes,\n user,\n proposals,\n projectId,\n dashboardTrs,\n history,\n handleClickMessageDialogOpen,\n handleProposalDeleteClick,\n } = props;\n\n if (user.userType === 'c') {\n return (\n \n \n \n \n {dashboardTrs.map(tr => (\n {tr}\n ))}\n \n \n \n {proposals.map(row => (\n \n {row.projectId}\n {row.companyName ? row.companyName : row.providerDisplayName}\n { history.push(`/project/${row.projectId}`) }}\n >\n {row.scopes.map(scope => (\n \n {scope.description}\n \n ))} \n \n {row.total}\n {row.estimatedTime}\n {row.startDate}\n {row.createdDate}\n {row.updateDate}\n \n handleClickMessageDialogOpen(row.providerDisplayName, row.providerId, projectId)}>\n \n \n \n \n ))}\n \n
\n
\n );\n \n } else {\n // Provider doesn't need the following columns\n const hiddenColumns = ['Name'];\n\n return (\n \n \n \n \n {dashboardTrs.filter(col => {\n if (hiddenColumns.indexOf(col.trim()) !== -1) return false;\n return true;\n }).map(tr => (\n {tr}\n ))}\n \n \n \n {proposals.map(row => (\n { history.push(`/project/${row.projectId}`) }}>\n {row.projectId}\n \n {row.scopes.map(scope => scope.description)}\n \n {row.total}\n {row.estimatedTime}\n {row.startDate}\n {row.createdDate}\n {row.updateDate}\n \n handleProposalDeleteClick(row.id)}\n id=\"icon\"\n >\n \n \n \n \n ))}\n \n
\n
\n ); \n }\n};\n\nexport default withStyles(styles)(ProposalList);\n\n","import { connect } from 'react-redux';\nimport ProposalList from '../components/ProposalList';\nimport { getProposals } from '../../selectors/ee';\nimport { updateMessageDialog } from '../../actions/view';\nimport { fetchRemoveProposal } from '../../actions/api';\n\nconst mapStateToProps = state => {\n return {\n user: state.ee.user,\n proposals: getProposals(state),\n detailsTrs: ['Provider', 'Scopes', 'Cost total', 'Estimated Time', 'Start date', 'Create date', 'Update date', 'Comments', 'Actions'],\n dashboardTrs: ['Project ID', 'Name', 'Scopes', 'Cost total', 'Estimated Time', 'Start date', 'Create date', 'Update date', 'Actions'],\n isDashboardView: false,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n handleProposalDeleteClick: (proposalId) => {\n dispatch(fetchRemoveProposal(proposalId));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ProposalList);\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Paper from '@material-ui/core/Paper';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n },\n table: {\n width: \"100%\",\n minWidth: 700,\n },\n head: {\n backgroundColor: '#c2c2c2',\n },\n th: {\n paddingLeft: '3px',\n paddingRight: '2px',\n },\n row: {\n '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n }\n});\n\nconst ReviewList = (props) => {\n const {\n classes,\n messageType,\n reivews,\n trs,\n } = props;\n\n\n return (\n \n \n \n \n {trs.map(tr => (\n {tr.title}\n ))}\n \n \n \n {reivews.map(row => (\n \n {messageType !== 'user-action' &&\n {row.displayName}}\n {row.projectId}\n {row.overall}\n {row.recommend === \"1\" ? 'YES' : 'NO'}\n {row.comment}\n {row.date}\n \n ))}\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(ReviewList);\n\n","import { connect } from 'react-redux';\nimport ReviewList from '../components/ReviewList';\nimport { getReviews } from '../../selectors/ee';\nimport { updateMessageDialog } from '../../actions/view';\n\nconst mapStateToProps = state => {\n return {\n user: state.ee.user,\n reivews: getReviews(state),\n messageType: 'user-message',\n trs: [{\n title: 'Eletrician Name',\n align: 'center'\n \n }, {\n title: 'Project ID',\n align: 'center',\n }, {\n title: 'Overall score',\n align: 'center',\n }, {\n title: 'Recommend?',\n align: 'center',\n }, {\n title: 'Comments',\n align: 'center',\n }, {\n title: 'Date',\n align: 'center',\n }]\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ReviewList);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport Typography from '@material-ui/core/Typography';\n// import ExpandMoreIcon from './ExpandMoreIconSvg';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n },\n heading: {\n fontSize: theme.typography.pxToRem(18),\n fontWeight: theme.typography.fontWeightBold,\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n ].join(','),\n },\n panelDetails: {\n padding: '0px 20px 10px 20px',\n },\n panelDetailsTypography: {\n width: '100%',\n fontSize: theme.typography.pxToRem(16),\n fontWeight: theme.typography.fontWeightBold,\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n ].join(','),\n },\n \n});\n\nfunction ExpansionPanelComponent(props) {\n const { \n classes,\n title,\n details,\n history,\n } = props;\n return (\n
\n \n }>\n {title}\n \n \n \n {details}\n \n \n \n
\n );\n}\n\nExpansionPanelComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n title: PropTypes.string.isRequired,\n details: PropTypes.object.isRequired,\n};\n\nexport default withStyles(styles)(ExpansionPanelComponent);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport {\n fetchDashboard, fetchAllScopes\n} from '../../actions/api';\nimport ProjectListContainer from '../containers/ProjectListContainer';\nimport ProposalListContainer from '../containers/ProposalListContainer';\nimport ReviewListContainer from '../containers/ReviewListContainer';\nimport ExpansionPanelComponent from '../components/ExpansionPanelComponent';\n\n//TODO: working proposal list on dashboard\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getDashboardData: (history) => {\n dispatch(fetchDashboard(history));\n },\n getScopeData: (history) => {\n dispatch(fetchAllScopes(history));\n },\n});\n\nclass DashboardContainer extends Component {\n componentDidMount() {\n // this.props.getDashboardData(this.props.history);\n if (!this.props.scopes || this.props.scopes.length === 0) {\n this.props.getScopeData(this.props.history);\n }\n }\n\n componentWillReceiveProps() {\n this.props.getDashboardData(this.props.history);\n if (!this.props.scopes || this.props.scopes.length === 0) {\n this.props.getScopeData(this.props.history);\n }\n }\n\n render() {\n return (\n
\n {/* } /> */}\n } />\n } />\n {/* } /> */}\n } />\n {/* } />\n } /> */}\n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(DashboardContainer);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { ToastContainer, toast } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.css';\nimport { updateNotification, updateMessageDialog } from '../actions/view';\n\nconst mapStateToProps = (state, ownProps) => ({\n user : state.ee.user,\n notification: state.view.notification,\n history: ownProps.history,\n});\n\nconst mapDispatchToProps = dispatch => ({\n display: (text, type) => {\n if (type === 'error') {\n toast.error(text);\n } else if (type === 'info') {\n toast.info(text);\n } else {\n toast(text);\n }\n },\n // updateNotification: (display) => {\n // dispatch(updateNotification({\n // display: true, \n // text: 'TEST',\n // type: toast.TYPE.SUCCESS\n // }));\n // },\n // idleNotification: (display) => {\n // dispatch(updateNotification({\n // display: false, \n // text: '',\n // type: toast.TYPE.INFO\n // }));\n // },\n // test: (replyDisplay, replyId) => {\n // const message = {\n // open: true,\n // replyDisplay,\n // replyId,\n // }\n // dispatch(updateMessageDialog(message));\n // },\n});\n\nclass NotificationContainer extends Component {\n render() {\n const { \n notification, \n display, \n // updateNotification, \n // idleNotification, \n // test,\n } = this.props;\n\n if (notification.display) {\n display(notification.text, notification.type);\n }\n return (\n
\n \n
\n )\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(NotificationContainer);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport 'react-toastify/dist/ReactToastify.css';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { updateMessageDialog, closeMessaegDialog, updateMessageDialogText, disableMessageSubmit } from '../../actions/view';\nimport { fetchSendMessage } from '../../actions/api';\n\nconst mapStateToProps = (state, ownProps) => ({\n user : state.ee.user,\n message: state.view.message,\n history: ownProps.history,\n});\n\nconst mapDispatchToProps = dispatch => ({\n handleMessageChange: (text) => {\n dispatch(updateMessageDialogText(text))\n },\n handleSubmit: (history) => {\n dispatch(disableMessageSubmit());\n dispatch(fetchSendMessage(history));\n },\n handleClose: () => {\n dispatch(closeMessaegDialog());\n }\n});\n\nclass MessageDialogContainer extends Component {\n render() {\n const { \n message, \n history, \n handleClose, \n handleMessageChange, \n handleSubmit, \n } = this.props;\n\n const { submitDisabled } = message;\n return (\n
\n \n Send message\n \n \n Send message\n \n \n {handleMessageChange(event.target.value)}}\n value={message.text}\n />\n \n \n \n \n \n \n
\n )\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(MessageDialogContainer);\n","\nimport React from 'react';\n\nconst CHeckedIconSvg = () => (\n \n);\n\nexport default CHeckedIconSvg;","\nimport React from 'react';\n\nconst UncheckedIconSvg = () => (\n \n);\n\nexport default UncheckedIconSvg;","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\nimport CheckedIconSvg from '../../icons/CheckedIconSvg';\nimport UncheckedIconSvg from '../../icons/UncheckedIconSvg';\nimport Divider from '@material-ui/core/Divider';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n fontSize: '15px',\n fontColor: '#222222',\n padding: '0px 20px 10px 20px',\n marginBottom: '20px'\n },\n row: {\n '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n },\n project: {\n display: 'flex',\n justifyContent: 'space-between',\n paddingBottom: '16px',\n },\n title: {\n color: '#01DF01',\n weight: 200,\n fontSize: '22px', },\n removed: {\n color: '#FF4500'\n },\n grey: {\n color: '#222',\n },\n scopes: {\n display: 'inline',\n },\n scope: {\n backgroundColor:'#F2F2F2',\n margin: theme.spacing.unit,\n color: 'black !important',\n },\n selectedScope: {\n display: 'inline',\n },\n label: {\n fontSize: '12px',\n fontWeight: '800',\n paddingRight: '6px',\n }, \n creationInfo: {\n paddingBottom: '15px',\n },\n checkbox: {\n display: 'inline-flex',\n paddingRight: '24px'\n },\n select: {\n display: 'inline-flex',\n fontSize: '18px',\n border: 'solid 1px #c2c2c2',\n borderRadius: '18px',\n backgroundColor: '#3cb63c7a',\n height: '45px',\n margin: '10px 50px'\n },\n saveSelect: {\n display: 'inline-flex',\n fontSize: '18px',\n height: '45px',\n margin: '10px 50px',\n backgroundColor: '#3cb63c7a'\n },\n selectDisabled: {\n color: 'rgba(0, 0, 0, 0.26) !important',\n boxShadow:'none !important',\n boarder: '0px',\n backgroundColor: '#f2f2f2',\n },\n selectContent: {\n padding: '6px 25px 6px 25px',\n border: '0px',\n },\n buttons: {\n display: 'inline-flex',\n width: '50%',\n },\n completed: {\n marginLeft: '6px',\n },\n});\n\nconst ProjectDetail = (props) => {\n const {\n classes,\n user,\n project,\n history,\n isSelect,\n showCompleted,\n handleEditProjectClick,\n handleCloseProjectClick,\n handleReopenProjectClick,\n handleProjectDeleteClick,\n handleScopeSelectSave,\n dialogOpen,\n handleDialogOpen,\n handleDialogClose,\n handleClickMessageDialogOpen,\n } = props;\n\n\n const showEditProject = ((project.status === 'CREATED' || project.status === 'UPDATED' || project.status === 'REOPENED') && !user.userType.includes('p'))? true: false;\n const showCloseProject = ((project.status === 'CREATED' || project.status === 'UPDATED' || project.status === 'REOPENED') && !user.userType.includes('p'))? true: false;\n const showReopenProject = (project.status === 'CLOSED' && !user.userType.includes('p'))? true: false;\n const showOffer = ((project.status === 'CREATED' || project.status === 'UPDATED' || project.status === 'REOPENED') && user.userType.includes('p'))? true: false;\n const SELECTED = project.status === 'SELECTED';\n const showWriteReview = (SELECTED || project.status === 'COMPLETED' || project.status === 'INCOMPLETED' )&& !user.userType.includes('p');\n let selectedCount = 0;\n project.scopes.map(addedScope => {\n if(addedScope && addedScope.providerDisplayName) {\n return selectedCount++;\n }\n return; \n });\n const unselectedScopeList = project.scopes.map(addedScope => {\n if(!addedScope.providerDisplayName) {\n return addedScope.name;\n }\n });\n const editProposalPath = '/editProposal/' + project.id\n return (\n \n {project.status === 'SELECTED' && PROPOSAL SELECTED}\n {project.status !== 'SELECTED' && {project.status}}\n {project.completed && COMPLETED}\n\n
\n
\n project no: {project.id} \n
\n \n {showEditProject && { history.push(`/editProject/${project.id}`) }}\n classes={{\n label: classes.label, \n }}\n >\n Edit\n }\n {showCloseProject && handleCloseProjectClick(project.id)}\n classes={{\n label: classes.label, \n }}\n >\n Close\n }\n {/* {showReopenProject && handleReopenProjectClick(project.id)}\n classes={{\n label: classes.label, \n }}\n >\n Reopen\n } */}\n {showCloseProject && handleProjectDeleteClick(project.id, history)}\n classes={{\n label: classes.label, \n }}\n >\n Delete\n }\n \n {showOffer &&
\n \n {/* \n Quick Offer \n */}\n \n Write Proposal\n \n handleClickMessageDialogOpen(project.ownerDisplayName, project.owner, project.id)}\n classes={{\n label: classes.label, \n }}\n >\n Send Message\n \n \n
}\n
\n\n
Created at {project.createdDate} last update : {project.updatedDate}
\n {project.status==='CLOSED' &&
This project is closed by owner. You have limited access.
}\n {project.status==='ARCHIVED' &&
This project is removed by owner. You have limited access.
}\n \n\n
\n {/* */}\n {project.scopes.map(addedScope => (\n
\n \n {isSelect &&
\n ---- \n {addedScope.providerDisplayName && \n \n }\n {!addedScope.providerDisplayName && \n \n }\n
}\n
\n ))}\n {isSelect &&
\n \n
}\n \n \n Confirm\n \n \n {selectedCount === 0 && \n \n No scope selected: {unselectedScopeList}\n \n }\n {selectedCount !== 0 && \n \n Do you want to select proposal now? We will send providers' information and you cannot reselect proposal. \n \n } \n \n \n \n {!unselectedScopeList && }\n \n \n
\n \n\n {!project.blocked && \n
\n
\n \n {project.zipcode}\n
\n \n
\n \n $ {project.budgetMin} ~ $ {project.budgetMax}\n
\n \n
\n \n {project.supportingInfo} \n
\n \n
\n
\n \n {project.emergency &&\n }\n {!project.emergency && }\n
\n
\n \n {project.company && }\n {!project.company && }\n
\n
\n \n {project.insurance && }\n {!project.insurance && }\n
\n
\n \n {project.license && }\n {!project.license && }\n
\n
\n \n
\n {project.startDate}\n
\n
\n {project.startTime} / \n {project.endTime}\n
\n \n
\n \n {project.endBiddingDate}
\n \n
\n {project.day.map(day => (\n \n ))}\n
\n
\n }\n
\n );\n};\n\nexport default withStyles(styles)(ProjectDetail);\n\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport clsx from 'clsx';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport Divider from '@material-ui/core/Divider';\nimport DeleteIconSvg from '../../icons/DeleteIconSvg';\nimport EditIconSvg from '../../icons/EditIconSvg';\nimport IconButton from '@material-ui/core/IconButton';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '10px 10px 10px 20px',\n background: '#f2f5f2'\n },\n listItem: {\n display: 'block',\n },\n table: {\n width: \"100%\",\n minWidth: 700,\n },\n th: {\n paddingLeft: '2px',\n paddingRight: '2px',\n },\n row: {\n '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n },\n scope: {\n backgroundColor:'#F2F2F2',\n fontSize: '12px',\n },\n tableActions: {\n display: 'flex',\n },\n tableIcon: {\n padding: '2px',\n }, heading: {\n fontSize: theme.typography.pxToRem(18),\n fontWeight: theme.typography.fontWeightBold,\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n ].join(','),\n },\n panelDetails: {\n padding: '0px 10px 10px 20px',\n },\n subLabel: { \n fontWeight: 700,\n paddingRight: '6px',\n fontSize: '13px',\n },\n button: {\n padding: '0',\n marginRight: '2px',\n marginLeft: '6px'\n },\n select: {\n display: 'inline-flex',\n position: 'absolute',\n right: '40px',\n fontSize: '18px',\n border: 'solid 1px #c2c2c2',\n borderRadius: '18px',\n backgroundColor: '#3cb63c',\n height: '45px',\n },\n selectContent: {\n padding: '6px 25px 6px 25px',\n },\n selected:{\n fontSize: '11px',\n borderRadius: '20px',\n background: '#73AD21',\n padding: '2px',\n marginLeft: '5px'\n },\n});\n\nconst ProposalScopeList = (props) => {\n const {\n classes,\n user,\n scopeDetailList,\n isSelect,\n isEdit,\n projectStatus,\n handleEditProposalScopeClick,\n handleDeleteProposalScope,\n handleScopeSelectClick,\n } = props;\n\n const abledDelete = projectStatus !== 'SELECTING' && projectStatus !== 'CLOSED' \n && projectStatus !== 'SELECTED' && projectStatus !== 'ARCHIVED' && projectStatus !== 'COMPLETED' ;\n const abledEdit = (isEdit && abledDelete)? true : false;\n return (\n
\n \n \n {scopeDetailList.map(scopeDetail => (\n \n
\n {scopeDetail.description}\n { scopeDetail.status === \"SELECTED\" ? 'SELECTED' : ''} \n \n {abledEdit && user.userType !== 'c' && handleEditProposalScopeClick(scopeDetail.scopeId)}\n id=\"icon\"\n >\n \n }\n {abledEdit && user.userType !== 'c' && handleDeleteProposalScope(scopeDetail.scopeId)}\n id=\"icon\"\n >\n \n }\n {isSelect &&
\n
handleScopeSelectClick(scopeDetail)}>Select
\n
}\n
\n
\n \n {scopeDetail.hour} hour(s)\n
\n
\n \n $ {scopeDetail.scopeTotalCost}\n
\n
\n \n {scopeDetail.type} \n {scopeDetail.type !== 'Hourly' &&\n $ {scopeDetail.scopeTotalCost} = {scopeDetail.cost} * {scopeDetail.unit} (unit) \n }\n {scopeDetail.type === 'Hourly' && Labor $ {scopeDetail.scopeTotalCost} = {scopeDetail.userRate}/hour * ${scopeDetail.hour}\n + Meterial cost: ${scopeDetail.material} \n }\n
\n
\n \n {scopeDetail.comment}\n
\n
\n ))}\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(ProposalScopeList);\n\n","import { connect } from 'react-redux';\nimport ProposalScopeList from '../components/ProposalScopeList';\nimport { prepareEditScopeDetail, deleteProposalScope } from '../../actions/ee';\nimport { updateMessageDialog } from '../../actions/view';\nimport { selectScope } from '../../actions/ee';\nimport { fetchRemoveProposal } from '../../actions/api';\nimport { getProjectStatus } from '../../selectors/ee';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n scopeDetailList: ownProps.scopeDetailList,\n isDashboardView: false,\n isSelect: getProjectStatus(state) === 'SELECTING',\n isEdit: ownProps.isEdit || false,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n handleProposalDeleteClick: (proposalId) => {\n dispatch(fetchRemoveProposal(proposalId));\n },\n handleEditProposalScopeClick: (scopeId) => {\n dispatch(prepareEditScopeDetail(scopeId));\n },\n handleDeleteProposalScope: (scopeId) => {\n dispatch(deleteProposalScope(scopeId));\n },\n handleScopeSelectClick: (scopeDetail) => {\n dispatch(selectScope(scopeDetail));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ProposalScopeList);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport IconButton from '@material-ui/core/IconButton';\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport Button from '@material-ui/core/Button';\nimport MessageIconSvg from '../../icons/MessageIconSvg';\nimport DeleteIconSvg from '../../icons/DeleteIconSvg';\nimport ProposalScopeListContainer from '../containers/ProposalScopeListContainer';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '10px 16px 10px 16px',\n marginBottom: '6px',\n },\n table: {\n width: \"100%\",\n minWidth: 700,\n },\n th: {\n paddingLeft: '2px',\n paddingRight: '2px',\n },\n row: {\n '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n },\n scope: {\n backgroundColor:'#F2F2F2',\n margin: theme.spacing.unit,\n fontSize: '12px',\n \n },\n tableActions: {\n display: 'flex',\n },\n tableIcon: {\n marginLeft: '4px',\n marginRight: '4px',\n padding: '0',\n }, \n heading: {\n fontSize: theme.typography.pxToRem(18),\n fontWeight: theme.typography.fontWeightBold,\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n ].join(','),\n },\n panelDetails: {\n padding: '0px 10px 10px 20px',\n },\n subLabel: { \n fontWeight: 700,\n paddingRight: '6px',\n fontSize: '13px',\n },\n heavy: {\n fontWeight: 600,\n }, \n boarder: {\n borderTop: 'solid 1px #3cb63c',\n borderBottom: 'solid 2px #3cb63c'\n }, \n proposal: {\n fontSize: '18px',\n fontWeight: '600',\n color: '#3cb63c'\n },\n select: {\n display: 'inline-flex',\n fontSize: '18px',\n border: 'solid 1px #c2c2c2',\n borderRadius: '18px',\n backgroundColor: '#3cb63c',\n height: '45px',\n margin: '10px 50px'\n },\n selectContent: {\n padding: '6px 25px 6px 25px',\n },\n proposalTitle: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n underline: {\n textDecoration: 'underline',\n},\n});\n\nconst ProposalList = (props) => {\n const {\n classes,\n history,\n user,\n proposals,\n isDashboardView,\n projectStatus,\n handleClickMessageDialogOpen,\n handleProposalDeleteClick,\n handleSelectSave,\n } = props;\n\n const abledDelete = projectStatus !== 'SELECTING' && projectStatus !== 'CLOSED' \n && projectStatus !== 'SELECTED' && projectStatus !== 'ARCHIVED' && projectStatus !== 'COMPLETED' ;\n const abledEdit = (abledDelete && user.userType.includes('p')) ? true: false;\n const showSelect = (projectStatus === 'CREATED' || projectStatus === 'UPDATED' || projectStatus === 'REOPENED') && !user.userType.includes('p');\n const showWriteReview = (!user.userType.includes('p')) && (projectStatus === 'SELECTED' || projectStatus === 'COMPLETED') ;\n\n return (\n
\n \n {proposals.map(row => (\n
\n {isDashboardView &&\n
{row.project}\n handleClickMessageDialogOpen(row.providerDisplayName, row.providerId, row.projectId)}>\n \n \n {abledDelete && handleProposalDeleteClick(row.id)}>\n \n }\n
\n }\n {!isDashboardView &&\n
\n \n \n {/*{abledEdit && { history.push(`/editProposal/${row.projectId}`) }}>\n \n }\n {abledDelete && handleProposalDeleteClick(row.id)}>\n \n } */}\n {!abledEdit && handleClickMessageDialogOpen(row.providerDisplayName, row.providerId, row.projectId)}\n classes={{\n label: classes.label, \n }}\n >\n Send Message\n }\n {showSelect && { handleSelectSave(history, row.id, row.projectId, row.providerId, row.scopes)}}\n classes={{\n label: classes.label, \n }}\n >\n Select\n }\n {showWriteReview && { history.push(`/writeReview/${row.projectId}/${row.providerId}`)}}\n classes={{\n label: classes.label, \n }}\n >\n Write Review\n }\n {abledEdit && \n Edit\n }\n {abledDelete && handleProposalDeleteClick(row.id)}\n classes={{\n label: classes.label, \n }}\n >\n Delete\n }\n \n
\n }\n\n
\n {/* {row.scopes.map(addedScope => (\n
\n \n
\n ))} */}\n
{row.total}
\n
{row.estimatedTime}
\n
{row.startDate}
\n
{row.createdDate} | {row.updateDate}
\n {!isDashboardView &&\n
{row.comments}
\n }\n
\n {row.scopeDetailList && \n \n }\n
\n ))}\n
\n );\n};\n\nexport default withStyles(styles)(ProposalList);\n\n","import { connect } from 'react-redux';\nimport ProposalList from '../components/ProposalList';\nimport { getProjectProposals, getProjectStatus } from '../../selectors/ee';\nimport { updateMessageDialog } from '../../actions/view';\nimport { fetchRemoveProposal, fetchSelect } from '../../actions/api';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n history: ownProps.history,\n user: state.ee.user,\n proposals: getProjectProposals(state),\n detailsTrs: ['Provider', 'Scopes', 'Cost total', 'Estimated Time', 'Start date', 'Create date', 'Update date', 'Comments', 'Actions'],\n dashboardTrs: ['Project ID', 'Scopes', 'Cost total', 'Estimated Time', 'Start date', 'Create date', 'Update date', 'Actions'],\n isDashboardView: false,\n isSelect: getProjectStatus(state) === 'SELECTING' || true, //todo: remove true\n projectStatus: getProjectStatus(state),\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n handleProposalDeleteClick: (proposalId) => {\n dispatch(fetchRemoveProposal(proposalId));\n },\n handleSelectSave: (history, proposalId, projectId, providerId, scopes) => {\n dispatch(fetchSelect(history, proposalId, projectId, providerId, scopes));\n }\n });\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ProposalList);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Box from '@material-ui/core/Box';\nimport Rating from '@material-ui/lab/Rating';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '0px 20px 10px 20px',\n },\n table: {\n width: \"100%\",\n minWidth: 700,\n },\n th: {\n paddingLeft: '2px',\n paddingRight: '2px',\n },\n heavy: {\n fontWeight: 600,\n }, \n row: {\n '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n },\n scope: {\n backgroundColor:'#F2F2F2',\n fontSize: '12px',\n \n },\n subLabel: { \n fontWeight: 700,\n paddingRight: '6px',\n },\n sm: {\n fontSize: '11px',\n padding: '2px',\n },\n rating: {\n fontSize: '20px',\n },\n recom: {\n borderRadius: '20px',\n background: '#73AD21',\n padding: '0px',\n marginLeft: '5px'\n },\n green: {\n color: '#01DF01',\n }, \n});\n\nconst ReviewList = (props) => {\n const {\n classes,\n reviews,\n handleClickMessageDialogOpen,\n } = props;\n\n const showReviews = reviews.length > 0 ? true: false;\n if(!showReviews) {\n return '';\n }\n return (\n
\n {/* */}\n
\n {reviews.map(review => (\n
\n
{review.displayName} {review.date}\n {review.recommend === \"1\" ? 'Recommend!' : ''}\n
\n
Project ID: {review.projectId}\n
\n \n \n {review.overall}\n \n \n
{review.comment}\n
\n
\n
\n ))}\n
\n
\n );\n};\n\nexport default withStyles(styles)(ReviewList);\n\n","import { connect } from 'react-redux';\nimport ReviewList from '../../review/components/ReviewList';\nimport { getProjectReviews } from '../../selectors/ee';\nimport { updateMessageDialog } from '../../actions/view';\n\nconst mapStateToProps = state => {\n return {\n user: state.ee.user,\n reviews: getProjectReviews(state),\n isDashboardView: false,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ReviewList);\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport clsx from 'clsx';\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\nimport CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank';\nimport StarIcon from '@material-ui/icons/Star';\nimport StarHalfIcon from '@material-ui/icons/StarHalf';\nimport { formatPhoneNumber } from '../util/phoneUtil';\nimport Button from '@material-ui/core/Button';\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport FavoriteIcon from '@material-ui/icons/Favorite';\nimport FavoriteBorderIcon from '@material-ui/icons/FavoriteBorder';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '16px',\n boarder: 'solid',\n border: 'solid 1px rgb(60,64,67)',\n borderRadius: '12px',\n overflow: 'hidden',\n marginBottom: '6px', \n },\n table: {\n width: \"100%\",\n minWidth: 700,\n },\n th: {\n paddingLeft: '2px',\n paddingRight: '2px',\n },\n row: {\n '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n },\n project: {\n cursor: 'pointer',\n paddingLeft: '2px',\n paddingRight: '2px',\n fontWeight: '500',\n },\n block: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '14px',\n },\n name: {\n fontSize: '22px',\n // color: '#3cb63c',\n weight: 200,\n },\n option: {\n paddingRight: '8px',\n marginRgiht: '10px!important',\n alignItems: 'center',\n },\n \"option:before\": {\n // content: '\\0022c5',\n marginLeft: '4px',\n marginRight: '4px', \n },\n bgColorGreen: {\n // backgroundColor: '#3cb63c',\n // color: '#FFFFFF',\n },\n bgColorGrey: {\n // backgroundColor: 'rgba(0, 0, 0, 0.12)',\n // color: '#FFFFFF',\n },\n icon: {\n // height: '0.8em',\n fontSize: '20px',\n width:'unset'\n },\n w400: {\n weight: 400,\n },\n divider: {\n marginRgiht: '16px',\n marginLeft: '16px',\n },\n paddingRight: {\n paddingRight: '6px'\n },\n paddingLeft: {\n paddingLeft: '6px'\n },\n pr16: {\n paddingRight: '16px'\n },\n yellow: {\n color: '#f5b042',\n },\n width100: {\n width: '500px'\n },\n bb: {\n paddingBottom: '16px',\n marginBottom: '-16px',\n width: '100%',\n borderBottom: 'solid 1px rgb(60,64,67)',\n // borderBottom: 'solid 1px red',\n },\n label: {\n fontSize: '11px',\n fontWeight: '800',\n paddingRight: '6px',\n }, \n buttongroup: {\n padding: '0 4px 0 6px',\n height: '24px',\n alignItems: 'center',\n }\n});\n\nconst ProviderList = (props) => {\n const {\n classes,\n project,\n providerList,\n handleClickMessageDialogOpen,\n } = props;\n \n return (\n
\n {\n providerList.map(provider => (\n
\n
\n \n {provider.displayName} \n \n \n \n \n handleClickMessageDialogOpen(provider.displayName, provider.id, project.id)}\n classes={{\n label: classes.label, \n }}\n >\n Send Message\n \n \n
\n
\n
4.8\n \n \n \n \n \n
\n
(123)
\n
\n
\n {provider.company && \n \n company \n \n }\n {!provider.company && \n \n company \n \n }\n \n {provider.license && \n \n License \n \n }\n {!provider.License && \n \n License \n \n }\n {provider.insurance && \n \n Insurance \n \n }\n {!provider.insurance && \n \n Insurance \n \n }\n
\n
\n
Open 24 Hours
| \n
{formatPhoneNumber(provider.tel)}
\n
{provider.website}
\n
\n
\n ))\n }\n
\n );\n};\n\nexport default withStyles(styles)(ProviderList);\n\n\n\n\n","export function formatPhoneNumber(phone) {\n let cleaned = ('' + phone).replace(/\\D/g, '');\n let match = cleaned.match(/^(\\d{3})(\\d{3})(\\d{4})$/);\n \n if (match) {\n return '(' + match[1] + ') ' + match[2] + '-' + match[3]\n };\n \n return null\n};","import { connect } from 'react-redux';\nimport ProviderList from '../../components/ProviderList';\nimport { getProjectProposals, getProjectStatus } from '../../selectors/ee';\nimport { updateMessageDialog } from '../../actions/view';\nimport { fetchRemoveProposal } from '../../actions/api';\n\nconst mapStateToProps = state => {\n return {\n user: state.ee.user,\n providerList: state.ee.project.providerList,\n project: state.ee.project,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n handleProposalDeleteClick: (proposalId) => {\n dispatch(fetchRemoveProposal(proposalId));\n },\n });\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ProviderList);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport ProjectDetail from '../components/ProjectDetail';\nimport ProposalListContainer from './ProposalListContainer';\nimport ReviewListContainer from './ReviewListContainer';\nimport { getProject, getProjectStatus, getCompleted } from '../../selectors/ee';\nimport { fetchGetProject, fetchCloseProject, fetchRemoveProject, fetchRemoveProposal, fetchAllScopes, fetchSaveSelectScopes } from '../../actions/api';\nimport Container from '@material-ui/core/Container';\nimport { dialogOpen, dialogClose, updateMessageDialog } from '../../actions/view';\nimport ProviderListContainer from './ProviderListContainer';\n\nconst mapStateToProps = (state, ownProps) => {\n const projectId = (ownProps.match.params.projectId !== undefined) ? ownProps.match.params.projectId : null;\n return {\n user: state.ee.user,\n projectId,\n project: getProject(state),\n hasReview: state.ee.project.reviews ? true : false,\n history: ownProps.history,\n isSelect: getProjectStatus(state) === 'SELECTING',\n dialogOpen: state.view.dialogOpen,\n showCompleted: getCompleted(state),\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getProjectData: (projectId) => {\n dispatch(fetchGetProject(projectId));\n },\n getScopeData: (history) => {\n dispatch(fetchAllScopes(history));\n },\n handleEditProjectClick: (projectId) => {\n dispatch(fetchCloseProject(projectId));\n },\n handleCloseProjectClick: (projectId) => {\n dispatch(fetchCloseProject(projectId));\n },\n handleReopenProjectClick: (projectId, history) => {\n dispatch(fetchCloseProject(projectId, history));\n },\n handleProjectDeleteClick: (projectId, history) => {\n dispatch(fetchRemoveProject(projectId, history));\n },\n handleProposalDeleteClick: (projectId, history) => {\n dispatch(fetchRemoveProposal(projectId, history));\n },\n handleScopeSelectSave: (projectId) => {\n dispatch(fetchSaveSelectScopes(projectId));\n },\n handleDialogOpen: () => {\n dispatch(dialogOpen());\n },\n handleDialogClose: () => {\n dispatch(dialogClose());\n },\n \n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n});\n\nclass ProjectDetailContainer extends Component {\n componentDidMount() {\n this.props.getProjectData(this.props.projectId);\n if (!this.props.scopes || this.props.scopes.length === 0) {\n this.props.getScopeData(this.props.history);\n }\n }\n\n componentDidUpdate(newProps) {\n if (newProps.projectId !== this.props.projectId) {\n this.props.getProjectData(newProps.projectId);\n }\n if (!this.props.scopes || this.props.scopes.length === 0) {\n this.props.getScopeData(this.props.history);\n }\n }\n\n render() {\n return (\n
\n \n \n {!this.props.user.userType.includes('p') && }\n \n {/* */}\n {this.props.hasReview && \n \n }\n \n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ProjectDetailContainer);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useHistory } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Container from '@material-ui/core/Container';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from 'react-select'\nimport Button from '@material-ui/core/Button';\nimport { isLength, isPostalCode} from 'validator';\n\nconst styles = theme => ({\n container: {\n display: 'block',\n flexWrap: 'wrap',\n arginLeft: 'auto',\n marginRight: 'auto',\n paddingBottom: '50px',\n maxWidth: '420px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n display: 'flex',\n },\n scope: {\n width: '100%',\n maxWidth: '340px',\n marginTop: '50px',\n paddingLeft: '5px',\n },\n margin20: {\n marginBottom: '20px',\n },\n flex: {\n display: 'flex',\n },\n zIndex0: {\n zIndex: 0,\n },\n button: {\n height: '37px',\n top: '15px',\n },\n marginLeft5: {\n marginLeft: '5px',\n }\n});\n\nconst EditProject = (props) => {\n const history = useHistory();\n const {\n classes,\n project,\n scopes,\n customScopeFieldEnabled,\n // history,\n handleChange,\n handleScopeChange,\n handleWorkDayChange,\n handleAddCustomScope,\n onSaveClick,\n } = props;\n\n const scopeDefaultValue = project.scopes && project.scopes.length > 0 ? project.scopes.map((scope) => {\n return {\n value: scope,\n label: scope.name,\n }\n }) : [];\n\n \n const scopeOptions = scopes.filter(scope => {\n return !(project.scopes.find(element => element.name === scope.name))\n }).map(scope => ({\n value: scope,\n label: scope.name\n }));\n \n const disabled = !project.title || scopeDefaultValue.length < 1 || !project.budgetMin || !project.budgetMax\n || !project.startDate || !project.startTime || !project.endTime || !project.zipcode || !project.endBiddingDate || project.day.length < 1;\n\n const titleError = !isLength(project.title || '', {min:1, max: 64}) ? \"Title is too long. The max length is 64\": undefined;\n const zipcodeError = !isPostalCode(project.zipcode, 'US') ? \"Invalid zipcode\": undefined;\n return (\n \n {/*
\n handleChange('title', event)}\n margin=\"normal\"\n error={titleError}\n helperText={titleError ? titleError : \"Define your project title\"}\n />\n
*/}\n
\n \n What electrical or wiring service do you need?\n {\n handleScopeChange(selection);\n }}\n />\n \n
\n {customScopeFieldEnabled && \n
\n handleChange('custom_scope', event)}\n margin=\"normal\"\n error={titleError}\n helperText={titleError ? titleError : \"Define your scope\"}\n />\n handleAddCustomScope()}\n className={project.customScope ? clsx(classes.button, classes.margin, 'ee-bg-color', 'flex') : clsx(classes.button, classes.margin, 'flex')}\n >\n Add\n \n
}\n\n
\n handleChange('budgetMin', event)}\n type=\"number\"\n InputProps={{\n startAdornment: $,\n }}\n />\n handleChange('budgetMax', event)}\n type=\"number\"\n InputProps={{\n startAdornment: $,\n }}\n />\n
\n
\n handleChange('startDate', event)}\n className={clsx(classes.margin, classes.zIndex0, classes.flex)}\n InputLabelProps={{\n shrink: true,\n }}\n />\n
\n
\n handleChange('startTime', event)}\n className={clsx(classes.margin, classes.zIndex0, classes.flex)}\n InputLabelProps={{\n shrink: true,\n }}\n inputProps={{\n step: 600, // 5 min\n }}\n />\n handleChange('endTime', event)}\n className={clsx(classes.margin, classes.zIndex0, classes.flex)}\n InputLabelProps={{\n shrink: true,\n }}\n inputProps={{\n step: 600, // 5 min\n }}\n />\n
\n
\n handleChange('zipcode', event)}\n margin=\"normal\"\n error={zipcodeError}\n helperText={zipcodeError ? zipcodeError : ''}\n />\n
\n
\n handleChange('emergency', event)}\n value=\"emergency\"\n color=\"default\"\n />\n }\n label=\"Emergency\"\n />\n handleChange('company', event)}\n value=\"company\"\n color=\"default\"\n />\n }\n label=\"Company\"\n />\n handleChange('insurance', event)}\n value=\"insurance\"\n color=\"default\"\n />\n }\n label=\"Insurance\"\n />\n handleChange('license', event)}\n value=\"license\"\n color=\"default\"\n />\n }\n label=\"License\"\n />\n
\n {/*
\n handleChange('endBiddingDate', event)}\n className={classes.margin}\n InputLabelProps={{\n shrink: true,\n }}\n />\n
*/}\n
\n handleChange('supportingInfo', event)}\n className={clsx(classes.wide, classes.margin)}\n margin=\"normal\"\n helperText= \"Write additional info...\"\n />\n
\n
\n \n
\n \n {project.day.map(day => (\n \n ))}\n \n
\n
\n
\n \n
\n
\n );\n}\n\nexport default withStyles(styles)(EditProject);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { Redirect } from 'react-router-dom'\nimport EditProject from '../components/EditProject';\nimport { getProject } from '../../selectors/ee';\nimport { updateProjectValue, addCustomScope } from '../../actions/ee';\nimport { updateCustomScopeField } from '../../actions/view'\nimport { fetchGetProject, fetchSaveProject, fetchAllScopes } from '../../actions/api';\n\nconst mapStateToProps = (state, ownProps) => {\n const projectId = (ownProps.match.params.projectId !== undefined) ? ownProps.match.params.projectId : null;\n console.log('EProject state', state);\n return {\n user: state.ee.user,\n projectId,\n project: getProject(state),\n scopes: state.view.scopes,\n customScopeFieldEnabled: state.view.project.customScopeFieldEnabled,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getProjectData: (projectId) => {\n dispatch(fetchGetProject(projectId));\n },\n getScopeData: (history) => {\n dispatch(fetchAllScopes(history));\n },\n handleChange: (name, event) => {\n dispatch(updateProjectValue(\n name, \n event.target.value\n ));\n },\n handleWorkDayChange: (name, value) => {\n dispatch(updateProjectValue(\n name, \n !value\n ));\n },\n handleScopeChange: (selectionList) => {\n let projectScopes = Array.isArray(selectionList) ? selectionList : [];\n projectScopes = projectScopes.map((selection) => {\n if(selection.label === 'other') {\n dispatch(updateCustomScopeField(true))\n }\n return selection.value;\n })\n projectScopes = projectScopes.filter((selection) => selection.name != 'other');\n dispatch(updateProjectValue(\n 'scopes',\n projectScopes,\n ));\n },\n handleAddCustomScope: () => {\n dispatch(addCustomScope())\n },\n onSaveClick: (history) => {\n dispatch(fetchSaveProject(history));\n }\n});\n\nclass EditProjectContainer extends Component {\n componentDidMount() {\n if (this.props.projectId && this.props.projectId !== 'new') {\n this.props.getProjectData(this.props.projectId);\n }\n if (!this.props.scopes || this.props.scopes.length === 0) {\n this.props.getScopeData(this.props.history);\n }\n }\n\n componentDidUpdate(newProps) {\n if (newProps.projectId !== this.props.projectId && this.props.projectId !== 'new') {\n this.props.getProjectData(newProps.projectId);\n }\n if (!this.props.scopes || this.props.scopes.length === 0) {\n this.props.getScopeData(this.props.history);\n }\n }\n\n render() {\n // TODO: behavior is weird. Fix this with different way\n // if (this.props.user.type !== 'c' && this.props.user.type !== 'a'\n // && this.props.user.userType !== 'c' && this.props.user.userType !== 'a') {\n // return (\n // \n // );\n // }\n return (\n
\n {this.props.onSaveClick(this.props.history)}}\n />\n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(EditProjectContainer);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { useHistory } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Container from '@material-ui/core/Container';\nimport Select from 'react-select'\nimport Button from '@material-ui/core/Button';\nimport ProposalScopeListContainer from '../../project/containers/ProposalScopeListContainer';\nimport moment from 'moment';\n\n\nconst styles = theme => ({\n container: {\n maxWidth: '680px',\n },\n wide: {\n width: '355px',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n display: 'flex',\n },\n scope: {\n width: '355px',\n },\n margin20: {\n marginBottom: '20px',\n },\n marginTop20: {\n marginBottom: '20px',\n }\n});\n\nconst EditProposal = (props) => {\n const {\n classes,\n user,\n projectId,\n scopes,\n proposal,\n handleChange,\n handleScopeValueChange,\n handleSelectScopeClick,\n handleScopeType,\n handleAddProposalScope,\n handleCancelProposalScope,\n handleAddProposal,\n handleCancelProposal,\n } = props;\n const history = useHistory();\n\n const ITEM_HEIGHT = 48;\n const ITEM_PADDING_TOP = 8;\n const MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n width: 250,\n },\n },\n };\n const addScope = proposal.addScope;\n const selectedScopeType = addScope.type;\n const scopeTypeOptions = [\n {\n value: 'fixed_price',\n label: 'Fixed price',\n },\n {\n value: 'hourly',\n label: 'Hourly',\n }\n\n ];\n\n const scopeSelected = (addScope && addScope.scopeId && addScope.description) ? true : false;\n const defaultExpectStartDate = moment().format(\"YYYY-MM-DD\")\n const userRate = user.rate;\n const showScopeDescription = proposal.unSelectedScopes.length > 0 ? true : false;\n const disabled = proposal.scopeDetailList < 1 || proposal.expectTime <= 0;\n return (\n \n
\n
\n {showScopeDescription && Select Scope to apply proposal}\n
\n {proposal.unSelectedScopes.map(scope => (\n \n ))}\n
\n
\n {scopeSelected && \n
\n
\n Scope type\n \n {\n handleScopeType(selection);\n }}\n />\n \n
\n {selectedScopeType.value === 'hourly' &&
\n handleScopeValueChange('material', event)}\n type=\"number\"\n InputProps={{\n startAdornment: $,\n }}\n />\n
}\n {selectedScopeType.value === 'fixed_price' &&
\n handleScopeValueChange('cost', event)}\n type=\"number\"\n InputProps={{\n startAdornment: $,\n }}\n />\n
}\n {selectedScopeType.value === 'fixed_price' &&
\n handleScopeValueChange('unit', event)}\n type=\"number\"\n helperText=\"Enter # of unit\"\n />\n
}\n
\n handleScopeValueChange('hour', event)}\n type=\"number\"\n InputProps={{\n endAdornment: h,\n }}\n />\n
\n
\n handleScopeValueChange('comment', event)}\n className={clsx(classes.wide, classes.margin)}\n margin=\"normal\"\n helperText= \"Enter the comments\"\n />\n
\n handleAddProposalScope(userRate)}\n >Add scope\n handleCancelProposalScope()}\n >Cancel\n
\n }\n {proposal.scopeDetailList && \n \n }\n
\n handleChange('startDate', event)}\n InputLabelProps={{\n shrink: true,\n }}\n />\n
\n
\n handleChange('expectTime', event)}\n InputLabelProps={{\n shrink: true,\n }}\n inputProps={{\n step: 1, // 1 hour\n }}\n />\n
\n
\n handleChange('comment', event)}\n className={clsx(classes.wide, classes.margin)}\n margin=\"normal\"\n helperText= \"Write additional info...\"\n />\n
\n\n
\n \n \n
\n \n
\n );\n}\n\nexport default withStyles(styles)(EditProposal);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport EditProposal from '../components/EditProposal';\nimport { updateScopeType, \n selectProposalScopeClick, \n updateProposalValue, \n updateProposalScopeValue, \n addProposalScope, \n prepareEditScopeDetail,\n cancleProposalScope } from '../../actions/ee';\nimport { fetchGetProposal, fetchSaveProposal, fetchAllScopes } from '../../actions/api';\n\nconst mapStateToProps = (state, ownProps) => {\n const projectId = (ownProps.match.params.projectId !== undefined) ? ownProps.match.params.projectId : null;\n return {\n user: state.ee.user,\n projectId,\n project: state.ee.project,\n proposal: state.view.proposal,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getProposalDataByProjectId: (projectId) => {\n dispatch(fetchGetProposal(projectId));\n },\n getScopeData: (history) => {\n dispatch(fetchAllScopes(history));\n },\n handleChange: (name, event) => {\n dispatch(updateProposalValue(\n name, \n event.target.value\n ));\n },\n handleScopeValueChange: (name, event) => {\n dispatch(updateProposalScopeValue(\n name, \n event.target.value\n ));\n },\n handleScopeChange: (selectionList) => {\n const proposalScopes = selectionList.map((selection) => {\n return selection.value;\n })\n dispatch(updateProposalValue(\n 'scopes',\n proposalScopes,\n ));\n },\n handleEditScopeClick: (scopeId) => {\n dispatch(prepareEditScopeDetail(scopeId));\n },\n handleAddProposal: (history) => {\n dispatch(fetchSaveProposal(history));\n },\n handleSelectScopeClick: (id, name) => {\n dispatch(selectProposalScopeClick(id, name))\n },\n handleScopeType: (scopeType) => {\n dispatch(updateScopeType(scopeType)) \n },\n handleAddProposalScope: (userRate) => {\n dispatch(addProposalScope(userRate)); \n },\n handleCancelProposalScope: () => {\n dispatch(cancleProposalScope());\n },\n handleCancelProposal: (history, projectId) => {\n history.push('/project/' + projectId);\n },\n});\n\nclass EditProposalContainer extends Component {\n componentDidMount() {\n if (!this.props.scopes || this.props.scopes.length === 0) {\n this.props.getScopeData(this.props.history);\n }\n this.props.getProposalDataByProjectId(this.props.projectId);\n }\n\n componentDidUpdate(newProps) {\n if (!this.props.scopes || this.props.scopes.length === 0) {\n this.props.getScopeData(this.props.history);\n }\n if (newProps.projectId !== this.props.projectId) {\n this.props.getProposalDataByProjectId(newProps.projectId);\n }\n }\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(EditProposalContainer);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Button from '@material-ui/core/Button';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Container from '@material-ui/core/Container';\nimport EmailField from '../../components/EmailField';\nimport PasswordField from '../../components/PasswordField';\nimport { isAlpha } from 'validator';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n maxWidth: '425px',\n paddingBottom: '30px'\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginTop: '20px',\n marginBottom: '10px',\n marginRight: '4px',\n display: 'flex',\n },\n margin20: {\n marginBottom: '20px',\n },\n smallText: {\n fontSize: '12px',\n lineHeight: '1.6',\n }\n});\n\nconst RegisterCommon = (props) => {\n const {\n classes,\n user,\n register,\n history,\n handleChange,\n handleRegister,\n handleCancelRegister,\n } = props;\n\n const userTypeOptions = {\n customer: 'Customer in need of an Electrical Provider? (Member Account)',\n provider: 'Electrical provider looking for customers? (Professional Account)'\n };\n\n const registerDisabled = register.firstName === undefined || !register.lastName || !register.password || !register.verifyPassword || !register.type;\n return (\n \n
\n
\n handleChange('firstName', event.target.value)}\n className={clsx(classes.wide, classes.margin)}\n margin=\"normal\"\n error={!isAlpha(register.firstName || '')}\n helperText={!isAlpha(register.firstName || '') ? \"Invalid text(Only Alpabet is allowed\" : \"Enter your first name\"}\n required\n />\n handleChange('lastName', event.target.value)}\n className={clsx(classes.wide, classes.margin)}\n margin=\"normal\"\n error={!isAlpha(register.lastName || '')}\n helperText={!isAlpha(register.lastName || '') ? \"Invalid text(Only Alpabet is allowed\" : \"Enter your lsst name\"}\n required\n />\n handleChange('email', event.target.value)}\n required={true}\n />\n handleChange('displayName', event.target.value)}\n className={clsx(classes.wide, classes.margin)}\n margin=\"normal\"\n helperText= \"Enter your display name(default is your first name.)\"\n />\n handleChange('password', event.target.value)}\n />\n handleChange('verifyPassword', event.target.value)}\n />\n
\n
\n Select an account type you wish to create:\n \n {Object.entries(userTypeOptions).map(([type, typeDescription]) => (\n \n ))}\n \n
\n
\n
\n

\n By signing in or signing up, I agree to GetElectrician.com's Terms of Service and \n Privacy Policy, confirm that I am 18 years of age or older, \n and consent to receiving email communication.\n

\n
\n \n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(RegisterCommon);\n\n","import { connect } from 'react-redux';\nimport { updateRegisterValue } from '../../actions/register';\nimport { fetchSaveRegisterNewUser } from '../../actions/api';\nimport RegisterCommon from '../components/RegisterCommon';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n register: state.register,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (name, value) => {\n dispatch(updateRegisterValue(name, value));\n },\n handleRegister: (history) => {\n dispatch(fetchSaveRegisterNewUser(history));\n },\n handleCancelRegister: () => {\n console.log('cancel register'); //TODO\n },\n\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(RegisterCommon);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport Typography from '@material-ui/core/Typography';\n// import ExpandMoreIcon from './ExpandMoreIconSvg';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n },\n heading: {\n fontSize: theme.typography.pxToRem(18),\n fontWeight: theme.typography.fontWeightBold,\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n ].join(','),\n },\n panelDetails: {\n padding: '0px 20px 10px 20px',\n },\n panelDetailsTypography: {\n width: '100%',\n fontSize: theme.typography.pxToRem(16),\n fontWeight: theme.typography.fontWeightBold,\n fontFamily: [\n '-apple-system',\n 'BlinkMacSystemFont',\n '\"Segoe UI\"',\n 'Roboto',\n '\"Helvetica Neue\"',\n 'Arial',\n 'sans-serif',\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n ].join(','),\n },\n \n});\n\nfunction ExpansionPanelComponent(props) {\n const { \n classes,\n title,\n details,\n history,\n } = props;\n return (\n
\n \n }>\n {title}\n \n \n \n {details}\n \n \n \n
\n );\n}\n\nExpansionPanelComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n title: PropTypes.string.isRequired,\n details: PropTypes.string.isRequired,\n};\n\nexport default withStyles(styles)(ExpansionPanelComponent);","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Paper from '@material-ui/core/Paper';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n paddingLeft:\"10pt\",\n paddingRight:\"10pt\",\n fontWeight: '400',\n },\n title: {\n paddingTop: '10px',\n paddingBottom: '10px',\n fontSize: '20px',\n fontWeight: '600',\n }\n});\n\nconst Agreement = (props) => {\n const {\n classes,\n checked,\n title,\n handleCheckbox,\n content,\n } = props;\n\n const error = !checked;\n return (\n \n \n }\n label={title}\n labelPlacement='start'\n value=\"title\"\n />\n You need to agree {title}\n \n {content}\n \n );\n};\n\nexport default withStyles(styles)(Agreement);\n\n\n\n\n\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Button from '@material-ui/core/Button';\nimport Grid from '@material-ui/core/Grid';\nimport { ButtonGroup } from '@material-ui/core';\nimport ExpansionPanelComponent from '../../components/ExpansionPanelComponent';\nimport Agreements from './Agreements';\nimport { CODE_OF_ETHICS } from './CodeOfEthics';\nimport { TERMS_OF_USE } from './termsOfUse';\nimport { TERMS_OF_USE_PROVIDER } from './termsOfUseProvider';\nimport parse from 'html-react-parser';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n display: 'flex',\n flexWrap: 'wrap',\n padding: '0',\n width: '100%',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n margin20: {\n marginBottom: '20px',\n },\n eeColor: {\n color: '#01DF01',\n },\n guideText: {\n fontWeight: 'bold',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n});\n\nconst RegisterProvider = (props) => {\n const {\n classes,\n user,\n register,\n history,\n handleChange,\n handleRegister,\n handleTermsOfUse,\n handleTermsOfUseProvider,\n handleCodeOfEthics,\n } = props;\n\n const providerTypeOptions = {\n licensedCompany: 'Licensed Electrical Company',\n licensedIndividual: 'Licensed Electrical Individual',\n unlicensedIndividual:'Unlicensed Electrical Individual',\n };\n\n const registerDisabled = !register.agreement.termsOfUse || !register.agreement.termsOfUseProvider || !register.agreement.codeOfEthics || !register.providerType;\n\n return (\n
\n

Complete your GetElectrician profile

\n
\n
\n You’re one step closer to have your Professional Account created and acquire new customers!\n ”Complete Profile” button will be grey out until you fill out all required fields.\n
\n
\n
Please select Professional Account Type below by selecting box which best describes you\n
\n\n \n \n {Object.entries(providerTypeOptions).map(([type, typeDescription]) => (\n handleChange('providerType', type)}\n >{typeDescription}\n \n ))}\n \n \n
\n } />\n } />\n } />\n
\n
\n
\n \n
\n
\n
\n\n //
\n // You’re almost there {{user.userDisplayName}}\n // Please provide few additional pieces of information so that you can enjoy full benefits of your professional account with us\n //
\n // \n // \n\n // {{message}}\n // {{vm.errorMsg}}\n // {{validateError}}\n //
\n );\n};\n\nexport default withStyles(styles)(RegisterProvider);\n","export const TERMS_OF_USE_PROVIDER=`\n

GetElectrician

\n\n

These Service Provider Terms of Use were last modified on March 13, 2017.

\n\n
\n The below Service Provider Terms of Use apply to those electrical service providers who register on our Web site and/or Mobile App to provide electrical services. The Web site and Mobile App are provided by Xavior, Inc., d/b/a GetElectrician, a New York corporation with a principal place of business located at 40 First Avenue, #15C, New York, NY 10009.\n
\n\n

SECTION I: DEFINITIONS

\n\n
\n References to “Dispute” mean any claim, conflict, controversy, or disagreement between the Parties arising out of, or related in any way to, these Terms (or any Terms, supplement or amendment contemplated by these Terms,) including, without limitation, any action in tort, contract or otherwise, at equity or at law, or any alleged breach, including, without limitation, any matter with respect to the meaning, effect, validity, performance, termination, interpretation or enforcement of these Terms or any terms contemplated by the Terms.\n
\n
\n References to a “Client” mean an individual and/or entity who seeks the services of a Service Provider via a Listing on the Web site and/or the Mobile App.\n
\n
\n References to a “Listing” means a description of project needing the services of a Service Provider.\n
\n
\n References to a “Material Breach” mean any breach of these Terms upon the occurrence of which a reasonable person in the position of the non-breaching Party would wish to immediately terminate these Terms because of that breach.\n
\n
\n References to the “Mobile App” mean the mobile software application by the name of “eelectricians,” available on both the Google Play and iTunes stores.\n
\n
\n References to “you,” “your” or “Service Provider” mean any person who offers electrician services via the Web site and/or the Mobile App.\n
\n
\n References to the “Terms” and/or “Agreement,” mean this, these Terms of Use, as set forth herein.\n
\n
\n References to “us,” “we,” “our,” and/or “GetElectrician,” means Xavior, Inc., d/b/a GetElectrician, and its parents, subsidiaries, and assigns.\n
\n
\n References to the “Web site” mean the Web site bearing the URL www.getelectrician.com.\n
\n
\n References to “User” mean the user of the Web site and/or the Mobile App, either as a Client or Service Provider.\n
\n

\n SECTION II: GENERAL PROVISIONS\n

\n
\n 2.1. \tAgreement to be Bound.\n
\n
\n The following Service Provider Terms of Use, together with the relevant information set out on the Web site and the Mobile App, including any features and services available, such as RSS feeds, podcasts, video and photographs, publications, and other materials, are subject to the terms and conditions set forth below. Please read them carefully as any of use of the Web site and/or the Mobile App as a Service Provider constitutes an agreement, without acceptance, to be bound thereby. By using the Web site or the Mobile App, and, upon registration therefor as a Service Provider, by clicking that you agree to these Terms, you represent that you are at least eighteen (18) years old, have read and understand the Service Provider Terms of Use, and that you agree to be bound by these Service Provider Terms of Use as set forth below.\n
\n
\n These Service Provider Terms of Use are subject to the Privacy Policy and our general Terms of Use, which also govern your use of the Web site and the Mobile App.\n
\n\n
\n 2.2. \tModifications and Changes to Service Provider Terms of Use.\n
\n\n
\n We may modify, add to, suspend or delete these Service Provider Terms of Use or other agreements, in whole or in part, in our sole discretion at any time, with such modifications, additions or deletions being immediately effective upon their posting to the Web site and the Mobile App. Your use of the Web site and/or the Mobile App after modification, addition or deletion of these Service Provider Terms of Use shall be deemed to constitute acceptance by you of the modification, addition or deletion. Such modifications may include but shall not be limited to pricing and Plan level structuring.\n
\n\n

\n SECTION III: SERVICE PROVIDER PLANS\n

\n\n
\n In addition to those terms and conditions governing accounts, generally, as set for in Section III of the general Terms of Use, the following Plan level terms shall further apply.\n
\n\n
\n 2.1.\tPlan Levels.\n
\n
\n Upon registration for an Account (as defined in the general Terms of Use,) Service Provider shall select one (1) of three (3) Service Provider plan levels (“a Plan.”) These Plan levels are defined as follows and are subject to change in our sole and exclusive discretion: (1) licensed electrical company; (2) licensed electrician, individually; (3) unlicensed electrician, tradesman, or “handy-man,” individually.\n
\n
\n 3.2. \tLicense Verification.\n
\n
\n Though we are under no obligation to verify the identity of any User of our Web site and/or Mobile App, we may, in our sole and exclusive discretion, request verification of the licensure of any Service Provider who registers as a member. In the event verification is requested, Service Provider must provide a copy of his, her or its electrician’s license, together with a copy of the Service Provider’s business license (if applicable,) and another form of identification (such as a driver’s license, state-issued photo id, or passport,) within forty-eight (48) calendar hours of such request. Failure to provide such information may result in suspension or termination of an Account, without recourse or refund.\n
\n\n
\n 3.3. \tUpgrades and Downgrades.\n
\n Service Provider may elect to opt for a lower-priced Plan (“downgrade”) or a higher-priced Plan (“upgrade”) at any time. In addition to the further payment terms contained herein, should you upgrade your plan, you shall pay the difference between the amount you paid and the then-current plan price for the upgraded plan for the remainder of the billing period. Should you elect to downgrade your plan you shall not be entitled to a full or partial refund for any reason whatsoever.\n\n
\n 3.4.\tCompliance with Laws.\n
\n In addition to the other requirements to comply with laws, regulations, and terms set forth herein, Service Provider shall, at all times, comply with and obey any and all local, state, and federal regulations and laws regarding the provision of electrical (or other, trade-related) services and, if applicable, business operation and maintenance of Service Provider’s electrical license.\n\n
\n 3.5. \tCancellation.\n
\n Service Providers may cancel their Accounts at any time by writing to us at customerservice@getelectrician.com. Requests for cancellation received fewer than thirty (30) calendar days’ prior to the next Billing Cycle shall not take effect until the following Billing Cycle.\n\n

\n SECTION IV: FEES\n

\n\n
\n 4.1. \tFree Trial.\n
\n\n As of the effective date of these Service Provider Terms of Use, the use of our Web site and Mobile App is free for all Users, including Service Providers. On or around August 1, 2017, the use of the Web site and Mobile App shall no longer be free for Service Providers, and, instead, a Membership Fee, as set forth in Section 4.2., shall be due and owing unless Service Provider cancels his, her or its Plan no later than July 1, 2017.\n\n
\n 4.2. \tPlan Fee.\n
\n\n In exchange for participation in our marketplace and the ability to view Listings, apply for Listings, and complete projects, Service Provider agrees to pay to us a fee corresponding to the Plan selected by Service Provider upon Account registration, (“Plan Fee.”) This Plan Fee shall be in an amount set forth at the time of Account registration and at all times on the Web site. The Plan Fee may be paid on a monthly, quarterly, or annual basis, (the “Billing Cycle,”) as selected by Service Provider upon Account registration. We reserve the right to change the Plan Fee, or any other applicable fees and charges and to institute new charges and Plan Fees at the end of each Billing Cycle, upon thirty (30) calendar days’ prior notice to Service Provider (which may be sent by email).\n\n
\n 4.3. \tPre-Payment Discount.\n
\n\n In the event Service Provider elects to pre-pay the Plan Fee on a quarterly or annual basis, Service Provider may be entitled to a pre-payment discount as set forth at the time of Account registration. Pre-payment discounts are given in our sole and exclusive discretion.\n\n
\n 4.4. \tAutomatic Billing.\n
\n Except for in the event of a free trial, all Plan Fees as set forth herein shall be pre-paid, in full as per the selected Billing Cycle on the first (1st) day of the Billing Cycle, where the first (1st) day of the first (1st) Billing Cycle shall be the date upon which Service Provider registers his, or its Account. Any and all free trials that are not cancelled by Service Provider prior to August 1, 2017, shall be automatically billed, in full for the Plan Fee as per a monthly Billing Cycle, on August 1, 2017, which shall be treated as the first (1st) day of the first (1st) Billing Cycle for such Users.\n\n
\n 4.5. \tForm of Payment.\n
\n Payment shall be made by via our payment processor by automatic debit of the major credit card provided by Service Provider upon Account registration or as later updated by Service Provider.\n\n
\n 4.6.\tProject Fees.\n
\n Each project completed via the Web site and/or the Mobile App shall result in the payment of a fee from the Client to the Service Provider, where said fee is processed through our payment processor and/or escrow service, if applicable. In addition to a Plan Fee, Service Provider agrees to grant to us a commission on any and all such project fees, (a “Project Fee.”) The amount of such Project Fee shall be reflected as a percentage (%) of the total project price in the amount set forth on the Web site and at the time Service Provider proposes to a Client to provide service.\n\n
\n 4.7. \tChargebacks and Revocations.\n
\n If the completion or non-completion of a project results in a chargeback, revocation or other refund, Service Provider agrees that we may deduct the sum charged back, together with any fee paid to our service provider and bank, from any sum due to Service Provider, at or after that time. If, in our sole and exclusive discretion, we believe that Service Provider’s use of the Web site and/or the Mobile App results in a significant number of chargebacks and/or disputes, or if we believe Service Provider is in breach of these Service Provider Terms of Use or the general Terms of Use, we are free to hold back payments to Service Provider until we are satisfied that disputes have been settled and/or breaches rectified.\n\n
\n 4.8. \tWithholding of Funds.\n
\n Where we, in our reasonable opinion, are required to do so by law, we reserve the right to withhold funds that we reasonably deem suspicious with regard to money laundering, Unauthorized Business (as defined in Section 4.2 of the general Terms of Use,) fraud or other illegal activities, or in case of any other chargebacks or revocations as set forth in Section 4.7 hereof.\n\n
\n 4.9. \tPayouts.\n
\n When you create your Service Provider Account, you shall have the opportunity to designate a deposit account into which you wish to be paid out. Once funds related to a project have been cleared, any and all funds due and owing shall be available for withdraw to your designated deposit account, less any Project Fees and ancillary fees, if applicable, or unless withheld as per Sections 4.7 and 4.8 hereof. You may view all pending transactions, settlement data, fees, and revenues via your Account. Except as required by law, you shall remain solely and exclusively responsible for retaining permanent records of all transactions related to or arising from your use of the Mobile App and/or the Web site.\n\n
\n 4.10.\tResponsibility for Accurate Pay Out Information.\n
\n You agree to provide current, complete and accurate deposit account information for payout. You agree to promptly update your account and other information, including your address, email address and bank account information so that we can complete your transactions and contact you as needed.\n\n
\n 4.11.\tPayout Schedule.\n
\n Accrued compensation in the amount of One Hundred U.S. Dollars and No/Cents ($100.00) or more shall be automatically paid out into your designated deposit account on the first (1st) business day of the month following accrual. Accrued compensation in an amount less than One Hundred U.S. Dollars and No/Cents ($100.00) shall not be automatically paid out and must be requested by the Service Provider via Service Provider’s Account. Payouts may be subject to bank transfer fees levied by a Service Provider’s financial institution for which Service Provider shall be solely and uniquely responsible. Compensation shall not be deemed to have accrued until such projected-related fees are received by us, which may take, in some instances, thirty (30) calendar days or more.\n\n
\n 4.12. \tRight to Set-Off; Collection Rights.\n
\n We are entitled to set-off any and all claims against amounts payable to you. In addition, to the maximum extent provided by law, we may collect any and all obligations due and owing by you to us by deducting them from your pending transactions in the deposit account. Fees shall be assessed at the time of transaction processing and will be deducted from the funds received. Your failure to pay all amounts due and owning shall be deemed an immediate breach of this Agreement for which you will be liable. You further agree to pay all fees and costs, including but not limited to attorneys’ fees and costs, incurred by or on our behalf arising from or related to the collection of any unpaid obligations by you.\n
\n 4.13.\tPayment of Taxes, Benefits.\n 

\n You agree and acknowledge that we do not provide state or federal withholdings from commission checks nor supply any other benefits customarily affiliated with an employer-employee relationship. We will supply, in accordance with IRS regulations, customary IRS Form 1099 each year as to Service Provider’s commission earnings. You agree and acknowledge you are solely responsible for the required payment of all state and federal income taxes, self-employment taxes, and any other tax levied by any state, federal, regulatory, or taxing agency arising by virtue of my activities under this Agreement and under penalties of perjury, you certify that, the social security or employer identification number shown on you W-9 form is your correct taxpayer identification number.\n

\n 4.14. \tPayment of Fees Earned in the Event of Account Suspension or Termination.\n
\n In the event your Account is suspended or terminated, the payment of any and all earned fees shall continue to be paid, whether or not cleared prior to the suspension and/or termination date. In such an event, we may elect to make payment to you via paper check to the address you provided upon Account registration or as otherwise updated by you.\n\n
\n 4.15. \tRefunds.\n
\n\n Due to the electronic nature of the services that we provide, in no event other than material breach of these Terms by GetElectrician shall a refund be granted, in whole or in part, for any reason or no reason whatsoever, including but not limited to Service Provider’s cancellation of a Plan prior the end of the Billing Cycle, Service Provider’s failure to utilize the Web site and/or Mobile App, and/or Service Provider’s failure to obtain any project via the Web site and/or Mobile App.\n\n

\n SECTION V: DISCLAIMERS; LIMITATIONS OF LIABILITY; INDEMNIFICATION\n

\n\n
\n 5.1. \tDisclaimer of Warranty; Limitation of Liability.\n
\n\n
    \n
  • \n (A) YOU AGREE THAT USE OF THE WEB SITE AND/OR THE MOBILE APP IS AT YOUR SOLE RISK. NEITHER US nor our AFFILIATES NOR ANY RESPECTIVE DIRECTORS, OFFICERS, USERS, EMPLOYEES, CONTRACTORS, PARENTS, SUBSIDIARIES, AGENTS, THIRD PARTY CONTENT PROVIDERS or LICENSORS, WARRANT THAT THE use of the Web site OR THE SERVICE PROVIDER SHALL BE UNINTERRUPTED OR ERROR FREE; NOR DO we MAKE ANY WARRANTY AS TO THE RESULTS THAT MAY BE OBTAINED FROM USE OF THE WEB SITE AND/OR THE MOBILE APP OR AS TO THE ACCURACY, RELIABILITY OR CONTENT OF ANY INFORMATION PROVIDED.\n
  • \n
  • \n (B) ANY DOWNLOADABLE SOFTWARE, PRODUCTS OR OTHER MATERIALS, WITHOUT LIMITATION, IS PROVIDED ON AN \"AS IS\" AND “AS AVAILABLE” BASIS WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF TITLE OR IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE AGAINST INFRINGEMENT, OTHER THAN THOSE WARRANTIES WHICH ARE IMPLIED BY AND INCAPABLE OF EXCLUSION, RESTRICTION OR MODIFICATION UNDER THE LAWS APPLICABLE TO THESE TERMS OF USE.\n
  • \n
  • \n (C) ALTHOUGH ALL INFORMATION AND MATERIALS CARRIED ON THE WEB SITE ARE BELIEVED TO BE RELIABLE, WE MAKE NO REPRESENTATIONS, NEITHER EXPRESSLY NOR IMPLIEDLY, AS TO THE ACCURACY, COMPLETENESS, TIMELINESS OR RELIABILITY OF THE WEB SITE.\n
  • \n
  • \n (D) IN NO EVENT SHALL WE, our AFFILIATES NOR ANY RESPECTIVE DIRECTORS, OFFICERS, USERS, EMPLOYEES, CONTRACTORS, PARENTS, SUBSIDIARIES, AGENTS, THIRD PARTY CONTENT PROVIDERS or LICENSORS BE LIABLE TO YOU OR ANYONE ELSE FOR ANY LOSS OR DAMAGES WHATSOEVER, INCLUDING BUT NOT LIMITED TO ANY DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, PUNITIVE, OR OTHER DAMAGES, INCLUDING BUT NOT LIMITED TO EXEMPLARY, RELIANCE, OR CONSEQUENTIAL DAMAGES, LOSS OF PROFITS, DAMAGES RESULTING FROM LOST DATA OR BUSINESS INTERRUPTION, personal injury or death, property damage, EXEMPLARY REPUTATIONAL HARM, OR LOSS OF INFORMATION OR DATA, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE THE WEB SITE AND/OR THE MOBILE APP, ANY INTERACTIONS WITH A USER, AND/OR ANY employment and/or employee/Client relationships facilitated by or through the web site AND/OR THE MOBILE APP.\n
  • \n
  • \n (E) WE DISCLAIM ANY AND ALL LIABILITY OF ANY KIND FOR ANY UNAUTHORIZED ACCESS TO OR USE OF YOUR PERSONALLY-IDENTIFIABLE INFORMATION. BY utilizing THE WEB SITE AND/OR THE MOBILE APP YOU ACKNOWLEDGE AND AGREe TO OUR DISCLAIMER OF ANY SUCH LIABILITY. IF YOU DO NOT AGREE, YOU SHOULD NOT ACCESS OR OTHERWISE Utilize THE WEB SITE or the mobile app.\n
  • \n
  • \n (F) GetElectrician' LIABILITY, AND (AS APPLICABLE) THE LIABILITY OF our AFFILIATES AND ANY RESPECTIVE DIRECTORS, OFFICERS, USERS, EMPLOYEES, CONTRACTORS, PARENTS, SUBSIDIARIES, AGENTS, THIRD PARTY CONTENT PROVIDERS AND LICENSORS TO YOU OR ANY THIRD PARTIES IN ANY CIRCUMSTANCE IS LIMITED TO THE GREATER OF (A) THE AMOUNT OF FEES YOU PAY TO GetElectrician IN THE TWELVE (12) MONTHS PRIOR TO THE ACTION GIVING RISE TO LIABILITY, OR (B) ONE HUNDRED U.S. DOLLARS ($100.00,) WHICHEVER IS GREATER.\n
  • \n
\n\n SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO CERTAIN USERS.\n\n The above limitations shall survive these Terms and inure to the benefit of us and our affiliates and respective directors, officers, Users, employees, contractors, parents, subsidiaries, agents, Third party content providers and licensors.\n\n
\n 5.2. \tINDEMNIFICATION.\n
\n You agree to defend, indemnify and hold us harmless, as well as our AFFILIATES NOR ANY RESPECTIVE DIRECTORS, OFFICERS, USERS, EMPLOYEES, CONTRACTORS, PARENTS, SUBSIDIARIES, AGENTS, THIRD PARTY CONTENT PROVIDERS or LICENSORS, from and against all claims, SUITS, and expenses, including attorneys' fees, arising out of OR RELATED TO (a) YOUR USE OF THE WEB SITE AND/OR THE MOBILE APP; (B) your noncompliance with or breach of this Agreement; (C) PROVISION OR NON-PROVISION OF SERVICES RELATED TO OR ARISING FROM A LISTING; (D) YOUR VIOLATIONS OF ANY THIRD PARTY RIGHTS, INCLUDING THIRD PARTY INTELLECTUAL PROPERTY RIGHTS; (E) the unauthorized use of the Web site AND/OR THE MOBILE APP by any other person using your information; AND (E) YOUR RELATIONSHIP WITH ANY CLIENT OR OTHER USER. GetElectrician shall provide notice to you promptly of any such claim, suit, or proceeding and may assist you, at your expense, in defending any such claim, suit or proceeding.\n\n

\n SECTION VI: NON-CIRCUMVENTION\n

\n\n Service Provider expressly recognizes the valuable service provided to his, her or it by GetElectrician, and, therefore, expressly agree to not-circumvent this agreement and/or otherwise seek to conduct an electrician, trade worker, or “handy-man” relationship with any Client via any means other than through the Web site and/or Mobile App for a period of two (2) years, (the “Non-Circumvention Period,”) following the date on which Service Provider first identifies or is identified by any Client via the Web site and/or Mobile App. During this Non-Circumvention Period, Service Provider agrees that he, she or it must request, make and receive all payments for projects, directly or indirectly, through the Web site and/or Mobile App. In the event this provision is breached, Service Provider agrees that he, she, or it shall be liable for any and all lost E-Electrician Project Fees for the duration of this Non-Circumvention period, calculated as the average monthly Project Fee earned by us based on the services of the Service Provider, over a period of the previous twelve (12) months multiplied by the remaining term of the Non-Circumvention Period, pro rata.\n\n

\n SECTION VII: GOVERNING LAW; ARBITRATION\n

\n\n
\n 7.1. \tGoverning Law.\n
\n\n These Service Provider Terms of Use shall be governed and construed in accordance with the laws of the state of Michigan without regard to its conflicts of law provisions. You agree to submit to the personal jurisdiction of the courts located in New York County, New York, and any cause of action that relates to or arises from these Terms, Web site and/or the Mobile App must be filed therein unless subject to the binding arbitration provisions of Section 7.2, infra.\n\n
\n 7.2. \tArbitration.\n
\n\n The Parties agree that any dispute concerning, relating, or referring to these Service Provider Terms of Use, Web site, and/or the Mobile App shall be resolved exclusively by binding arbitration in accordance with the substantive laws of the state of New York and shall be brought for arbitration in New York County, New York, pursuant to the Commercial Arbitration Rules of the American Arbitration Association. The arbitrator and not any federal, state, or local court or agency shall have exclusive authority to resolve any dispute relating to the interpretation, applicability, enforceability, conscionability, or formation of this contract, including but not limited to any claim that all or any part of this contract is void or voidable. Nothing herein prevents either Party from seeking any interim injunction it deems necessary in order to preserve the status quo prior to the resolution of any dispute, in any jurisdiction. Either or both Parties may initiate the arbitration proceedings, and both shall share the expenses and fees of the arbitration equally.\n\n

\n SECTION VIII: MISCELLANEOUS\n

\n
\n 8.1. \tAuthority.\n
\n\n Each Party represents and warrants to the other that it has full power and authority to enter into this Agreement and that it is binding upon such Party and enforceable in accordance with its Terms.\n\n
\n 8.2. \tWaiver.\n
\n\n Any waiver of a right under these Terms of Use shall only be effective if agreed or declared in writing. No waiver of any term of this Agreement shall be deemed a further or continuing waiver of such term or any other term and shall not prevent a Party from exercising that right in the future. The rights and remedies herein provided are cumulative and not exclusive of any rights and remedies provided by law.\n\n
\n 8.3. \tForce Majeure.\n
\n\n We shall not be bound to meet any obligation if prevented from doing so as a consequence of acts of god or force majeure, including but not limited to measures taken or imposed by any government or public authority or in case of any other event beyond our control, including but not limited to natural disasters (such as storm, hurricane, fire, flood, earthquake), war, civil unrest, terrorist activities, states of emergency, government sanctions, embargos, nationalizations, strikes and breakdowns of public utilities (such as of electricity or telecommunication services). We shall use all reasonable efforts to notify you of the circumstances causing the delay and to resume performance as soon as possible, both without undue delay.\n\n
\n 8.4. \tAssignment.\n
\n\n We shall have the right to assign and/or transfer these Terms of Use and our rights and obligations hereunder to any third party after notifying you as provided for herein. You agree and acknowledge that you shall not assign or transfer its rights or sub-contract or delegate the performance of any of your obligations under these Terms of Use without our prior written consent in our sole and exclusive discretion or as provided for herein.\n\n
\n 8.5. \tRights of Third Parties.\n
\n\n These Terms do not give any right to any third party unless explicitly stated herein.\n\n
\n 8.6. \tRelationship of the Parties.\n
\n\n The Parties are independent contractors under these Terms, and nothing herein shall be construed to create an employment agreement, partnership, joint venture, franchise relationship or agency relationship between them. Neither Party has authority to enter into Terms of any kind in the name of the other Party. You are an independent contractor responsible for controlling your own time and actions. GetElectrician is not to be considered a Client, and GetElectrician will not be responsible in any way for any employment decision made by any User and/or Client.\n\n
\n 8.7. \tSeverability.\n
\n\n If any part of this Agreement is determined to be invalid or unenforceable by applicable law, then the invalid or unenforceable provision will be deemed superseded by a valid, enforceable provision that most closely matches the intent of the original provision and the remainder of this Agreement will continue in effect.\n\n
\n 8.8.\tNotices.\n
\n\n Except as explicitly stated otherwise, any notices shall be given by postal mail to Xavior, Inc., d/b/a GetElectrician, a New York corporation with a principal place of business located at 40 First Avenue, #15C, New York, NY 10009, or, in the case of any User, to the email address you provide to us (either during the registration process or when your email address changes.) Notice shall be deemed given twenty-four (24) hours after email is sent, unless the sending party is notified that the email address is invalid. Alternatively, we may give you notice by certified mail, postage prepaid and return receipt requested, to the address provided to us upon Account registration. In such case, notice shall be deemed given three (3) days after the date of mailing.\n\n
\n 8.9. \tEntire Agreement.\n
\n\n This Agreement constitutes the entire Agreement between the Parties as to the subject matter hereof, and no other representations or promises of any kind shall be binding between the same. If any portion of this Agreement is held to be invalid, the balance of this Agreement shall remain in full force and effect.\n `;","import { connect } from 'react-redux';\nimport { updateRegisterValue } from '../../actions/register';\nimport { fetchSaveRegisterProviderTypeAndAgreement } from '../../actions/api';\nimport RegisterProvider from '../components/RegisterProvider';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n register: state.register,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (name, value) => {\n dispatch(updateRegisterValue(name, value));\n },\n handleRegister: (history) => {\n dispatch(fetchSaveRegisterProviderTypeAndAgreement(history));\n },\n handleTermsOfUse: () => {\n dispatch(updateRegisterValue('termsOfUse'));\n },\n handleTermsOfUseProvider: () => {\n dispatch(updateRegisterValue('termsOfUseProvider'));\n },\n handleCodeOfEthics: () => {\n dispatch(updateRegisterValue('codeOfEthics'));\n }\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(RegisterProvider);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Button from '@material-ui/core/Button';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport moment from 'moment';\nimport Container from '@material-ui/core/Container';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '0',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n margin20: {\n marginBottom: '20px',\n },\n zIndex0: {\n zIndex: 0,\n },\n subLabel: {\n fontWeight: 600, \n },\n});\n\nconst AddCompany = (props) => {\n const {\n classes,\n register,\n history,\n isUpdate,\n handleChange,\n handleSaveCompany,\n } = props;\n\n const company = register.company;\n const formattedRegisteredAt = moment(company.registeredAt).format('YYYY-MM-DD');\n const submitDisabled = company.name === undefined || !formattedRegisteredAt === undefined || !company.companyId === undefined;\n\n return (\n \n
\n Company\n
\n handleChange('name', event.target.value)}\n className={clsx(classes.wide, classes.zIndex0)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n
\n
\n handleChange('registeredAt', event.target.value)}\n className={clsx(classes.margin, classes.zIndex0)}\n InputLabelProps={{\n shrink: true,\n }}\n />\n
\n
\n handleChange('companyId', event.target.value)}\n className={clsx(classes.wide, classes.zIndex0)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n
\n {isUpdate && \n
\n handleSaveCompany(history)}\n className={!submitDisabled ? clsx(classes.wide, 'ee-bg-color', 'flex') : clsx(classes.wide, 'flex')}\n >\n Save company\n \n
\n }\n
\n
\n );\n};\n\nexport default withStyles(styles)(AddCompany);\n\n","import { connect } from 'react-redux';\nimport { updateCompanyValue } from '../../actions/register';\nimport { fetchSaveCompany } from '../../actions/api';\nimport SaveCompany from '../components/SaveCompany';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n register: state.register,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (name, value) => {\n dispatch(updateCompanyValue(name, value));\n },\n handleSaveCompany: (history) => {\n dispatch(fetchSaveCompany(history));\n },\n handleCancelhandleSaveCompany: () => {\n console.log('cancel company'); //TODO\n },\n handleRemoveCompany: () => {\n console.log('remove company'); //TODO\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(SaveCompany);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Select from 'react-select'\nimport moment from 'moment';\nimport Container from '@material-ui/core/Container';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n margin20: {\n marginBottom: '20px',\n },\n paddingBottom: {\n paddingBottom: '16px',\n },\n flex: { \n display: 'flex',\n },\n marginLeft: {\n marginLeft: '4px',\n },\n subLabel: {\n fontWeight: 600, \n }\n});\n\nconst SaveWorkZone = (props) => {\n const {\n classes,\n register,\n history,\n handleWorkZoneCounty,\n handleSaveWorkZone,\n } = props;\n\n const workzone = register.workzone;\n \n const workzoneNY = register.workzone.NY;\n const workzoneNJ = register.workzone.NJ;\n\n // const workzoneNY = register.workzone.NY.map(county => ({ \n // value: county,\n // label: county\n // }));\n // const workzoneNJ = register.workzone.NJ.map(county => ({ \n // value: county,\n // label: county\n // }));\n\n const workZoneNYCountyOptions = register.workZoneCounties['NY'].map(county => ({ \n value: county,\n label: county\n }));\n const workZoneNJCountyOptions = register.workZoneCounties['NJ'].map(county => ({ \n value: county,\n label: county\n }));\n\n\n const submitDisabled = workzone === undefined || (workzoneNY && workzoneNY.length < 1 && workzoneNJ < 1);\n\n return (\n \n
\n Work Zones \n
\n
\n Please select New York county(s)\n {\n handleWorkZoneCounty('NY', selection);\n }}\n />\n
\n
\n Please select New Jersey county(s)\n
\n {\n handleWorkZoneCounty('NJ', selection);\n }}\n />\n
\n
\n handleSaveWorkZone(history)}\n className={submitDisabled ? clsx(classes.wide, classes.marginLeft) : clsx(classes.wide, 'ee-bg-color', classes.marginLeft)}>\n Save work zone\n \n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(SaveWorkZone);\n\n","import { connect } from 'react-redux';\nimport { updateWorkZoneState, updateWorkZoneCounty } from '../../actions/register';\nimport { fetchSaveWorkZone } from '../../actions/api';\nimport WorkZone from '../components/WorkZone';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n register: state.register,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleWorkZoneState: (workZoneState) => {\n dispatch(updateWorkZoneState(workZoneState));\n },\n // handleWorkZoneCounty: (workZoneCounty) => {\n // dispatch(updateWorkZoneCounty(workZoneCounty));\n // },\n handleWorkZoneCounty: (state, selectionList) => {\n dispatch(updateWorkZoneCounty(\n state,\n selectionList,\n ));\n },\n handleSaveWorkZone: (history) => {\n dispatch(fetchSaveWorkZone(history));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(WorkZone);","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Link from '@material-ui/core/Link';\nimport Select from 'react-select'\nimport Container from '@material-ui/core/Container';\nimport InputLabel from '@material-ui/core/InputLabel';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n },\n narrow: {\n width: 120,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n margin20: {\n display: 'flex',\n marginBottom: '20px',\n },\n link: {\n margin: theme.spacing(1),\n },\n flex: { \n display: 'flex',\n },\n marginLeft: {\n marginLeft: '4px',\n },\n subLabel: {\n fontWeight: 600, \n }\n});\n\nconst SaveWorkZone = (props) => {\n const {\n classes,\n user,\n workHour,\n workHourList,\n history,\n handleChange,\n handleAddWorkHour,\n handleRemoveWorkHour,\n } = props;\n\n const dayOptions = ['Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun'].map(option => ({ \n value: option,\n label: option\n }));\n\n// const timeOptions = [\"12:00 AM (midnight)\", \"12:30 AM\", \"1:00 AM\", \"1:30 AM\", \"2:00 AM\", \"2:30 AM\", \"3:00 AM\",\n// \"3:30 AM\", \"4:00 AM\", \"4:30 AM\", \"5:00 AM\", \"5:30 AM\", \"6:00 AM\", \"6:30 AM\", \"7:00 AM\", \"7:30 AM\", \"8:00 AM\", \"8:30 AM\", \"9:00 AM\",\n// \"9:30 AM\", \"10:00 AM\", \"10:30 AM\", \"11:00 AM\", \"11:30 AM\", \"12:00 PM\", \"12:30 PM\", \"1:00 PM\", \"1:30 PM\", \"2:00 PM\", \"2:30 PM\", \"3:00 PM\",\n// \"3:30 PM\", \"4:00 PM\", \"4:30 PM\", \"5:00 PM\", \"5:30 PM\", \"6:00 PM\", \"6:30 PM\", \"7:00 PM\", \"7:30 PM\", \"8:00 PM\", \"8:30 PM\", \"9:00 PM\",\n// \"9:30 PM\", \"10:00 PM\", \"10:30 PM\", \"11:00 PM\", \"11:30 PM\"].map(option => ({\n// value: option.split(\" \")[0],\n// label: option\n// }));\n const timeOptions = [\"00:00\", \"00:30\", \"01:00\", \"01:30\", \"02:00\", \"02:30\", \"03:00\", \"03:30\", \"04:00\", \"04:30\", \"05:00\", \"05:30\",\n \"06:00\", \"06:30\", \"07:00\", \"07:30\", \"08:00\", \"08:30\", \"09:00\", \"09:30\", \"10:00\", \"10:30\", \"11:00\", \"11:30\", \"12:00\", \"12:30\",\n \"13:00\", \"13:30\", \"14:00\", \"14:30\", \"15:00\", \"15:30\", \"16:00\", \"16:30\", \"17:00\", \"17:30\", \"18:00\", \"18:30\", \"19:00\", \"19:30\",\n \"20:00\", \"20:30\", \"21:00\", \"21:30\", \"22:00\", \"22:30\", \"23:00\", \"23:30\"].map(option => ({\n value: option,\n label: option\n }));\n const workHourday = workHour ? {\n value: workHour.day,\n label: workHour.day,\n } : undefined;\n const workHourStart = workHour ? {\n value: workHour.start,\n label: workHour.start,\n } : undefined;\n const workHourEnd = workHour ? {\n value: workHour.end,\n label: workHour.end,\n } : undefined;\n\n return (\n \n
\n Work Hour \n {workHourList && workHourList.map(workhour => {\n return (
\n {workhour.day} | {workhour.start} ~ {workhour.end} \n {handleRemoveWorkHour(workhour.day)}} className={classes.link}>\n Remove\n \n
);\n })}\n
\n handleChange('day', event.value)}\n className={clsx(classes.narrow, classes.margin)}\n />\n handleChange('start', event.value)}\n className={clsx(classes.narrow, classes.margin)}\n />\n handleChange('end', event.value)}\n className={clsx(classes.narrow, classes.margin)}\n />\n \n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(SaveWorkZone);\n\n","import { connect } from 'react-redux';\nimport { updateWorkHourValue } from '../../actions/register';\nimport { fetchSaveWorkHour, fetchRemoveWorkHour } from '../../actions/api';\nimport WorkHour from '../components/WorkHour';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n workHour: state.register.workHour,\n workHourList: state.register.workHourList,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (name, value) => {\n dispatch(updateWorkHourValue(name, value));\n },\n handleAddWorkHour: (history) => {\n dispatch(fetchSaveWorkHour(history));\n },\n handleRemoveWorkHour: (day) => {\n dispatch(fetchRemoveWorkHour(day));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(WorkHour);\n\n\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Button from '@material-ui/core/Button';\nimport Container from '@material-ui/core/Container';\nimport Select from 'react-select'\nimport InputLabel from '@material-ui/core/InputLabel';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%'\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n flex: { \n display: 'flex',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n marginLeft: {\n marginLeft: '4px',\n },\n margin20: {\n marginBottom: '20px',\n },\n zIndex0: {\n zIndex: 0,\n }, \n subLabel: {\n fontWeight: 600, \n },\n minWidth: {\n minWidth: '450px',\n }\n});\n\nconst Address = (props) => {\n const {\n classes,\n user,\n register,\n history,\n isUpdate,\n handleChange,\n handleUpdateAddress,\n } = props;\n\n const registerError = register.error;\n const address = register.address;\n const stateOptions = register.states.map(state => ({ \n value: state,\n label: state\n }));\n\n const submitDisabled = address.address === undefined || address.city === undefined || address.stateProvince === undefined || address.zipcode === undefined;\n\n const stateProvince = address.stateProvince ? {\n value: address.stateProvince,\n label: address.stateProvince,\n } : undefined;\n\n return (\n \n
\n Address\n handleChange('address', event.target.value)}\n className={clsx(classes.wide, classes.margin, classes.flex)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n handleChange('city', event.target.value)}\n className={clsx(classes.wide, classes.margin, classes.flex)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n handleChange('stateProvince', event.value)}\n className={clsx(classes.wide, classes.margin)}\n />\n handleChange('zipcode', event.target.value)}\n className={clsx(classes.wide, classes.margin, classes.zIndex0, classes.flex)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n {isUpdate && \n
\n handleUpdateAddress(history)}\n className={submitDisabled ? clsx(classes.wide, classes.marginLeft) : clsx(classes.wide, 'ee-bg-color', classes.marginLeft)}\n >\n Save address\n \n
\n }\n
\n
\n );\n};\n\nexport default withStyles(styles)(Address);\n\n","import { connect } from 'react-redux';\nimport { updateAddressValue } from '../actions/register';\nimport { fetchUpdateAddress } from '../actions/api';\nimport Address from '../components/Address';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n register: state.register,\n isUpdate: ownProps.isUpdate,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (name, value) => {\n dispatch(updateAddressValue(name, value));\n },\n handleUpdateAddress: (history) => {\n dispatch(fetchUpdateAddress(history));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Address);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Button from '@material-ui/core/Button';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport Container from '@material-ui/core/Container';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%'\n },\n flex: { \n display: 'flex',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n marginLeft: {\n marginLeft: '4px',\n },\n margin20: {\n marginBottom: '20px',\n },\n zIndex0: {\n zIndex: 0,\n }, \n subLabel: {\n fontWeight: 600, \n }\n});\n\nconst Phone = (props) => {\n const {\n classes,\n user,\n register,\n isUpdate,\n history,\n handleChange,\n handleUpdatePhone,\n } = props;\n\n const registerError = register.error;\n const phone = register.phone;\n const submitDisabled = phone === undefined;\n\n return (\n \n
\n Phone\n
\n handleChange(event.target.value)}\n className={clsx(classes.wide, classes.margin, classes.zIndex0, classes.flex)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n
\n {isUpdate && \n
\n handleUpdatePhone(history)}\n className={submitDisabled ? clsx(classes.wide, classes.marginLeft) : clsx(classes.wide, 'ee-bg-color', classes.marginLeft)}\n >\n Save phone\n \n
\n }\n
\n
\n );\n};\n\nexport default withStyles(styles)(Phone);\n\n","import { connect } from 'react-redux';\nimport { updatePhoneValue } from '../actions/register';\nimport Phone from '../components/Phone';\nimport { fetchUpdatePhone } from '../actions/api'\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n register: state.register,\n history: ownProps.history,\n isUpdate: ownProps.isUpdate,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (value) => {\n dispatch(updatePhoneValue(value));\n },\n handleUpdatePhone: (history) => {\n dispatch(fetchUpdatePhone(history));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Phone);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Button from '@material-ui/core/Button';\nimport moment from 'moment';\nimport Container from '@material-ui/core/Container';\nimport InputLabel from '@material-ui/core/InputLabel';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '0',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n margin20: {\n marginBottom: '20px',\n },\n zIndex0: {\n zIndex: 0,\n },\n subLabel: {\n fontWeight: 600, \n },\n});\n\nconst SaveLicense = (props) => {\n const {\n classes,\n user,\n register,\n history,\n isUpdate,\n handleChange,\n handleSaveLicense,\n handleCancelhandleSaveLicense\n } = props;\n\n const registerError = register.error;\n const license = register.license;\n const formattedIssuedAt = moment(license.issuedAt).format('YYYY-MM-DD');\n const submitDisabled = license.name === undefined || !formattedIssuedAt === undefined || !license.no === undefined || !license.issuedBy === undefined;\n const defaultExpectStartDate = moment().format(\"YYYY-MM-DD\")\n\n return (\n \n
\n License\n
\n handleChange('name', event.target.value)}\n className={clsx(classes.wide, classes.margin, classes.zIndex0)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n
\n
\n handleChange('no', event.target.value)}\n className={clsx(classes.wide, classes.margin, classes.zIndex0)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n
\n
\n handleChange('issuedBy', event.target.value)}\n className={clsx(classes.wide, classes.margin, classes.zIndex0)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n
\n
\n handleChange('issuedAt', event.target.value)}\n className={clsx(classes.margin, classes.zIndex0)}\n InputLabelProps={{\n shrink: true,\n }}\n />\n
\n {isUpdate && \n
\n handleSaveLicense(history)}\n className={!submitDisabled ? clsx(classes.wide, 'ee-bg-color', 'flex') : clsx(classes.wide, 'flex')}\n >\n Save license\n \n
\n }\n
\n
\n );\n};\n\nexport default withStyles(styles)(SaveLicense);\n\n","import { connect } from 'react-redux';\nimport { updateLicenseValue } from '../../actions/register';\nimport { fetchSaveLicense } from '../../actions/api';\nimport License from '../components/License';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n register: state.register,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (name, value) => {\n dispatch(updateLicenseValue(name, value));\n },\n handleSaveLicense: (history) => {\n dispatch(fetchSaveLicense(history));\n },\n handleCancelhandleSaveLicense: () => {\n console.log('cancel license'); //TODO\n },\n handleRemoveLicense: () => {\n console.log('remove license'); //TODO\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(License);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Container from '@material-ui/core/Container';\nimport ImageUploader from 'react-images-upload';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%'\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n flex: { \n display: 'flex',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n marginLeft: {\n marginLeft: '4px',\n },\n margin20: {\n marginBottom: '20px',\n },\n zIndex0: {\n zIndex: 0,\n }, \n subLabel: {\n fontWeight: 600, \n },\n minWidth: {\n minWidth: '450px',\n },\n profileImage: {\n width: '200px',\n }\n});\n\nconst ProfileImage = (props) => {\n const {\n classes,\n profileImage,\n history,\n handleUpdateProfileImage,\n onDrop,\n } = props;\n\n const submitDisabled = profileImage.file === undefined;\n\n return (\n \n
\n
\n {profileImage &&
\n \n
}\n \n
\n {/* handleChange(event)}\n className={clsx(classes.wide, classes.margin, classes.zIndex0, classes.flex)}\n margin=\"normal\"\n variant=\"outlined\"\n type=\"file\"\n /> */}\n
\n handleUpdateProfileImage(history)}\n className={submitDisabled ? clsx(classes.wide, classes.marginLeft) : clsx(classes.wide, 'ee-bg-color', classes.marginLeft)}\n >\n Save Profile Image\n \n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(ProfileImage);\n\n","import { connect } from 'react-redux';\nimport { updateProfileImageFile } from '../../actions/register';\nimport { fetchSaveProfileImage } from '../../actions/api';\nimport ProfileImage from '../components/ProfileImage';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n profileImage: state.register.profileImage,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (event) => {\n const value = event.target.value;\n dispatch(updateProfileImageFile(value));\n },\n handleUpdateProfileImage: () => {\n dispatch(fetchSaveProfileImage());\n },\n onDrop: (files) => {\n const value = files[0];\n dispatch(updateProfileImageFile(value));\n },\n onChange: (imageList, addUpdateIndex) => {\n dispatch(updateProfileImageFile(imageList[0]));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ProfileImage);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Button from '@material-ui/core/Button';\nimport Container from '@material-ui/core/Container';\nimport InputLabel from '@material-ui/core/InputLabel';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '0',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n margin20: {\n marginBottom: '20px',\n },\n zIndex0: {\n zIndex: 0,\n },\n subLabel: {\n fontWeight: 600,\n },\n});\n\nconst HourlyRate = (props) => {\n const {\n classes,\n user,\n register,\n history,\n isUpdate,\n handleChange,\n handleSaveHourlyRate\n } = props;\n\n const userRate = register.rate;\n const submitDisabled = (userRate === undefined || userRate === \"\" || isNaN(userRate) || userRate < 0);\n\n return (\n \n
\n Hourly Rate\n
\n handleChange('rate', event.target.value)}\n className={clsx(classes.wide, classes.margin, classes.zIndex0, classes.flex)}\n margin=\"normal\"\n variant=\"outlined\"\n inputProps={{ inputMode: 'numeric', pattern: '[0-9]*', min: 0 }}\n />\n
\n {isUpdate &&
\n handleSaveHourlyRate(history)}\n className={!submitDisabled ? clsx(classes.wide, 'ee-bg-color', 'flex') : clsx(classes.wide, 'flex')}\n >\n Save Hourly Rate\n \n
}\n
\n
\n );\n};\n\nexport default withStyles(styles)(HourlyRate);","import { connect } from 'react-redux';\nimport { saveUserHourlyRate } from '../../actions/api';\nimport { updateHourlyRate } from '../../actions/register';\nimport HourlyRate from '../components/HourlyRate';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n register: state.register,\n isUpdate: ownProps.isUpdate,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (name, value) => {\n dispatch(updateHourlyRate(name, value));\n },\n handleSaveHourlyRate: (history) => {\n dispatch(saveUserHourlyRate(history));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(HourlyRate);","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport SaveCompanyContainer from '../containers/SaveCompanyContainer';\nimport WorkZoneContainer from '../containers/WorkZoneContainer';\nimport WorkHourContainer from '../containers/WorkHourContainer';\nimport AddressContainer from '../../containers/AddressContainer';\nimport PhoneContainer from '../../containers/PhoneContainer';\nimport TextField from '@material-ui/core/TextField';\nimport LicenseContainer from '../containers/LicenseContainer';\nimport Container from '@material-ui/core/Container';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport ProfileImageContainer from '../../profile/containers/ProfileImageContainer';\nimport HourlyRateContainer from '../containers/HourlyRateContainer';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n display: 'flex',\n flexWrap: 'wrap',\n padding: '0',\n width: '100%',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n margin20: {\n marginBottom: '20px',\n },\n eeColor: {\n color: '#01DF01',\n },\n guideText: {\n fontWeight: 'bold',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n padding: {\n paddingLeft: '24px',\n },\n subLabel: {\n fontWeight: 600, \n },\n});\n\nconst Profile = (props) => {\n const {\n classes,\n user,\n register,\n history,\n isUpdate,\n handleChange,\n handleRegister,\n handleCancelRegister,\n } = props;\n\n const providerTypeOptions = {\n licensedCompany: 'Licensed Electrical Individual',\n licensedIndividual: 'Unlicensed Electrical Individual',\n unlicensedIndividual:'Unlicensed Electrical Individual',\n };\n\n const userType = user.userType;\n let showLicense = false;\n let showCompany = false;\n const isProvider = (userType === 'plei' || userType === 'puei' || userType === 'plec')? true : false;\n if(userType === 'plei' || userType === 'plec') {\n showLicense = true;\n }\n if(userType === 'plec') {\n showCompany = true;\n }\n const companyDisabled = showCompany && !register.company && (!register.company.name || !register.company.registeredAt || !register.company.companyId );\n const licenseDisabled = showLicense && (!register.license.name || !register.license.no || !register.license.issuedAt || !register.license.issuedBy );\n const registerDisabled = !register.phone || companyDisabled || licenseDisabled;\n return (\n \n
\n

GetElectrician profile

\n
\n
\n {user.userDisplayName}.\n Please provide few additional pieces of information so that you can enjoy full benefits of your professional account with us\n
\n
\n \n
\n
\n \n \n
\n {isProvider &&
\n \n
}\n {isProvider &&}\n {isProvider &&}\n {isProvider &&
\n Website \n handleChange('website', event.target.value)}\n className={clsx(classes.wide, classes.margin, classes.zIndex0)}\n margin=\"normal\"\n variant=\"outlined\"\n />\n
}\n {showCompany && }\n {showLicense && }\n\n {!isUpdate &&
\n \n \n
}\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(Profile);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { updateRegisterValue } from '../../actions/register';\nimport { fetchSaveRegisterProfile, fetchProfile } from '../../actions/api';\nimport Profile from '../components/Profile';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n register: state.register,\n history: ownProps.history,\n isUpdate: ownProps.isRegister ? false : true,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getProfile: (history) => {\n dispatch(fetchProfile(history));\n },\n handleChange: (name, value) => {\n dispatch(updateRegisterValue(name, value));\n },\n handleRegister: (history) => {\n dispatch(fetchSaveRegisterProfile(history));\n },\n handleCancelRegister: (history) => {\n history.push('/');\n },\n handleTermsOfUse: () => {\n dispatch(updateRegisterValue('termsOfUse'));\n },\n handleTermsOfUseProvider: () => {\n dispatch(updateRegisterValue('termsOfUseProvider'));\n },\n handleCodeOfEthics: () => {\n dispatch(updateRegisterValue('codeOfEthics'));\n }\n});\n\nclass ProfileContainer extends Component {\n componentDidMount() {\n this.props.getProfile(this.props.history);\n }\n \n render() {\n return (\n
\n \n
\n );\n }\n}\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ProfileContainer);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport RegisterCommonContainer from '../containers/RegisterCommonContainer';\nimport RegisterProviderContainer from '../containers/RegisterProviderContainer';\nimport ProfileContainer from '../containers/ProfileContainer';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n register: state.register,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n // getDashboardData: () => {\n // dispatch(fetchDashboard());\n // },\n});\n\nclass RegisterContainer extends Component {\n // componentDidMount() {\n // this.props.getDashboardData();\n // }\n\n // componentWillReceiveProps() {\n // this.props.getDashboardData();\n // }\n\n render() {\n const registerStep = this.props.register.registerStep || this.props.user.step;\n return (\n
\n {(!registerStep || (registerStep < 1)) && }\n {registerStep === 1 && }\n {registerStep === 2 && }\n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(RegisterContainer);\n","import React from 'react';\n// import MenuItem from '@material-ui/core/MenuItem';\nimport { withStyles } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Paper from '@material-ui/core/Paper';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n },\n table: {\n width: \"100%\",\n minWidth: 700,\n },\n th: {\n paddingLeft: '2px',\n paddingRight: '2px',\n },\n title: {\n cursor: 'pointer',\n paddingLeft: '2px',\n paddingRight: '2px',\n fontWeight: '500',\n },\n row: {\n '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n },\n});\n\n const Insurance = (props) => {\n const {\n classes,\n rowData,\n trs,\n } = props;\n\n return (\n \n \n \n \n {trs.map(tr => (\n {tr}\n ))}\n \n \n \n {rowData.map(row => (\n \n {row.data.map(column => (\n {column}\n ))}\n \n ))}\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(Insurance);\n\n","import { createSelector } from 'reselect';\nimport moment from 'moment';\n\nconst getRegisterInsurance = state => state.register.insurance;\n// const getRegisterPermit = state => state.publicReducer.permitList;\nconst getRegisterPermit = state => {\n return state.publicReducer.permitList;\n}\nconst getWorkHourList = state => state.publicReducer.workHourList;\nconst getPublicReviews = state => state.publicReducer.reviews;\n\nexport const getInsurance = createSelector(\n getRegisterInsurance,\n (insuranceList) => {\n return insuranceList.map(insurance => {\n return {\n id: insurance.id,\n data: [\n insurance.name,\n insurance.company,\n insurance.validUntil,\n ]\n };\n })\n }\n);\n\nexport const getPermit = createSelector(\n getRegisterPermit,\n (permitList) => {\n return permitList.map(permit => {\n return {\n id: permit.id,\n data: [\n permit.name,\n permit.issuedAt,\n permit.issuedBy,\n ]\n };\n })\n }\n);\n\nexport const getWorkHour = createSelector(\n getWorkHourList,\n (workHourList) => {\n return workHourList.map(workHour => {\n return {\n day: workHour.day,\n hour: workHour.start \n };\n })\n }\n);\n\nexport const getReviews = createSelector(\n getPublicReviews,\n (reviews) => {\n const parsedReviews = reviews.map((review) => {\n let processed = {};\n // processed.key = key;\n processed.id = review.id;\n processed.displayName = review.displayName;\n processed.projectId = review.projectId;\n processed.scopeId = review.scopeId;\n processed.recommend = review.recommend;\n processed.quality = review.quality;\n processed.responsiveness = review.responsiveness;\n processed.professionalism = review.professionalism;\n processed.subjectMatterExpertise = review.subjectMatterExpertise;\n processed.adherenceToCost = review.adherenceToCost;\n processed.adherenceToSchedule = review.adherenceToSchedule;\n processed.comment = review.comment;\n processed.overall = review.overall;\n processed.date = moment(review.date).format('LL');\n return processed;\n });\n\n return parsedReviews;\n }\n);","import { connect } from 'react-redux';\nimport ReviewList from '../../review/components/ReviewList';\nimport { getReviews } from '../../selectors/public';\nimport { updateMessageDialog } from '../../actions/view';\n\nconst mapStateToProps = state => {\n const reviews = getReviews(state)\n return {\n user: state.ee.user,\n reviews: reviews,\n messageType: 'user-message',\n trs: [{\n title: 'Eletrician Name',\n align: 'center'\n \n }, {\n title: 'Project ID',\n align: 'center',\n }, {\n title: 'Overall score',\n align: 'center',\n }, {\n title: 'Recommend?',\n align: 'center',\n }, {\n title: 'Comments',\n align: 'center',\n }, {\n title: 'Date',\n align: 'center',\n }]\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ReviewList);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport SimpleList from '../../components/SimpleList';\nimport ReviewListContainer from '../containers/ReviewListContainer'\nimport Rating from '@material-ui/lab/Rating';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '0',\n font: '14px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n marginLeft: {\n marginLeft: '4px',\n },\n zIndex0: {\n zIndex: 0,\n },\n lightGrey: {\n color: '#c2c2c2',\n },\n green: {\n color: '#01DF01',\n }, \n publicTopDay: {\n float: 'right',\n padding: '1rem',\n bottom: '0',\n backgroundColor: '#F0F0F0',\n },\n publicTopLeft: {\n padding: '5px',\n margin: '5px',\n }, \n publicTopRight: {\n float: 'right',\n padding: '1rem',\n display: 'flex',\n },\n profileImage: {\n width: '200px',\n height: '200px',\n },\n top: {\n display: 'flex',\n },\n paddingLeft: {\n paddingLeft: '4px',\n },\n rating: {\n fontSize: '30px',\n },\n reviewTitle: {\n width: '100%',\n padding: '0px 20px 10px 20px',\n }\n});\n\nconst Public = (props) => {\n const {\n classes,\n user,\n history,\n publicReducer,\n permitList,\n insuranceList,\n providerId,\n handleClickMessageDialogOpen,\n handleSendRequestCall,\n reviewAvarage,\n } = props;\n\n const { \n workHourList,\n location,\n since,\n userCompany,\n profileImage,\n name,\n } = publicReducer;\n // const formattedIssuedAt = moment(permit.issuedAt).format('YYYY-MM-DD');\n // const submitDisabled = permit.name === undefined || !formattedIssuedAt === undefined || !permit.company === undefined;\n\n const rate = Number(publicReducer.rateAverage);\n return (\n \t
\n
\n
\n \n
\n
\n
\n

{name}, {location}

\n
\n {userCompany && publicReducer.userType === 'plec' &&
\n
{userCompany.name}, {location}
\n
Compnay ID: {userCompany.companyId}, registered at {userCompany.registeredAt}
\n
}\n
since {since} in GetElectrician
\n
{publicReducer.completedProjectCount} finished job, {publicReducer.workingProjectCount} working job, {publicReducer.reviewCount} reviews
\n
\n handleClickMessageDialogOpen(name, providerId)}\n className={clsx(classes.wide, 'ee-bg-color', classes.marginLeft)}\n >\n Ask Question \n \n handleClickMessageDialogOpen(name, providerId)}\n className={clsx(classes.wide, 'ee-bg-color', classes.marginLeft)}\n >\n Send Mail\n \n handleSendRequestCall(name, providerId)}\n className={clsx(classes.wide, 'ee-bg-color', classes.marginLeft)}\n >\n Request Call\n \n
\n
\n
\n
\n
\n {workHourList.map(workHour => (\n
{workHour.day} : {workHour.start} ~ {workHour.end}
\n ))}\n
\n
\n
\n
\n \t
\n \n
\n
\n

Reviews \n \n {rate}\n

\n {publicReducer.reviewCount} reviews\n
\n
\n \n
\n \n
\n {insuranceList && insuranceList.length > 0 &&\n
\n
Insurance
\n \n
}\n {permitList && permitList.length > 0 &&\n
\n
Permit
\n \n
}\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(Public);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { updatePermitValue } from '../../actions/register';\n// import { fetchSaveLicense } from '../../actions/api';\nimport Public from '../components/Public';\nimport { updateMessageDialog } from '../../actions/view';\nimport { fetchPublicDashboard, fetchProfileImage } from '../../actions/api';\nimport { getPermit, getInsurance } from '../../selectors/public';\nimport { getReviews } from '../../selectors/public';\n\nconst mapStateToProps = (state, ownProps) => {\n const providerId = (ownProps.match.params.pid !== undefined) ? ownProps.match.params.pid : null;\n\n return {\n user: state.ee.user,\n publicReducer: state.publicReducer,\n permitList: getPermit(state),\n insuranceList: getInsurance(state),\n providerId: providerId,\n reivews: getReviews(state),\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getPublicDashboardData: (providerId) => {\n dispatch(fetchPublicDashboard(providerId));\n },\n getProfileImage: (providerId) => {\n dispatch(fetchProfileImage(providerId));\n },\n handleClickMessageDialogOpen: (replyDisplay, replyId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n }\n dispatch(updateMessageDialog(message));\n },\n //TODO: open popup with \"Request a call to your profile call number.\"\n //TODO: \n handleSendRequestCall: (replyDisplay, replyId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n text: 'I am looking for electrician for my project. Please can you make a call (xxx-xxx-xxxx).',\n }\n dispatch(updateMessageDialog(message));\n }\n});\n\nclass PublicDashboardContainer extends Component {\n componentDidMount() {\n const providerId = this.props.providerId;\n this.props.getPublicDashboardData(providerId);\n this.props.getProfileImage(providerId);\n }\n \n componentWillReceiveProps(newProps) {\n if (newProps.providerId !== this.props.providerId) {\n const providerId = this.props.providerId;\n this.props.getPublicDashboardData(providerId);\n this.props.getProfileImage(providerId);\n }\n }\n\n render() {\n const providerId = this.props.providerId;\n return (\n
\n {/*
*/}\n \n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(PublicDashboardContainer);","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Container from '@material-ui/core/Container';\nimport Box from '@material-ui/core/Box';\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\nimport Rating from '@material-ui/lab/Rating';\nimport Button from '@material-ui/core/Button';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '10px 16px 10px 16px',\n marginBottom: '6px',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n margin20: {\n marginBottom: '20px',\n },\n zIndex0: {\n zIndex: 0,\n },\n lightGrey: {\n color: '#c2c2c2',\n },\n green: {\n color: '#01DF01',\n }, \n publicTopDay: {\n float: 'right',\n padding: '1rem',\n bottom: '0',\n backgroundColor: '#F0F0F0',\n },\n publicTopLeft: {\n padding: '5px',\n margin: '5px',\n }, \n publicTopRight: {\n float: 'right',\n padding: '1rem',\n display: 'flex',\n },\n profileImage: {\n width: '200px',\n height: '200px',\n },\n top: {\n display: 'flex',\n },\n label: {\n paddingRight: '16px',\n }, \n buttonBlock: {\n display: 'block',\n }\n});\n\nconst WriteReview = (props) => {\n const {\n classes,\n history,\n handleChange,\n onSaveClick,\n review,\n } = props;\n\n const { \n recommend,\n status,\n quality,\n responsiveness,\n professionalism,\n subjectMatterExpertise,\n adherenceToCost,\n adherenceToSchedule,\n comment,\n } = review;\n\n return (\n \n \t
\n
\n
\n \n
\n {handleChange('status', 'completed')}}\n className={status === 'completed' ? clsx('ee-bg-color', 'flex') : clsx('flex') }>\n Project is completed\n \n \n
\n
\n
\n
\n \n
\n {handleChange('recommend', true)}}\n className={recommend === true ? clsx('ee-bg-color', 'flex') : clsx('flex') }>\n Recommend!\n \n \n
\n
\n \n Quality\n {\n handleChange('quality', event.target.value);\n }}\n />\n \n \n Responsiveness\n {\n handleChange('responsiveness', event.target.value);\n }}\n />\n \n \n Professionalism\n {\n handleChange('professionalism', event.target.value);\n }}\n />\n \n \n Subject Matter Expertise\n {\n handleChange('subjectMatterExpertise', event.target.value);\n }}\n />\n \n \n Adherence To Cost\n {\n handleChange('adherenceToCost', event.target.value);\n }}\n />\n \n \n Adherence To Schedule\n {\n handleChange('adherenceToSchedule', newValue);\n }}\n />\n \n {handleChange('comment', event.target.value)}}\n value={comment}\n />\n
\n \n
\n
\n \n );\n};\n\nexport default withStyles(styles)(WriteReview);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { updateReviewValue, updateProjectIdProviderId } from '../../actions/ee';\nimport WriteReview from '../components/WriteReview';\nimport { fetchSaveReview, fetchSelect } from '../../actions/api';\nimport Container from '@material-ui/core/Container';\n\nconst mapStateToProps = (state, ownProps) => {\n const projectId = (ownProps.match.params.projectId !== undefined) ? ownProps.match.params.projectId : null;\n const providerId = (ownProps.match.params.providerId !== undefined) ? ownProps.match.params.providerId : null;\n const review = {\n ...state.ee.review,\n projectId: projectId,\n providerId: providerId,\n }\n return {\n user: state.ee.user,\n review: review,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n setProjectIdProviderId: (projectId, providerId) => {\n dispatch(updateProjectIdProviderId(\n projectId, \n providerId\n ));\n },\n handleChange: (name, value, event) => {\n dispatch(updateReviewValue(\n name, \n value\n ));\n },\n onSaveClick: (history) => {\n dispatch(fetchSaveReview(history));\n },\n});\n\n\nclass WriteReviewContainer extends Component {\n componentDidMount() {\n this.props.setProjectIdProviderId(this.props.review.projectId, this.props.review.providerId);\n }\n\n componentWillReceiveProps(newProps) {\n }\n\n render() {\n return (\n
\n \n \n \n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(WriteReviewContainer);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Container from '@material-ui/core/Container';\nimport Button from '@material-ui/core/Button';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '0',\n font: '14px',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n margin20: {\n marginBottom: '20px',\n },\n zIndex0: {\n zIndex: 0,\n },\n lightGrey: {\n color: '#c2c2c2',\n },\n green: {\n color: '#01DF01',\n }, \n publicTopDay: {\n float: 'right',\n padding: '1rem',\n bottom: '0',\n backgroundColor: '#F0F0F0',\n },\n publicTopLeft: {\n padding: '5px',\n margin: '5px',\n }, \n publicTopRight: {\n float: 'right',\n padding: '1rem',\n display: 'flex',\n },\n profileImage: {\n width: '200px',\n height: '200px',\n },\n top: {\n display: 'flex',\n }\n});\n\nconst accountActivation = (props) => {\n const {\n classes,\n accountActivation,\n handleSaveAccountActivationAction,\n } = props;\n\n const {\n action,\n message,\n enabled,\n } = accountActivation;\n\n return (\n \n
\n
\n

Account Activation GetElectrician

\n {message &&
{message}
}\n
\n
\n
\n handleSaveAccountActivationAction(action)}\n className={action === 'Activate' ? clsx(classes.wide, 'ee-bg-color', 'flex') :clsx(classes.wide, 'flex')}>\n {action}\n \n
\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(accountActivation);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { updateMessageDialog } from '../../actions/view';\nimport { fetchGetActivationStatus, fetchSaveAccountActivation } from '../../actions/api';\nimport AccountActivation from '../components/AccountActivation';\n\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n accountActivation: state.setting.accountActivation,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getActivationStatus: () => {\n dispatch(fetchGetActivationStatus());\n },\n\n handleSaveAccountActivationAction: (type) => {\n dispatch(fetchSaveAccountActivation(type));\n },\n\n handleClickMessageDialogOpen: (replyDisplay, replyId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n }\n dispatch(updateMessageDialog(message));\n },\n});\n\nclass AccountActivationContainer extends Component {\n componentDidMount() {\n this.props.getActivationStatus();\n }\n \n componentWillReceiveProps(newProps) {\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(AccountActivationContainer);","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Container from '@material-ui/core/Container';\nimport Button from '@material-ui/core/Button';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '0',\n font: '14px',\n },\n formBox: {\n padding: '0px 20px 10px 20px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n },\n margin20: {\n marginBottom: '20px',\n },\n zIndex0: {\n zIndex: 0,\n },\n lightGrey: {\n color: '#c2c2c2',\n },\n green: {\n color: '#01DF01',\n }, \n publicTopDay: {\n float: 'right',\n padding: '1rem',\n bottom: '0',\n backgroundColor: '#F0F0F0',\n },\n publicTopLeft: {\n padding: '5px',\n margin: '5px',\n }, \n publicTopRight: {\n float: 'right',\n padding: '1rem',\n display: 'flex',\n },\n profileImage: {\n width: '200px',\n height: '200px',\n },\n top: {\n display: 'flex',\n }\n});\n\nconst NotificationSetting = (props) => {\n const {\n classes,\n notificationSetting,\n handleSaveNotificationSetting,\n handleNotificationSettingChange,\n } = props;\n\n const {\n email,\n } = notificationSetting;\n\n return (\n \n
\n

Notification Setting

\n
\n
\n
\n
\n handleNotificationSettingChange('email', event)}\n value=\"email\"\n labelPlacement=\"start\"\n color=\"success\"\n />\n }\n label=\"Email\"\n />\n
\n \n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(NotificationSetting);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { updateMessageDialog } from '../../actions/view';\nimport { fetchGetNotificationSettingStatus, fetchSaveNotificationSetting } from '../../actions/api';\nimport NotificationSetting from '../components/NotificationSetting';\nimport { updateNotificationSettingByType } from '../../actions/setting';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n notificationSetting: state.setting.notificationSetting,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getNotificationSettingStatus: () => {\n dispatch(fetchGetNotificationSettingStatus());\n },\n handleNotificationSettingChange: (name, event) => {\n dispatch(updateNotificationSettingByType(\n name, \n event.target.value\n ));\n },\n handleSaveNotificationSetting: (type) => {\n dispatch(fetchSaveNotificationSetting(type));\n },\n handleClickMessageDialogOpen: (replyDisplay, replyId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n }\n dispatch(updateMessageDialog(message));\n },\n});\n\nclass NotificationSettingContainer extends Component {\n componentDidMount() {\n this.props.getNotificationSettingStatus();\n }\n \n componentWillReceiveProps(newProps) {\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(NotificationSettingContainer);","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Container from '@material-ui/core/Container';\nimport Button from '@material-ui/core/Button';\nimport PasswordField from '../../components/PasswordField';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '0',\n font: '14px',\n },\n margin: {\n marginTop: '16px',\n marginBottom: '20px',\n },\n marginBottom: {\n marginBottom: '16px',\n },\n zIndex0: {\n zIndex: 0,\n },\n lightGrey: {\n color: '#c2c2c2',\n },\n green: {\n color: '#01DF01',\n }, \n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n minWidth: {\n minWidth: '450px',\n }\n});\n\nconst PasswordSetting = (props) => {\n const {\n classes,\n user,\n history,\n password,\n handleChange,\n handleUpdatePassword,\n } = props;\n\n const enabled = password.currentPassword && password.newPassword && password.verifyNewPassword && (password.newPassword === password.verifyNewPassword)\n return (\n \n
\n
\n

Password GetElectrician

\n
\n
\n
\n handleChange('currentPassword', event.target.value)}\n />\n
\n handleChange('newPassword', event.target.value)}\n />\n handleChange('verifyNewPassword', event.target.value)}\n />\n\n
\n
\n \n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(PasswordSetting);\n","import { connect } from 'react-redux';\nimport { updatePasswordValue } from '../../actions/setting';\nimport { fetchUpdatePassword } from '../../actions/api';\nimport PasswordSetting from '../components/PasswordSetting';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n password: state.setting.password,\n // helperMessage: state.view.helperMessage,\n // history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (name, value) => {\n dispatch(updatePasswordValue(name, value));\n },\n handleUpdatePassword: (history) => {\n dispatch(fetchUpdatePassword(history));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(PasswordSetting);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Container from '@material-ui/core/Container';\nimport Button from '@material-ui/core/Button';\nimport Link from '@material-ui/core/Link';\nimport EmailField from '../../components/EmailField';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%'\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n margin: {\n margin: '0 auto',\n },\n smallFont: {\n fontSize: '16px',\n },\n marginTop16: {\n marginTop: '16px',\n }\n});\n\nconst ForgotPassword = (props) => {\n const {\n classes,\n user,\n history,\n resetEmail,\n loginLinkEnabled,\n handleResetEmailChange,\n onResetClick,\n } = props;\n\n return (\n \n
\n
\n

Reset PasswordGetElectrician

\n \n
\n
\n \n
\n
\n Cancel\n
\n {loginLinkEnabled &&
\n onResetClick(history)}\n className={clsx(classes.wide, 'flex')}>\n Check your email to reset password. Go to \n   LOGIN  page!\n \n
}\n
\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(ForgotPassword);\n","import { connect } from 'react-redux';\nimport {\n updateResetEmail,\n} from '../../actions/view';\nimport { fetchResetPasswordRequest } from '../../actions/api';\nimport ForgotPassword from '../components/ForgotPassword';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n resetEmail: state.view.resetEmail,\n loginLinkEnabled: state.view.loginLinkEnabled,\n user: state.ee.user,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleResetEmailChange: (event) => {\n dispatch(updateResetEmail(event.target.value));\n },\n onResetClick: (event, history) => {\n dispatch(fetchResetPasswordRequest(history));\n }\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ForgotPassword);\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport Container from '@material-ui/core/Container';\nimport Button from '@material-ui/core/Button';\nimport PasswordField from '../../components/PasswordField';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n padding: '0',\n font: '14px',\n },\n margin: {\n marginTop: '16px',\n marginBottom: '20px',\n },\n marginBottom: {\n marginBottom: '16px',\n },\n zIndex0: {\n zIndex: 0,\n },\n lightGrey: {\n color: '#c2c2c2',\n },\n green: {\n color: '#01DF01',\n }, \n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n minWidth: {\n minWidth: '450px',\n }\n});\n\nconst ResetPassword = (props) => {\n const {\n classes,\n user,\n history,\n password,\n handleChange,\n handleUpdatePassword,\n } = props;\n\n const enabled = password.newPassword && password.verifyNewPassword && (password.newPassword === password.verifyNewPassword)\n return (\n \n
\n
\n

Password GetElectrician

\n
\n handleChange('newPassword', event.target.value)}\n />\n handleChange('verifyNewPassword', event.target.value)}\n />\n\n
\n
\n \n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(ResetPassword);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { updatePasswordValue, updateTokenEmail } from '../../actions/setting';\nimport { fetchResetPassword, fetchVerify } from '../../actions/api';\nimport ResetPassword from '../components/ResetPassword';\nimport { queryToArray } from '../../util/urlUtil';\n\nconst mapStateToProps = (state, ownProps) => {\n const token = (ownProps.match.params.token !== undefined) ? ownProps.match.params.token : '';\n return {\n token: token,\n user: state.ee.user,\n password: state.setting.password,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (name, value) => {\n dispatch(updatePasswordValue(name, value));\n },\n handleUpdatePassword: (history) => {\n dispatch(fetchResetPassword(history));\n },\n verify: (token, queryStr) => {\n dispatch(fetchVerify(token, queryStr));\n },\n setTokenEmail: (token, queryStr) => {\n dispatch(updateTokenEmail(token, queryStr));\n }\n});\n\nclass ResetPasswordContainer extends Component {\n componentDidMount() {\n const queryStr = this.props.location.search;\n const token = this.props.token;\n const queryParams = queryToArray(queryStr)\n if (queryParams.c && token) {\n this.props.verify(token, queryStr);\n }\n\n this.props.setTokenEmail(token, queryStr);\n }\n\n // componentWillReceiveProps(newProps) {\n // }\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(ResetPasswordContainer);\n\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport PropTypes from 'prop-types';\n\nconst Wrapper = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 99999;\n background: rgba(255, 255, 255, 0.5);\n height: 100%;\n width: 100%;\n`;\n\nconst Animation = styled.div`\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSc0OHB4JyBoZWlnaHQ9JzQ4cHgnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIiBjbGFzcz0idWlsLXJpbmctYWx0Ij48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0ibm9uZSIgY2xhc3M9ImJrIj48L3JlY3Q+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIHN0cm9rZT0iI2VlZWVlZSIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48L2NpcmNsZT48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgc3Ryb2tlPSIjMDA4ZWIwIiBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ic3Ryb2tlLWRhc2hvZmZzZXQiIGR1cj0iM3MiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBmcm9tPSIwIiB0bz0iNTAyIj48L2FuaW1hdGU+PGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ic3Ryb2tlLWRhc2hhcnJheSIgZHVyPSIzcyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIHZhbHVlcz0iMTg4LjI1IDYyLjc1OzEgMjUwOzE4OC4yNSA2Mi43NSI+PC9hbmltYXRlPjwvY2lyY2xlPjwvc3ZnPg==);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 48px;\n width: 48px;\n height: 48px;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translateX(-50%) translateY(-50%);\n`;\n\nconst Loader = ({ show }) => show && (\n \n \n \n);\n\nLoader.propTypes = {\n show: PropTypes.bool,\n};\n\nLoader.defaultProps = {\n show: false,\n};\n\nexport default Loader;","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst mapStateToProps = (state, ownProps) => ({\n user : state.ee.user,\n history: ownProps.history,\n title: ownProps.title,\n});\n\nconst mapDispatchToProps = dispatch => ({\n toHome: (history) => {\n history.push('/home')\n },\n});\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n display: 'flex',\n flexWrap: 'wrap',\n marginTop: '0px',\n background: '#3cb63c',\n // borderBottom: '1px solid rgb(218, 222, 223)',\n paddingLeft: '10%',\n paddingRight: '10%',\n paddingTop: '15px',\n paddingBottom: '15px',\n backgroundColor: '#f2f2f2',\n marginLeft: '-22px',\n marginRight: '-22px',\n marginBottom: '20px',\n justifyContent: 'space-between',\n },\n title: {\n fontSize: '28px',\n fontWeight: '500',\n },\n breadcrumb: {\n display: 'flex',\n color: '#3cb63c',\n height: '50px',\n lineHeight: '50px',\n },\n eeColor: {\n color: '#01DF01',\n },\n guideText: {\n fontWeight: 'bold',\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n});\n\n\nclass TitleContainer extends Component {\n render() {\n const { history, title, classes, toHome } = this.props;\n if(title) {\n return (\n
\n
\n {title}\n
\n
{toHome(history)}}>\n home\n
\n
\n )\n }\n return '';\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(withStyles(styles)(TitleContainer));\n\n","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Container from '@material-ui/core/Container';\nimport Button from '@material-ui/core/Button';\nimport TitleContainer from '../../containers/TitleContainer';\n\nconst styles = theme => ({\n container: {\n display: 'block',\n flexWrap: 'wrap',\n arginLeft: 'auto',\n marginRight: 'auto',\n },\n wide: {\n width: '100%',\n maxWidth: '340px'\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n margin: 'auto',\n display: 'flex',\n },\n scope: {\n width: '100%',\n maxWidth: '340px'\n },\n margin20: {\n marginBottom: '20px',\n },\n flex: {\n display: 'flex',\n }\n});\n\nconst EditProject = (props) => {\n const {\n classes,\n user,\n contact,\n history,\n handleChange,\n onSendRequestClick,\n } = props;\n\n const disabled = !contact.subject || !contact.comment;\n return (\n \n \n\n
\n handleChange('subject', event)}\n margin=\"normal\"\n // defaultValue=\"subject\"\n />\n
\n
\n handleChange('comment', event)}\n className={clsx(classes.wide, classes.margin)}\n margin=\"normal\"\n helperText= \"Please describe exactly what you are trying to accomplish...\"\n />\n
\n
\n \n
\n
\n );\n}\n\nexport default withStyles(styles)(EditProject);","import { connect } from 'react-redux';\nimport Contact from '../components/Contact';\nimport { updateContact } from '../../actions/view';\nimport { fetchContactSendRequest } from '../../actions/api';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n contact: state.view.contact,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleChange: (name, event) => {\n dispatch(updateContact(\n name, \n event.target.value\n ));\n },\n onSendRequestClick: (history) => {\n dispatch(fetchContactSendRequest(history));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Contact);\n","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport { PRIVACY_POLICY } from '../register/components/privacyPolicy';\nimport parse from 'html-react-parser';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n padding: '10px',\n },\n});\n\n\nconst PrivacyPolicyContainer = (props) => {\n const {\n classes,\n } = props;\n\n return (\n
\n {parse(PRIVACY_POLICY)}\n
\n )\n}\n\nexport default withStyles(styles)(PrivacyPolicyContainer);","export const PRIVACY_POLICY=`\n

GetElectrician Privacy Policy

\n\n

Last Updated: July 28, 2020

\n\n
Your privacy is important to us and we are committed to protecting your personal information in accordance with the terms of this Privacy Policy. If you are a California resident, please see our Privacy Notice for California Residents (located here) regarding your rights under the California Consumer Protection Act of 2018.
\n\n

Overview

\n\n
This Privacy Policy describes the collection, use and disclosure of information by Xavior Inc, (“Getelectrician”, “we,” “us”) and other parties with respect to your use of all properties (Web sites, telephone service or otherwise) owned or operated by Xavior Inc and our affiliates (collectively, the \"Properties\"), and all products and services available from Getelectrician, providers of electrical-related services (“Service Providers”) or other third parties in connection with the Properties (individually and collectively with the Properties, the “Services”). By accessing or using the Services, you are accepting the practices described in this Privacy Policy. If you do not agree to the terms of this Privacy Policy, please do not use the Services.
\n\n

Privacy Policy Updates

\n\n
We may update this Privacy Policy at any time by posting a revised version. Any changes to this Privacy Policy will be effective immediately upon posting. Please review this Privacy Policy each time you use the Services, as your continued use of the Services after such changes will constitute your acceptance and agreement to such changes.
\n\n
Information You Provide
\n \n
Information You Submit. You will need to open an account if you would like to get a quote from electrical providers, if you’d like to access the dashboard, or if you are a Service Provider who would like to join the Getelectrician portal. When using the Services, whether as a User or as a Service Provider, you may elect to provide information about yourself, such as name, address, telephone number, email address, payment details and information about your use of the Services or your experiences with Getelectrician, Service Providers or Users. You may provide this information, for example, when you create an account, post User Submissions, request or purchase products or services, communicate with us, a Service Provider or a User, “Like” us on Facebook or otherwise connect us to your social networks, or complete other forms. If you are a Service Provider, you may provide additional information about yourself or your company, including for example, when you provide details to complete your account, respond to service requests from customers, and provide information for background/reference checks.\n In connection with the Services, you may also elect to provide reviews, comments, feedback, notes, photos, videos, know-how, techniques, or other information relating to you, your project, your household, your business, your real or personal property or otherwise.\n Social Networks. If you use the social networking connection functions offered through the Services, we may access any of your social profile information that you have made available to be shared and to use it in accordance with this Privacy Policy. Please refer to your social network policies to manage information that is shared through that account.
\n\n
Information We Collect Automatically
\n\n
Cookies and Web Beacons. We, our service providers and our advertising networks use cookies, web beacons (sometimes called single-pixel gifs or action tags) or similar technologies on the Properties, in emails and in advertisements to collect information about your online activities. Cookies (small data files that your Internet browser stores on your hard disk or in your browser's memory) are used by the Services to connect your activity on the Services with other information we store about you in your account profile or from prior usage of the Services. Web beacons are electronic images that assist in delivering cookies, provide additional information (such as which ad you clicked on to arrive at the Properties) and allow us to compile aggregated statistics. For example, the use of cookies allows us to improve our Services by tracking saved searches, understanding your and other site visitors’ use of various features and functionality, delivering targeted ads that are more relevant to you, avoiding ad duplication, measuring the effectiveness of advertising and otherwise creating a consistent user experience for you. Collected information may include the content you view, the date and time you view content, and the referring web site or advertisement. This information may be associated with your unique browser, device identifier or IP address.
\n \n
At any time, you may adjust your browser settings to delete existing cookies (and the data that web beacons add to the cookie), or refuse new cookies, according to the method permitted by your browser. If you choose to delete cookies, you will need to log in again on your next visit to the Properties and re-enter any preferences you have set. If you choose to disable cookies, you may not be able to access or use some portions and features of the Services and may not get the best experience possible.
\n \n
Your browser may offer you a \"Do Not Track\" option, which allows you to signal to operators of websites and other properties that you do not wish such operators to track certain online activities. Our Services do not support Do Not Track requests at this time.
\n \n
Log Usage Data. Our servers automatically record usage log data created when you use the Services. Usage log data may include your IP address, browser type, operating system, referring web page, visited web pages, location, mobile carrier, computer or mobile device type, search terms, cookie information and other information.
\n \n
Location Data. If you provide location information during the account registration process or at any other time via your account settings, or if location information is included as part of the information we collect (for example, your IP address may provide an approximate geo-location), we may store that information in connection with your account. If you are using mobile Services, we may collect location data directly from your mobile device if your device allows us to do so. Your mobile device manufacturer or mobile service provider may provide you with choices about how and whether location data is shared with us.
\n \n
Other Information We Collect
\n\n
Telephone Calls. When you call us, or when we call you, we may monitor those calls for quality assurance and customer satisfaction purposes.
\n \n
Email and Mobile Content Programs. You can choose to receive promotional emails from us. Like most e-commerce sites, we include software code in our emails to monitor whether and when you opened the email, whether you have clicked on the images and/or links in the email, and whether your computer or mobile device is capable of receiving HTML-based email. You may also choose to access our content through a mobile application and to receive text (SMS) messages on your mobile device. You may opt out from email and mobile programs as described below under \"Opting Out.”
\n \n
Information Collected by Third Parties
\n \n
Offline Activity. Getelectrician and Service Providers may collect data, text, photos, videos, measurements, comments, reviews, feedback, notes, ideas, know-how, techniques, or other information of any nature whatsoever relating to you, your household, your real or personal property or otherwise, in connection with the Services provided by Getelectrician or the services provided by Service Providers.
\n\n
Aggregate Information
\n\n
We collect non-personal, statistical information about the use of the Services, such as how many visitors visit a specific page, how long they stay, which links they click on, and how, when and how often Users order particular Services. We may also group and de-personalize (that is, anonymize) information into aggregated data in order to describe and analyze Services usage. Aggregated, anonymized data is not subject to this Privacy Policy, and may be used by us for any purpose.
\n \n
Information collected on the Properties may be combined with other personal or aggregated information, including information we collect by other means (for example, if you call or email us). The combined information will also be subject to this Privacy Policy.
\n\n

Use of Information

\n
Any information we collect from you may be used in the following ways:
\n
    \n
  • To provide the Services;
  • \n
  • To improve the Services (for example, to personalize your experience to make it smoother and more relevant to you);
  • \n
  • To provide and improve customer service, to communicate with you about your account or changes in our policies, and to otherwise manage our customer relationships;
  • \n
  • To connect Users with Service Providers;
  • \n
  • To connect you with Service Providers, to help Service Providers select whether they want to work with you and to provide Service Providers with more opportunities to receive service requests that might be of interest to them;
  • \n
  • To provide you with information about products and services from Getelectrician that may be of interest to you;
  • \n
  • To provide you with complementary products and services that may be of interest to you, including discounts and other benefits from our partners;
  • \n
  • To administer contests and promotions;
  • \n
  • To detect, investigate and prevent fraud, abuse and activities that may be illegal or violate our policies, to address technical and security issues, to comply with applicable laws and legal process, and to otherwise protect Users, Service Providers, and our business;
  • \n
  • To select, develop and deliver our products and services and analyze their effectiveness, distribution and reach; and
  • \n
  • To perform other functions described at the time the information is collected.
  • \n
\n\n

Disclosure of Information

\n
Information that you choose to provide in a public area of the Services (such as your profile page or via User Submissions), including personally identifiable information, will not be protected by this Privacy Policy because you have chosen to make that information public. Otherwise, your personally identifiable information will be shared with third parties only in accordance with this Privacy Policy, as follows:
\n
Consent
\n
We may share your personally identifiable information when you consent or direct Getelectrician to do so. For example, if a User seeks a Service Provider through the Services, we may provide the User’s personal information to the Service Provider and Service Provider information to the User. The method of consent will be appropriate for the type of personal information involved and the purposes for which it is collected, used or disclosed. Depending on the circumstances, consent may be express (i.e., you specifically agree either verbally, in writing or electronically) or implied.
\n \n Please note that, when you submit a request for products or services, you are requesting to be (and you expressly consent to be) contacted by Getelectrician, Service Providers and companies that help connect you with Service Providers (or, if you are a Service Provider, by Getelectrician and companies that help connect you with customers), as the case may be. You consent to be contacted by these parties by telephone, email, mail, text (SMS) messaging, fax, or other reasonable means at any of the residential, mobile or fax phone numbers or addresses you provide, even if they are listed on a national \"do not call\" or “do not contact” list. You agree that these communications may include prerecorded, artificially voiced or autodialed telemarketing messages, and that they may be monitored and recorded for quality assurance and other reasons. You agree that these parties may contact you for the purposes of providing the products or services you have requested, marketing, addressing complaints, billing or other account-related matters, or other purposes reasonably related to the services you have requested. Your consent to receive marketing communications is not required as a condition of purchasing any goods or services.\n\n
Compliance with Laws and Policies; Protection of Rights
\n
We may release your information (including personally identifiable information) and aggregated information when we believe that doing so is appropriate to comply with applicable laws, regulations, subpoenas, warrants or court orders, or other legal requirements; to cooperate with government or law enforcement; to resolve complaints or disputes; to avoid legal liability; to comply with, enforce or investigate potential violations of our agreements, Terms of Use, program-specific terms, Privacy Policy or other policies; to bill and collect amounts owed to us; to protect our rights, reputation, safety or property or that of Users or others; and to address fraud, security or technical issues.
\n
Aggregated Data; Non-Personal Data
\n
Aggregated, anonymized data and other data that is not personally identifiable is not subject to this Privacy Policy, and may be used by us for any purpose. For example, we may share aggregated, non-personal data with service providers, advertisers, or existing or potential business partners.
\n\n

Opting Out; Editing Your Personal Information

\n
Changing Information; Closing Account
\n
To change or delete your personal information, you may login to your account and modify or remove specified information that resides in your account. If you want to delete your account, please contact us at info@GetElectrician.com. We will remove your account within a reasonable time after receiving your request. Please note that, even after your account is deleted, information that you chose to provide in a public area of the Services (such as reviews and projects) will remain visible to the public and may remain in the accounts of Users and Service Providers with whom such information has been shared, and all of your information (including your personal information) will remain in Getelectrician’s backup/archival records. Getelectrician may retain and use information in our records as described in the Terms of Use and this Privacy Policy, including the section above entitled “Disclosure of Information/Compliance with Laws and Policies; Protection of Rights.”
\n
You may also make requests regarding your personal information, such as requests to access information or requests to update or correct inaccurate information, by emailing us at info@getelectrician.com or writing us at 40 1st Avenue, Suite 15C, New York, NY 10009.
\n\n

Your California Privacy Rights

\n
Section 1798.83 of the California Civil Code permits California residents to request from a business, with whom the California resident has an established business relationship, certain information about the types of personal information the business has shared with third parties for those third parties' direct marketing purposes and the names and addresses of the third parties with whom the business has shared such information during the immediately preceding calendar year. You may make one request each year by emailing us at info@getelectrician.com or writing us at 40 1st Ave, New York, NY 10009.
\n \n
See our Privacy Notice for California Residents (located here) regarding your rights under the California Consumer Protection Act of 2018.
\n\n

Security

\n
The security of your personal information is important to us. We maintain industry-standard physical, electronic, and procedural safeguards, such as firewalls and encryption technology, to protect against the loss, misuse, and alteration of the information under our control. For example, when you enter a credit card number on the Properties, we encrypt the transmission of that information using secure socket layer (SSL) technology. However, no method of transmitting information over the Internet or storing information is completely secure. Accordingly, we cannot guarantee the protection of any information shared with us.
\n\n
If you create an account, you may be asked to choose a password to protect your account and account information. We recommend that you do not disclose your password to any other person. You are responsible for maintaining the confidentiality of your password and account, and are fully responsible for all activities that occur under your password or account.
\n\n

General Matters

\n
Children
\n
The Services are not directed to children under 13, and we do not knowingly collect or store any personally identifiable information about persons under the age of 13. If we learn that we have collected personally identifiable information of a child under 13, we will make commercially reasonable efforts to delete such information from our files. If you are under the age of 13, please do not submit any personal information through the Properties.Governing Law; Visitors Residing Outside the United States\n
All of the Services are hosted in the United States. This Privacy Policy and the privacy practices of our Site will be subject exclusively to the laws of the State of New York within the United States of America, without regard to conflict of law principles. If you reside outside of the United States, you are responsible for complying with local laws in connection with your use of the Services, and you consent to the collection, transfer, storage, and use of your personal information in the United States of America in accordance with this Privacy Policy.
\n\n
Getelectrician Terms of Use
\n
Your access or use of the Services is subject to Getelectrician’s Terms of Use (located here).
\n\n
Contacting Us
\n
If you have any questions or suggestions regarding our Privacy Policy, please contact us by email at info@getelectrician.com or in writing at 40 First Ave Suite 15C, New York, NY, 10009
\n`;","import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport { PRIVACY_NOTICE_FOR_CALIFORNIA_RESIDENTS } from '../register/components/ccpa';\nimport parse from 'html-react-parser';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n padding: '10px',\n },\n});\n\n\nconst CCPAContainer = (props) => {\n const {\n classes,\n } = props;\n\n return (\n
\n {parse(PRIVACY_NOTICE_FOR_CALIFORNIA_RESIDENTS)}\n
\n )\n}\n\nexport default withStyles(styles)(CCPAContainer);","export const PRIVACY_NOTICE_FOR_CALIFORNIA_RESIDENTS=`\n

GetElectrician.com Privacy Notice for California Residents

\n\n

Last Updated: July 23, 2020

\n\n
This Privacy Notice for California Residents of Xavior, Inc. (“GetElectrician”) supplements the information contained in GetElectrician's general Privacy Notice and applies solely to all visitors, users, and others who reside in the State of California (“consumers” or “you”). Any terms defined in the California Consumer Privacy Act of 2018 (“CCPA”) have the same meaning when used in this notice.
\n\n

Information We Collect

\n\n
This Privacy Policy describes the collection, use and disclosure of information by Xavior Inc, (“Getelectrician”, “we,” “us”) and other parties with respect to your use of all properties (Web sites, telephone service or otherwise) owned or operated by Xavior Inc and our affiliates (collectively, the \"Properties\"), and all products and services available from Getelectrician, providers of electrical-related services (“Service Providers”) or other third parties in connection with the Properties (individually and collectively with the Properties, the “Services”). By accessing or using the Services, you are accepting the practices described in this Privacy Policy. If you do not agree to the terms of this Privacy Policy, please do not use the Services.
\n\n

Privacy Policy Updates

\n\n
GetElectrician has collected the following categories of consumer personal information within the last twelve (12) months:
\n\n
Categories and Examples:
\n\n
    \n
  • A. Identifiers (A real name, postal address, unique personal identifier, Internet Protocol address, email address, phone number, date of birth, driver's license number, or other similar identifiers.)
  • \n
  • B. Personal information categories listed in the California Customer Records statute (Cal. Civ. Code § 1798.80(e)).(A name, address, telephone number, driver's license or state identification card number, insurance policy number, education, employment, employment history, or any other financial information.\n Some personal information included in this category may overlap with other categories.)
  • \n
  • C. Internet or other similar network activity. (Search history, information on a consumer's interaction with a website, application, or advertisement while using or interacting with Getelectrician’s websites and applications.)
  • \n
  • D. Geolocation data. (Physical location or movements.)
  • \n
  • E. Professional or employment-related information. (Current or past job history or performance ratings.)
  • \n
  • F. Inferences drawn from other personal information. (Profile reflecting a person's preferences, characteristics, predispositions, and behavior.)
  • \n
\n\n\n
Personal information does not include:
\n\n
    \n
  • Publicly available information from government records.
  • \n
  • Deidentified or aggregated consumer information.
  • \n
  • Information excluded from the CCPA's scope, like:\n
      \n
    • health or medical information covered by the Health Insurance Portability and Accountability Act of 1996 (HIPAA) and the California Confidentiality of Medical Information Act (CMIA) or clinical trial data;
    • \n
    • personal information covered by certain sector-specific privacy laws, including the Fair Credit Reporting Act (FRCA), the Gramm-Leach-Bliley Act (GLBA) or California Financial Information Privacy Act (FIPA), and the Driver's Privacy Protection Act of 1994.
    • \n
    \n
  • \n
\n\n
Personal information does not include:
\n
    \n
  • Directly from you. For example, from forms you complete or products and services you request or purchase.
  • \n
  • Indirectly from you. For example, from observing your actions on our Website and through cookies and other similar technology.
  • \n
  • From other businesses that Getelectricians works with to provide consumers services, including wholly-owned subsidiaries.
  • \n
  • From social networks.
  • \n
  • From sources generally available to the public, such as websites.
  • \n
\n\n

Use of Personal Information

\n
We may use, disclose, or share the personal information we collect. Getelectrician works with service providers, other businesses, and third parties to serve our customers. In addition to disclosing personal information with our service providers, we may share personal information that we collect with other businesses or third parties upon your consent or request for information, products, or services offered by the other business or third party. Because the CCPA defines the sale of personal information in very broad terms and given the complexities and ambiguities of the CCPA in the absence of guidance or final implementing regulations, such sharing of personal information may be considered a “sale” under the CCPA even if no money is exchanged. Getelectrician also allows tracking technology such as cookies and pixels on our site, which allows other companies to receive data about your activity on Getelectrician that is associated with your browser or device. The other companies may use that data to serve you more relevant ads on our site and others. Sharing data for online advertising like this may also be considered a “sale” under the CCPA. We may use, disclose, or share personal information for one or more of the following business purposes:
\n
    \n
  • To fulfill or meet the reason you provided the information. For example, if you share your name and contact information to request a price quote or ask a question about our services, we will use that personal information to respond to your inquiry and, in the case of service requests, to connect you with service providers and other companies that receive or help us meet service requests. If you provide your personal information to purchase a product or service, we will use that information to process your payment and facilitate fulfillment. We may also save your information to facilitate new service requests or purchases.
  • \n
  • To provide, improve, support, personalize, and develop our website and services.
  • \n
  • To create, maintain, customize, and secure your account with us.
  • \n
  • To process your requests, purchases, transactions, and payments and prevent transactional fraud.
  • \n
  • To provide you with support, to respond to your inquiries, and to otherwise communicate with you and manage the customer relationships, including to investigate and address your concerns and monitor and improve our responses.
  • \n
  • To personalize your Website experience and to deliver content and product and service offerings relevant to your interests.
  • \n
  • To administer contests, promotions or sweepstakes.
  • \n
  • To help maintain the safety, security, and integrity of our website and services, databases and other technology assets, and business.
  • \n
  • To respond to law enforcement requests and as required by applicable law, court order, or governmental regulations.
  • \n
  • To detect, investigate and prevent fraud and abuse and activities that may be illegal or violate our policies, and to otherwise protect our users, service providers, and business.
  • \n
  • As described to you when collecting your personal information or as otherwise set forth in the CCPA.
  • \n
\n
Getelectrician.com will not collect additional categories of personal information or use the personal information we collected for materially different, unrelated, or incompatible purposes without providing you notice.
\n \n\n

Your Rights and Choices

\n
This section describes consumer CCPA rights and explains how to exercise those rights.
\n\n
Access to Specific Information and Data Portability Rights
\n
Consumers have the right to request that Getelectrician disclose certain information to you about our collection and use of your personal information over the past 12 months.
\n \n
Deletion Request Rights
\n
Consumers have the right to request that Getelectrician delete any of your personal information that we collected from you and retained, subject to certain exceptions.
\n\n
Exercising Rights
\n\n
To exercise the access, data portability, and deletion rights described above, please submit a verifiable consumer request to us by email to info@getelectrician.com
\n
Only you, or a person registered with the California Secretary of State that you authorize to act on your behalf, may make a verifiable consumer request related to your personal information. You may also make a verifiable consumer request on behalf of your minor child.
\n
We cannot respond to your request or provide you with personal information if we cannot verify your identity or authority to make the request and confirm the personal information relates to you.
\n
We will only use personal information provided in a verifiable consumer request to verify the requestor's identity or authority to make the request.
\n

Non-Descrimination

\n
We will not discriminate against you for exercising any of your CCPA rights.
\n\n

Changes to Our Privacy Notice

\n
Getelectrician reserves the right to amend this privacy notice at our discretion and at any time. When we make changes to this privacy notice, we will post the updated notice on the Website and update the notice's effective date. Your continued use of our Website following the posting of changes constitutes your acceptance of such changes
\n `;","import React from 'react';\nimport IconButton from '@material-ui/core/IconButton';\nimport { withStyles } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Paper from '@material-ui/core/Paper';\nimport MessageIconSvg from '../../icons/MessageIconSvg';\nimport DeleteIconSvg from '../../icons/DeleteIconSvg';\n\nconst styles = theme => ({\n root: {\n fontFamily: \"'Noto Sans', sans-serif\",\n width: '100%',\n overflowX: 'auto',\n },\n table: {\n width: \"100%\",\n minWidth: 700,\n },\n head: {\n backgroundColor: '#c2c2c2',\n },\n th: {\n paddingLeft: '3px',\n paddingRight: '2px',\n },\n title: {\n cursor: 'pointer',\n paddingLeft: '2px',\n paddingRight: '2px',\n fontWeight: '500',\n },\n row: {\n '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n },\n }\n});\n\nconst UserMessageList = (props) => {\n const {\n classes,\n user,\n history,\n messageType,\n messages,\n trs,\n handleClickMessageDialogOpen,\n handleDeleteMessageClick,\n } = props;\n\n\n return (\n \n \n \n \n {trs.map(tr => (\n {tr.title}\n ))}\n \n \n \n {messages.map(row => (\n \n {row.id}\n {messageType !== 'user-action' &&\n {row.replyName}}\n {row.date}\n {/* {row.projectId} */}\n { history.push(`/project/${row.projectId}`) }}\n >{row.projectId}\n {row.text}\n \n {messageType !== 'user-action' &&\n handleClickMessageDialogOpen(row.replyName, row.replyId, row.projectId)}>\n \n }\n handleDeleteMessageClick(row.id, history)}>\n \n \n \n \n ))}\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(UserMessageList);\n\n","import { connect } from 'react-redux';\nimport UserMessageList from '../components/UserMessageList';\nimport { getUserActions } from '../../selectors/ee';\nimport { fetchDeleteUserAction } from '../../actions/api';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n history: ownProps.history,\n messages: getUserActions(state),\n messageType: 'user-action',\n trs: [{\n title: 'ID',\n align: 'center'\n }, {\n title: 'Date',\n align: 'left',\n }, {\n title: 'Proejct ID',\n align: 'center',\n }, {\n title: 'Message',\n align: 'left',\n }, {\n title: 'Actions',\n align: 'right',\n }]\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleDeleteMessageClick: (userActionId, history) => {\n dispatch(fetchDeleteUserAction(userActionId, history));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(UserMessageList);\n","import { connect } from 'react-redux';\nimport UserMessageList from '../components/UserMessageList';\nimport { getFromUserMessages } from '../../selectors/ee';\nimport { updateMessageDialog } from '../../actions/view';\nimport { fetchDeleteMessage } from '../../actions/api';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n messages: getFromUserMessages(state),\n messageType: 'user-message',\n history: ownProps.history,\n trs: [{\n title: 'ID',\n align: 'center'\n }, {\n title: 'Send by',\n align: 'left' \n }, {\n title: 'Date',\n align: 'left',\n }, {\n title: 'Proejct ID',\n align: 'center',\n }, {\n title: 'Message',\n align: 'left',\n }, {\n title: 'Actions',\n align: 'right',\n }]\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n handleDeleteMessageClick: (messageId, history) => {\n dispatch(fetchDeleteMessage(messageId, history));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(UserMessageList);\n","import { connect } from 'react-redux';\nimport UserMessageList from '../components/UserMessageList';\nimport { getToUserMessages } from '../../selectors/ee';\nimport { updateMessageDialog } from '../../actions/view';\nimport { fetchDeleteMessage } from '../../actions/api';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n messages: getToUserMessages(state),\n messageType: 'user-message',\n history: ownProps.history,\n trs: [{\n title: 'ID',\n align: 'center'\n }, {\n title: 'Send to',\n align: 'left' \n }, {\n title: 'Date',\n align: 'left',\n }, {\n title: 'Proejct ID',\n align: 'center',\n }, {\n title: 'Message',\n align: 'left',\n }, {\n title: 'Actions',\n align: 'right',\n }]\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n handleDeleteMessageClick: (messageId, history) => {\n dispatch(fetchDeleteMessage(messageId, history));\n },\n});\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(UserMessageList);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { withStyles } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Typography from '@material-ui/core/Typography';\nimport AppBar from '@material-ui/core/AppBar';\nimport Box from '@material-ui/core/Box';\nimport { updateInboxTabValue } from '../../actions/view';\nimport {\n fetchDashboard, fetchAllScopes\n} from '../../actions/api';\nimport UserActionListContainer from './UserActionListContainer';\nimport UserMessageFromListContainer from './UserMessageFromListContainer';\nimport UserMessageToListContainer from './UserMessageToListContainer';\n\n\nconst styles = theme => ({\n root: {\n flexGrow: 1,\n },\n});\n\nfunction TabPanel(props) {\n const { children, value, index, ...other } = props;\n \n return (\n
\n );\n }\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n inbox: state.view.inbox,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getDashboardData: (history) => {\n dispatch(fetchDashboard(history));\n },\n getScopeData: (history) => {\n dispatch(fetchAllScopes(history));\n },\n handleChange: (event, value) => {\n dispatch(updateInboxTabValue(value));\n },\n});\n\n\nclass DashboardContainer extends Component {\n componentDidMount() {\n this.props.getDashboardData(this.props.history);\n if (!this.props.scopes || this.props.scopes.length === 0) {\n this.props.getScopeData(this.props.history);\n }\n }\n\n componentWillReceiveProps() {\n this.props.getDashboardData(this.props.history);\n if (!this.props.scopes || this.props.scopes.length === 0) {\n this.props.getScopeData(this.props.history);\n }\n }\n\n render() {\n const { inbox, handleChange, classes } = this.props;\n const value = inbox.value || 0;\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n };\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(withStyles(styles)(DashboardContainer));","import React from 'react';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport Container from '@material-ui/core/Container';\nimport Button from '@material-ui/core/Button';\nimport ToggleButton from '@material-ui/lab/ToggleButton';\nimport ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup';\nimport Info from '@material-ui/icons/InfoOutlined';\n\n\nconst styles = theme => ({\n container: {\n display: 'block',\n flexWrap: 'wrap',\n arginLeft: 'auto',\n marginRight: 'auto',\n paddingBottom: '50px',\n maxWidth: '420px',\n },\n wide: {\n width: '100%',\n maxWidth: '340px',\n },\n narrow: {\n width: 200,\n },\n dense: {\n marginTop: 19,\n },\n margin: {\n marginLeft: '4px',\n marginRight: '4px',\n display: 'flex',\n },\n scope: {\n width: '100%',\n maxWidth: '340px',\n },\n margin20: {\n marginBottom: '20px',\n },\n marginTop20: {\n marginTop: '20px',\n },\n togglebutton: {\n backgroundColor: '#346847'\n },\n info: {\n color: '#3cb63c',\n paddingTop: '10px',\n paddingBotton: '10px'\n }\n});\n\nconst QuickOffer = (props) => {\n const {\n classes,\n user,\n projectId,\n quickOffer,\n history,\n handleChange,\n handleQuickOfferValueChange,\n handleSaveQuickOffer,\n handleCancelQuickOffer,\n } = props;\n\n let materialOptions = [\n {description: 'I will provider materials', selected: false},\n {description: 'Electrician will provider materials', selected: false},\n ]\n \n return (\n \n {quickOffer.update && \n
This will update the existing offer.
\n }\n
\n handleChange('cost', event)}\n margin=\"normal\"\n type=\"number\"\n helperText={\"Define total cost\"}\n InputProps={{\n startAdornment: $,\n }}\n />\n
\n {/* Select Scope to apply proposal */}\n \n
\n handleQuickOfferValueChange('material', value)}\n // aria-label=\"text alignment\"\n >\n \n Customer will provide materials\n \n \n Electrician will provider materials\n \n \n
\n
\n
\n handleChange('comment', event)}\n className={clsx(classes.wide, classes.margin)}\n margin=\"normal\"\n helperText= \"Write additional comments\"\n />\n
\n
\n \n \n
\n
\n
\n );\n}\n\nexport default withStyles(styles)(QuickOffer);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport QuickOffer from '../components/QuickOffer';\nimport { selectProposalScopeClick, \n updateProposalValue, \n updateQuickOfferValue,\n } from '../../actions/ee';\nimport { fetchGetQuickOffer, fetchSaveQuickOffer, fetchAllScopes } from '../../actions/api';\n\nconst mapStateToProps = (state, ownProps) => {\n const projectId = (ownProps.match.params.projectId !== undefined) ? ownProps.match.params.projectId : null;\n return {\n user: state.ee.user,\n projectId,\n project: state.ee.project,\n quickOffer: state.ee.quickOffer,\n history: ownProps.history,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getQuickOfferByProjectId: (projectId) => {\n dispatch(fetchGetQuickOffer(projectId));\n },\n getScopeData: (history) => {\n dispatch(fetchAllScopes(history));\n },\n handleChange: (name, event) => {\n dispatch(updateQuickOfferValue(\n name, \n event.target.value\n ));\n },\n handleQuickOfferValueChange: (name, value) => {\n dispatch(updateQuickOfferValue(\n name,\n value \n // event.target.value\n ));\n },\n handleSaveQuickOffer: (history, projectId) => {\n dispatch(fetchSaveQuickOffer(history, projectId));\n },\n handleCancelQuickOffer: (history, projectId) => {\n history.push('/project/' + projectId);\n },\n onSaveClick: (history) => {\n dispatch(fetchSaveQuickOffer(history));\n }\n});\n\nclass EditProposalContainer extends Component {\n componentDidMount() {\n this.props.getQuickOfferByProjectId(this.props.projectId);\n }\n\n componentDidUpdate(newProps) {\n if (newProps.projectId !== this.props.projectId) {\n this.props.getQuickOfferByProjectId(newProps.projectId);\n }\n }\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(EditProposalContainer);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport Container from '@material-ui/core/Container';\nimport ProviderList from '../../components/ProviderList';\nimport { fetchSearch } from '../../actions/api';\nimport { updateMessageDialog } from '../../actions/view';\n\nconst mapStateToProps = (state, ownProps) => {\n return {\n user: state.ee.user,\n keyword: ownProps.match.params.keyword,\n providerList: state.search.providerList,\n }\n};\n\nconst mapDispatchToProps = dispatch => ({\n getProviderList: (keyword) => {\n dispatch(fetchSearch(keyword));\n },\n handleClickMessageDialogOpen: (replyDisplay, replyId, projectId) => {\n const message = {\n open: true,\n replyDisplay,\n replyId,\n projectId,\n }\n dispatch(updateMessageDialog(message));\n },\n});\n\nclass SearchWrapper extends Component {\n componentDidMount() {\n this.props.getProviderList(this.props.keyword);\n }\n\n componentDidUpdate(newProps) {\n if (newProps.keyword !== this.props.keyword) {\n this.props.getProviderList(newProps.keyword);\n }\n }\n\n render() {\n return (\n
\n \n \n \n
\n );\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(SearchWrapper);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\nimport IdleTimer from 'react-idle-timer'\nimport HomeContainer from '../containers/HomeContainer';\nimport TopNavContainer from '../containers/TopNavContainer';\nimport AboutUsContainer from '../containers/AboutUsContainer';\nimport Covid19Container from '../containers/Covid19Container';\nimport HowItWorksContainer from '../containers/HowItWorksContainer';\nimport HowItWorksProviderContainer from '../containers/HowItWorksProviderContainer';\nimport LoginContainer from '../containers/LoginContainer';\nimport CodeOfEthicsContainer from './CodeOfEthicsContainer';\nimport TermOfUseContainer from './TermOfUseContainer';\nimport FooterContainer from './FooterContainer';\nimport DashboardContainer from '../dashboard/containers/DashboardContainer';\nimport NotificationContainer from '../containers/NotificationContainer';\nimport MessageDialogContainer from '../message/containers/MessageDialogContainer';\nimport ProjectDetailContainer from '../project/containers/ProjectDetailContainer';\nimport EditProjectContainer from '../project/containers/EditProjectContainer';\nimport EditProposalContainer from '../proposal/containers/EditProposalContainer';\nimport RegisterContainer from '../register/containers/RegisterContainer';\nimport ProfileContainer from '../register/containers/ProfileContainer';\nimport PublicContainer from '../profile/containers/PublicContainer';\nimport WriteReviewContainer from '../project/containers/WriteReviewContainer';\nimport AccountActiviationContainer from '../profile/containers/AccountActiviationContainer';\nimport NotificationSettingContainer from '../profile/containers/NotificationSettingContainer';\nimport PasswordContainer from '../profile/containers/PasswordContainer';\nimport ForgotPasswordContainer from '../profile/containers/ForgotPasswordContainer';\nimport ResetPasswordContainer from '../profile/containers/ResetPasswordContainer';\nimport { logout } from '../actions/api';\nimport Loader from '../components/Loader';\nimport ContactContainer from '../help/containers/ContactContainer';\nimport PrivacyPolicyContainer from './PrivacyPolicyContainer';\nimport CCPAContainer from './CCPAContainer';\nimport MessageTabContainer from '../messageWrapper/containers/MessageTabContainer';\nimport QuickOfferContainer from '../proposal/containers/QuickOfferContainer';\nimport SearchWrapper from '../search/containers/SearchWrapper';\n\nconst mapStateToProps = (state, ownProps) => ({\n user : state.ee.user,\n history: ownProps.history,\n showSpinner: state.view.showSpinner,\n});\n\nconst mapDispatchToProps = dispatch => ({\n logoutProcess: (history) => {\n dispatch(logout(history));\n },\n});\n\nclass Wrapper extends React.Component {\n constructor(props) {\n super(props)\n this.idleTimer = null\n this.onAction = this._onAction.bind(this)\n this.onActive = this._onActive.bind(this)\n this.onIdle = this._onIdle.bind(this)\n }\n\n componentDidUpdate() {\n const { user, history, showSpinner } = this.props;\n }\n\n _onAction(e) {\n // if(e.target.innerHTML === 'Log out') {\n // this.props.logout();\n // }\n }\n \n _onActive(e) {\n console.log('user is active', e)\n }\n \n _onIdle(history) {\n this.props.logoutProcess(history);\n }\n\n\n render() {\n const { user, history, showSpinner, onActive, onIdle, onAction } = this.props;\n let { idleTimer } = this.props;\n\n return (\n \n
\n { idleTimer = ref }}\n element={document}\n onActive={this.onActive}\n onIdle={() => this.onIdle(history)}\n onAction={this.onAction}\n debounce={250}\n timeout={1000 * 60 * 15} />\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n )\n }\n}\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n)(Wrapper);\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { Provider } from 'react-redux';\nimport { toast } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.css';\nimport WrapperContainer from '../containers/WrapperContainer';\nimport { createBrowserHistory } from 'history';\nimport { useHistory } from \"react-router-dom\";\n\nconst history = createBrowserHistory();\n\nconst Root = ({ store }) => {\n toast.configure({\n autoClose: 3000,\n draggable: false,\n hideProgressBar: true,\n closeOnClick: true,\n rtl: false,\n pauseOnHover: true,\n position: \"top-center\"\n });\n\n return ( \n \n
\n \n
\n
\n );\n};\n\nRoot.propTypes = {\n store: PropTypes.shape({\n view: PropTypes.exact({\n user: PropTypes.string,\n }),\n }).isRequired,\n};\n\nexport default Root;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'http://e-electricians-local.com:8080' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker === null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import '@babel/polyfill';\nimport React from 'react';\nimport { render } from 'react-dom';\nimport 'tachyons/css/tachyons.css';\nimport 'bootstrap/dist/css/bootstrap.css';\nimport configureStore from './util/configureStore';\nimport Root from './components/Root';\nimport { fetchUser } from './actions/api';\nimport './gete.scss';\nimport * as serviceWorker from './serviceWorker';\n\nconst store = configureStore();\n// store.dispatch(loadEnv());\nstore.dispatch(fetchUser())\n\ndocument.addEventListener('DOMContentLoaded', () => {\n render(\n ,\n document.getElementById('app')\n );\n});\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}