{"version":3,"sources":["reportWebVitals.js","data/store/logger.js","data/types/Auth.js","data/reducers/authReducer.js","data/types/FastCMA.js","constants/fastCMA.js","data/demos/demo_cma.js","data/reducers/fastCMAReducer.js","data/types/ComparablesRequest.js","constants/define.js","data/reducers/comparablesRequestReducer.js","data/reducers/index.js","utils/validation.js","constants/common.js","utils/commonUtils.js","utils/functions.js","utils/localStorage.js","data/mapping/ApiResponse.js","utils/Methods.js","utils/Urls.js","utils/ApiService.js","data/mapping/User.js","data/mapping/Response/AuthResponse.js","data/services/authService.js","utils/history.js","data/actions/authAction.js","data/mapping/Request/UserRequest.js","data/mapping/Request/AuthRequest.js","data/sagas/authSaga.js","data/actions/fastCMA.js","data/services/fastCMAService.js","data/mapping/Request/FastCMAAddresLookupRequest.js","data/actions/comparablesRequestAction.js","data/sagas/fastCMASaga.js","data/mapping/Response/ComparablesRequestResponse.js","data/services/comparablesRequestService.js","data/sagas/comparablesRequestSaga.js","data/mapping/Request/ComparablesRequestRequest.js","data/sagas/index.js","data/store/index.js","data/hooks/auth.js","data/reselects/authSelector.js","layouts/common/layout/MainLayout.js","layouts/pages/index.js","layouts/pages/FastCMA/AddressLookUp.js","layouts/pages/FastCMA/MLSNumberLookUp.js","layouts/common/Icon/index.js","layouts/common/layout/HeaderMenu.js","layouts/common/layout/Header.js","layouts/pages/FastCMA/Report/Comparables/compareFields.js","layouts/pages/FastCMA/Report/Comparables/ComparableStatusSwitch.js","layouts/pages/FastCMA/Report/GoogleMap.js","layouts/pages/FastCMA/Report/Comparables/ComparablesEstimate.js","layouts/pages/FastCMA/Report/Comparables/ComparablesShortEstimate.js","layouts/pages/FastCMA/Image.js","layouts/pages/FastCMA/Report/Comparables/Comparables.js","layouts/pages/FastCMA/Report/Comparables/index.js","layouts/pages/FastCMA/Report/Subject/SubjectDetails.js","layouts/pages/FastCMA/FindComparablesForm.js","layouts/pages/FastCMA/Report/Subject/index.js","layouts/pages/FastCMA/Report/Subject/SubjectDetailOverview.js","layouts/pages/FastCMA/Report/Report.js","layouts/pages/FastCMA/Report/ReportAndShare.js","layouts/pages/FastCMA/BatchCMA.js","layouts/pages/FastCMA/Profile/ProfileSelect.js","layouts/pages/FastCMA/CMAResults.js","data/hooks/fastCMA.js","data/hooks/comparablesRequest.js","layouts/pages/FastCMA/index.js","layouts/pages/FastCMA/Profile/Profile.js","layouts/common/layout/HeaderAction.js","data/reselects/comparablesRequestSelector.js","layouts/common/ListComponent.js","layouts/pages/comparablesRequest/index.js","layouts/pages/comparablesRequest/action/index.js","layouts/pages/authentication/login.js","layouts/common/components/ForgotPassword.js","layouts/Login.js","layouts/403.js","layouts/Error.js","layouts/common/layout/Navigation.js","layouts/ContainerIndex.js","layouts/pages/authentication/index.js","layouts/Main.js","layouts/LoginRoute.js","layouts/PrivateRoute.js","layouts/MainCheck.js","index.js"],"names":["reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","REGULAR","join","SUCCESS","STARTED","FAILURE","logger","active","store","next","action","result","prevState","getState","nextState","window","logGroupCollapsed","type","determineStyle","logInfo","logGroupEnd","logFunction","console","groupCollapsed","info","groupEnd","meta","async","indexOf","LOGIN_ACTION","LOGIN_SUCCESS","LOGIN_FAILED","LOGIN_INIT","LOGOUT_ACTION","LOGOUT_SUCCESS","REFRESH_TOKEN_ACTION","REFRESH_TOKEN_SUCCESS","CHECK_USER_ACTION","CHECK_USER_SUCCESS","REGISTER_ACTION","REGISTER_SUCCESS","PASSWORD_REQUEST_ACTION","PASSWORD_REQUEST_SUCCESS","PASSWORD_RESET_ACTION","PASSWORD_RESET_SUCCESS","UPDATE_PROFILE_ACTION","UPDATE_PROFILE_SUCCESS","initState","logged","localStorage","getItem","user","statusAction","isPasswordRequest","passwordRequestSuccess","isPasswordReset","passwordResetSuccess","hashForgotPassword","GG_MAP_LOOKUP","ADDRESS_LOOKUP","ADDRESS_LOOKUP_RESET","ADDRESS_LOOKUP_SUCCESS","ADDRESS_LOOKUP_FAIL","FILTER_COMPARABLES","FIND_COMPARABLES","FIND_COMPARABLES_SUCCESS","FIND_COMPARABLES_ERROR","CHANGE_MARKET_CHANNEL","MLS_LOOKUP","SWITCH_TYPE","GOOGLE_SPACES_SESSION_TOKEN","RUN_CMA","CMA_SET_ACTIVE_STATUS","CMA_SET_SELECTED_PROPERTY","SHOW_CMA_REPORTS","EXPORT_CMA_REPORT_PDF","CMA_LOAD_PROFILES","CMA_LOAD_PROFILES_SUCCESS","CMA_LOAD_PROFILES_FAIL","CMA_SELECT_PROFILE","CMA_UPDATE_PROFILE","CMA_UPDATE_PROFILE_SUCCESS","CMA_DELETE_PROFILE","CMA_DELETE_PROFILE_SUCCESS","CMA_INIT","STEPS","STEP_VISIBLE","MARKET","HOUSTON","PROPERTY_TYPE","PROPERTY_SUB_TYPE","STATIC_URI","AUSTIN","DFW","SANANTONIO","PROPERTY","STATUS","SOLD","label","key","ACTIVE","LEASED","NONACTIVE","mls_search_result","status","step","address_lookup","google","session","cma","market","active_status","estimate","selected_properties","calculateEstimate","subject","properties","activeStatus","sold_price","data","price_per_square_foot","filter","item","index","length","property","list_price","square_feet","rental_index","FastCMAReducer","state","Types","query","params","Lat","latitude","Lon","longitude","i","mls_num","address","isCheckAgain","Object","keys","payload","currentStatus","map","idx","select","nextStep","total","session_token","updateSelected","selectedIndex","profiles","edit_profile","profile","id","profile_id","push","COMPARABLES_REQUEST_LIST_ACTION","COMPARABLES_REQUEST_LIST_SUCCESS","COMPARABLES_REQUEST_DETAIL_ACTION","COMPARABLES_REQUEST_DETAIL_SUCCESS","COMPARABLES_REQUEST_INIT","COMPARABLES_REQUEST_FAIL","PATHS","ROOT","path","LOGIN","LOGOUT","PROFILE","REFRESH","PAGE_403","HOTELS","TITLE","LIST","CREATE","DETAIL","CONFIG_LOCAL_STORAGE","DATE_TIME_FORMAT","PAGINATION","page_index","page_size","total_page","REFRESH_TOKEN_DELAY_TIMEOUT","ROUTE_REDIRECT","HOME","INBOX","COMPARABLES_REQUEST","UPDATE","initialState","isFetching","isSubmit","all","errors","pagination","detail","master","getResult","page","usage_count","combineReducers","authReducer","registerSuccess","updateProfile","logging","hash","comparablesRequestReducer","list","required","value","undefined","requiredArray","maxLength","max","minLength","min","isNumber","isNaN","Number","minValueNumber","parseInt","maxValueNumber","compareString","value2","toString","maxImage","minImage","isEmail","test","isUrl","isPhone","isSpecialString","hadScriptTag","strongPassword","isWhieSpace","TAG_DEFINE","GENERAL","ITEM","code","property_address","status_explain","created_at","ACTION","export","import","create","update","show","remove","exit","close","lock","unlock","refreshData","back","backIndex","statusHide","statusShow","uploadImage","collapse","noData","cancel","confirm","edit","add","addMulti","save","send","use","resendEmail","approve","unApprove","translate","unlink","unActive","search","NOTIFICATION","title","building","notInternet","createSuccess","updateSuccess","removeSuccess","checkSuccess","uploadSuccess","resendMailSuccess","changePasswordSuccess","assigneeSuccess","cancelTicketSuccess","sureRemove","sureDeActive","sureUse","sureLogout","changePassword","confirmExit","confirmBack","downloadSuccess","youCantAccessThisPage","maxFileSize","PAGINATE","showLine","first","last","previous","of","items","jumpTo","itemsPerPage","VALIDATION","dropImage","email","password","image","requiredImage","string","number","priceRequired","invalidDate","salePriceLessThenPrice","image1pic","passwordRequired","currentPasswordRequired","newPasswordRequired","confirmPasswordRequired","usernameRequired","usernameOrPasswordNotMatch","userLocked","connectFail","voucherInvalid","userNameExists","uploadFail","percent","minOrderValue","maxPhone","minPhone","minpassword","quantity","LessThenZero","MinValue","recaptcha","comparePassword","nameRequired","codeRequired","starRequired","checkForm","unknowError","nullData","hotelsUnActiveConfirm","statusCode","GROUP_NOT_FOUND","GROUP_PROPERTY_IDS_NOT_EXIST","GROUP_PRODUCT_IDS_NOT_EXIST","GROUP_IS_RUNNING","GROUP_WAS_ENDED","START_DATE_LESS_THAN_NOW","START_DATE_LARGER_THAN_END_DATE","SALE_START_DATE_LARGER_THAN_SALE_END_DATE","SALE_END_DATE_LARGER_THAN_END_DATE","DATE_LESS_THAN_NOW","MIN_PRICE_LARGER_THAN_MAX_PRICE","SERIAL_NUMBER_INVALID","VOUCHER_NOT_FOUND","VOUCHER_USED","VOUCHER_LOCKED","VOUCHER_USED_UP","GROUP_UNAVAILABLE","VOUCHER_WAS_EXPIRED","GROUP_NOT_STARTED_YET","VOUCHER_NOT_STARTED_YET","VOUCHER_PROPERTY_ERROR","ID_USER_EXISTED","ID_USER_LOCK_WARNING","ID_USER_LOCKED","ID_WRONG_OLD_PASSWORD","FAILED_TO_IMPORT_DATA","FILE_NOT_FOUND","NOT_EXCEL_FORMAT","PROPERTY_NOT_FOUND","PROPERTY_USED","PRODUCT_NOT_FOUND","PRODUCT_USED","UNDEFINED_ERROR","INVALID_CAPTCHA","PAGE_NOT_FOUND","CATEGORY_NOT_FOUND","CATEGORY_EXISTED","CATEGORY_USED","CATEGORY_IDS_NOT_EXIST","TAG_NOT_FOUND","TAG_EXISTED","TAG_USED","BANNER_NOT_FOUND","FILE_UPLOAD_FAILED","FILE_TYPE_NOT_ACCEPTED","FILE_LENGTH_OVER_LIMIT","ZERO_FILE_LENGTH","DIRECTORY_NOT_ALLOW","ACTION_OPTIONS","CLONE","TRANSLATE","parseListRequestParams","order_by","order_by_desc","start_date","moment","toISOString","end_date","omit","useScript","url","callback","useEffect","script","document","createElement","src","onload","body","appendChild","removeChild","moneyFormatter","Intl","NumberFormat","style","currency","minimumFractionDigits","toTitleCase","str","replace","txt","charAt","toUpperCase","substr","toLowerCase","removeObjectNull","propName","capitalizeFirstLetter","slice","columnsTable","props","obj","titleGenerate","children","itemName","split","newTitle","k","titleTable","component","dataIndex","getTitleTable","model","arrayTitle","arrayItemRemove","newArrayTitle","concat","ele","getDataSource","newData","dataSource","listItemData","itemData","i2","getPathWithParams","forEach","p","searchStrParam","queryString","stringify","sagaWrapper","saga","errorHandle","sagaErrorHandler","e","customMessageErrors","message","error","file","log","setParamsUrlFilter","queryUrl","arrayFormat","removeObjectNullFull","Array","isArray","get","storageKey","stringData","numberRegex","RegExp","JSON","parse","set","String","setItem","removeItem","ApiResponse","this","statusText","headers","success","request","ApiService","options","Methods","post","put","delete","initServiceInstance","endpointParams","endpoint","getRequestHeaders","parser","responseType","isDownload","dummy","baseURL","Error","accessToken","LocalStorage","instance","axios","paramsSerializer","getRequestParams","timeout","withoutAuth","defaults","common","header","method","reqData","getRequestData","Promise","resolve","reject","config","secondParam","thirdParam","isAuthRequest","Urls","response","errorResp","validators","catch","err","location","AUTHENTICATION_NOT_FOUND","errorRes","User","setData","avatar","username","first_name","last_name","menu","is_edit_data","permissions","propertyIds","firstname","lastname","phoneNumber","AuthResponse","login","token_captcha","process","logout","getUserProfile","refreshToken","register","passwordRequest","exportPasswordRequest","passwordReset","createBrowserHistory","loginAction","checkUserAction","token","UserRequest","AuthRequest","otp","loginSaga","logoutSaga","checkUserSaga","refreshTokenFunc","refreshTokenSaga","errorHandleAuth","authSaga","takeLatest","Func","call","AuthService","fullAddress","history","go","errorHandleProfile","refreshTokenInterval","shouldGetProfile","intervalLoaded","expireDate","delayTimeout","Date","getTime","delay","expires","shouldRefresh","actionRegister","errorActionType","warn","exportUpdate","Auth","exportPasswordReset","fork","address_lookup_success","address_lookup_fail","find_comparables_success","run_cma","set_selected_property","cma_set_active_status","cma_load_profiles","addressLookup","exportCMAReportPDF","findComparables","getProfiles","updateProfiles","deleteProfile","FastCMAAddresLookupRequest","street_name","street_box_num","city","zipcode","marketplace","FastCMAFindComparableWrapperRequest","year_built","property_type","property_subtype","mls_no","lot_size_are","distance","year_range","acre_range","squarefeet_range","recency","market_name","idres_property","comparablesRequestDetailSuccess","exportReportPDF","cmaLoadProfiles","cmaUpdateProfiles","cmaDeleteProfile","fastCMASaga","takeEvery","exportAddressDetail","FastCMAService","Actions","oldProfile","showResult","exportCustomFilter","exportArvDistanceQuery","exportFindPopup","popupValue","FunctionAction","fastCMA","selectedProperties","configs","URL","createObjectURL","Blob","link","href","setAttribute","click","dispatchEvent","Event","navigate","ComparablesRequestResponse","format","updated_at","column","actionList","dataParser","actionDetail","exportDetail","exportList","Math","ceil","actionGetList","actionGetItem","comparablesRequestSaga","filters","source","FunctionService","rootSaga","paramsCreateStore","sagaMiddleware","createSagaMiddleware","REACT_APP_ENVIRONMENT","createStore","myReducer","applyMiddleware","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","run","ActionUpdateProfile","dispatch","useDispatch","useCallback","HookAction","stateReducer","getProfile","initData","createSelector","getFetchingAuth","TabPane","Tabs","MainLayout","itemAuthProfile","useSelector","useState","setTitle","itemMenu","setItemMenu","disabledTab","pathname","generateSubMenu","child","assign","group","reduce","l","n","find","route","name","className","breadcrumb","Item","activeKey","onTabClick","tab","withRouter","connect","auth","onLogin","Typography","Title","Text","Select","Option","cmaStep","lookup","googleSessionToken","onLookup","showFilter","lat","lon","resetLookUpField","canLookup","enableLookup","addresses","setAddress","setAddressError","Form","useForm","form","paramsFilters","setFieldsValue","getPredictions","clearTimeout","setTimeout","maps","places","AutocompleteService","getPlacePredictions","input","displaySuggestion","predictions","PlacesServiceStatus","OK","addr","description","terms","place_id","layout","onFinish","values","selected","match","isTexasState","placeId","fields","Map","PlacesService","getDetails","place","address_components","formatted_address","types","short_name","long_name","country","geometry","lng","googleAddressParser","SearchOutlined","rules","allowClear","onSelect","onSearch","placeholder","shouldUpdate","wrapperCol","disabled","shape","htmlType","LoadingOutlined","onSubmitMLSNumber","event","getFieldValue","gutter","span","onChange","validatedNumber","target","mlsnumber","display","alignItems","justifyContent","width","Icon","CarryOutOutlined","EditOutlined","EyeOutlined","UploadOutlined","DeleteOutlined","FormOutlined","MoreOutlined","CloseCircleOutlined","IdcardOutlined","SyncOutlined","FilterOutlined","ZoomInOutlined","CloseOutlined","PlusOutlined","Component","SubMenu","Menu","renderMenuItem","arrayMenu","to","HeaderMenu","updatedMenu","defaultSelectedKeys","selectedKeys","mode","expandIcon","popupClassName","collapsed","onTitleClick","showProfile","setShowProfile","getUpdateProfile","itemFetching","itemProfile","onLogout","destroyOnClose","visible","onOk","onCancel","footer","initialValues","val","confirm_password","whitespace","validator","rule","Password","spin","onClick","height","toggleCollapsed","overlay","size","icon","cursor","TAB_COMPARABLES","isNote","render","text","record","sorter","round","null","list_date","sold_date","bathroom_total","carport","setActiveStatus","Group","marginTop","Button","GoogleMap","centerCoordinate","coordinates","loadMap","center","container","getElementById","bounds","LatLngBounds","infoWindow","InfoWindow","LatLng","zoom","cord","marker","Marker","position","extend","addListener","setContent","open","fitBounds","addEventListener","removeEventListener","formatNumber","Statistics","minPrice","maxPrice","minSquareFeet","maxSquareFeet","minYearBuilt","maxYearBuilt","minBathRoom","maxBathRoom","minRecency","maxRecency","minDist","maxDist","minLotSize","maxLotSize","isSelected","current","propertiesData","averagePrice","averageSquareFeet","averageYearBuilt","averageRecency","averageDist","averageLotSize","today","dist","acres","price","columns","squareFeet","yearBuilt","bathRoom","toFixed","marginBottom","showStatistics","setShowStatistics","parseFloat","checkTab","keyItem","bordered","defaultEstimate","defaultActiveKey","fallback","getImageUrl","PropertySelectBox","selectedProperty","table","querySelector","scrollLeft","getAttribute","setSelectedProperty","compareData","checkedList","isChecked","listItem","checked","splice","isSubject","dataKey","selectedList","displayCell","StarFilled","d","month","getMonth","day","getDate","year","getFullYear","hour","getHours","second","getSeconds","uid","row","paddingTop","paddingBottom","Comparables","selectedRowKeys","setSelectedRowKeys","resultTable","setResultTable","sold","leased","nonActive","selectedRowByTab","setSelectedRowByTab","tabActive","setCheckTab","toggleChildRows","classList","contains","parentElement","getTabActive","newResult","keyOrder","sendResultTable","rowSelection","newSelectedRowKeys","getCheckboxProps","onShowReportnShare","changeTabTable","rowKey","scroll","x","gridStyles","border","boxShadow","padding","flexWrap","fontSize","flexDirection","formatter","Grid","isRow","combineStyle","DetailListing","listStyle","SubjectDetails","fastCMAReducer","bodyStyle","flexBasis","flexFlow","flexGrow","list_price_orig","bedroom","bathroom_full","bathroom_half","garage","pool","fireplace","storie","prop_type","house_type","acre","construction_type","roof","foundation","seller_type","level","subdivision_name","hoa_frequency","hoa","dom","listing_agent_name","listing_agent_phone","public_remark","TextField","field","SelectField","getValues","setGetValues","handleChange","suffixIcon","CaretUpOutlined","CaretDownOutlined","showArrow","optionLabelProp","includes","cmaStatus","find_comparables","defaultType","setType","setOdlParams","resetFields","formFields","defaultValue","tooltip","getAddress","updateType","ghost","SubjectDetailOverview","showReport","show_cma_report","showSubjectDetail","setIsSubjectModalVisible","showFindComparableModal","setshowFindComparableModal","expandIconPosition","Panel","align","subdivision","prefix","count","backgroundColor","color","evt","Report","searchResult","setDefaultEstimate","newDefaultEstimate","grossDiscount","activeEstGrossDiscount","percentDiscount","activeEstPercentDiscount","activeEstimatedPrice","monthly","estimatedMonthlyLease","rentalIndex","soldEstGrossDiscount","soldEstPercentDiscount","soldEstimatedPrice","Subject","TextArea","Input","EstimateCard","reportType","soldPrice","activePrice","selectedProp","avgDom","gross","gridStyle","hoverable","floor","StatusTableRow","StatusTable","rows","single","colSpan","cma_export_pdf","reportOptions","reportOptionsSelect","setReportOptionsSelect","setReportType","shareModalVisible","setModalVisible","confirmLoading","setConfirmLoading","downloading","setDownloading","shareEmails","setShareEmails","buttonStyle","checkedValues","marginRight","loading","emails","minWidth","okText","labelCol","help","prop_subtype","architecture_style","school_district","school_name1","school_name2","school_name3","agent_listing_appt_phone","Layout","Content","Link","UploadCMA","strong","DownloadOutlined","BatchCMA","runCMA","selectedProfile","loadProfiles","editProfile","useParams","storeSearch","ActionInit","ActionGetList","ActionGetItem","MarketSwitcher","changeMarket","onTabChange","restart","reload","showCMAResult","actionInitComparables","ActionInitComparables","actionInit","setGetAddress","checker","currentStep","onResetFilter","preventDefault","affix","ReloadOutlined","selectProfile","selectMarket","showConfirmDeleteModal","setShowConfirmDeleteModal","useHistory","RECENCY","default","DISTANCE","ARV_DISTANCE","YEAR_BUILT_RANGE","SQUARE_FEET_RANGE","ARV_SQUARE_FEET_RANGE","FMV_ACRE_RANGE","ARV_ACRE_RANGE","SUBDIVISION","DISTANCE1","DISTANCE2","DISTANCE3","DISTANCE4","SQUARE_FOOTAGE1","SQUARE_FOOTAGE2","SQUARE_FOOTAGE3","SQUARE_FOOTAGE4","SQUARE_FOOTAGE5","SQUARE_FOOTAGE6","SQUARE_FOOTAGE7","SQUARE_FOOTAGE8","SQUARE_FOOTAGE9","SQUARE_FOOTAGE10","SQUARE_FOOTAGE11","YEAR_BUILT1","YEAR_BUILT2","YEAR_BUILT3","YEAR_BUILT4","YEAR_BUILT5","YEAR_BUILT6","YEAR_BUILT7","YEAR_BUILT8","YEAR_BUILT9","YEAR_BUILT10","ACRE1","ACRE2","ACRE3","ACRE4","ACRE5","ACRE6","ACRE7","STORIE","POOL","GARAGE","HOUSE_TYPE","FOUNDATION_TYPE","HOUSE_STYLE","CONSTRUCTION_TYPE","ROOF_TYPE","CARPORT","FIREPLACE","HOA","SCHOOL_DISTRICT","SCHOOL_ELEMENTARY","SCHOOL_MIDDLE","SCHOOL_HIGH","defaultProfile","loadCurrentProfile","currentProfile","formValues","labelAlign","offset","danger","hidden","HeaderAction","origin","isCreate","isFilterButton","isCustomize","selectFetching","resultReducer","ListComponent","pageSize","showTotal","range","showSizeChanger","showQuickJumper","hideOnSinglePage","locale","items_per_page","jump_to","classParent","classChildren","componentTableList","left","right","emptyText","filterConfirm","filterReset","ModelFields","getOwnPropertyNames","Index","titleItemTable","modelItem","setInitData","setPramsFilters","componentTable","fixed","setIsFetching","resultList","setResultList","setPagination","itemList","totalPage","defaultCurrent","isActionSignlePage","disabledFormatUpperCaseTitle","getFilters","order_field","order_value","autoComplete","spinning","responsive","newFilters","paramsFilter","order","genaratePaginateFilterSort","actionAppendResponse","ActionAppendResponse","itemDetail","setOnShowReportnShare","valueSquareFeet","setValueSquareFeet","originTableData","setOriginTableData","setGetTabActive","squareFeetOptions","toLocaleString","onBack","subTitle","resultFilters","structuredClone","passesBedFilter","bed","passesBathFilter","bath","passesSquareFootMin","passesSquareFootMax","passesYearBuiltMin","passesYearBuiltMax","passesDistanceMin","passesDistanceMax","onFilterFunction","onValuesChange","optionType","compact","noStyle","borderLeft","borderRight","pointerEvents","findIndex","textAlign","Login","Statistic","Countdown","isForgotPassword","fetchingLogin","checkAuth","onActionRegister","registerAction","Component403","theme","inlineCollapsed","placement","onClose","authLogin","onCheckUser","onLogoutRequest","refreshTokenAction","setCollapsed","innerHeight","screen","$","css","REACT_APP_VERSION","minHeight","Authentication","googleCaptcha","setGoogleCaptcha","actionLogin","ActionLogin","queryParams","useEnterprise","reCaptchaKey","onVerify","authentication","rest","FastCMA","FastCMAProfile","ComparablesRequestList","ComparablesRequestAction","Error403","from","MainCheck","exact","ReactDOM","basename"],"mappings":"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","file":"static/js/main.56e22d66.chunk.js","sourcesContent":["const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","const REGULAR = [\n \"background: blue\",\n \"color: white\",\n].join(\";\");\n\nconst SUCCESS = [\n \"background: green\",\n \"color: white\",\n].join(\";\");\n\nconst STARTED = [\n \"background: darkorange\",\n \"color: white\",\n].join(\";\");\n\nconst FAILURE = [\n \"background: red\",\n \"color: white\",\n].join(\";\");\n\nconst logger = (active = true) => (store) => (next) => (action) => {\n const result = next(action);\n const prevState = store.getState();\n const nextState = store.getState();\n\n if (!active || typeof window === \"undefined\") {\n return result;\n }\n\n logGroupCollapsed(`%c ${ action.type } `, determineStyle(action));\n logInfo(\"%cprev state\", \"color: darkorange\", prevState);\n logInfo(\"%caction payload\", \"color: blue\", action);\n logInfo(\"%cnext state\", \"color: darkgreen\", nextState);\n logGroupEnd();\n\n return result;\n};\n\nexport default logger;\n\nfunction logGroupCollapsed(...args) {\n const logFunction = typeof console.groupCollapsed === \"function\" ? console.groupCollapsed : console.info;\n logFunction(...args);\n}\n\nfunction logGroupEnd(...args) {\n const logFunction = typeof console.groupEnd === \"function\" ? console.groupEnd : console.info;\n logFunction(...args);\n}\n\nfunction logInfo(...args) {\n console.info(...args);\n}\n\nfunction determineStyle(action) {\n if (!action.meta || !action.meta.async) {\n return REGULAR;\n }\n\n if (action.type.indexOf(\"_COMPLETED\") > -1) {\n return SUCCESS;\n }\n\n if (action.type.indexOf(\"_FAILED\") > -1) {\n return FAILURE;\n }\n\n return STARTED;\n}\n","export const LOGIN_ACTION = \"LOGIN_ACTION\";\nexport const LOGIN_SUCCESS = \"LOGIN_SUCCESS\";\nexport const LOGIN_FAILED = \"LOGIN_FAILED\";\nexport const LOGIN_INIT = \"LOGIN_INIT\";\n\nexport const LOGOUT_ACTION = \"LOGOUT_ACTION\";\nexport const LOGOUT_SUCCESS = \"LOGOUT_SUCCESS\";\nexport const REFRESH_TOKEN_ACTION = \"REFRESH_TOKEN_ACTION\";\nexport const REFRESH_TOKEN_SUCCESS = \"REFRESH_TOKEN_SUCCESS\";\n\nexport const CHECK_USER_ACTION = \"CHECK_USER_ACTION\";\nexport const CHECK_USER_SUCCESS = \"CHECK_USER_SUCCESS\";\n\nexport const REGISTER_ACTION = \"REGISTER_ACTION\";\nexport const REGISTER_SUCCESS = \"REGISTER_SUCCESS\";\n\nexport const PASSWORD_REQUEST_ACTION = \"PASSWORD_REQUEST_ACTION\";\nexport const PASSWORD_REQUEST_SUCCESS = \"PASSWORD_REQUEST_SUCCESS\";\n\nexport const PASSWORD_RESET_ACTION = \"PASSWORD_RESET_ACTION\";\nexport const PASSWORD_RESET_SUCCESS = \"PASSWORD_RESET_SUCCESS\";\n\nexport const UPDATE_PROFILE_ACTION = \"UPDATE_PROFILE_ACTION\";\nexport const UPDATE_PROFILE_SUCCESS = \"UPDATE_PROFILE_SUCCESS\";\n","import * as Types from '../types/Auth';\nimport {LOGIN_INIT} from \"../types/Auth\";\n\nconst initState = {\n logged: !!(localStorage.getItem('hn_utk')),\n user: {},\n statusAction: {\n isPasswordRequest: false,\n passwordRequestSuccess: false,\n isPasswordReset: false,\n passwordResetSuccess: false\n },\n hashForgotPassword: \"\"\n}\n\nexport default (state = initState, action) => {\n switch (action.type) {\n case Types.UPDATE_PROFILE_ACTION:\n return {...state, registerSuccess: false, isFetching: true, statusAction: initState.statusAction};\n case Types.UPDATE_PROFILE_SUCCESS:\n return {\n ...state,\n registerSuccess: false,\n isFetching: false,\n data: action.updateProfile,\n statusAction: initState.statusAction\n };\n case Types.LOGIN_ACTION:\n return {\n logged: false,\n registerSuccess: false,\n logging: true,\n action: \"LOGIN\",\n statusAction: initState.statusAction\n };\n case Types.REGISTER_ACTION:\n return {logged: false, registerSuccess: false, logging: true, statusAction: initState.statusAction};\n case Types.REGISTER_SUCCESS:\n return {logged: false, registerSuccess: true, logging: false, statusAction: initState.statusAction};\n // return {logged: falseregisterSuccess: false,,logging: true,action: \"LOGIN\", statusAction: initState.statusAction};\n case Types.LOGOUT_ACTION:\n return {logged: true, statusAction: initState.statusAction};\n case Types.CHECK_USER_ACTION:\n return {logged: true, registerSuccess: false, logging: true, statusAction: initState.statusAction};\n case Types.CHECK_USER_SUCCESS:\n return {\n ...state,\n logged: true,\n user: action.user,\n registerSuccess: false,\n logging: false,\n statusAction: initState.statusAction\n };\n case Types.PASSWORD_REQUEST_ACTION:\n return {\n ...state, logged: false, registerSuccess: false, logging: false, statusAction: {\n ...initState.statusAction,\n isPasswordRequest: true\n }\n };\n case Types.PASSWORD_REQUEST_SUCCESS:\n return {\n ...state,\n logged: false,\n registerSuccess: false,\n logging: false,\n statusAction: {\n ...initState.statusAction,\n isPasswordRequest: false,\n passwordRequestSuccess: true\n },\n hash: action.hash.hash\n };\n case Types.PASSWORD_RESET_ACTION:\n return {\n ...state, logged: false, registerSuccess: false, logging: false, statusAction: {\n ...initState.statusAction,\n passwordRequestSuccess: true,\n isPasswordRequest: true\n }\n };\n case Types.PASSWORD_RESET_SUCCESS:\n return {\n ...state,\n logged: false,\n registerSuccess: false,\n logging: false,\n statusAction: {\n ...initState.statusAction,\n isPasswordReset: false,\n passwordRequestSuccess: true,\n passwordResetSuccess: true,\n },\n };\n case Types.LOGIN_SUCCESS:\n return {\n ...state,\n logged: true,\n registerSuccess: false,\n logging: false,\n action: \"SUCCESS\",\n statusAction: initState.statusAction\n };\n case Types.LOGIN_FAILED:\n return {\n logged: false,\n registerSuccess: false,\n logging: false,\n action: \"FAIL\",\n statusAction: initState.statusAction\n };\n case Types.LOGOUT_SUCCESS:\n return {logged: false, statusAction: initState.statusAction};\n case Types.LOGIN_INIT:\n return initState;\n default:\n return state;\n }\n}\n","export const GG_MAP_LOOKUP = \"GG_MAP_LOOKUP\";\n\nexport const ADDRESS_LOOKUP = \"ADDRESS_LOOKUP\";\nexport const ADDRESS_LOOKUP_RESET = \"ADDRESS_LOOKUP_RESET\";\nexport const ADDRESS_LOOKUP_SUCCESS = \"ADDRESS_LOOKUP_SUCCESS\";\nexport const ADDRESS_LOOKUP_FAIL = \"ADDRESS_LOOKUP_FAIL\";\n\nexport const FILTER_COMPARABLES = \"FILTER_COMPARABLES\";\nexport const FIND_COMPARABLES = \"FIND_COMPARABLES\";\nexport const FIND_COMPARABLES_SUCCESS = \"FIND_COMPARABLES_SUCCESS\";\nexport const FIND_COMPARABLES_ERROR = \"FIND_COMPARABLES_ERROR\";\n\nexport const CHANGE_MARKET_CHANNEL = \"CHANGE_MARKET_CHANNEL\";\n\nexport const MLS_LOOKUP = \"MLS_LOOKUP\";\nexport const SWITCH_TYPE = \"SWITCH_TYPE\";\nexport const GOOGLE_SPACES_SESSION_TOKEN = \"GOOGLE_SPACES_SESSION_TOKEN\";\n\nexport const RUN_CMA = \"RUN_CMA\";\nexport const CMA_SET_ACTIVE_STATUS = \"CMA_SET_ACTIVE_STATUS\";\nexport const CMA_SET_SELECTED_PROPERTY = \"CMA_SET_SELECTED_PROPERTY\";\n\nexport const SHOW_CMA_REPORTS = \"SHOW_CMA_REPORTS\";\nexport const EXPORT_CMA_REPORT_PDF = \"EXPORT_CMA_REPORT_PDF\";\nexport const EXPORT_CMA_ERROR = \"EXPORT_CMA_ERROR\";\n\nexport const CMA_LOAD_PROFILES = \"CMA_LOAD_PROFILES\";\nexport const CMA_LOAD_PROFILES_SUCCESS = \"CMA_LOAD_PROFILES_SUCCESS\";\nexport const CMA_LOAD_PROFILES_FAIL = \"CMA_LOAD_PROFILES_FAIL\";\nexport const CMA_SELECT_PROFILE = \"CMA_SELECT_PROFILE\";\nexport const CMA_UPDATE_PROFILE = \"CMA_UPDATE_PROFILE\";\nexport const CMA_UPDATE_PROFILE_SUCCESS = \"CMA_UPDATE_PROFILE_SUCCESS\";\nexport const CMA_UPDATE_PROFILE_FAIL = \"CMA_UPDATE_PROFILE_FAIL\";\nexport const CMA_UPDATE_PROFILE_ERROR = \"CMA_UPDATE_PROFILE_ERROR\";\n\nexport const CMA_DELETE_PROFILE = \"CMA_DELETE_PROFILE\";\nexport const CMA_DELETE_PROFILE_SUCCESS = \"CMA_DELETE_PROFILE_SUCCESS\"\nexport const CMA_DELETE_PROFILE_FAIL = \"CMA_DELETE_PROFILE_FAIL\"\n\nexport const CMA_INIT = \"CMA_INIT\"\n","export const STEPS = {\n LOOKUP: 1,\n FIND_COMPARABLES: 2,\n RUN_CMA: 3,\n SHOW_CMA_RESULTS: 4,\n SHOW_CMA_REPORT: 5,\n}\n\nexport const STEP_VISIBLE = {\n [STEPS.LOOKUP]: [STEPS.LOOKUP, STEPS.FIND_COMPARABLES, STEPS.RUN_CMA],\n [STEPS.FIND_COMPARABLES]: [STEPS.FIND_COMPARABLES, STEPS.RUN_CMA],\n [STEPS.RUN_CMA]: [STEPS.RUN_CMA],\n [STEPS.SHOW_CMA_RESULTS]: [STEPS.SHOW_CMA_RESULTS],\n [STEPS.SHOW_CMA_REPORT]: [STEPS.SHOW_CMA_REPORT]\n}\n\nexport const MARKET = {\n HOUSTON: {\n PROPERTY_TYPE: {\n \"Residential\": \"Residential\",\n \"Commercial\": \"Commercial\",\n \"Multi-Family\": \"Multi-Family\",\n \"Lots & Acreage\": \"Lots & Acreage\"\n },\n PROPERTY_SUB_TYPE: {\n \"RES-Single Family\" : \"RES-Single Family\",\n \"RES-Half Duplex\" : \"RES-Half Duplex\",\n \"RES-Farm/Ranch\" : \"RES-Farm/Ranch\",\n \"RES-Townhouse\" : \"RES-Townhouse\",\n \"RES-Condo\" : \"RES-Condo\",\n },\n STATIC_URI: 'https://photos.harstatic.com/[id]/hr/img-1.jpeg'\n },\n AUSTIN: {\n PROPERTY_TYPE: {\n 'Residential': 'Residential', \n 'Multi-Family': 'Multi-Family', \n 'Lot': 'Lot', \n 'Farms/Ranch/Acreage': 'Farms/Ranch/Acreage', \n 'Commercial Sal': 'Commercial Sale'\n },\n PROPERTY_SUB_TYPE: {\n 'Modular': 'Modular',\n 'Condo': 'Condo',\n 'Manufactured': 'Manufactured',\n 'Mobile Home': 'Mobile Home',\n 'Townhouse': 'Townhouse',\n 'See Agent': 'See Agent',\n 'House': 'House',\n 'Attached 1/2 Duplex': 'Attached 1/2 Duplex',\n },\n STATIC_URI: 'https://listingmedia7.harstatic.com'\n },\n DFW: {\n PROPERTY_TYPE: {\n \"Residential\": \"Residential\",\n \"Commercial\": \"Commercial\",\n \"Multi-Family\": \"Multi-Family\",\n \"Lots & Acreage\": \"Lots & Acreage\"\n },\n PROPERTY_SUB_TYPE: {\n \"RES-Single Family\" : \"RES-Single Family\",\n \"RES-Half Duplex\" : \"RES-Half Duplex\",\n \"RES-Farm/Ranch\" : \"RES-Farm/Ranch\",\n \"RES-Townhouse\" : \"RES-Townhouse\",\n \"RES-Condo\" : \"RES-Condo\",\n },\n STATIC_URI: 'https://listingmedia7.harstatic.com/[id]/lr/1.jpeg'\n },\n SANANTONIO: {\n PROPERTY_TYPE: {\n 'Single Residential': 'Single Residential',\n 'Residential Rental': 'Residential Rental',\n 'Commercial Land/Unimprvd': 'Commercial Land/Unimprvd',\n 'Farm Ranch': 'Farm Ranch',\n 'Commercial Improved Prop': 'Commercial Improved Prop',\n },\n PROPERTY_SUB_TYPE: {\n 'Modular Home': 'Modular Home',\n 'Garden/Patio Home/Detchd': 'Garden/Patio Home/Detchd',\n 'Townhome': 'Townhome',\n 'Manufactured': 'Manufactured',\n 'Single Family Detached': 'Single Family Detached',\n },\n STATIC_URI: 'https://listingmedia7.harstatic.com'\n }\n}\n\nexport const PROPERTY = {\n STATUS: {\n SOLD: {\n label: 'Sold',\n key: 'sold'\n },\n ACTIVE: {\n label: 'Active',\n key: 'active'\n },\n LEASED: {\n label: 'Leased',\n key: 'leased'\n },\n NONACTIVE: {\n label: 'Non-active',\n key: 'nonActive'\n }\n }\n}\n","export const mls_search_result = {\n \"status\": 1,\n \"recency\": \"180\",\n \"distance\": 402.335,\n \"rentalIndex\": 0,\n \"estimatedMonthlyLease\": 0,\n \"soldEstimatedPrice\": 224758.91280739274,\n \"activeEstimatedPrice\": 0,\n \"activeEstGrossDiscount\": 0,\n \"activeEstPercentDiscount\": 0,\n \"soldEstGrossDiscount\": 74858.91280739274,\n \"soldEstPercentDiscount\": 33.30631558604446,\n \"subjectProperty\": {\n \"_id\": \"5daba7477eb0a2d075583b1d\",\n \"school_name1\": \"JONES ELEMENTARY SCHOOL (ALDINE)\",\n \"mls_num\": 10001021,\n \"roof\": \"Composition\",\n \"modified_date\": \"2019-12-16T21:24:54.420\",\n \"uid\": 179102302,\n \"school_name2\": \"JONES MIDDLE SCHOOL (ALDINE)\",\n \"school_district\": \"1 - Aldine\",\n \"foundation\": \"Slab\",\n \"house_type\": \"Traditional\",\n \"hoa_amount\": 350,\n \"seller_type\": \"Mud,Sellers Disclosure\",\n \"hoa_frequency\": \"Annually\",\n \"school_name3\": \"NIMITZ HIGH SCHOOL (ALDINE)\",\n \"showing_instruction\": \"Appointment Required\",\n \"bathroom_total\": 2.1,\n \"square_feet\": 1694,\n \"bedroom\": 3,\n \"state\": \"Texas\",\n \"status\": \"Sold\",\n \"storie\": 2,\n \"street_name\": \"Elm Drake\",\n \"street_box_num\": 8917,\n \"street_type\": \"Lane\",\n \"subdivision\": \"Deerbrook Estates\",\n \"list_price_orig\": 149900,\n \"agent_listing_appt_phone\": \"832-527-2450\",\n \"listing_agent_name\": \"Tammy Theriot\",\n \"garage\": 2,\n \"list_price\": 149900,\n \"list_date\": \"2019-10-19\",\n \"pool\": 0,\n \"zipcode\": 77338,\n \"dom\": 29,\n \"year_built\": 2006,\n \"acre\": 2632,\n \"prop_subtype\": \"Townhouse\",\n \"prop_type\": \"Townhouse/Condo\",\n \"public_remark\": \"Lennar townhome with dramatic two story foyer with window seat. Large living room. Dining area off of kitchen. Kitchen with lots of cabinets and counter space. Breakfast bar leading to living room. Huge walk in pantry and secondary pantry.Upstairs there is an area for a desk/gaming/reading,etc. Master suite is very large and master bath has double sinks, a soak in tub and separate shower. All bedrooms have walk-in closets. Refrigerator, washer and dryer are included. New fence, new carpet throughout, new blinds, fresh paint and solar screens.\",\n \"city\": \"Humble\",\n \"lat\": 30.00932,\n \"lon\": -95.2883,\n \"address\": \"8917 Elm Drake Lane Humble Texas 77338\",\n \"last_update\": \"Tue Dec 31 2019 00:58:55 GMT-0500 (EST)\",\n \"acres\": null,\n \"lot_description\": \"\",\n \"construction_type\": \"\",\n \"carport\": null,\n \"sold_price\": 148350,\n \"sold_date\": \"2019-12-16\",\n \"hoa\": \"\",\n \"seller_contribution\": 3000,\n \"appointment_type\": \"\",\n \"fireplace\": null\n },\n \"payload\": {\n \"active\": [],\n \"nonActive\": [\n {\n \"_id\": \"61df7d0d5ea047686bb505c2\",\n \"geolocation\": {\n \"coordinates\": [\n -95.286974,\n 30.009\n ],\n \"type\": \"Point\"\n },\n \"school_name1\": \"JONES ELEMENTARY SCHOOL (ALDINE)\",\n \"mls_num\": 80289454,\n \"roof\": \"Composition\",\n \"modified_date\": \"2022-01-14T12:50:42.890\",\n \"uid\": 203549733,\n \"school_name2\": \"JONES MIDDLE SCHOOL (ALDINE)\",\n \"fireplace\": \"\",\n \"appointment_type\": \"Alternate Agent\",\n \"school_district\": \"1 - Aldine\",\n \"foundation\": \"Slab\",\n \"house_type\": \"Traditional\",\n \"seller_contribution\": \"\",\n \"hoa_amount\": 350,\n \"seller_type\": \"Mud,Sellers Disclosure\",\n \"hoa_frequency\": \"Annually\",\n \"hoa\": \"1\",\n \"school_name3\": \"NIMITZ HIGH SCHOOL (ALDINE)\",\n \"showing_instruction\": \"Leave Business Card,Lockbox Front\",\n \"bathroom_total\": 2.1,\n \"bedroom\": 3,\n \"state\": \"Texas\",\n \"status\": \"Terminated\",\n \"storie\": 2,\n \"street_name\": \"Elm Drake\",\n \"street_box_num\": 9020,\n \"street_type\": \"Lane\",\n \"sold_date\": \"\",\n \"subdivision\": \"Deerbrook Estates Sec 01 Amd\",\n \"sold_price\": \"\",\n \"list_price_orig\": 197000,\n \"agent_listing_appt_phone\": \"713-205-1637\",\n \"listing_agent_name\": \"Melissa Chavez\",\n \"carport\": \"\",\n \"garage\": 2,\n \"list_price\": 197000,\n \"list_date\": \"2022-01-12\",\n \"pool\": 0,\n \"construction_type\": \"Back Yard,Back Yard Fenced\",\n \"zipcode\": 77338,\n \"dom\": 2,\n \"lot_description\": \"Cul-De-Sac,Subdivision Lot\",\n \"year_built\": 2006,\n \"acre\": 2800,\n \"prop_subtype\": \"\",\n \"prop_type\": \"Single-Family\",\n \"public_remark\": \"This charming and meticulously cared for townhome in Humble is available for you to come out and take a look and make it your new home. The open concept continues into the Living Room, Kitchen and Dining area. Upstairs you'll find a updated full secondary restroom. The spacious Primary Bedroom with ensuite bath features a large walk-in closet, garden tub and separate shower. There are 2 additional bedrooms down the hall as well as a convenient utility room. This home is in a great location to most everything and only minutes to IAH, yet located on a quiet cul-de-sac. New roof in 2021! This one is going to go fast so call for a showing appointment today!\",\n \"city\": \"Humble\",\n \"acres\": 0.0643,\n \"lat\": 30.009,\n \"lon\": -95.286974,\n \"square_feet\": 1694,\n \"last_update\": \"Fri Jan 14 2022 14:18:31 GMT-0500 (EST)\",\n \"address\": \"9020 Elm Drake Lane Humble Texas 77338\",\n \"dist\": 132.6920417076113\n },\n {\n \"_id\": \"6182e00161a0a0509dd50fd2\",\n \"geolocation\": {\n \"coordinates\": [\n -95.286578,\n 30.008219\n ],\n \"type\": \"Point\"\n },\n \"school_name1\": \"JONES ELEMENTARY SCHOOL (ALDINE)\",\n \"mls_num\": 54478976,\n \"roof\": \"Aluminum,Other\",\n \"modified_date\": \"2021-12-16T10:31:23.980\",\n \"uid\": 201880661,\n \"school_name2\": \"JONES MIDDLE SCHOOL (ALDINE)\",\n \"fireplace\": \"\",\n \"appointment_type\": \"\",\n \"school_district\": \"3 - Alvin\",\n \"foundation\": \"Pier & Beam\",\n \"house_type\": \"Traditional\",\n \"seller_contribution\": \"\",\n \"hoa_amount\": \"\",\n \"seller_type\": \"Sellers Disclosure\",\n \"hoa_frequency\": \"\",\n \"hoa\": \"0\",\n \"school_name3\": \"NIMITZ HIGH SCHOOL (ALDINE)\",\n \"showing_instruction\": \"Supra Keybox,Vacant/Unoccupied\",\n \"bathroom_total\": 2,\n \"bedroom\": 3,\n \"state\": \"Texas\",\n \"status\": \"Terminated\",\n \"storie\": 1,\n \"street_name\": \"Stonewall Road County Rd 669a\",\n \"street_box_num\": 19002,\n \"street_type\": \"\",\n \"sold_date\": \"\",\n \"subdivision\": \"Village Trace Sec 1\",\n \"sold_price\": \"\",\n \"list_price_orig\": 168500,\n \"agent_listing_appt_phone\": \"512-827-2252\",\n \"listing_agent_name\": \"Aaron Jistel\",\n \"carport\": \"\",\n \"garage\": 1,\n \"list_price\": 168500,\n \"list_date\": \"2021-11-03\",\n \"pool\": 1,\n \"construction_type\": \"\",\n \"zipcode\": 77511,\n \"dom\": 14,\n \"lot_description\": \"Corner\",\n \"year_built\": 2006,\n \"acre\": 37026,\n \"prop_subtype\": \"\",\n \"prop_type\": \"Single-Family\",\n \"public_remark\": \"Show anytime. Over 1/3 Acre, (.3697) Bring your mobile homes/manufactured homes, rv/camper or fifth wheel, or build your dream home. Outside city limits, in the county, so no restrictions (per seller). But will need permit to build (anything larger than a storage shed). There is an rv hookup on the left side of the house. Sewer water and electric are all accessible. Single-wide mobile home located on a very accessible corner lot. Approximately .3697 acre. Enough land to possibly build small home. Above ground pool with stained deck installed 2 months ago. Custom rock Waterfall on back patio. Metal roof done in 2017. Comes with front and back patios. Front has concrete slab which could be used to add on square footage.Home shows installed once on tx state records.\",\n \"city\": \"Pearland\",\n \"acres\": 0.3697,\n \"lat\": 30.008219,\n \"lon\": -95.286578,\n \"square_feet\": 1368,\n \"last_update\": \"Thu Dec 16 2021 12:18:31 GMT-0500 (EST)\",\n \"address\": \"19002 Stonewall Road County Rd 669a Pearland Texas 77511\",\n \"dist\": 206.3387480189033\n }\n ],\n \"sold\": [\n {\n \"_id\": \"61ec65b2a09511f0dee9b10d\",\n \"geolocation\": {\n \"coordinates\": [\n -95.289371,\n 30.008353\n ],\n \"type\": \"Point\"\n },\n \"school_name1\": \"JONES ELEMENTARY SCHOOL (ALDINE)\",\n \"mls_num\": 55114133,\n \"roof\": \"Composition\",\n \"modified_date\": \"2022-02-19T02:14:42.400\",\n \"uid\": 203656599,\n \"school_name2\": \"JONES MIDDLE SCHOOL (ALDINE)\",\n \"fireplace\": 1,\n \"appointment_type\": \"\",\n \"school_district\": \"1 - Aldine\",\n \"foundation\": \"Slab\",\n \"house_type\": \"Traditional\",\n \"seller_contribution\": 0,\n \"hoa_amount\": 350,\n \"seller_type\": \"Mud,Sellers Disclosure\",\n \"hoa_frequency\": \"Annually\",\n \"hoa\": \"1\",\n \"school_name3\": \"NIMITZ HIGH SCHOOL (ALDINE)\",\n \"showing_instruction\": \"Appointment Required,Leave Business Card,Supra Keybox\",\n \"bathroom_total\": 2,\n \"bedroom\": 3,\n \"state\": \"Texas\",\n \"status\": \"Sold\",\n \"storie\": 1,\n \"street_name\": \"Orchard Ridge\",\n \"street_box_num\": 8830,\n \"street_type\": \"Lane\",\n \"sold_date\": \"2022-02-18\",\n \"subdivision\": \"Deerbrook Estates Sec 1 Amd\",\n \"sold_price\": 260000,\n \"list_price_orig\": 245000,\n \"agent_listing_appt_phone\": \"832-265-7791\",\n \"listing_agent_name\": \"Michael Joseph\",\n \"carport\": \"\",\n \"garage\": 2,\n \"list_price\": 245000,\n \"list_date\": \"2022-01-22\",\n \"pool\": 0,\n \"construction_type\": \"Back Yard Fenced\",\n \"zipcode\": 77338,\n \"dom\": 5,\n \"lot_description\": \"Subdivision Lot\",\n \"year_built\": 2005,\n \"acre\": 13236,\n \"prop_subtype\": \"\",\n \"prop_type\": \"Single-Family\",\n \"public_remark\": \"\",\n \"city\": \"Humble\",\n \"acres\": 0.3039,\n \"lat\": 30.008353,\n \"lon\": -95.289371,\n \"square_feet\": 1950,\n \"last_update\": \"Sat Feb 19 2022 05:18:31 GMT-0500 (EST)\",\n \"address\": \"8830 Orchard Ridge Lane Humble Texas 77338\",\n \"dist\": 149.1513234680521,\n \"select\": true\n },\n {\n \"_id\": \"61a66a595a2113f1701982c8\",\n \"geolocation\": {\n \"coordinates\": [\n -95.285332,\n 30.010562\n ],\n \"type\": \"Point\"\n },\n \"school_name1\": \"JONES ELEMENTARY SCHOOL (ALDINE)\",\n \"mls_num\": 43664046,\n \"roof\": \"Composition\",\n \"modified_date\": \"2021-12-29T13:03:47.590\",\n \"uid\": 202581838,\n \"school_name2\": \"JONES MIDDLE SCHOOL (ALDINE)\",\n \"fireplace\": \"\",\n \"appointment_type\": \"\",\n \"school_district\": \"1 - Aldine\",\n \"foundation\": \"Slab\",\n \"house_type\": \"Traditional\",\n \"seller_contribution\": 1200,\n \"hoa_amount\": 350,\n \"seller_type\": \"Mud,Sellers Disclosure\",\n \"hoa_frequency\": \"Annually\",\n \"hoa\": \"1\",\n \"school_name3\": \"NIMITZ HIGH SCHOOL (ALDINE)\",\n \"showing_instruction\": \"Accompany,Appointment Required,Supra Keybox\",\n \"bathroom_total\": 2.1,\n \"bedroom\": 4,\n \"state\": \"Texas\",\n \"status\": \"Sold\",\n \"storie\": 2,\n \"street_name\": \"Plume Tree\",\n \"street_box_num\": 9118,\n \"street_type\": \"Drive\",\n \"sold_date\": \"2021-12-29\",\n \"subdivision\": \"Deerbrook Estates Sec 04\",\n \"sold_price\": 240000,\n \"list_price_orig\": 230000,\n \"agent_listing_appt_phone\": \"281-798-3353\",\n \"listing_agent_name\": \"Jill Henderson\",\n \"carport\": \"\",\n \"garage\": 2,\n \"list_price\": 230000,\n \"list_date\": \"2021-11-30\",\n \"pool\": 0,\n \"construction_type\": \"Back Yard,Back Yard Fenced,Covered Patio/Deck,Sprinkler System\",\n \"zipcode\": 77338,\n \"dom\": 3,\n \"lot_description\": \"Subdivision Lot\",\n \"year_built\": 2007,\n \"acre\": 5500,\n \"prop_subtype\": \"\",\n \"prop_type\": \"Single-Family\",\n \"public_remark\": \"Beautiful one owner home shows pride of ownership. Great open floorplan with fresh and current paint colors. Walk through the rich wood and leaded glass front door into the foyer with views of your spacious den which is open to breakfast area and kitchen. You are cooking with gas in this large kitchen with breakfast bar, plenty of cabinet/counter space and walk-in pantry! Interior laundry/mud room just off kitchen with access to garage. Lots of extra storage in downstairs closet that goes back and under the staircase. Warm and durable laminate flooring in entry, den, stairs, and all of the second floor. Tile in breakfast, kitchen and wet areas. Primary bedroom with ensuite bath and walk-in closet. 2\\\" blinds through-out. Private backyard with lush grass and covered patio. FULL HOUSE AUTOMATIC GENERAC GAS GENERATOR! 2 car attached garage with workbench. Washer/Dryer/Fridge can stay too! Lovingly cared for and ready for it's new owner!\",\n \"city\": \"Humble\",\n \"acres\": 0.1263,\n \"lat\": 30.010562,\n \"lon\": -95.285332,\n \"square_feet\": 1853,\n \"last_update\": \"Wed Dec 29 2021 14:18:31 GMT-0500 (EST)\",\n \"address\": \"9118 Plume Tree Drive Humble Texas 77338\",\n \"dist\": 317.75648406889144,\n \"select\": true\n },\n {\n \"_id\": \"616793036bf50bc4bbdf8c32\",\n \"geolocation\": {\n \"coordinates\": [\n -95.284801,\n 30.009869\n ],\n \"type\": \"Point\"\n },\n \"school_name1\": \"JONES ELEMENTARY SCHOOL (ALDINE)\",\n \"mls_num\": 84030397,\n \"roof\": \"Composition\",\n \"modified_date\": \"2021-12-15T08:26:46.220\",\n \"uid\": 201339969,\n \"school_name2\": \"JONES MIDDLE SCHOOL (ALDINE)\",\n \"fireplace\": \"\",\n \"appointment_type\": \"\",\n \"school_district\": \"1 - Aldine\",\n \"foundation\": \"Slab\",\n \"house_type\": \"Traditional\",\n \"seller_contribution\": 0,\n \"hoa_amount\": 350,\n \"seller_type\": \"Mud\",\n \"hoa_frequency\": \"Annually\",\n \"hoa\": \"1\",\n \"school_name3\": \"NIMITZ HIGH SCHOOL (ALDINE)\",\n \"showing_instruction\": \"Appointment Required,Leave Business Card,Lockbox Front,Vacant/Unoccupied\",\n \"bathroom_total\": 2,\n \"bedroom\": 3,\n \"state\": \"Texas\",\n \"status\": \"Sold\",\n \"storie\": 1,\n \"street_name\": \"Shumaring\",\n \"street_box_num\": 19926,\n \"street_type\": \"Drive\",\n \"sold_date\": \"2021-11-23\",\n \"subdivision\": \"Deerbrook Estates Sec 04\",\n \"sold_price\": 219000,\n \"list_price_orig\": 235000,\n \"agent_listing_appt_phone\": \"713-729-1106\",\n \"listing_agent_name\": \"Evelyn Guinn\",\n \"carport\": \"\",\n \"garage\": 2,\n \"list_price\": 225000,\n \"list_date\": \"2021-10-13\",\n \"pool\": 0,\n \"construction_type\": \"Back Yard Fenced,Covered Patio/Deck,Fully Fenced,Porch\",\n \"zipcode\": 77338,\n \"dom\": 17,\n \"lot_description\": \"Subdivision Lot\",\n \"year_built\": 2008,\n \"acre\": 5750,\n \"prop_subtype\": \"\",\n \"prop_type\": \"Single-Family\",\n \"public_remark\": \"This is a great home built by Lennar. Large kitchen with nice sized breakfast room, big living room and the secondary bedrooms are good sized. The primary bedroom will accommodate a king size bed quite easily . Washer/dryer and refrigerator remain in the home. Private back yard with no back neighbors.\",\n \"city\": \"Humble\",\n \"acres\": 0.132,\n \"lat\": 30.009869,\n \"lon\": -95.284801,\n \"square_feet\": 1620,\n \"last_update\": \"Wed Dec 15 2021 10:18:30 GMT-0500 (EST)\",\n \"address\": \"19926 Shumaring Drive Humble Texas 77338\",\n \"dist\": 342.78028020473783,\n \"select\": true\n }\n ],\n \"leased\": []\n }\n}","import * as Types from \"../types/FastCMA\";\nimport {STEPS} from \"../../constants/fastCMA\";\nimport {mls_search_result as searchResult} from \"../demos/demo_cma\";\nimport {PROPERTY} from \"../../constants/fastCMA\";\n\nconst initState = {\n status: \"idle\",\n type: \"address\",\n step: STEPS.LOOKUP,\n address_lookup: {\n status: \"idle\",\n result: []\n },\n google: {\n session: false\n },\n cma: {\n status: 'idle',\n market: 'houston',\n result: false,\n active_status: PROPERTY.STATUS.SOLD.key,\n estimate: null,\n selected_properties: {}\n },\n};\n\nconst calculateEstimate = (subject, properties, selected_properties, activeStatus) => {\n let result = {}\n\n for (let key in PROPERTY.STATUS) {\n let status = PROPERTY.STATUS[key]\n let sold_price = 0;\n let data = properties[status.key]\n let price_per_square_foot = 0;\n\n if (properties) {\n data = data.filter((item, index) => selected_properties[status.key].indexOf(index) >= 0)\n if (data.length > 0) {\n for (let property of data) {\n price_per_square_foot += ((property.sold_price || property.list_price) || 0) / property.square_feet;\n sold_price += (property.sold_price || property.list_price) || 0;\n }\n\n price_per_square_foot = price_per_square_foot / data.length;\n sold_price = sold_price / data.length;\n // sold_price = price_per_square_foot * subject.square_feet;\n }\n }\n\n result[status.key] = {\n price_per_square_foot: price_per_square_foot,\n sold_price: sold_price\n }\n if (status.key === PROPERTY.STATUS.LEASED.key) {\n result[status.key].rental_index = sold_price / subject.list_price\n }\n }\n return result;\n}\n\nconst FastCMAReducer = (state = initState, action) => {\n let estimate;\n let selected_properties;\n let data;\n\n switch (action.type) {\n case Types.GG_MAP_LOOKUP:\n return {\n ...state,\n type: \"gg_map_lookup\",\n };\n case Types.MLS_LOOKUP:\n return {\n ...state,\n step: STEPS.FIND_COMPARABLES\n }\n\n case Types.ADDRESS_LOOKUP:\n return {\n ...state,\n address_lookup: {\n status: 'searching',\n result: [],\n query: action.params\n }\n }\n case Types.ADDRESS_LOOKUP_SUCCESS:\n return {\n ...state,\n address_lookup: {\n status: 'success',\n result: action.params\n }\n }\n case Types.ADDRESS_LOOKUP_RESET:\n return {\n ...state,\n step: STEPS.LOOKUP,\n address_lookup: initState.address_lookup\n }\n case Types.CHANGE_MARKET_CHANNEL:\n return {\n ...state,\n cma: {\n ...state.cma,\n market: action.params.market,\n }\n }\n case Types.ADDRESS_LOOKUP_FAIL:\n let result = state.address_lookup.query;\n result.Lat && (result.latitude = result.Lat);\n result.Lon && (result.longitude = result.Lon);\n return {\n ...state,\n address_lookup: {\n status: 'success',\n result: [result],\n }\n }\n case Types.FILTER_COMPARABLES:\n let subject = state.address_lookup.result.filter(i => i.mls_num === action?.params.mls_num || i.address === action?.params.address)\n if (subject.length > 0) {\n subject = subject[0];\n !subject.latitude && (subject['latitude'] = action?.params.latitude);\n !subject.longitude && (subject['longitude'] = action?.params.longitude)\n } else {\n subject = {}\n }\n return {\n ...state,\n step: STEPS.FIND_COMPARABLES,\n address_lookup: {\n ...state.address_lookup,\n subject: subject\n }\n }\n case Types.FIND_COMPARABLES:\n return {\n ...state,\n cma: {\n ...state.cma,\n status: 'searching',\n }\n }\n case Types.FIND_COMPARABLES_SUCCESS:\n data = action.params;\n if (action.params?.isCheckAgain) {\n return {\n ...state,\n // step: nextStep,\n cma: {\n ...state.cma,\n status: 'success',\n }\n }\n } else {\n if (Object?.keys(data?.subject || {}).length > 0 && Object?.keys(data?.payload || {}).length > 0) {\n selected_properties = {}\n for (let i in PROPERTY.STATUS) {\n let currentStatus = PROPERTY.STATUS[i]\n selected_properties[currentStatus.key] = data.payload && data.payload[currentStatus.key] ?\n data.payload[currentStatus.key].map((i, idx) => ({\n index: idx,\n select: i.select\n })).filter(i => i.select).map(i => i.index) : [];\n }\n estimate = calculateEstimate(data.subject, data.payload, selected_properties, PROPERTY.STATUS.SOLD.key)\n\n let nextStep = data.total > 0 ? STEPS.RUN_CMA : state.step\n\n return {\n ...state,\n step: nextStep,\n cma: {\n ...state.cma,\n status: 'success',\n result: action.params,\n active_status: PROPERTY.STATUS.SOLD.key,\n selected_properties: selected_properties,\n estimate: estimate\n }\n }\n } else {\n return {\n ...state,\n // step: nextStep,\n cma: {\n status: 'success',\n }\n }\n }\n }\n case Types.FIND_COMPARABLES_ERROR:\n return {\n ...state,\n cma: {\n ...state.cma,\n status: 'fail'\n }\n }\n case Types.SWITCH_TYPE:\n return {\n ...state,\n step: STEPS.LOOKUP\n }\n case Types.RUN_CMA:\n // calculate estimate here\n return {\n ...state,\n step: STEPS.SHOW_CMA_RESULTS,\n }\n case Types.GOOGLE_SPACES_SESSION_TOKEN:\n return {\n ...state,\n google: {\n session: action.params.session_token\n }\n }\n case Types.CMA_SET_ACTIVE_STATUS:\n estimate = {}\n selected_properties = {}\n let status = action.params.status;\n if (state.cma?.result && status) {\n selected_properties = state.cma.result.payload[status].map((i, idx) => ({\n index: idx,\n select: i.select\n })).filter(i => i.select).map(i => i.index)\n }\n data = state.cma.result;\n let updateSelected = {\n ...state.cma.selected_properties,\n [status]: selected_properties\n }\n estimate = calculateEstimate(data.subject, data.payload, updateSelected, status);\n\n return {\n ...state,\n cma: {\n ...state.cma,\n active_status: status,\n selected_properties: updateSelected,\n estimate: estimate\n }\n }\n case Types.CMA_SET_SELECTED_PROPERTY:\n let selectedIndex = [];\n estimate = {}\n if (state.cma?.result && action.params.selectedIndex) {\n selectedIndex = action.params.selectedIndex;\n\n }\n data = state.cma.result;\n selected_properties = {\n ...state.cma.selected_properties,\n [state.cma.active_status]: selectedIndex\n }\n estimate = calculateEstimate(data.subject, data.payload, selected_properties, state.cma.active_status);\n\n return {\n ...state,\n cma: {\n ...state.cma,\n selected_properties: selected_properties,\n estimate: estimate\n },\n }\n case Types.SHOW_CMA_REPORTS:\n return {\n ...state,\n step: STEPS.SHOW_CMA_REPORT,\n }\n\n case Types.CMA_LOAD_PROFILES_SUCCESS:\n return {\n ...state,\n cma: {\n ...state.cma,\n profiles: action.params\n }\n }\n case Types.CMA_SELECT_PROFILE:\n return {\n ...state,\n cma: {\n ...state.cma,\n edit_profile: action.params\n }\n }\n case Types.CMA_DELETE_PROFILE_SUCCESS:\n var profiles = [];\n if (state.cma.profiles) {\n for (let index in state.cma.profiles) {\n let profile = state.cma.profiles[index];\n if (profile.id !== action.params.profile_id) {\n profiles.push(profile)\n }\n }\n }\n return {\n ...state,\n cma: {\n ...state.cma,\n edit_profile: 'default',\n profiles: profiles\n }\n }\n case Types.CMA_UPDATE_PROFILE_SUCCESS:\n var profiles = [];\n if (state.cma.profiles) {\n for (let index in state.cma.profiles) {\n let profile = state.cma.profiles[index];\n if (profile.id === action.params.id) {\n profile = action.params\n }\n profiles.push(profile)\n }\n }\n return {\n ...state,\n cma: {\n ...state.cma,\n edit_profile: action.params.id,\n profiles: profiles\n }\n }\n case Types.CMA_INIT:\n return initState\n default:\n return state;\n }\n};\n\nexport default FastCMAReducer;\n","export const COMPARABLES_REQUEST_LIST_ACTION = \"COMPARABLES_REQUEST_LIST_ACTION\";\nexport const COMPARABLES_REQUEST_LIST_SUCCESS = \"COMPARABLES_REQUEST_LIST_SUCCESS\";\n\nexport const COMPARABLES_REQUEST_DETAIL_ACTION = \"COMPARABLES_REQUEST_DETAIL_ACTION\";\nexport const COMPARABLES_REQUEST_DETAIL_SUCCESS = \"COMPARABLES_REQUEST_DETAIL_SUCCESS\";\n\nexport const COMPARABLES_REQUEST_INIT = \"COMPARABLES_REQUEST_INIT\";\nexport const COMPARABLES_REQUEST_FAIL = \"COMPARABLES_REQUEST_FAIL\";\n","const Define = {\n GENERAL: {}\n};\nexport default Define;\n\nexport const FILES = {\n CDN_IMG_DEFAULT: \"\",\n SIZE_THUMB: \"200x\"\n};\n\nexport const UPLOAD = {\n MAX_FILE_SIZE: 10 * 1024 * 1024, // 5MB\n}\n\nexport const PATHS = {\n ROOT: {path: '/'},\n // AUTHENTICATION_NOT_FOUND: {path: `${Config.API_BASE_URL}/auth/login`},\n LOGIN: {path: '/login'},\n LOGOUT: {path: '/logout'},\n PROFILE: {path: '/profile'},\n REFRESH: {path: '/refresh'},\n PAGE_403: {path: '/403'},\n HOTELS: {\n TITLE: \"hotels\",\n path: '/hotels',\n LIST: {path: '/hotels'},\n CREATE: {path: '/hotels/action'},\n DETAIL: {path: '/hotels/action/:id'},\n },\n};\n\nexport const CONFIG_LOCAL_STORAGE = {\n PREFIX: 'hn',\n COMMON_ACCESS_TOKEN: 'hn_utk',\n ACCESS_TOKEN: 'utk',\n REFRESH_TOKEN: 'rft',\n EXPIRES: 'expires',\n PROFILE: 'pf',\n MENU_COLLAPSED: 'menu_collapsed',\n CONTENT_LANGUAGE: 'content_language',\n TOKEN_V1: \"connect.sid\"\n};\n\nexport const DATE_TIME_FORMAT = {\n MINIMUM_YEAR: 1970,\n SHORT_DATE: 'DD/MM/YYYY',\n SHORT_DATE_EXPORT: 'YYYY-MM-DD',\n DATE_TIME: 'YYYY-MM-DD HH:mm:ss',\n DAY_WEEK_DATETIME: 'dddd, DD/MM/YYYY HH:mm',\n TIME_AND_DATE: 'HH:mm DD/MM/YYYY',\n SHORT_TIME: 'HH:mm',\n FULL_TIME: 'HH:mm:ss',\n SHORT_MONTH: 'MM/YYYY',\n}\n\nexport const PAGINATION = {\n page_index: 1,\n page_size: 10,\n total: 0,\n total_page: 1,\n}\n\nexport const REFRESH_TOKEN_DELAY_TIMEOUT = (5 * 60 * 1000); // 5 minutes before the access token was expired\n\nexport const ROUTE_LIST = {}\n\nexport const ROUTE_REDIRECT = {\n HOME: \"/\",\n INBOX: \"/inbox\",\n COMPARABLES_REQUEST: {\n HOME: \"/comparables-request/list\",\n CREATE: \"/comparables-request/action\",\n UPDATE: \"/comparables-request/action/:id\",\n },\n}\n","import * as Types from '../types/ComparablesRequest';\nimport {PAGINATION} from '../../constants/define';\n// import HotelRequest from \"../mapping/Request/HotelRequest\";\n\nconst initialState = {\n isFetching: false,\n statusAction: {\n isSubmit: false,\n },\n all: [],\n errors: [],\n // item: new HotelRequest().update(),\n data: {\n result: [],\n pagination: {\n page_size: PAGINATION.page_size,\n page_index: PAGINATION.page_index,\n total: PAGINATION.total,\n total_page: PAGINATION.total_page,\n }\n },\n detail: {},\n master: {}\n};\n\nconst getResult = (page) => {\n return {\n result: page.result || [],\n usage_count: page.usage_count || [],\n pagination: {\n page_size: page?.page_size || PAGINATION.page_size,\n page_index: page?.page_index || PAGINATION.page_index,\n total: page?.total || PAGINATION.total,\n total_page: page?.total_page || PAGINATION.total_page,\n }\n }\n}\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case Types.COMPARABLES_REQUEST_LIST_ACTION:\n return {...state, isFetching: true, statusAction: initialState.statusAction};\n case Types.COMPARABLES_REQUEST_LIST_SUCCESS:\n return {\n ...state,\n isFetching: false,\n data: getResult(action.list),\n statusAction: initialState.statusAction\n };\n case Types.COMPARABLES_REQUEST_DETAIL_ACTION:\n return {...state, isFetching: true, statusAction: initialState.statusAction};\n case Types.COMPARABLES_REQUEST_DETAIL_SUCCESS:\n return {...state, isFetching: false, detail: action.detail, statusAction: initialState.statusAction};\n case Types.COMPARABLES_REQUEST_FAIL:\n return {...state, errors: action.errors, isFetching: false, statusAction: initialState.statusAction};\n case Types.COMPARABLES_REQUEST_INIT:\n return initialState;\n default:\n return state;\n }\n}\n","import {combineReducers} from \"redux\";\nimport authReducer from './authReducer';\nimport FastCMAReducer from \"./fastCMAReducer\";\nimport comparablesRequestReducer from \"./comparablesRequestReducer\";\n\nexport default combineReducers({\n authReducer,\n FastCMAReducer,\n comparablesRequestReducer\n});\n","export const required = value => (value || value === undefined) ? undefined : true;\nexport const requiredArray = value => (value || value.length > 0) ? undefined : true;\nexport const maxLength = (value,max) => value && value.length > max ? true : undefined;\nexport const minLength = (value,min) => value && value.length < min ? true : undefined;\nexport const isNumber = value => value && isNaN(Number(value)) ? true : undefined;\nexport const minValueNumber = (value,min) => [null, undefined, ''].indexOf(value) === -1 && parseInt(value) < parseInt(min) ? true : undefined;\nexport const maxValueNumber = (value,max) => parseInt(value) > parseInt(max) ? true : undefined;\nexport const compareString = (value,value2) => value.toString() !== value2 ? true : undefined;\nexport const maxImage = (value,max) => parseInt(value ? value.length : 0) > parseInt(max) ? true : undefined;\nexport const minImage = (value,min) => parseInt(value ? value.length : 0) < parseInt(min) ? true : undefined;\nexport const isEmail = value => value && !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(value) ? true : undefined;\nexport const isUrl = value => value && !/^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$|^#$/i.test(value) ? true : undefined;\nexport const isPhone = value => value && /^[+0-9]{1}[0-9]+$/i.test(value) ? true : undefined;\nexport const isSpecialString = value => value && /(<\\/?[\\S][^>]*>)|([^a-zA-Z0-9@])$/i.test(value) ? true : undefined;\nexport const hadScriptTag = value => value && /<\\/?script>/g.test(value) ? true : undefined;\nexport const strongPassword = value => value && !/^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[\\W]).{6,}$/g.test(value) ? true : undefined;\nexport const isWhieSpace = value => value && /[\\s]/g.test(value) ? true : undefined;\n","const TAG_DEFINE = {\n GENERAL: {\n ITEM: {\n COMPARABLES_REQUEST: {\n code: \"Code\",\n profile: \"Profile\",\n market: \"Market\",\n property_address: \"Address\",\n status_explain: \"Status\",\n created_at: \"Create Date\",\n action: \"Action\",\n }\n }\n },\n ACTION: {\n info: \"Thông tin\",\n export: \"Xuất file\",\n import: \"Nhập file\",\n create: \"Tạo mới\",\n update: \"Cập nhật\",\n filter: \"Bộ lọc\",\n show: \"Xem\",\n remove: \"Xoá\",\n action: \"Thao tác\",\n exit: \"Thoát\",\n close: 'Đóng',\n lock: \"Khoá\",\n unlock: \"Mở khoá\",\n refreshData: \"Làm mới dữ liệu\",\n back: \"Quay về\",\n backIndex: \"Quay về trang chủ\",\n statusHide: \"Không hiển thị\",\n statusShow: \"Hiển thị\",\n uploadImage: \"Tải Hình ảnh\",\n collapse: \"Thu gọn\",\n detail: \"Chi tiết\",\n noData: \"Không có dữ liệu\",\n cancel: \"Hủy\",\n confirm: \"Xác nhận\",\n edit: 'Chỉnh sửa',\n add: 'Thêm',\n addMulti: 'Thêm nhiều',\n save: 'Lưu',\n send: 'Gửi',\n use: 'Sử dụng',\n resendEmail: 'Gửi lại email',\n approve: 'Cho phép',\n unApprove: 'Không cho phép',\n translate: 'Phiên dịch',\n unlink: 'Xóa liên kết',\n unActive: \"Hủy kích hoạt\",\n search: \"Tìm kiếm\"\n },\n NOTIFICATION: {\n title: \"Thông báo\",\n building: \"Tính năng đang được phát triển\",\n notInternet: \"Kết nối bị lỗi, máy chủ không phản hồi!\",\n createSuccess: \"Thêm dữ liệu thành công\",\n updateSuccess: \"Cập nhật dữ liệu thành công\",\n removeSuccess: \"Xoá dữ liệu thành công\",\n checkSuccess: \"Kiểm tra thành công\",\n uploadSuccess: \"Tải dữ liệu thành công\",\n resendMailSuccess: \"Gởi email thành công\",\n changePasswordSuccess: \"Đổi mật khẩu thành công\",\n assigneeSuccess: \"Yêu cầu đã được chuyển\",\n cancelTicketSuccess: \"Đã huỷ yêu cầu\",\n sureRemove: \"Bạn chắc chắn muốn xóa ?\",\n sureDeActive: \"Bạn muốn vô hiệu tài khoản ?\",\n sureUse: \"Bạn chắc chắn muốn sử dụng ?\",\n sureLogout: \"Bạn chắc chắn muốn thoát?\",\n changePassword: \"Bạn chắc chắn muốn đổi mật khẩu?\",\n confirmExit: 'Bạn có chắc chắn muốn thoát?',\n confirmBack: 'Bạn có chắc chắn muốn quay về?',\n downloadSuccess: 'Tải về file thành công.',\n youCantAccessThisPage: 'Bạn không thể vào trang này!',\n maxFileSize: 'Kích thước file tối đa',\n },\n PAGINATE: {\n showLine: \"Items per page\",\n first: \"First page\",\n last: \"Last page\",\n previous: \"Previous\",\n next: \"Next\",\n of: 'of',\n items: 'items',\n jumpTo: 'Go to',\n itemsPerPage: 'Items / page',\n page: 'page',\n },\n VALIDATION: {\n dropImage: \"Kéo và thả hình ảnh ở đây\",\n email: \"Vui lòng nhập đúng email\",\n password:\n \"Mật khẩu gồm ký tự thường, ký tự viết hoa, ký tự số, ký tự đặt biệt và trên 6 ký tự\",\n image: \"File phải là hình\",\n required: \"Dữ liệu không được rỗng\",\n requiredImage: \"Vui lòng chọn hình\",\n string: \"Dữ liệu phải là ký tự\",\n number: \"Dữ liệu phải là số\",\n priceRequired: \"Vui lòng nhập giá\",\n invalidDate: \"Ngày tháng không hợp lệ\",\n salePriceLessThenPrice: \"Giá giảm phải thấp hơn giá gốc\",\n sureUse: \"Bạn chắc chắn muốn sử dụng ?\",\n image1pic: \"Vui lòng chọn 1 tấm hình\",\n maxImage: \"Tối đa 5 tấm hình\",\n passwordRequired: \"Mật khẩu không được rỗng\",\n currentPasswordRequired: \"Mật khẩu cũ không được rỗng\",\n newPasswordRequired: \"Mật khẩu mới không được rỗng\",\n confirmPasswordRequired: \"Mật khẩu xác nhận không được rỗng\",\n usernameRequired: \"Tài khoản không được rỗng\",\n usernameOrPasswordNotMatch: \"Tài khoản hoặc mật khẩu không đúng\",\n userLocked: \"Sai thông tin đăng nhập hoặc tài khoản bị khoá\",\n connectFail: \"Kết nối bị lỗi, máy chủ không phản hồi!\",\n voucherInvalid: \"Mã số voucher không hợp lệ\",\n userNameExists: \"Tài khoản đã tồn tại!\",\n uploadFail: \"Tải tập tin không thành công\",\n percent: \"Không được quá 100%\",\n minOrderValue: \"Dữ liệu phải nhỏ hơn đơn hàng tối đa\",\n maxPhone: \"Không được quá 12 ký tự\",\n minPhone: \"Dữ liệu phải từ 8 ký tự trở lên\",\n minpassword: \"Dữ liệu phải từ 6 ký tự trở lên\",\n quantity: \"Số lượng ít nhất là 1\",\n LessThenZero: \"Dữ liệu phải lớn hơn 0\",\n MinValue: \"Dữ liệu phải lớn hơn\",\n isPhone: \"Vui lòng nhập đúng số điện thoại\",\n isSpecialString: \"Vui lòng không nhập ký tự đặc biệt\",\n isUrl: \"Vui lòng nhập đúng đường dẫn\",\n recaptcha: \"Vui lòng xác nhận trước khi đăng nhập\",\n comparePassword: \"Mật khẩu xác nhận không trùng khớp\",\n nameRequired: \"Tên không được rỗng\",\n codeRequired: \"Code không được rỗng\",\n starRequired: \"Hạng không được để trống\",\n checkForm: \"Vui lòng kiểm tra lại dữ liệu\",\n unknowError: 'Lỗi không xác định',\n nullData: \"No data\",\n hotelsUnActiveConfirm: \"Huỷ kích họat khách sạn sẽ ần thông tin của khách sạn này trên các sản phẩm đang có. Bạn có chắn muốn huỷ kích hoạt?\",\n statusCode: {\n code: {\n 200: \"Upload successful\",\n 201: \"Create successful\",\n 204: \"Update data successful\",\n 203: \"Delete data successful\",\n 205: \"Successfully added to favorites\",\n 206: \"Successfully remove to favorites\",\n 207: \"Password reset successful\",\n 400: \"Không cập không hiệu lực\",\n 401: \"Please login to the page!\",\n 403: \"You do not have permission to access this site!.\",\n 404: \"Page Not Found\",\n 405: 'Không hỗ trợ',\n 1: \"%s is reuqired\",\n 2: \"%s is number\",\n 3: \"%s quá giới hạn\",\n 4: \"Không được quá %s ký tự\",\n 5: \"Không được quá %s file\",\n 6: \"Chưa có dữ liệu\",\n 7: \"Bạn chắn chắn muốn xoá %s\",\n 8: 'Giá trị không được lớn hơn \"%s\"',\n 9: \"Hình ảnh tối đa là %s tấm hình\",\n 10: \"Vui lòng nhập %s\",\n 11: \"Vui lòng chọn %s\",\n 12: \"Vui lòng chọn ít nhất %s tấm hình\",\n 13: \"Vui lòng chọn ít nhất %s\",\n 14: \"Bạn chắn chắn muốn cập nhật %s\",\n 15: 'Giá trị không được nhỏ hơn \"%s\"',\n 1208: \"Tài khoản hoặc mật khẩu không hợp lệ\",\n 1403: \"Tài khoản hoặc mật khẩu không hợp lệ\",\n 1406: \"Số điện thoại không hợp lệ\",\n 1409: \"Vui lòng chọn trạm\",\n 1404: \"Tài khoản hoặc email đã tồn tại!\",\n 1414: \"Thông tin đăng nhập không đúng !\",\n 1210: \"Thông tin đăng nhập không đúng !\",\n 1417: \"Bạn không thể cập nhật nhân viên này!\",\n 1418: \"Mã nhân viên không được trùng\",\n 1555: \"Vui lòng nhập lý do hủy phiếu!\",\n 1563: \"Nhân viên được giao không có quyền thực hiện phiếu yêu cầu\",\n 8001: \"Tài khoàn hoặc mật khẩu của bạn không đúng. Vui lòng thử lại\",\n 8002: \"IP đã bị chặn truy cập vào đường dẫn trên. Vui lòng quay lại sau\",\n 8003: \"Tài khoản đã bị tạm khóa trong vòng 15'. Vui lòng quay lại sau\",\n 8004: \"Bạn không có quyền để hủy ticket này\",\n\n // Promotion: 10000\n 10001: \"Không thể tìm được chương trình\",\n GROUP_NOT_FOUND: 'Không thể tìm được chương trình',\n 10002: \"Cơ sở không tồn tại\",\n GROUP_PROPERTY_IDS_NOT_EXIST: 'Cơ sở không tồn tại',\n 10003: \"Sản phẩm không tồn tại\",\n GROUP_PRODUCT_IDS_NOT_EXIST: 'Sản phẩm không tồn tại',\n 10004: \"Chương trình đang được bán\",\n GROUP_IS_RUNNING: 'Chương trình đang được bán',\n 10005: \"Chương trình đã kết thúc\",\n GROUP_WAS_ENDED: 'Chương trình đã kết thúc',\n 10006: \"Ngày giờ mở bán không được nhỏ hơn ngày giờ hiện tại\",\n START_DATE_LESS_THAN_NOW: 'Ngày bắt đầu không được nhỏ hơn ngày giờ hiện tại',\n 10007: \"Ngày bắt đầu/Ngày mở bán không được lớn hơn ngày kết thúc/Ngày ngừng bán\",\n START_DATE_LARGER_THAN_END_DATE: 'Ngày bắt đầu không được lớn hơn ngày kết thúc',\n 10008: \"Ngày ngừng bán không được lớn hơn ngày kết thúc\",\n SALE_START_DATE_LARGER_THAN_SALE_END_DATE: 'Ngày ngừng bán không được lớn hơn ngày kết thúc',\n 10101: \"Ngày bắt đầu không được nhỏ hơn ngày hiện tại\",\n SALE_END_DATE_LARGER_THAN_END_DATE: 'Ngày bắt đầu không được nhỏ hơn ngày hiện tại',\n DATE_LESS_THAN_NOW: 'Ngày giờ không được nhỏ hơn ngay giờ hiện tại',\n MIN_PRICE_LARGER_THAN_MAX_PRICE: 'Giá thấp nhất không được lớn hơn giá cao nhất',\n // Voucher: 11000\n 11001: \"Mã voucher không hợp lệ\",\n SERIAL_NUMBER_INVALID: 'Mã voucher không hợp lệ',\n 11002: \"Không tìm thấy voucher\",\n VOUCHER_NOT_FOUND: 'Không tìm thấy voucher',\n 11003: \"Voucher đã được sử dụng\",\n VOUCHER_USED: 'Voucher đã được sử dụng',\n 11004: \"Voucher đã bị khoá\",\n VOUCHER_LOCKED: 'Voucher đã bị khoá',\n 11005: \"Voucher đã hết số lần sử dụng\",\n VOUCHER_USED_UP: 'Voucher đã hết số lần sử dụng',\n 11006: \"Chương trình tạm dừng\",\n GROUP_UNAVAILABLE: 'Chương trình tạm dừng',\n 11007: \"Voucher đã hết hạn\",\n VOUCHER_WAS_EXPIRED: 'Voucher đã hết hạn',\n 11008: \"Chương trình chưa bắt đầu\",\n GROUP_NOT_STARTED_YET: 'Chương trình chưa bắt đầu',\n 11009: \"Voucher chưa đến ngày sử dụng\",\n VOUCHER_NOT_STARTED_YET: 'Voucher chưa đến ngày sử dụng',\n 11010: \"Voucher không thể sử dụng tại cơ sở này\",\n VOUCHER_PROPERTY_ERROR: 'Voucher không thể sử dụng tại cơ sở này',\n // User: 12000\n 12001: \"Không tìm thấy tài khoản hoặc tài khoản đã bị khoá\",\n 12002: \"Tài khoản đã tồn tại\",\n ID_USER_EXISTED: 'Tài khoản đã tồn tại',\n 12003: \"Cơ sở không tồn tại hoặc đã bị xoá\",\n 12004: \"Quyền hạn chưa được cập nhật hoặc không tồn tại\",\n 12005: \"Tài khoản không thể xoá\",\n 12006: \"Tài khoản sẽ bị khoá nếu đăng nhập sai nhiều lần\",\n ID_USER_LOCK_WARNING: \"Tài khoản sẽ bị khoá nếu đăng nhập sai nhiều lần\",\n 12007: \"Email chưa được xác nhận\",\n 12008: \"Tài khoản đã bị khoá\",\n ID_USER_LOCKED: 'Tài khoản đã bị khoá',\n 12010: \"Mã xác nhận sai\",\n ID_WRONG_OLD_PASSWORD: \"Mật khẩu cũ không chính xác\",\n 12011: \"Mật khẩu cũ không chính xác\",\n 12012: \"Email đã tồn tại\",\n // Cart: 13000\n 13001: \"Chương trình không tồn tại\",\n 13002: \"Voucher không đủ\",\n 13003: \"Không tìm thấy giỏ hàng\",\n 13004: \"Cart item not found\",\n //ImportData: 14000\n 14001: \"Nhập dữ liệu thất bại\",\n FAILED_TO_IMPORT_DATA: 'Nhập dữ liệu thất bại',\n FILE_NOT_FOUND: 'Không tìm thấy file',\n NOT_EXCEL_FORMAT: 'Không đúng định dạng excel',\n // UploadFile: 15000 (Storage)\n 15001: \"Tải dữ liệu thất bại\",\n 15002: \"Không tìm thấy dữ liệu\",\n 15003: \"Dữ liệu không được chấp nhận, Vui lòng chọn lại\",\n 15004: \"Dung lượng dữ liệu bị giới hạn\",\n // Banner: 16000 (Storage)\n 16001: \"Không tìm thấy hình ảnh\",\n // Order: 17000 (Booking)\n 17001: \"Không tìm thấy đơn hàng\",\n 17002: \"Đặt hàng thất bại\",\n 17003: \"Đơn hàng đã được thanh toán\",\n 17004: \"Không đủ voucher\",\n // Property: 18000\n 18001: \"Không tìm thấy cơ sở\",\n PROPERTY_NOT_FOUND: 'Không tìm thấy cơ sở',\n PROPERTY_USED: 'Cơ sở đang được sử dụng',\n // Product: 19000\n 19001: \"Không tìm thấy sản phẩm\",\n PRODUCT_NOT_FOUND: 'Không tìm thấy sản phẩm',\n PRODUCT_USED: 'Sản phẩm đang được sử dụng',\n // Customer: 20000\n 20001: \"Không tìm thấy khách hàng\",\n\n 21001: \"Chỉ được xem trong vòng 90 ngày\",\n 21002: \"Ngày bắt đầu không được lớn hơn ngày kết thúc hoặc ngày hiện tại\",\n //Role\n 22001: \"Vai trò không tồn tại\",\n 22002: \"Vai trò đã tồn tại\",\n 22003: \"Vai trò đã được sử dụng\",\n UNDEFINED_ERROR: 'Lỗi không xác định',\n INVALID_CAPTCHA: 'Sai mã xác thực',\n PAGE_NOT_FOUND: \"Không tìm thấy trang\",\n CATEGORY_NOT_FOUND: \"Không tìm thấy danh mục\",\n CATEGORY_EXISTED: \"Danh mục đã tồn tại\",\n CATEGORY_USED: \"Danh mục đã sử dụng\",\n CATEGORY_IDS_NOT_EXIST: \"Một số danh mục đã tồn tại\",\n TAG_NOT_FOUND: \"Không tìm thấy thẻ\",\n TAG_EXISTED: \"Thẻ tồn tại\",\n TAG_USED: \"Thẻ đã dùng\",\n BANNER_NOT_FOUND: \"Không tìm thấy banner\",\n FILE_UPLOAD_FAILED: \"Tải lên bị lỗi\",\n FILE_TYPE_NOT_ACCEPTED: \"Loại file không hỗ trợ\",\n FILE_LENGTH_OVER_LIMIT: \"File quá giới hạn kích thước\",\n ZERO_FILE_LENGTH: \"File rỗng\",\n DIRECTORY_NOT_ALLOW: 'Thư mục không được phép thao tác',\n }\n }\n },\n ACTION_OPTIONS: {\n CREATE: 'CREATE',\n CLONE: 'CLONE',\n UPDATE: 'UPDATE',\n TRANSLATE: 'TRANSLATE',\n }\n};\nexport default TAG_DEFINE;\n","import { useState, useEffect } from \"react\";\nimport {\n\tPAGINATION,\n\tDATE_TIME_FORMAT,\n\tIMAGE_DIRECTORY_TYPES,\n} from \"../constants/define\";\nimport { omit, findIndex, find, merge, every } from \"lodash\";\nimport moment from \"moment\";\n// // import i18n from './../constants/initLng';\n// import xssFilters from 'xss-filters';\n// import * as Sentry from '@sentry/browser';\n//\n// const humanizeDurationFunction = require('./HumanizeDuration');\n//\n// export const getDummyData = (pageSize = 10, pageIndex = 1, getDataItem, totalCount = 100) => {\n// let data = [];\n// const max = pageSize * pageIndex;\n// const min = max - pageSize;\n// for (let i = min; i < max; i++) {\n// data.push(getDataItem(i))\n// }\n// return { data, pageIndex, pageSize, totalCount };\n// }\n//\n// export const loadGoogleAPIKey = (key) => {\n// return new Promise(resolve => {\n// const existingScript = document.getElementById('googleAPI');\n// if (!existingScript) {\n// const script = document.createElement('script');\n// script.src = `https://maps.googleapis.com/maps/api/js?key=${key}&libraries=places`;\n// script.id = 'googleAPI';\n// document.body.appendChild(script);\n// script.onload = () => {\n// resolve();\n// };\n// } else {\n// resolve();\n// }\n// });\n// };\n\nexport function parseListRequestParams(params = {}) {\n\tconst page_index =\n\t\tparams.page_index && Number(params.page_index) > PAGINATION.page_index\n\t\t\t? params.page_index\n\t\t\t: undefined;\n\tconst page_size =\n\t\tparams.page_size && Number(params.page_size) > PAGINATION.page_size\n\t\t\t? params.page_size\n\t\t\t: undefined;\n\tconst order_by = params.order_by || undefined;\n\tconst filter = params.filter || params.filter || undefined;\n\tconst order_by_desc =\n\t\tparams.order_by_desc !== undefined\n\t\t\t? params.order_by_desc\n\t\t\t: params.order_by_desc !== undefined\n\t\t\t? params.order_by_desc\n\t\t\t: undefined;\n\tconst start_date = params.start_date\n\t\t? moment(params.start_date).toISOString()\n\t\t: undefined;\n\tconst end_date = params.end_date\n\t\t? moment(params.end_date).toISOString()\n\t\t: undefined;\n\treturn {\n\t\t...omit(params, [\n\t\t\t\"page_index\",\n\t\t\t\"page_size\",\n\t\t\t\"order_by\",\n\t\t\t\"order_by_desc\",\n\t\t\t\"result\",\n\t\t\t\"filter\",\n\t\t]),\n\t\tpage_index,\n\t\tpage_size,\n\t\torder_by,\n\t\torder_by_desc,\n\t\tstart_date,\n\t\tend_date,\n\t\tfilter,\n\t};\n}\n\n// export function parseTourListRequestParams(params = {}) {\n// return parseListRequestParams(params)\n// }\n//\n// export function parseTourLineListRequestParams(params = {}) {\n// const fromDate = params.fromDate && params.fromDate.toISOString ? params.fromDate.toISOString() : params.fromDate;\n// const toDate = params.toDate && params.toDate.toISOString ? params.toDate.toISOString() : params.toDate;\n// return { fromDate, toDate }\n// }\n//\n// export function parseOrderVoucherItemDetailListRequestParams(params = {}) {\n// const PageIndex = params.pageIndex && params.pageIndex > PAGINATION.pageIndex ? params.pageIndex : undefined;\n// const PageSize = params.pageSize && params.pageIndex > PAGINATION.pageIndex ? params.pageSize : undefined;\n// const orderBy = params.OrderBy || params.orderBy || undefined;\n// const orderByDesc = params.OrderByDesc !== undefined ? params.OrderByDesc : params.orderByDesc !== undefined ? params.orderByDesc : undefined;\n// const groupId = params.productVariantId || params.groupId || undefined;\n// return {\n// ...omit(params, ['pageIndex', 'pageSize', 'OrderBy', 'OrderByDesc', 'productVariantId']),\n// PageIndex, PageSize, orderBy, orderByDesc,\n// groupId,\n// }\n// }\n//\n// export function parseListRequestParamsCameo(params = {}) {\n// const orderBy = params.OrderBy || params.orderBy || undefined;\n// const orderByDesc = params.OrderByDesc !== undefined ? params.OrderByDesc : params.orderByDesc !== undefined ? params.orderByDesc : undefined;\n// const startDate = params.startDate ? moment(params.startDate).toISOString() : undefined;\n// const endDate = params.endDate ? moment(params.endDate).toISOString() : undefined;\n// return {\n// ...omit(params, ['OrderBy', 'OrderByDesc', 'totalCount', 'totalPage']),\n// startDate, endDate, orderBy, orderByDesc,\n// pageIndex: params.pageIndex && Number(params.pageIndex),\n// pageSize: params.pageSize && Number(params.pageSize),\n// }\n// }\n//\n// export function parseReportListRequestParams(params = {}) {\n// return parseListRequestParamsCameo(params)\n// }\n//\n// export function parseRatingListRequestParams(params = {}) {\n// return parseReportListRequestParams(params)\n// }\n//\n//\n//\n// export function parseTourListReponseParams(data) {\n// return {\n// pageIndex: data.pageIndex,\n// pageSize: data.pageSize,\n// totalCount: data.totalCount,\n// orderBy: data.orderBy,\n// orderByDesc: data.orderByDesc,\n// searchTerm: data.searchTerm,\n// departure: data.departure,\n// destination: data.destination,\n// departureDate: data.departureDate,\n// fromDate: data.fromDate,\n// toDate: data.toDate,\n// priceFrom: data.priceFrom,\n// priceTo: data.priceTo,\n// lengthOfTour: data.lengthOfTour,\n// }\n// }\n//\n// export function updateObjectInArray(object = {}, array = [], conpareField = 'id') {\n// let index = findIndex(array || [], item => object[conpareField] === item[conpareField]);\n// if (index >= 0) {\n// array[index] = object;\n// } else {\n// array.push(object);\n// index = array.length - 1;\n// }\n// return array;\n// }\n//\n// export function getMomentDate(dateString, format = undefined, convertUTC = true) {\n// const utcDate = convertUTC ? moment.utc(dateString, format).toDate() : moment(dateString, format);\n// const date = dateString ? new moment(utcDate) : undefined;\n// return date && date.isAfter(`${DATE_TIME_FORMAT.MINIMUM_YEAR}`, 'year') ? date : undefined;\n// }\n//\n// export function updateMomentLocale(locale = Config.DEFAULT_LANG) {\n// require(`moment/locale/${locale}.js`);\n// let options;\n// if (locale === 'vi') {\n// options = {\n// months: 'Tháng 1_Tháng 2_Tháng 3_Tháng 4_Tháng 5_Tháng 6_Tháng 7_Tháng 8_Tháng 9_Tháng 10_Tháng 11_Tháng 12'.split('_'),\n// weekdays: 'Chủ nhật_Thứ hai_Thứ ba_Thứ tư_Thứ năm_Thứ sáu_Thứ bảy'.split('_'),\n// }\n// }\n// moment.locale(locale, options);\n// }\n//\n// export function humanizeDuration(duration, options = {}) {\n// // options.language = i18n.t('lang');\n// // options.delimiter = ' ';\n// // return humanizeDurationFunction(duration, options);\n// }\n//\n// export function xssFilter(htmlString) {\n// const result = htmlString ? xssFilters.uriComponentInHTMLData(htmlString) : undefined;\n// return decodeURIComponent(result)\n// }\n//\n// export function isLocalHost() {\n// return /localhost|127\\.0\\.0\\.1|::1|\\.local|^$/i.test(window.location.hostname)\n// }\n//\n// export function initSentry(key, project) {\n// key = key || Config.SENTRY_KEY;\n// project = project || Config.SENTRY_PROJECT;\n// const isLocal = isLocalHost();\n// if (key && project && !isLocal) {\n// return Sentry.init({ dsn: `https://${key}@sentry.io/${project}` });\n// }\n// }\n//\n// export function getLocaleFullName(firstname, lastname) {\n// // const language = i18n.t('lang');\n// // const getFullName = (first, last) => {\n// // return `${first || ''}${last ? (' ' + last) : ''}`\n// // }\n// // switch (language) {\n// // case 'vi':\n// // return getFullName(lastname, firstname);\n// // case 'en':\n// // return getFullName(firstname, firstname);\n// // default:\n// // return getFullName(firstname, firstname);\n// // }\n// }\n\n// export function getImageTypeByDirectory(directory) {\n// if (IMAGE_DIRECTORY_TYPES.SLIDE.INCLUDE_DIRECTORIES.includes(directory)) {\n// return IMAGE_DIRECTORY_TYPES.SLIDE.id\n// }\n// return IMAGE_DIRECTORY_TYPES.THUMB.id\n// }\n\nexport function parseFlatArrayToTreeData(\n\tdata = [],\n\tparentIdField = \"parentId\",\n\tchildField = \"children\",\n\tidField = \"id\",\n\tcurrentId = undefined\n) {\n\tif ((data || []).length && every(data || [], (item) => !!item[childField])) {\n\t\treturn data;\n\t}\n\treturn (data || [])\n\t\t.filter((item) => item[childField] === currentId)\n\t\t.map((item) => {\n\t\t\tconsole.log(\"FLAT\", item);\n\t\t\tconst newItem = merge(item, {\n\t\t\t\t[childField]: parseFlatArrayToTreeData(\n\t\t\t\t\tdata || [],\n\t\t\t\t\tparentIdField,\n\t\t\t\t\tchildField,\n\t\t\t\t\tidField,\n\t\t\t\t\titem[idField]\n\t\t\t\t),\n\t\t\t});\n\t\t\tif (newItem[childField] && !newItem[childField].length)\n\t\t\t\tnewItem[childField] = undefined;\n\t\t\treturn newItem;\n\t\t});\n}\n\n// export function getModelDefaultLanguage(model) {\n// return find(model.languages || [], item => !!item.isDefault);\n// }\n//\n// export function readableFileSize(bytes, toFixed = 1, si = false) {\n// var thresh = si ? 1000 : 1024;\n// if (Math.abs(bytes) < thresh) {\n// return bytes + ' B';\n// }\n// var units = ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n// var u = -1;\n// do {\n// bytes /= thresh;\n// ++u;\n// } while (Math.abs(bytes) >= thresh && u < units.length - 1);\n// return bytes.toFixed(toFixed) + ' ' + units[u];\n// }\n//\n// export function getTranslateObject(translations = [], languageCode = undefined, getDefaultOnEmpty = false) {\n// return find(translations, item => (languageCode && item.languageCode === languageCode) || (getDefaultOnEmpty && item.isDefault))\n// }\n\nexport function flatDatatoTreeData(\n\tdata,\n\tchildField = \"children\",\n\tcurrentId = undefined\n) {\n\tif (currentId) {\n\t\tdata.map((i) => {\n\t\t\ti.title = i.name;\n\t\t\ti.value = i.id;\n\t\t\ti.key = i.id;\n\t\t\tif (i[childField] && i[childField].length > 0) {\n\t\t\t\ti[childField] = flatDatatoTreeData(i[childField], \"children\", i.id);\n\t\t\t}\n\t\t});\n\t\treturn data;\n\t}\n\tdata.map((i) => {\n\t\ti.title = i.name;\n\t\ti.value = i.id;\n\t\ti.key = i.id;\n\t\tif (i[childField].length > 0) {\n\t\t\ti[childField] = flatDatatoTreeData(i[childField], \"children\", i.id);\n\t\t}\n\t});\n\treturn data;\n}\n\nexport function useKeyPress(targetKey) {\n\t// State for keeping track of whether key is pressed\n\tconst [keyPressed, setKeyPressed] = useState(false);\n\n\t// If pressed key is our target key then set to true\n\tfunction downHandler({ key }) {\n\t\tif (key === targetKey) {\n\t\t\tsetKeyPressed(true);\n\t\t}\n\t}\n\n\t// If released key is our target key then set to false\n\tconst upHandler = ({ key }) => {\n\t\tif (key === targetKey) {\n\t\t\tsetKeyPressed(false);\n\t\t}\n\t};\n\t// Add event listeners\n\tuseEffect(() => {\n\t\twindow.addEventListener(\"keydown\", downHandler);\n\t\twindow.addEventListener(\"keyup\", upHandler);\n\t\t// Remove event listeners on cleanup\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"keydown\", downHandler);\n\t\t\twindow.removeEventListener(\"keyup\", upHandler);\n\t\t};\n\t}, []); // Empty array ensures that effect is only run on mount and unmount\n\treturn keyPressed;\n}\n\nexport const mappingSort = (val, key) => {\n\tif (key === 1) {\n\t\t// get sort\n\t\treturn val === \"asc\" ? \"ascend\" : \"descend\";\n\t} else {\n\t\t// set sort\n\t\treturn val === \"ascend\" ? \"asc\" : \"desc\";\n\t}\n};\n\nexport const checkNumber = (num) => {\n\treturn !isNaN(parseInt(num));\n};\n\nexport const useScript = (url, callback) => {\n\tuseEffect(() => {\n\t\tif (!window.google) {\n\t\t\tconst script = document.createElement(\"script\");\n\n\t\t\tscript.src = url;\n\t\t\tscript.async = true;\n\t\t\tif (typeof callback === \"function\") {\n\t\t\t\tscript.onload = callback;\n\t\t\t}\n\n\t\t\tdocument.body.appendChild(script);\n\n\t\t\treturn () => {\n\t\t\t\tdocument.body.removeChild(script);\n\t\t\t};\n\t\t}\n\t}, [url]);\n};\n\nexport const moneyFormatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n\tminimumFractionDigits: 0,\n});\n\nexport const toTitleCase = (str) => {\n return str.replace(\n /\\w\\S*/g,\n function(txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n }\n );\n}\n","import React, {Component, useState} from 'react';\nimport * as Define from '../constants/define';\nimport * as Validate from './validation';\nimport routes from '../routers';\nimport TAG_DEFINE from '../constants/common';\nimport $ from 'jquery';\nimport queryString from \"query-string\";\nimport {message, notification} from 'antd';\nimport {get, merge} from 'lodash';\nimport {FILES} from '../constants/define'\nimport {parseListRequestParams} from \"./commonUtils\";\n// import i18n from \"../constants/initLng\";\n\nexport const downloadFile = (data, filename, blobOptions) => {\n const url = window.URL.createObjectURL(new Blob([data], blobOptions));\n const newLink = document.createElement('a');\n newLink.href = url;\n newLink.setAttribute('download', filename); //or any other extension\n document.body.appendChild(newLink);\n newLink.click();\n window.URL.revokeObjectURL(url);\n newLink.remove();\n return \"ok\";\n};\n\nexport const checkParamSort = (valueFilter, stateParamsSort) => {\n let val = removeObjectNull(valueFilter);\n let paramsSort = removeObjectNull(stateParamsSort);\n paramsSort = {...paramsSort, ...val};\n return paramsSort;\n};\n\nexport const removeElementObject = (state, field) => {\n let result = {};\n Object.keys(state).map((i) => {\n if (i !== field) {\n result = merge(result, {[i]: state[i]})\n }\n });\n return result;\n};\n\nexport const removeArrayElementObject = (state, arrayField) => {\n let result = {};\n if (arrayField) {\n Object.keys(state).map((i) => {\n if (!arrayField.includes(i)) {\n result = {...result, [i]: state[i]}\n }\n });\n }\n return result;\n};\n\nexport const removeObjectNull = (state, check = false) => {\n if (state) {\n for (var propName in state) {\n if (state[propName] === null || state[propName] === undefined) {\n delete state[propName];\n }\n }\n }\n return state;\n};\n\nexport const removeElementNull = (state) => {\n let result = [];\n if (state) {\n Object.keys(state).map((i) => {\n if (state[i]) {\n result.push({[i]: state[i]});\n }\n });\n }\n return result;\n};\n\nexport const striptags = (val) => {\n val = val.replace(/(<\\/?[\\S][^>]*>)|([^a-zA-Z0-9@])/ig, \"\");\n return val;\n};\n\nexport const showMoney = (val) => {\n var num = 0;\n if (val === \"\" || val === 0) {\n num = 0;\n } else {\n if (val.length > 6 && val.length < 10) {\n num = parseInt(val.replace(/,/g, '')).toString().replace(/\\B(?=(\\d{6})+(?!\\d))/g, \" \");\n num = num.split(\" \")[0] + \" Triệu\";\n } else if (val.length > 9) {\n num = (parseInt(val.replace(/,/g, '')).toString().replace(/\\B(?=(\\d{8})+(?!\\d))/g, \" \")).split(\" \")[0].toString().replace(/\\B(?=(\\d{1})+(?!\\d))/g, \",\");\n if (num.split(\",\")[1] > 0) {\n num = num + \" Tỷ\";\n } else {\n num = num.split(\",\")[0] + \" Tỷ\";\n }\n } else {\n num = parseInt(val.replace(/,/g, '')).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n }\n }\n\n return num;\n};\n\nexport const formatMoney = (val) => {\n let num = 0;\n let oldVal = val ? val.toString() : \"\";\n if (oldVal === \"\" || oldVal === 0) {\n num = 0;\n } else {\n num = isNaN(parseInt(oldVal.replace(/,/g, '')).toString()) ? 0 : parseInt(oldVal.replace(/,/g, ''));\n // num = parseInt(oldVal.replace(/,/g, ''));\n num = num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n }\n // let newVal = num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n return num;\n};\nexport const convertFormatMoneyToNumber = (val) => {\n return parseInt(val.replace(/,|_/g, ''));\n};\n\nexport const formatNumber = (val) => {\n let num = 0;\n let oldVal = val ? val.toString() : \"\";\n if (oldVal === \"\" || oldVal === 0) {\n num = 0;\n } else {\n num = isNaN(parseInt(oldVal.replace(/,/g, '')).toString()) ? 0 : parseInt(oldVal.replace(/,/g, ''));\n // num = parseInt(oldVal.replace(/,/g, ''));\n num = num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \"\");\n }\n // let newVal = num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \"\");\n return num;\n};\n\nexport const formatFloatNumber = (val) => {\n let num = 0;\n let oldVal = val ? val.toString() : \"\";\n if (oldVal === \"\" || oldVal === 0) {\n num = \"0\";\n } else {\n let newNum = /^[0-9.-]+$/i.test(oldVal) ? oldVal : ((oldVal.length > 1) ? oldVal.replace(/[^\\d.\\-]/g, \"\") : \"0\");\n num = newNum.length > 1 ? newNum[0] === \"0\" ? newNum.substring(1) : newNum : newNum;\n }\n return num;\n};\n\nexport const formatPhone = (val) => {\n let num = 0;\n let oldVal = val ? val.toString() : \"\";\n if (oldVal === \"\" || oldVal === 0) {\n num = 0;\n } else {\n num = oldVal.toString().replace(/([\\D])/g, \"\");\n }\n return num;\n};\n\nexport function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\nexport const getTimeStamp = (plusDay = 0) => {\n var newDay = new Date();\n newDay.setDate(newDay.getDate() + plusDay);\n // const date = new Date();\n const year = newDay.getFullYear();\n let month = newDay.getMonth() + 1;\n if (month < 10) {\n month = '0' + month;\n }\n let day = newDay.getDate();\n if (day < 10) {\n day = '0' + day;\n }\n let hour = newDay.getHours();\n if (hour < 10) {\n hour = '0' + hour;\n }\n let minute = newDay.getMinutes();\n if (minute < 10) {\n minute = '0' + minute;\n }\n let second = newDay.getSeconds();\n if (second < 10) {\n second = '0' + second;\n }\n return year + \"-\" + month + \"-\" + day + \" \" + hour + \":\" + minute + \":\" + second;\n};\n\nexport const convertTime = (ms) => {\n var d, h, m, s;\n s = Math.floor(ms / 1000);\n m = Math.floor(s / 60);\n s = s % 60;\n h = Math.floor(m / 60);\n m = m % 60;\n d = Math.floor(h / 24);\n h = h % 24;\n return `${d} - Ngày : ${h} - Giờ : ${m} - Phút : ${s} - Giây`;\n};\n\nexport const sleepFunction = ms => new Promise(resolve => setTimeout(resolve, ms));\n\nlet timer;\nexport const lastRequest = ms => new Promise(resolve => {\n clearTimeout(timer);\n timer = setTimeout(resolve, ms);\n});\n\nexport const validateProduct = (val) => {\n var arr = {\n 'name': \"Tên sản phẩm\",\n 'slug': \"Tên sản phẩm\",\n 'cat_id': \"Danh mục\",\n 'supplier_id': \"Nhà quản lý\",\n 'staff_id': \"Nhân viên\",\n };\n var find = \"\";\n Object.keys(arr).filter(i => {\n if (i === val) {\n find = arr[i]\n }\n ;\n });\n return find;\n};\n\n\nexport const messageValidator = (check, field, message) => {\n let result;\n if (check) {\n result = {\n [field]: {\n classError: \"hms-error-form\",\n messageError: message,\n }\n }\n } else {\n result = {};\n }\n return result;\n};\n\nexport const checkValidate = (data, state, arrayValidate, valueCheck, valueValidate) => {\n let validate = state;\n let result;\n if (Object.keys(arrayValidate).length > 0) {\n Object.keys(arrayValidate).map(i => (\n validate = {\n ...validate,\n [i]: messageValidator(Validate[valueCheck](data[i] ? data[i] : \"\", valueValidate && valueValidate[i]), i, arrayValidate[i])[i]\n }\n ));\n }\n Object.keys(validate).filter(i => {\n if ((validate[i] && Object.keys(arrayValidate).includes(i))) {\n result = {...result, [i]: validate[i]}\n }\n });\n return result ? result : {};\n};\n\nexport const multipleValidate = (data, ruleCheck, maxmin) => {\n $(\".form-control\").removeClass('isValidation');\n $(\".form-control input\").removeClass('isValidation');\n $(\".hms-form-control > div\").removeClass('isValidation');\n $(\".hms-input\").removeClass('isValidation');\n $(\".ant-select-selector\").removeClass('isValidation');\n if (ruleCheck) {\n let resultCheck = {};\n if (maxmin) {\n Object.keys(ruleCheck).map(i => Object.keys(checkValidate(data, data, ruleCheck[i], i, maxmin[i])).length > 0 && (\n resultCheck = checkValidate(data, data, ruleCheck[i], i, maxmin[i])\n ));\n // return resultCheck;\n } else {\n Object.keys(ruleCheck).map(i => Object.keys(checkValidate(data, data, ruleCheck[i], i)).length > 0 && (\n resultCheck = checkValidate(data, data, ruleCheck[i], i)\n ));\n }\n if (Object.keys(resultCheck).length > 0) {\n Object.keys(resultCheck).map(i => {\n $(\".hms-input\").has(\"input[name=\" + i + \"]\").addClass('isValidation');\n $(\"input[name=\" + i + \"]\").addClass('isValidation');\n $(\"select[name=\" + i + \"]\").addClass('isValidation');\n $(\".\" + i + \" > div\").addClass('isValidation');\n $(\".ant-select\").filter(\"[name=\" + i + \"]\").children(\".ant-select-selector\").addClass('isValidation');\n })\n }\n return resultCheck;\n } else {\n return {};\n }\n};\n\nexport const reloadValidation = (validation, field) => {\n let result = {};\n Object.keys(validation).map((i) => {\n if (i !== field) {\n $(\"input[name=\" + i + \"]\").addClass('isValidation');\n $(\"select[name=\" + i + \"]\").addClass('isValidation');\n $(\".\" + i + \" > div\").addClass('isValidation');\n $(\".hms-input\").has(\"input[name=\" + i + \"]\").addClass('isValidation');\n $(\".ant-select\").filter(\"[name=\" + i + \"]\").children(\".ant-select-selector\").addClass('isValidation');\n result = {...result, [i]: validation[i]}\n } else {\n $(\"input[name=\" + i + \"]\").removeClass('isValidation');\n $(\"select[name=\" + i + \"]\").removeClass('isValidation');\n $(\".\" + i + \" > div\").removeClass(\"isValidation\");\n $(\".hms-input\").has(\"input[name=\" + i + \"]\").removeClass('isValidation');\n $(\".ant-select\").filter(\"[name=\" + i + \"]\").children(\".ant-select-selector\").removeClass('isValidation');\n }\n });\n return result;\n};\n\nexport const classValidation = (data, validation, tag) => {\n if (tag) {\n if (Validate[tag](data && data) || validation) {\n return 'hms-error-form';\n } else {\n return \"\";\n }\n } else {\n return \"\";\n }\n\n};\n\nexport const convertUTCDateToLocalDate = (date) => {\n let newDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);\n return newDate;\n};\n\nexport const formatShowDate = (date) => {\n return convertUTCDateToLocalDate(new Date(date)).toLocaleDateString('vi-VN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n }).split(',')[1]\n};\n\nexport const formatShowDateTime = (date) => {\n return convertUTCDateToLocalDate(new Date(date)).toLocaleDateString('vi-VN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n }).split(',')[1] + \" \" + convertUTCDateToLocalDate(new Date(date)).toLocaleDateString('vi-VN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n }).split(',')[0];\n};\n\nexport const formatShowDateTimeNonConvert = (date) => {\n return (new Date(date)).toLocaleDateString('vi-VN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n }).split(',')[1] + \" \" + (new Date(date)).toLocaleDateString('vi-VN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n }).split(',')[0];\n};\n\nexport const findParentRoute = (groupName, props, objReplace = {}) => {\n let url = props.match.path;\n let itemRoute = FindIteminArrayRecursive(routes, url);\n let pushUrl = \"\";\n routes.map(i => {\n if (itemRoute.item.tagSub) {\n if (i.tagSub === itemRoute.item.tagSub) {\n i.children && i.children.length > 0 && i.children.map(i2 => {\n if (i2.group === itemRoute.item.group) {\n pushUrl = i2.path\n }\n })\n }\n } else {\n if (i.group === groupName) {\n pushUrl = i.path\n }\n }\n });\n // ADD param parent\n Object.keys(objReplace || {}).forEach(key => {\n pushUrl = pushUrl.replace(key, objReplace[key]);\n })\n return props.history.push(pushUrl);\n};\n\nexport const getValueForm = (e) => {\n let target = e.target;\n let name;\n let value;\n let newVal;\n if (e.target) {\n name = target.name;\n value = target.value;\n if (target.type === \"checkbox\") {\n value = target.checked\n }\n } else {\n name = e.name;\n value = e.value;\n }\n newVal = {name: name, value: typeof value === 'string' ? value.trimLeft() : value};\n return newVal;\n};\n\nexport const checkUndefined = (val) => {\n if (Array.isArray(val)) {\n return val.length > 0 ? val : []\n } else {\n return val || val !== undefined || val !== \"\" || val !== null ? val : \"\";\n }\n};\n\nexport const columnsTable = (props) => {\n let obj = [];\n const titleGenerate = (params) => {\n if (props.children) {\n let title = props.itemName.split('.');\n let newTitle = \"\";\n title.map((i, k) => {\n if (k === 0) {\n newTitle = TAG_DEFINE.GENERAL.ITEM[i.toUpperCase()]\n } else {\n newTitle = newTitle[i]\n }\n });\n return newTitle[params];\n } else {\n return TAG_DEFINE.GENERAL.ITEM[(props.itemName).toUpperCase()][params];\n }\n };\n if (Object.keys(props).length > 0) {\n if (props.titleTable.length > 0) {\n props.titleTable.map((i, k) => {\n if (props.component && props.component[i]) {\n obj.push({\n title: titleGenerate(i),\n // title: i18n.t(`item.${props.itemName}.${i}`),\n dataIndex: i,\n key: k,\n ...props.component[i],\n })\n } else {\n obj.push({\n title: titleGenerate(i),\n // title: i18n.t(`item.${props.itemName}.${i}`),\n dataIndex: i,\n key: k,\n })\n }\n });\n }\n }\n return obj;\n};\n\nexport const customEditorTable = (props, editField = []) => {\n let obj = [];\n const titleGenerate = (params) => {\n if (props.children) {\n let title = props.itemName.split('.');\n let newTitle = \"\";\n title.map((i, k) => {\n if (k === 0) {\n newTitle = TAG_DEFINE.GENERAL.ITEM[i.toUpperCase()]?.EDITOR_COLUMN\n } else {\n newTitle = newTitle[i]\n }\n });\n return newTitle[params];\n } else {\n return TAG_DEFINE.GENERAL.ITEM[(props.itemName).toUpperCase()]?.EDITOR_COLUMN[params];\n }\n };\n if (Object.keys(props).length > 0) {\n if (props.titleTable.length > 0) {\n props.titleTable.map((i, k) => {\n if (props.component && props.component[i]) {\n if (editField.includes(i)) {\n obj.push({\n title: titleGenerate(i),\n // title: i18n.t(`item.${props.itemName}.${i}`),\n dataIndex: i,\n key: k,\n ...props.component[i],\n onCell: (record) => ({\n record,\n editable: 1,\n dataindex: i,\n key: k,\n title: titleGenerate(i),\n // handleSave: handleSave,\n }),\n })\n } else {\n obj.push({\n title: titleGenerate(i),\n // title: i18n.t(`item.${props.itemName}.${i}`),\n dataIndex: i,\n key: k,\n ...props.component[i],\n })\n }\n } else {\n if (editField.includes(i)) {\n obj.push({\n title: titleGenerate(i),\n // title: i18n.t(`item.${props.itemName}.${i}`),\n dataIndex: i,\n key: k,\n onCell: (record) => ({\n record,\n editable: 1,\n dataindex: i,\n key: k,\n title: titleGenerate(i),\n // handleSave: handleSave,\n }),\n })\n } else {\n obj.push({\n title: titleGenerate(i),\n // title: i18n.t(`item.${props.itemName}.${i}`),\n dataIndex: i,\n key: k,\n })\n }\n }\n });\n }\n }\n return obj;\n};\n\nexport const arrayRemoveItem = (array, itemRemove) => {\n return array.filter(function (ele) {\n return ele !== itemRemove;\n });\n};\n\nexport const getTitleTable = (model, arrayTitle, arrayItemRemove = []) => {\n let newArrayTitle = model.concat(arrayTitle);\n if (arrayItemRemove.length > 0) {\n let titleTable = newArrayTitle;\n arrayItemRemove.map(i => {\n titleTable = titleTable.filter((ele) => ele !== i);\n });\n return titleTable;\n } else {\n return newArrayTitle;\n }\n};\n\nexport const getDataSource = (data, model) => {\n const newData = (data || []).map(data => {\n data.children = undefined;\n return data\n });\n let dataSource = [];\n let listItemData = {};\n model.map(i => listItemData = {...listItemData, [i]: \"\"});\n if (newData.length > 0) {\n newData.map((i, k) => {\n let itemData;\n Object.keys(listItemData).map(i2 => {\n itemData = {...itemData, [i2]: i[i2]};\n });\n dataSource.push(itemData)\n })\n }\n return dataSource;\n};\n\nexport const customOptionSelect = (data, params) => {\n let newData = [];\n if (data && data.length > 0 && params) {\n data.map((i, k) => {\n let object = {};\n params.map((i2, k) => {\n if (k === 0) {\n object = {name: i[i2]}\n } else if (k === 1) {\n object = {...object, value: i[i2]}\n } else {\n object = {...object, [i2]: i[i2]};\n }\n });\n newData.push(object)\n })\n }\n return newData;\n};\n\nexport const formatValidation = (s, f) => {\n if (s) {\n return capitalizeFirstLetter(s.replace('%s', f).toLowerCase())\n }\n};\n\nexport const convertStringToNumber = (string, name, arrayField = []) => {\n if (arrayField.includes(name)) {\n return formatNumber(string);\n } else {\n return string\n }\n};\n\nexport const genaratePaginateFilterSort = (pagination, filters, sorter, skipQueryParse = false) => {\n let paramsFilter = skipQueryParse ? filters : queryString.parse(queryString.stringify(filters));\n paramsFilter = Object.keys(paramsFilter).length > 0 ? paramsFilter : undefined;\n let newFilters = {\n ...paramsFilter,\n page_index: pagination ? pagination.current : {},\n page_size: pagination ? pagination.pageSize : undefined,\n order_by: sorter.field,\n order_by_desc: sorter.field ? sorter.order === 'descend' : undefined\n };\n newFilters = removeObjectNull(newFilters);\n return newFilters;\n};\n\nfunction getArrayOfChildren(arr, existingChildren) {\n arr.forEach(o => {\n existingChildren.push(o.path);\n o.children && getArrayOfChildren(o.children, existingChildren);\n });\n return existingChildren;\n}\n\nlet output = {};\nexport const FindIteminArrayRecursive = (arr, value) => {\n arr.forEach(o => {\n // let flag = false;\n if (o.path) {\n if (o.path === value) {\n output.item = o;\n output.childs = (o.children && getArrayOfChildren(o.children, [])) || [];\n } else if (o.children && o.children.length) {\n output = FindIteminArrayRecursive(o.children, value);\n }\n }\n });\n return output;\n};\n\nexport const collectChildrenParentToArray = (values) => {\n let result = values.map(value =>\n (value.sub_menu || []).map(child => Object.assign({group_name: value.group}, child))\n ).reduce((l, n) => l.concat(n), []);\n return result;\n}\n\nexport const getPermissionActions = (route) => {\n const profile = localStorage.getItem('hn_pf');\n const permissions = profile && JSON.parse(profile).permissions ? JSON.parse(profile).permissions : [];\n let actionResult = {\n allowCreate: permissions.includes(`${route}.create`),\n allowUpdate: permissions.includes(`${route}.update`),\n allowDelete: permissions.includes(`${route}.delete`),\n allowApprove: permissions.includes(`${route}.approve`),\n allowResendEmail: permissions.includes(`${route}.resendEmail`),\n allowSaleOrder: permissions.includes(`${route}.saleOrder`),\n allowUseVoucher: permissions.includes(`${route}.useVoucher`),\n };\n return actionResult;\n};\n\nexport const getFilenameFromUrl = (url) => url ? url.split('/').pop().split('#').shift().split('?').shift() : undefined;\n\nexport const getPathWithParams = (path = '', params = {}) => {\n Object.keys(params).forEach(p => {\n const searchStrParam = `\\/:${p}`;\n if (searchStrParam.length > 2) {\n path = path.replace(searchStrParam, `\\/${params[p]}`);\n } else {\n path = `${path}${queryString.stringify(params).length > 0 ? \"/\" + queryString.stringify(params) : \"\"}`\n }\n });\n return path;\n};\n\nexport const getPathWithParamsDetail = (path = '', params = {}) => {\n Object.keys(params).forEach(p => {\n const searchStrParam = `\\/:${p}`;\n path = path.replace(searchStrParam, `\\/${params[p]}`);\n })\n return path;\n}\n\n/**\n * Wrapper every saga process async function* to by pass try catch block.\n * @param {function} [saga] - saga process async function*.\n * @param {function} [errorHandle] - error handle async function*.\n */\nexport function sagaWrapper(saga, errorHandle, customMessageErrors = \"\") {\n return function* (action) {\n try {\n yield saga(action);\n } catch (e) {\n yield errorHandle(e)\n }\n };\n}\n\n/**\n * Handle displaying errors in saga processes.\n * @param {function} callback - callback asyn function* after show error message.\n * @param {string} itemStringKey - item string key to get item error message: (Ex: hotel, tour, order, group,...).\n */\nexport function sagaErrorHandler(callback) {\n return function* (e) {\n if (e?.customMessageErrors) {\n message.error(e?.customMessageErrors, 3)\n } else if (e.status === 403) {\n message.error(\"403 Access denied!\", true);\n } else if (e.status === 400 && e?.errors?.file) {\n message.error(\"File format is not valid\");\n } else if (e.status === 200) {\n message.error(e.message, 3);\n } else {\n message.error(\"Internal Server Error! Please come back later\", true);\n }\n console.log(e);\n if (callback) {\n yield callback(e);\n }\n };\n}\n\n/**\n * Display success notifications in saga processes\n * @param {Object} [action] - saga action object.\n * @param {string} [message] - message to display.\n * @param {string} description - description to display as sub text bellow the message.\n */\nexport function sagaSuccessMessage(action, message, description) {\n return notification.success({message, description})\n}\n\nexport function vietnameseStringToUnicode(vnString) {\n vnString = vnString.replace(/á|à|ả|ạ|ã|ă|ắ|ằ|ẳ|ẵ|ặ|â|ấ|ầ|ẩ|ẫ|ậ/gi, 'a');\n vnString = vnString.replace(/é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ/gi, 'e');\n vnString = vnString.replace(/i|í|ì|ỉ|ĩ|ị/gi, 'i');\n vnString = vnString.replace(/ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ/gi, 'o');\n vnString = vnString.replace(/ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự/gi, 'u');\n vnString = vnString.replace(/ý|ỳ|ỷ|ỹ|ỵ/gi, 'y');\n vnString = vnString.replace(/đ/gi, 'd');\n return vnString;\n}\n\nexport function stringToUrlSlug(str) {\n str = str.replace(/^\\s+|\\s+$/g, ''); // trim\n let slug = str.toLowerCase();\n //Đổi ký tự có dấu thành không dấu\n slug = vietnameseStringToUnicode(slug);\n //Xóa các ký tự đặt biệt\n slug = slug.replace(/\\`|\\~|\\!|\\@|\\#|\\||\\$|\\%|\\^|\\&|\\*|\\(|\\)|\\+|\\=|\\,|\\.|\\/|\\?|\\>|\\<|\\'|\\\"|\\:|\\;|_/gi, '');\n //Đổi khoảng trắng thành ký tự gạch ngang\n slug = slug.replace(/ /gi, \"-\");\n //Đổi nhiều ký tự gạch ngang liên tiếp thành 1 ký tự gạch ngang\n //Phòng trường hợp người nhập vào quá nhiều ký tự trắng\n slug = slug.replace(/\\-\\-\\-\\-\\-/gi, '-');\n slug = slug.replace(/\\-\\-\\-\\-/gi, '-');\n slug = slug.replace(/\\-\\-\\-/gi, '-');\n slug = slug.replace(/\\-\\-/gi, '-');\n //Xóa các ký tự gạch ngang ở đầu và cuối\n slug = '@' + slug + '@';\n slug = slug.replace(/\\@\\-|\\-\\@|\\@/gi, '');\n return slug.replace(' ', '');\n};\n\nexport function getListItem(data, model) {\n // console.log(data)\n let item = [];\n if (data.length > 0) {\n data.map(async i => {\n let data = new model(i).get();\n item.push(data)\n })\n }\n return item\n};\n\nexport const getThumbUrl = (data = []) => {\n let array = [];\n let fileValidation = ['jpeg', 'jpg', 'png'];\n if (data.length > 0) {\n data.map(i => {\n if (i) {\n // if(fileValidation.includes(i.split(\".\")[(i.split(\".\") || []).length -1])){\n // array.push(`${FILES.CDN_IMG_DEFAULT}/${FILES.SIZE_THUMB}/${i}`)\n // }else{\n // array.push(Images.defaultFile.default)\n // }\n array.push(`${FILES.CDN_IMG_DEFAULT}/${FILES.SIZE_THUMB}/${i}`)\n }\n });\n }\n return array;\n};\n\nexport const getFilesUrl = (data = []) => {\n let array = [];\n let fileValidation = ['jpeg', 'jpg', 'png'];\n if (data.length > 0) {\n data.map(i => {\n if (i) {\n if (fileValidation.includes(i.split(\".\")[(i.split(\".\") || []).length - 1])) {\n array.push(`${FILES.CDN_IMG_DEFAULT}/${FILES.SIZE_THUMB}/${i}`)\n } else {\n array.push(`${FILES.CDN_IMG_DEFAULT}/${i}`)\n }\n }\n });\n }\n return array;\n};\n\nexport const formatInt = (number, defaultNum = 0) => isNaN(parseInt(number)) ? defaultNum : parseInt(number);\n\nexport const setParamsUrlFilter = (path, params) => {\n let queryUrl = \"\";\n if (Object.keys(params || {}).length > 0) {\n params = parseListRequestParams(params);\n queryUrl = `${path}?${queryString.stringify(params, {arrayFormat: 'comma'})}`\n } else {\n queryUrl = path\n }\n return queryUrl\n}\n\nexport const removeObjectNullFull = (state, notIn = []) => {\n if (state) {\n for (var propName in state) {\n if (state[propName] === null || state[propName] === undefined || state[propName] === \"\" || (Array.isArray(state[propName]) && (state[propName] || []).length < 1) && (typeof state[propName] !== \"number\")) {\n delete state[propName];\n }\n }\n }\n return state;\n};\n\nexport const convertParamsToSnake = (str, condition) => {\n if (!condition) {\n return str.split(/(?=[A-Z])/).join('_').toLowerCase()\n }\n if (condition.toLowerCase() === \"blank\") {\n return ((str || \"\").toLowerCase()).replaceAll(\" \", \"_\")\n }\n};\n\nexport const generateRowItemDetail = (arrayItems = [], detailColumn, fieldIncludes = []) => {\n let newResult = [];\n if (Object.keys(arrayItems).length > 0) {\n Object.keys(arrayItems).map((i, k) => {\n if (!fieldIncludes.includes(i)) {\n newResult.push({\n key: k,\n title: detailColumn[i],\n value: arrayItems[i],\n param: i\n })\n }\n })\n }\n return newResult;\n}\n","import { CONFIG_LOCAL_STORAGE } from '../constants/define';\n\nexport const get = (key) => {\n const storageKey = `${CONFIG_LOCAL_STORAGE.PREFIX}_${key}`;\n const stringData = localStorage.getItem(storageKey);\n const numberRegex = RegExp('^[1-9.]+$');\n if(stringData === 'true' || stringData === 'false'){\n return stringData === 'true'\n } else if(stringData === 'null'){\n return null;\n } else if(stringData === 'undefined'){\n return undefined;\n } else if(numberRegex.test(stringData)){\n return Number(stringData)\n } else {\n try {\n const data = JSON.parse(stringData);\n return data;\n } catch (error) {\n return stringData\n }\n }\n}\n\nexport const set = (key, data) => {\n const storageKey = `${CONFIG_LOCAL_STORAGE.PREFIX}_${key}`;\n let stringData = undefined;\n try {\n if(typeof data === 'object'){\n stringData = JSON.stringify(data)\n } else {\n stringData = String(data);\n }\n } catch (error) {\n stringData = data\n }\n return localStorage.setItem(storageKey, stringData);\n}\n\nexport const remove = (key) => localStorage.removeItem(`${CONFIG_LOCAL_STORAGE.PREFIX}_${key}`)\n","export default class ApiResponse {\n constructor(data){\n this.data = data.data || undefined;\n this.customMessageErrors = data.customMessageErrors || undefined;\n this.code = data.code || undefined;\n this.errors = data.errors || undefined;\n this.status = data.status || undefined;\n this.statusText = data.statusText;\n this.headers = data.headers || undefined;\n this.message = data.message || undefined;\n this.success = data.success || false;\n this.request = data.request || undefined;\n }\n}\n","export default {\n GET: 'get',\n POST: 'post',\n PUT: 'put',\n DELETE: 'delete',\n HEAD: 'head',\n OPTIONS: 'options',\n PATCH: 'patch',\n}","export default {\n LOGIN: '/api/v1/login',\n REGISTER: '/api/v1/register',\n LOGOUT: '/',\n PROFILE: '/api/v1/profile',\n REFRESH: 'api/admin/user/refresh',\n UPDATE_PROFILE: '/api/v1/profile/update',\n PASSWORD_REQUEST: '/api/v1/password/request',\n PASSWORD_RESET: '/api/v1/password/reset',\n\n HOTEL_LIST: '/api/v1/admin/hotel',\n HOTEL_ALL: '/api/v1/admin/hotel',\n HOTEL_MASTER: '/api/v1/admin/hotel/master',\n HOTEL_CREATE: '/api/v1/admin/hotel',\n HOTEL_DELETE: '/api/v1/admin/hotel/:id',\n HOTEL_UPDATE: '/api/v1/admin/hotel',\n HOTEL_DETAIL: '/api/v1/admin/hotel/:id',\n\n TICKET_LIST: '/api/v1/ticket',\n TICKET_DETAIL: '/api/v1/ticket/:id',\n TICKET_CREATE: '/api/v1/ticket/submit',\n TICKET_COMMENT: '/api/v1/ticket/:id',\n\n SUBSCRIPTION_CURRENT: '/api/v1/subscription/current',\n SUBSCRIPTION_DETAIL_UPGRADE: '/api/v1/subscription/detail/:date',\n SUBSCRIPTION_LIST_PACKAGES: '/api/v1/subscription/package',\n SUBSCRIPTION_LIST_TRANSACTIONS: '/api/v1/subscription/transaction',\n SUBSCRIPTION_WORDING_CONFIRM_PACKAGE: '/api/v1/subscription/confirm',\n\n PACKAGE_PAYMENT_CREATE_ORDER: '/api/v1/subscription/order',\n\n // Fast CMA\n ADDRESS_LOOKUP: '/api/v1/fast-cma/address-lookup-new',\n FIND_COMPARABLES: '/api/v1/fast-cma/find-comparables',\n CMA_EXPORT_PDF: '/api/v1/fast-cma/export-report',\n CMA_GET_PROFILES: '/api/v1/fast-cma/profiles',\n CMA_UPDATE_PROFILES: '/api/v1/fast-cma/profiles',\n CMA_DELETE_PROFILES: '/api/v1/fast-cma/profiles',\n\n COMPARABLES_REQUEST_LIST: '/api/v1/comp-request',\n COMPARABLES_REQUEST_DETAIL: '/api/v1/comp-request/:id',\n}\n","import axios from 'axios';\nimport { CONFIG_LOCAL_STORAGE, PATHS, FEATURE_FLAGS } from '../constants/define';\nimport { getPathWithParams } from './functions';\nimport * as LocalStorage from './localStorage';\nimport ApiResponse from '../data/mapping/ApiResponse';\nimport Methods from './Methods';\n// import history from './history';\nimport Urls from './Urls';\nimport queryString from 'query-string';\n\n\nexport default class ApiService {\n\n /**\n * Create instance service for every API service.\n * @param {Object} options - The options to create.\n * @param {string} options.baseURL - setting the host of the request, required.\n * @param {Object} [options.params] - url params of the request instance (ex: {pageIndex: 1, pageSize: 10}).\n * @param {string} options.endpoint - endpoint to call the request to (ex: 'api/admin/login').\n * @param {string} options.customMessageErrors\n * @param {Object} [options.headers] - headers of the request instance (ex: {'Content-Type' : 'application/json'}).\n * @param {Object} [options.endpointParams] - headers of the request instance (ex: {id: 'some-identity-id-string'}).\n * @param {function} [options.parser] - function to parse response body to whatever you what (ex: function(body) { return JSON.parse(body) } ).\n * @param {function} [options.dummy] - function to return a dumy data when api service is not ready yet (ex: function() { return 'some-fake-body-data' } ).\n * @param {boolean} [options.isDownload=false] - setting the request is a downloading request or not, default \"false\".\n * @param {boolean} [options.withoutAuth=false] - setting the request to skip the \"Authorization\" header, default \"false\".\n */\n constructor(options = {}) {\n this.initServiceInstance(options);\n this.endpointParams = options.endpointParams || {};\n this.customMessageErrors = options.customMessageErrors || \"\";\n this.endpoint = getPathWithParams(options.endpoint || undefined, this.endpointParams);\n this.params = options.params || {};\n this.headers = this.getRequestHeaders(options.headers || {});\n this.parser = options.parser || undefined;\n this.responseType = options.isDownload && 'blob';\n this.dummy = options.dummy || undefined;\n }\n\n initServiceInstance(options = {}) {\n if (!options.baseURL) {\n throw new Error('\"baseUrl\" is a required option for \"ApiService\" model')\n }\n const accessToken = LocalStorage.get(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN);\n this.instance = axios.create({\n baseURL: options.baseURL,\n paramsSerializer: this.getRequestParams,\n timeout: 60000,\n });\n if (!options.withoutAuth && accessToken) {\n this.instance.defaults.headers.common['Authorization'] = { toString() { return `Bearer ${accessToken}` } };\n }\n }\n\n getRequestData(data) {\n if (data && typeof data.export === 'function') {\n return data.export()\n }\n return data;\n }\n\n getRequestParams(params = {}) {\n return queryString.stringify(params, {arrayFormat: 'comma'})\n }\n\n getRequestHeaders(headers={}){\n const result = {};\n Object.keys(headers).forEach(header => {\n let key = header.toLowerCase();\n result[key] = headers[header];\n });\n // result['accept-language'] = FEATURE_FLAGS.TRANSLATE_ENABLE ? (result['accept-language'] || LocalStorage.get(CONFIG_LOCAL_STORAGE.CONTENT_LANGUAGE)) : undefined;\n result['accept-language'] = \"vi-VN\";\n return result;\n }\n\n request(method, reqData) {\n const data = this.getRequestData(reqData);\n return new Promise((resolve, reject) => {\n if (this.dummy) {\n const result = this.dummy();\n resolve(result);\n return result;\n } else {\n const config = {\n params: this.params,\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n ...this.headers\n },\n data: method === Methods.POST || method === Methods.PUT ? undefined : data,\n responseType: this.responseType,\n };\n const secondParam = method === Methods.POST || method === Methods.PUT ? data : config;\n const thirdParam = method === Methods.POST || method === Methods.PUT ? config : undefined;\n const isAuthRequest = this.endpoint === Urls.LOGIN || this.endpoint === Urls.REFRESH;\n this.instance[method](this.endpoint, secondParam, thirdParam).then(response => {\n if (response && response.data && response.data.errors && response.data.errors.length) {\n const message = typeof response.data.errors[0] === 'string' ? response.data.errors[0] : response.data.errors[0].message || response.message;\n const errorResp = new ApiResponse({ ...response, message, errors: response.data.errors, request: reqData, success: true, customMessageErrors: this.customMessageErrors });\n reject(errorResp);\n return errorResp;\n }else if(response.data.validators && response.data.validators.length){\n const message = response.data.validators[0].message;\n const errorResp = new ApiResponse({ ...response, message, errors: response.data.errors, request: reqData, success: false, customMessageErrors: this.customMessageErrors });\n reject(errorResp);\n return errorResp;\n }else if(response.data.status === \"FAIL\"){\n const message = response.data.errors[0].message;\n const errorResp = new ApiResponse({ ...response, message, errors: response.data.errors, request: reqData, success: false, customMessageErrors: this.customMessageErrors });\n reject(errorResp);\n return errorResp;\n }\n const result = this.parser ? this.parser(response.data) : new ApiResponse({ ...response, request: reqData, success: true, customMessageErrors: this.customMessageErrors })\n resolve(result);\n return result;\n }).catch(err => {\n if (err.response && err.response.status === 401 && !isAuthRequest) {\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN);\n window.location.replace(PATHS.AUTHENTICATION_NOT_FOUND.path);\n } else if (err.response && err.response.status === 403 && !isAuthRequest) {\n // history.push(PATHS.PAGE_403.path)\n // history.go();\n } else {\n const errorRes = new ApiResponse({ ...err.response, ...(err.response || {}).data, request: reqData, success: false, customMessageErrors: this.customMessageErrors })\n reject(errorRes)\n return errorRes;\n }\n\n })\n }\n\n });\n }\n\n /**\n * Make a GET request to the api service.\n * @param {any} body - setting the body of the request.\n */\n get = (body) => this.request(Methods.GET, body);\n\n /**\n * Make a POST request to the api service.\n * @param {any} data - setting the body data of the request.\n */\n post = (data) => this.request(Methods.POST, data);\n\n /**\n * Make a POST request to the api service.\n * @param {any} data - setting the body data of the request.\n */\n put = (data) => this.request(Methods.PUT, data);\n\n delete = () => this.request(Methods.DELETE);\n}\n","export default class User {\n constructor(data = {}) {\n this.setData(data)\n }\n\n setData(data = {}) {\n this.id = data?.id || undefined;\n this.avatar = data?.avatar || undefined;\n this.username = data?.username || undefined;\n this.email = data?.email || undefined;\n this.password = data?.password || undefined;\n this.first_name = data?.first_name || undefined;\n this.last_name = data?.last_name || undefined;\n this.status = data?.status || 1;\n this.menu = data?.menu || [];\n this.is_edit_data = data?.is_edit_data || false;\n }\n\n profile(data) {\n this.id = data.id || undefined;\n this.avatar = data.avatar || undefined;\n this.username = data.username || undefined;\n this.email = data.email || undefined;\n this.status = data.status || 1;\n this.menu = data.menu || [];\n this.is_edit_data = data.is_edit_data || false;\n return this\n }\n\n setPermission(data = {}) {\n this.permissions = data.permissions || [];\n }\n\n setProperties(data = {}) {\n this.propertyIds = data.propertyIds || [];\n }\n\n actionRegister() {\n return {\n email: this.email,\n password: this.password,\n first_name: this.first_name,\n last_name: this.last_name,\n }\n }\n\n export() {\n return {\n id: this.id,\n password: this.password,\n email: this.email,\n firstname: this.firstname,\n lastname: this.lastname,\n username: this.username,\n phoneNumber: this.phoneNumber,\n avatar: this.avatar,\n }\n }\n}\n","import moment from \"moment\";\nimport {DATE_TIME_FORMAT} from \"../../../constants/define\";\nimport {removeObjectNullFull} from \"../../../utils/functions\";\nimport {checkNumber} from \"../../../utils/commonUtils\";\n\nexport default class AuthResponse {\n constructor(data = {}) {\n this.setData(data)\n }\n\n setData(data = {}) {\n this.hash = data?.hash || \"\";\n }\n\n exportPasswordRequest() {\n return {\n hash: this.hash\n }\n }\n}\n","import ApiService from './../../utils/ApiService';\nimport Urls from './../../utils/Urls';\n// import Token from './../models/Token';\nimport User from './../../data/mapping/User';\nimport AuthResponse from \"../mapping/Response/AuthResponse\";\n\n\nexport function login(email = \"\", password = \"\", code, token_captcha) {\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: Urls.LOGIN,\n // parser: (data) => new Token(data),\n }).post({email, password, code, token_captcha});\n}\n\nexport function logout() {\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: Urls.LOGOUT,\n }).post({});\n}\n\nexport function getUserProfile() {\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: Urls.PROFILE,\n parser: data => new User(data.data.result),\n }).get();\n}\n\nexport function refreshToken(refreshToken) {\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: Urls.REFRESH,\n withoutAuth: true,\n // parser: (data) => new Token(data),\n }).post({refreshToken});\n}\n\nexport function register(data) {\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: Urls.REGISTER,\n }).post(data);\n}\n\nexport function passwordRequest(data) {\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: Urls.PASSWORD_REQUEST,\n parser: data => new AuthResponse(data.data.result).exportPasswordRequest(),\n }).post(data);\n}\n\nexport function passwordReset(data) {\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: Urls.PASSWORD_RESET,\n }).post(data);\n}\n\nexport function update(data) {\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: Urls.UPDATE_PROFILE,\n endpointParams: {id: data?.id},\n }).put(data);\n}\n","// import createHistory from 'history/createBrowserHistory';\n//\n// export default createHistory()\nimport { createBrowserHistory } from 'history'\n\nexport default createBrowserHistory()\n","import * as Types from '../types/Auth';\n\nexport const loginAction = (params) => ({type: Types.LOGIN_ACTION, params});\nexport const loginSuccess = (data) => ({type: Types.LOGIN_SUCCESS, data});\n\nexport const checkUserAction = (token) => ({type: Types.CHECK_USER_ACTION, token});\nexport const checkUserSuccess = (user) => ({type: Types.CHECK_USER_SUCCESS, user});\n\nexport const logoutAction = (params) => ({type: Types.LOGOUT_ACTION, params});\nexport const logoutSuccess = (data) => ({type: Types.LOGOUT_SUCCESS, data});\n\nexport const registerAction = (params) => ({type: Types.REGISTER_ACTION, params});\nexport const registerSuccess = (register) => ({type: Types.REGISTER_SUCCESS, register});\n\nexport const updateProfileAction = (params) => ({type: Types.UPDATE_PROFILE_ACTION, params});\nexport const updateProfileSuccess = (updateProfile) => ({type: Types.UPDATE_PROFILE_SUCCESS, updateProfile});\n\nexport const passwordRequestAction = (params) => ({type: Types.PASSWORD_REQUEST_ACTION, params});\nexport const passwordRequestSuccess = (hash) => ({type: Types.PASSWORD_REQUEST_SUCCESS, hash});\n\nexport const passwordResetAction = (params) => ({type: Types.PASSWORD_RESET_ACTION, params});\nexport const passwordResetSuccess = (passwordReset) => ({type: Types.PASSWORD_RESET_SUCCESS, passwordReset});\n\nexport const refreshTokenAction = (refreshToken) => ({type: Types.REFRESH_TOKEN_ACTION, refreshToken});\nexport const initAction = (refreshToken) => ({type: Types.LOGIN_INIT, refreshToken});\n","import {pick} from \"lodash\";\nimport moment from \"moment\";\nimport {DATE_TIME_FORMAT} from \"../../../constants/define\"\n\nexport default class UserRequest {\n constructor(data = {}) {\n this.setData(data)\n }\n\n setData(data = {}) {\n this.id = data?.id || undefined;\n this.avatar = data?.avatar || undefined;\n this.username = data?.username || undefined;\n this.email = data?.email || undefined;\n this.password = data?.password || undefined;\n this.first_name = data?.first_name || undefined;\n this.last_name = data?.last_name || undefined;\n this.status = data?.status || 1;\n }\n\n actionRegister() {\n return {\n email: this.email,\n password: this.password,\n first_name: this.first_name,\n last_name: this.last_name,\n }\n }\n}\n","import {pick} from \"lodash\";\nimport moment from \"moment\";\nimport {DATE_TIME_FORMAT} from \"../../../constants/define\"\nimport {removeObjectNullFull} from \"../../../utils/functions\";\n\nexport default class AuthRequest {\n constructor(data = {}) {\n this.setData(data)\n }\n\n setData(data = {}) {\n this.id = data?.id || \"\";\n this.first_name = data?.first_name || \"\";\n this.last_name = data?.last_name || \"\";\n this.email = data?.email || \"\";\n this.password = data?.password || \"\";\n this.otp = data?.otp || \"\";\n this.hash = data?.hash || \"\";\n }\n\n exportUpdate() {\n return removeObjectNullFull({\n id: this.id,\n first_name: this.first_name,\n last_name: this.last_name,\n email: this.email,\n password: this.password,\n })\n }\n\n exportPasswordRequest() {\n return {\n email: this.email\n }\n }\n\n exportPasswordReset() {\n return {\n password: this?.password,\n otp: this?.otp,\n hash: this?.hash,\n }\n }\n}\n","import {call, put, takeLatest, fork, all, delay} from 'redux-saga/effects';\nimport * as Types from '../../data/types/Auth';\nimport * as AuthService from './../services/authService';\nimport * as Func from \"../../utils/functions\";\nimport history from '../../utils/history';\nimport * as Auth from \"../actions/authAction\";\nimport $ from \"jquery\";\nimport {get} from \"lodash\";\nimport {CONFIG_LOCAL_STORAGE, PATHS, REFRESH_TOKEN_DELAY_TIMEOUT, ROUTE_LIST} from '../../constants/define';\nimport * as LocalStorage from '../../utils/localStorage';\nimport {message} from 'antd';\nimport moment from 'moment';\nimport UserRequest from \"../mapping/Request/UserRequest\";\nimport TAG_DEFINE from \"../../constants/common\";\nimport AuthRequest from \"../mapping/Request/AuthRequest\";\nimport {checkUserAction} from \"../actions/authAction\";\n\nfunction* redirectTo(location) {\n yield history.push(location);\n}\n\nfunction* loginSaga() {\n yield takeLatest(Types.LOGIN_ACTION, Func.sagaWrapper(function* (action) {\n const body = action.params;\n const data = yield call(AuthService.login, body.email, body.password, body?.code, body?.token_captcha);\n if ((data.data.status).toUpperCase() === \"SUCCESS\") {\n yield put({type: Types.LOGIN_SUCCESS});\n LocalStorage.set(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN, data.data.data.result.token);\n LocalStorage.set(CONFIG_LOCAL_STORAGE.REFRESH_TOKEN, data.data.data.result.refreshToken);\n // LocalStorage.set(CONFIG_LOCAL_STORAGE.EXPIRES, data.expires);\n yield put({type: Types.CHECK_USER_ACTION});\n window.location = `/${body?.fullAddress ? `?fullAddress=${body?.fullAddress}` : \"\"}`\n // yield call(redirectTo, ROUTE_LIST.PreForeClosure);\n } else {\n yield errorHandleAuth(Types.LOGIN_FAILED, data.data)\n }\n }, errorHandle(Types.LOGIN_FAILED)))\n}\n\nfunction* logoutSaga() {\n yield takeLatest(Types.LOGOUT_ACTION, Func.sagaWrapper(function* (action) {\n yield call(AuthService.logout);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.REFRESH_TOKEN);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.EXPIRES);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.PROFILE);\n history.go(PATHS.LOGIN.path);\n }, errorHandle(Types.LOGIN_FAILED)))\n}\n\nfunction* checkUserSaga() {\n yield takeLatest(Types.CHECK_USER_ACTION, Func.sagaWrapper(function* (action) {\n const data = yield call(AuthService.getUserProfile);\n // LocalStorage.set(CONFIG_LOCAL_STORAGE.PROFILE, data);\n yield put(Auth.checkUserSuccess(data));\n }, errorHandleProfile(Types.LOGIN_FAILED)))\n}\n\nfunction* refreshTokenFunc(action, shouldGetProfile = true) {\n const refreshToken = action.refreshToken || LocalStorage.get(CONFIG_LOCAL_STORAGE.REFRESH_TOKEN);\n const expires = LocalStorage.get(CONFIG_LOCAL_STORAGE.EXPIRES);\n const shouldRefresh = parseInt(new Date().getTime()) >= (parseInt(new Date(expires).getTime()) - REFRESH_TOKEN_DELAY_TIMEOUT)\n let intervalLoaded = false;\n\n function* refreshTokenInterval() {\n if (shouldGetProfile) {\n yield put({type: Types.CHECK_USER_ACTION});\n }\n if (!intervalLoaded) {\n const expireDate = LocalStorage.get(CONFIG_LOCAL_STORAGE.EXPIRES);\n const delayTimeout = ((parseInt(new Date(expireDate).getTime()) - parseInt(new Date().getTime())) - REFRESH_TOKEN_DELAY_TIMEOUT);\n yield delay(delayTimeout);\n yield call(refreshTokenFunc, {refreshToken: LocalStorage.get(CONFIG_LOCAL_STORAGE.REFRESH_TOKEN)}, false);\n intervalLoaded = true;\n }\n }\n\n if (shouldRefresh && refreshToken) {\n const data = yield call(AuthService.refreshToken, refreshToken);\n if (data.accessToken) {\n yield put({type: Types.REFRESH_TOKEN_SUCCESS});\n LocalStorage.set(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN, data.accessToken);\n LocalStorage.set(CONFIG_LOCAL_STORAGE.REFRESH_TOKEN, data.refreshToken);\n LocalStorage.set(CONFIG_LOCAL_STORAGE.EXPIRES, data.expires);\n yield refreshTokenInterval();\n }\n } else {\n yield refreshTokenInterval();\n }\n}\n\nfunction* refreshTokenSaga() {\n yield takeLatest(Types.REFRESH_TOKEN_ACTION, Func.sagaWrapper(refreshTokenFunc, errorHandleRefresh(Types.LOGIN_FAILED)))\n}\n\nfunction* create() {\n yield takeLatest(Types.REGISTER_ACTION, Func.sagaWrapper(function* (action) {\n const data = new UserRequest(action.params).actionRegister();\n const result = yield call(AuthService.register, data);\n // message.success(TAG_DEFINE.VALIDATION.statusCode.code[\"201\"]);\n yield put(Auth.registerSuccess(result?.data?.data?.result));\n // setTimeout(() => window.location.reload(), 1500)\n }, errorHandle(Types.LOGIN_FAILED)))\n}\n\nfunction* errorHandleAuth(errorActionType, data) {\n if ((data.status).toUpperCase() === \"FAIL\") {\n message.error(data.errors.message);\n yield put({type: errorActionType});\n return false;\n } else if ((data.status).toUpperCase() === \"VALIDATION\") {\n message.error(\"Lỗi validation\");\n yield put({type: errorActionType});\n return false;\n }\n message.error(\"Lỗi hệ thống\");\n console.warn(data);\n yield put({type: errorActionType});\n}\n\nfunction errorHandle(errorActionType) {\n return Func.sagaErrorHandler(function* (e) {\n yield put({type: errorActionType})\n });\n}\n\nfunction errorHandleProfile(errorActionType) {\n return function* (e) {\n if (e.status === 401) {\n yield put({type: Types.LOGOUT_ACTION});\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.REFRESH_TOKEN);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.EXPIRES);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.PROFILE);\n history.go(PATHS.LOGIN.path);\n } else {\n // message.error(\"Kết nối thất bại\", true);\n console.warn(e);\n yield put({type: errorActionType});\n }\n };\n}\n\nfunction* updateProfile() {\n yield takeLatest(Types.UPDATE_PROFILE_ACTION, Func.sagaWrapper(function* (action) {\n const data = new AuthRequest(action.params).exportUpdate();\n yield call(AuthService.update, data);\n message.success(TAG_DEFINE.VALIDATION.statusCode.code[\"204\"]);\n // yield put({ type: Types.HOTEL_GET_ITEM_ACTION });\n // yield put({ type: Types.VOUCHER_FAIL });\n yield put(Auth.updateProfileSuccess());\n yield put(checkUserAction());\n // yield put(VoucherActions.listVoucherAction(action.params.filters || {}));\n }, errorHandle(Types.LOGIN_FAILED)))\n}\n\nfunction* passwordRequest() {\n yield takeLatest(Types.PASSWORD_REQUEST_ACTION, Func.sagaWrapper(function* (action) {\n const params = new AuthRequest(action.params).exportPasswordRequest();\n const result = yield call(AuthService.passwordRequest, params);\n // message.success(TAG_DEFINE.VALIDATION.statusCode.code[\"204\"]);\n yield put(Auth.passwordRequestSuccess(result));\n }, errorHandle(Types.LOGIN_FAILED)))\n}\n\nfunction* passwordReset() {\n yield takeLatest(Types.PASSWORD_RESET_ACTION, Func.sagaWrapper(function* (action) {\n const params = new AuthRequest(action.params).exportPasswordReset();\n const result = yield call(AuthService.passwordReset, params);\n message.success(TAG_DEFINE.VALIDATION.statusCode.code[\"207\"]);\n yield put(Auth.passwordResetSuccess(result));\n }, errorHandle(Types.LOGIN_FAILED)))\n}\n\nfunction errorHandleRefresh(errorActionType) {\n return function* (e) {\n // if (e.errors) {\n // LocalStorage.remove(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN);\n // LocalStorage.remove(CONFIG_LOCAL_STORAGE.REFRESH_TOKEN);\n // LocalStorage.remove(CONFIG_LOCAL_STORAGE.EXPIRES);\n // history.go(PATHS.LOGIN.path);\n // } else {\n // Func.alertMessage(i18n.t('notifi.title'), i18n.t('validation.usernameOrPasswordNotMatch'), true);\n // yield put({ type: errorActionType });\n // }\n // console.warn(e)\n };\n}\n\nexport function* authSaga() {\n yield all([\n fork(loginSaga),\n fork(logoutSaga),\n fork(checkUserSaga),\n fork(refreshTokenSaga),\n fork(create),\n fork(updateProfile),\n fork(passwordRequest),\n fork(passwordReset),\n ])\n}\n","import * as Types from \"../types/FastCMA\"\n\nexport const ggmap_lookup = (params) => ({type: Types.GG_MAP_LOOKUP, params})\nexport const mls_lookup = (params) => ({type: Types.MLS_LOOKUP, params})\n\nexport const address_lookup = (params) => ({type: Types.ADDRESS_LOOKUP, params})\nexport const address_lookup_reset = (params) => ({type: Types.ADDRESS_LOOKUP_RESET, params})\nexport const address_lookup_success = (params) => ({type: Types.ADDRESS_LOOKUP_SUCCESS, params})\nexport const address_lookup_fail = (params) => ({type: Types.ADDRESS_LOOKUP_FAIL, params})\n\nexport const filter_comparables = (params) => ({type: Types.FILTER_COMPARABLES, params})\nexport const find_comparables = (params) => ({type: Types.FIND_COMPARABLES, params})\nexport const find_comparables_success = (params) => ({type: Types.FIND_COMPARABLES_SUCCESS, params})\nexport const change_market_channel = (params) => ({type: Types.CHANGE_MARKET_CHANNEL, params})\n\nexport const switch_type = () => ({type: Types.SWITCH_TYPE})\nexport const store_google_api_session = (params) => ({type: Types.GOOGLE_SPACES_SESSION_TOKEN, params})\nexport const run_cma = (params) => ({type: Types.RUN_CMA, params})\nexport const set_selected_property = (params) => ({type: Types.CMA_SET_SELECTED_PROPERTY, params})\nexport const cma_set_active_status = (params) => ({ type: Types.CMA_SET_ACTIVE_STATUS, params})\n\nexport const show_cma_report = (params) => ({type: Types.SHOW_CMA_REPORTS, params})\nexport const cma_export_pdf = (params) => ({type: Types.EXPORT_CMA_REPORT_PDF, params})\n\nexport const cma_load_profiles = (params) => ({ type: Types.CMA_LOAD_PROFILES, params })\nexport const cma_load_profile_success = (params) => ({ type: Types.CMA_LOAD_PROFILES_SUCCESS, params })\nexport const cma_load_profiles_fail = (params) => ({ type: Types.CMA_LOAD_PROFILES_FAIL, params })\nexport const cma_select_profile = (params) => ({ type: Types.CMA_SELECT_PROFILE, params })\nexport const cma_update_profile = (params) => ({ type: Types.CMA_UPDATE_PROFILE, params })\nexport const cma_update_profile_success = (params) => ({ type: Types.CMA_UPDATE_PROFILE_SUCCESS, params })\n\nexport const cma_delete_profile = params => ({ type: Types.CMA_DELETE_PROFILE, params })\nexport const cma_delete_profile_success = params => ({ type: Types.CMA_DELETE_PROFILE_SUCCESS, params })\nexport const cmd_init = () => ({ type: Types.CMA_INIT})\n","import ApiService from '../../utils/ApiService';\nimport Urls from '../../utils/Urls';\n\nexport function addressLookup(data) {\n let endpoint = Urls.ADDRESS_LOOKUP;\n if ( data ) {\n let params = [];\n for(let key in data) {\n params.push(`${key}=${data[key]}`);\n }\n endpoint += '?' + params.join('&');\n }\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: endpoint\n }).get();\n}\n\nexport function exportCMAReportPDF(data) {\n let endpoint = Urls.CMA_EXPORT_PDF\n\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: endpoint,\n isDownload: true,\n // parser: (data) => new Token(data),\n }).post({data});\n}\n\nexport function findComparables(data) {\n let endpoint = Urls.FIND_COMPARABLES;\n if ( data ) {\n let params = [];\n for(let key in data) {\n if ( Array.isArray(data[key]) ) {\n params.push(`${key}=${data[key].join(',')}`);\n } else {\n params.push(`${key}=${data[key]}`);\n }\n }\n endpoint += '?' + params.join('&');\n }\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: endpoint\n }).get();\n}\n\nexport function getProfiles() {\n let endpoint = Urls.CMA_GET_PROFILES;\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: endpoint\n }).get();\n}\n\nexport function updateProfiles(data) {\n let endpoint = Urls.CMA_UPDATE_PROFILES;\n data.profile_id = data.id || null;\n\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: endpoint\n }).post(data);\n}\n\nexport function deleteProfile(id) {\n let endpoint = Urls.CMA_DELETE_PROFILES;\n\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: `${endpoint}/${id}`\n }).delete()\n}","import {pick} from \"lodash\";\nimport moment from \"moment\";\nimport {DATE_TIME_FORMAT} from \"../../../constants/define\";\nimport {removeObjectNullFull} from \"../../../utils/functions\";\n\nexport default class FastCMAAddresLookupRequest {\n constructor(data = {}) {\n this.setData(data);\n }\n\n setData(data = {}) {\n this.address = data?.address;\n this.street_name = data?.street_name;\n this.street_box_num = data?.street_box_num;\n this.city = data?.city || '';\n this.state = data?.state || '';\n this.zipcode = data?.zipcode || '';\n this.Lat = data?.Lat || '';\n this.Lon = data?.Lon || '';\n this.marketplace = data?.marketplace.toUpperCase() || 'HOUSTON';\n }\n\n exportAddressDetail() {\n return removeObjectNullFull({\n address: this.address,\n street_name: this.street_name,\n street_box_num: this.street_box_num,\n city: this.city,\n state: this.state,\n zipcode: this.zipcode,\n Lat: this.Lat,\n Lon: this.Lon,\n marketplace: this.marketplace\n });\n }\n}\n\n\nexport class FastCMAFindComparableWrapperRequest {\n constructor(data = {}) {\n this.setData(data);\n }\n\n setData(data = {}) {\n this.type = data['type'] || null\n this.latitude = data['latitude'] || null\n this.longitude = data['longitude'] || null\n this.year_built = data['year-build'] || null\n this.square_feet = data['square-feet'] || null\n this.property_type = data['property-type'] || null\n this.property_subtype = data['property-sub-type'] || null\n this.mls_no = data['subject'] || null\n this.lot_size_are = data['lot_size_are'] || null\n\n this.distance = data['distance'] || null\n this.year_range = data['year-build-range'] || null\n this.acre_range = data['acre_range'] || null\n this.lot_size_are = data['lot_size_are'] || null\n this.squarefeet_range = data['square-feet-range'] || null\n this.address = data['address'] || null\n this.street_box_num = data['street_box_num'] || null\n this.street_name = data['street_name'] || null\n this.city = data['city'] || null\n this.state = data['state'] || null\n this.zipcode = data['zipcode'] || null\n this.recency = data['recency'] || null\n this.market_name = data['market_name'] || 'houston'\n this.profile = data['profile'] || 'default'\n this.property_address = data['property_address'] || ''\n this.idres_property = data['idres_property'] || ''\n }\n\n exportArvDistanceQuery() {\n return removeObjectNullFull({\n market_name: this.market_name,\n profile: this.profile,\n type: this.type,\n latitude: this.latitude,\n longitude: this.longitude,\n year_built: this.year_built,\n square_feet: this.square_feet,\n property_type: this.property_type,\n property_subtype: this.property_subtype,\n mls_no: this.mls_no,\n lot_size_are: this.lot_size_are,\n property_address: this.property_address,\n idres_property: this.idres_property,\n });\n }\n\n exportCustomFilter() {\n return removeObjectNullFull({\n market_name: this.market_name,\n profile: this.profile,\n type: this.type,\n latitude: this.latitude,\n longitude: this.longitude,\n distance: this.distance,\n year_built: this.year_built,\n year_range: this.year_range,\n acre_range: this.acre_range,\n lot_size_are: this.lot_size_are,\n square_feet: this.square_feet,\n squarefeet_range: this.squarefeet_range,\n address: this.address,\n street_box_num: this.street_box_num,\n street_name: this.street_name,\n city: this.city,\n state: this.state,\n zipcode: this.zipcode,\n recency: this.recency,\n property_type: this.property_type,\n property_subtype: this.property_subtype,\n mls_no: this.mls_no,\n property_address: this.property_address,\n idres_property: this.idres_property,\n })\n }\n\n exportFindPopup(data){\n return {\n property_type: data[\"property-type\"] || \"\",\n property_subtype: data[\"property-sub-type\"] || \"\",\n year_built: data[\"year-build\"] || \"\",\n latitude: data[\"latitude\"] || \"\",\n longitude: data[\"longitude\"] || \"\",\n property_address: data[\"property_address\"] || \"\",\n square_feet: data[\"square-feet\"] || \"\",\n idres_property: data[\"idres_property\"] || \"\",\n }\n }\n}\n","import * as Types from '../types/ComparablesRequest';\n\nexport const comparablesRequestListAction = (filters) => ({type: Types.COMPARABLES_REQUEST_LIST_ACTION, filters});\nexport const comparablesRequestListSuccess = (list) => ({\n type: Types.COMPARABLES_REQUEST_LIST_SUCCESS,\n list\n});\n\nexport const comparablesRequestDetailAction = (params) => ({type: Types.COMPARABLES_REQUEST_DETAIL_ACTION, params});\nexport const comparablesRequestDetailSuccess = (detail) => ({\n type: Types.COMPARABLES_REQUEST_DETAIL_SUCCESS,\n detail\n});\n\nexport const comparablesRequestInitStore = (params) => ({type: Types.COMPARABLES_REQUEST_INIT, params});\nexport const comparablesRequestClearStore = (params) => ({type: Types.COMPARABLES_REQUEST_FAIL, params});\n","import {\n call,\n put,\n all,\n fork,\n takeEvery,\n select,\n} from \"redux-saga/effects\";\nimport {message} from \"antd\";\nimport * as Types from \"../../data/types/FastCMA\";\nimport * as Actions from \"../actions/fastCMA\";\nimport * as FastCMAService from \"../services/fastCMAService\";\nimport * as Func from \"../../utils/functions\";\nimport FastCMAAddresLookupRequest, {\n FastCMAFindComparableWrapperRequest\n} from \"../mapping/Request/FastCMAAddresLookupRequest\"\nimport comparablesRequestReducer from \"../reducers/comparablesRequestReducer\";\nimport * as FunctionAction from \"../actions/comparablesRequestAction\";\nimport {ROUTE_REDIRECT} from \"../../constants/define\";\n\nfunction errorHandle(errorActionType) {\n return Func.sagaErrorHandler(function* (e) {\n yield put({type: errorActionType});\n });\n}\n\nfunction* addressLookup() {\n yield takeEvery(\n Types.ADDRESS_LOOKUP,\n Func.sagaWrapper(function* (action) {\n const state = yield select();\n const market = state?.FastCMAReducer.cma.market || 'houston';\n let params = action.params;\n params.marketplace = market;\n // console.log(params)\n\n const data = new FastCMAAddresLookupRequest(params).exportAddressDetail();\n const response = yield call(FastCMAService.addressLookup, data);\n if (response.data && response.data.status === \"SUCCESS\") {\n const result = response.data?.data.result;\n if (result && result.length > 0) {\n yield put(Actions.address_lookup_success(result));\n } else {\n yield put(Actions.address_lookup_fail(response.errors));\n }\n window.location = ROUTE_REDIRECT.COMPARABLES_REQUEST.HOME;\n } else {\n yield put(Actions.address_lookup_fail(response.errors))\n }\n }, errorHandle(Types.ADDRESS_LOOKUP_FAIL))\n );\n}\n\nfunction* findComparables() {\n yield takeEvery(\n Types.FIND_COMPARABLES,\n Func.sagaWrapper(function* (action) {\n const state = yield select();\n const market = state?.FastCMAReducer.cma.market || 'houston';\n const oldProfile = state?.comparablesRequestReducer?.detail;\n const profile = state?.FastCMAReducer.cma.edit_profile || 'default';\n\n\n let filter = action.params?.filter\n const showResult = action.params?.showResult\n const type = showResult ? 'custom' : action.params?.type\n\n filter.type = type || 1;\n filter.market_name = market;\n filter.profile = profile;\n\n let request = new FastCMAFindComparableWrapperRequest(filter),\n data;\n switch (type) {\n case 'custom':\n data = request.exportCustomFilter();\n break;\n case 'arv-subdivision':\n case 'arv-distance':\n default:\n data = request.exportArvDistanceQuery();\n break;\n }\n let response;\n if (Object?.keys(oldProfile?.params || {}).length > 0) {\n response = yield call(FastCMAService.findComparables, {\n ...oldProfile?.params,\n ...new FastCMAFindComparableWrapperRequest().exportFindPopup({...action.params?.popupValue, ...oldProfile?.params})\n });\n yield put(FunctionAction.comparablesRequestDetailSuccess(oldProfile));\n yield put(Actions.find_comparables_success({isCheckAgain: true}))\n } else {\n response = yield call(FastCMAService.findComparables, data);\n if (response.data.status === 'SUCCESS') {\n // if (response.data.data.total <= 0) {\n // message.error('No comparables found');\n // }\n yield put(Actions.find_comparables_success({}))\n // yield put(Actions.find_comparables_success(response.data.data))\n // if (showResult) {\n // yield put(Actions.run_cma())\n // }\n }\n }\n // message.success(response.data?.data?.result?.message)\n window.location = \"/comparables-request/list\"\n }, errorHandle(Types.FIND_COMPARABLES_ERROR))\n )\n}\n\nfunction* exportReportPDF() {\n yield takeEvery(\n Types.EXPORT_CMA_REPORT_PDF,\n Func.sagaWrapper(function* (action) {\n const state = yield select();\n const fastCMA = state?.FastCMAReducer;\n const data = fastCMA?.cma.result;\n data.market = fastCMA?.cma.market || 'houston';\n data.selectedProperties = fastCMA?.cma.selected_properties;\n data.estimate = fastCMA?.cma.estimate;\n data.configs = action.params;\n\n // .cma.market || 'houston';\n const response = yield call(FastCMAService.exportCMAReportPDF, data);\n\n if (!data.configs.isEmail) {\n // Download\n const url = window.URL.createObjectURL(new Blob([response.data]));\n const link = document.createElement('a');\n link.href = url;\n link.setAttribute('download', 'CMA_Report.pdf');\n document.body.appendChild(link);\n link.click();\n window.dispatchEvent(new Event('cma-file-download-already'));\n }\n\n }, errorHandle(Types.EXPORT_CMA_ERROR))\n )\n}\n\nfunction* cmaLoadProfiles() {\n yield takeEvery(\n Types.CMA_LOAD_PROFILES,\n Func.sagaWrapper(function* (action) {\n // .cma.market || 'houston';\n const response = yield call(FastCMAService.getProfiles);\n if (response.data && response.data.status === \"SUCCESS\") {\n const result = response.data?.data.result;\n if (result && result.length > 0) {\n yield put(Actions.cma_load_profile_success(result));\n }\n }\n }, errorHandle(Types.CMA_LOAD_PROFILES_FAIL))\n )\n}\n\nfunction* cmaUpdateProfiles() {\n yield takeEvery(\n Types.CMA_UPDATE_PROFILE,\n Func.sagaWrapper(function* (action) {\n const data = action.params.data;\n const navigate = action.params.navigate;\n\n const response = yield call(FastCMAService.updateProfiles, data);\n\n if (response.data && response.data.status === \"SUCCESS\") {\n const result = response.data?.data.result;\n if (result.id) {\n yield put(Actions.cma_update_profile_success(data))\n message.success('Profiles updated')\n }\n navigate.push('/fast-cma/profiles')\n }\n }, errorHandle(Types.CMA_LOAD_PROFILES_FAIL))\n )\n}\n\nfunction* cmaDeleteProfile() {\n yield takeEvery(\n Types.CMA_DELETE_PROFILE,\n Func.sagaWrapper(function* (action) {\n const profile_id = action.params.id;\n const navigate = action.params.navigate;\n\n const response = yield call(FastCMAService.deleteProfile, profile_id);\n\n if (response.data && response.data.status === \"SUCCESS\") {\n navigate.push('/fast-cma/profiles')\n }\n yield put(Actions.cma_delete_profile_success({\n profile_id\n }))\n }, errorHandle(Types.CMA_DELETE_PROFILE_FAIL))\n )\n}\n\nexport function* fastCMASaga() {\n yield all([\n fork(addressLookup),\n fork(findComparables),\n fork(exportReportPDF),\n fork(cmaLoadProfiles),\n fork(cmaUpdateProfiles),\n fork(cmaDeleteProfile)\n ]);\n}\n","import moment from \"moment\";\nimport {DATE_TIME_FORMAT} from \"../../../constants/define\";\nimport {convertBooleanToInt, formatInt, removeObjectNullFull} from \"../../../utils/functions\";\nimport {checkNumber} from \"../../../utils/commonUtils\";\n\nexport default class ComparablesRequestResponse {\n constructor(data = {}) {\n this.setData(data)\n }\n\n setData(data = {}) {\n this.id = data?.id || \"\";\n this.code = data?.code || \"\";\n this.profile = data?.profile || \"\";\n this.market = data?.market || \"\";\n this.property_address = data?.property_address || \"\";\n this.status = data?.status || \"\";\n this.status_explain = data?.status_explain || \"\";\n this.created_at = moment(data.created_at).format(DATE_TIME_FORMAT.DATE_TIME)\n this.updated_at = moment(data.updated_at).format(DATE_TIME_FORMAT.DATE_TIME)\n // ====== Detail response =====\n this.params = {\n market_name: data?.params?.market_name || \"\",\n profile: data?.params?.profile || \"\",\n type: data?.params?.type || \"\",\n latitude: data?.params?.latitude || \"\",\n longitude: data?.params?.longitude || \"\",\n year_built: data?.params?.year_built || \"\",\n square_feet: data?.params?.square_feet || \"\",\n property_type: data?.params?.property_type || \"\",\n property_subtype: data?.params?.property_subtype || \"\",\n property_address: data?.params?.property_address || \"\",\n };\n this.response = data?.response || {};\n }\n\n exportList() {\n return {\n id: this.id,\n code: this?.code,\n profile: this?.profile,\n market: this?.market,\n property_address: this?.property_address,\n status_explain: this?.status_explain,\n created_at: this?.created_at,\n status: this?.status,\n }\n }\n\n exportDetail() {\n return {\n id: this.id,\n code: this.code,\n params: this.params,\n response: this.response,\n status: this.status,\n status_explain: this.status_explain,\n created_at: this.created_at,\n updated_at: this.updated_at,\n }\n }\n}\n\nexport const column = [\"code\", \"profile\", \"market\", \"property_address\", \"status_explain\", \"created_at\"];\n\nexport const fieldDetailRemove = [];\n\nexport const filtersResponse = (filters) => {\n return removeObjectNullFull({\n address: filters?.address || \"\",\n page_size: filters?.page_size || 10,\n page_index: filters?.page_index || 1,\n order_field: filters?.order_field || \"\",\n order_value: filters?.order_value || \"\",\n })\n}\n","import ApiService from '../../utils/ApiService';\nimport Urls from '../../utils/Urls';\nimport * as Func from '../../utils/functions';\nimport {removeObjectNull} from \"../../utils/functions\";\nimport ComparablesRequestResponse from \"../mapping/Response/ComparablesRequestResponse\";\n\n// export function masterContact() {\n// return new ApiService({\n// baseURL: process.env.REACT_APP_API_URL,\n// endpoint: Urls.CONTACT_MASTER_DATA,\n// // params: removeObjectNull({ city_id }),\n// parser: data => new ContactMasterResponse(data.data.result).exportMaster(),\n// }).get();\n// }\n\nexport function actionList(params) {\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: Urls.COMPARABLES_REQUEST_LIST,\n params: params,\n parser: dataParser,\n }).get();\n}\n\n// export function actionContactExport(params) {\n// return new ApiService({\n// baseURL: process.env.REACT_APP_API_URL,\n// endpoint: Urls.CONTACT_LIST,\n// params: params,\n// isDownload: true,\n// parser: data => data,\n// }).get();\n// }\n\nexport function actionDetail(id) {\n return new ApiService({\n baseURL: process.env.REACT_APP_API_URL,\n endpoint: Urls.COMPARABLES_REQUEST_DETAIL,\n endpointParams: {id},\n parser: data => new ComparablesRequestResponse(data.data.result).exportDetail(),\n }).get();\n}\n\n// export function update(data) {\n// return new ApiService({\n// baseURL: process.env.REACT_APP_API_URL,\n// endpoint: Urls.CONTACT_UPDATE,\n// endpointParams: {id: data?.id},\n// }).put(data);\n// }\n//\n// export function create(data) {\n// return new ApiService({\n// baseURL: process.env.REACT_APP_API_URL,\n// endpoint: Urls.CONTACT_CREATE,\n// }).post(data);\n// }\n//\n// export function deleteFunction(id, ids = []) {\n// return new ApiService({\n// baseURL: process.env.REACT_APP_API_URL,\n// endpoint: Urls.CONTACT_DELETE,\n// endpointParams: {id},\n// }).delete();\n// }\n\nfunction dataParser(data = {}) {\n return {\n ...data.data,\n result: (data.data.result || []).map(item => new ComparablesRequestResponse(item).exportList()),\n total_page: Math.ceil(parseInt(data.data.total) / parseInt(data.data.page_size)),\n usage_count: data?.data?.usage_count || \"\"\n }\n}\n","import {call, put, takeLatest, fork, all, delay} from 'redux-saga/effects';\nimport * as Types from '../types/ComparablesRequest';\nimport * as Func from \"../../utils/functions\";\nimport {parseListRequestParams} from '../../utils/commonUtils';\nimport * as FunctionService from '../services/comparablesRequestService';\nimport * as FunctionAction from '../actions/comparablesRequestAction';\nimport {filtersParams} from \"../mapping/Request/ComparablesRequestRequest\";\n\nfunction* actionGetList() {\n yield takeLatest(Types.COMPARABLES_REQUEST_LIST_ACTION, Func.sagaWrapper(function* (action) {\n const params = parseListRequestParams(filtersParams(action.filters) || {});\n const result = yield call(FunctionService.actionList, params);\n yield put(FunctionAction.comparablesRequestListSuccess(result));\n }, errorHandle(Types.COMPARABLES_REQUEST_FAIL)))\n}\n\nfunction* actionGetItem() {\n yield takeLatest(Types.COMPARABLES_REQUEST_DETAIL_ACTION, Func.sagaWrapper(function* (action) {\n const result = yield call(FunctionService.actionDetail, action.params.id);\n yield put(FunctionAction.comparablesRequestDetailSuccess(result));\n }, errorHandle(Types.COMPARABLES_REQUEST_FAIL)))\n}\n\n// function* actionGetMasterContact() {\n// yield takeLatest(Types.CONTACT_MASTER_ACTION, Func.sagaWrapper(function* (action) {\n// const result = yield call(FunctionService.masterContact, action.params);\n// yield put(FunctionAction.contactMasterSuccess(result));\n// }, errorHandle(Types.CONTACT_FAIL)))\n// }\n//\n// function* createAction() {\n// yield takeLatest(Types.CONTACT_CREATE_ACTION, Func.sagaWrapper(function* (action) {\n// const data = new ContactRequest(action.params).exportCreate();\n// const result = yield call(FunctionService.create, data);\n// message.success(TAG_DEFINE.VALIDATION.statusCode.code[\"201\"]);\n// action.params.props.history.goBack();\n// yield put({type: Types.CONTACT_LIST_ACTION});\n// }, errorHandle(Types.CONTACT_FAIL)))\n// }\n//\n// function* updateAction() {\n// yield takeLatest(Types.CONTACT_UPDATE_ACTION, Func.sagaWrapper(function* (action) {\n// const data = new ContactRequest(action.params).exportUpdate();\n// yield call(FunctionService.update, data);\n// message.success(TAG_DEFINE.VALIDATION.statusCode.code[\"204\"]);\n// yield put(FunctionAction.contactDetailAction({id: action.params.id}));\n// }, errorHandle(Types.CONTACT_FAIL)))\n// }\n//\n// function* deleteAction() {\n// yield takeLatest(Types.CONTACT_DELETE_ACTION, Func.sagaWrapper(function* (action) {\n// yield call(FunctionService.deleteFunction, action.params?.id);\n// message.success(TAG_DEFINE.VALIDATION.statusCode.code[\"203\"]);\n// yield put(FunctionAction.contactListAction(action.params?.filters));\n// }, errorHandle(Types.CONTACT_FAIL)))\n// }\n\nfunction errorHandle(errorActionType) {\n return Func.sagaErrorHandler(function* (e) {\n console.log(\"===> \", e)\n yield put({type: errorActionType, errors: e?.errors})\n });\n}\n\nexport function* comparablesRequestSaga() {\n yield all([\n fork(actionGetList),\n fork(actionGetItem),\n ])\n}\n","import {pick} from \"lodash\";\nimport moment from \"moment\";\nimport {DATE_TIME_FORMAT} from \"../../../constants/define\"\nimport {convertBooleanToInt, formatInt, removeObjectNullFull} from \"../../../utils/functions\";\n\nexport default class ComparablesRequestRequest {\n constructor(data = {}) {\n this.setData(data)\n }\n\n setData(data = {}) {\n }\n}\n\nexport const common = {\n ACTION_FIELD: {\n name: \"name\",\n },\n}\n\nexport const filtersParams = (filters) => {\n return removeObjectNullFull({\n address: filters?.address || \"\",\n source: filters?.source || \"\",\n page_size: filters?.page_size || 10,\n page_index: filters?.page_index || 1,\n })\n}\n\n","import {all} from 'redux-saga/effects';\nimport {authSaga} from './authSaga';\nimport {fastCMASaga} from './fastCMASaga'\nimport {comparablesRequestSaga} from './comparablesRequestSaga'\n\nexport default function* rootSaga() {\n yield all([\n authSaga(),\n fastCMASaga(),\n comparablesRequestSaga(),\n ])\n}\n","import {createStore, applyMiddleware, compose} from 'redux';\nimport createSagaMiddleware from 'redux-saga';\nimport logger from './logger'\n\nimport myReducer from '../reducers/index';\nimport rootSaga from '../sagas/index';\n\nconst sagaMiddleware = createSagaMiddleware();\nconst dev = process.env.NODE_ENV !== 'production';\nlet paramsCreateStore;\nif (process.env.REACT_APP_ENVIRONMENT === \"production\" || process.env.REACT_APP_ENVIRONMENT === \"staging\") {\n paramsCreateStore = createStore(myReducer, applyMiddleware(...sagaMiddleware));\n} else {\n const composeEnhancers =\n typeof window === 'object' &&\n window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?\n window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n // Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize...\n }) : compose;\n paramsCreateStore = createStore(myReducer, composeEnhancers(applyMiddleware(sagaMiddleware, logger(dev))));\n // paramsCreateStore = createStore(myReducer,applyMiddleware(sagaMiddleware));\n}\n\nexport default paramsCreateStore;\n\nsagaMiddleware.run(rootSaga);\n","import { useCallback } from 'react'\nimport { useDispatch } from 'react-redux'\n\nimport * as HookAction from '../actions/authAction'\n\nexport const ActionLogin = () => {\n const dispatch = useDispatch()\n return useCallback(\n (params) => dispatch(HookAction.loginAction(params)),\n [dispatch]\n )\n}\n\nexport const ActionUpdateProfile = () => {\n const dispatch = useDispatch()\n return useCallback(\n (params) => dispatch(HookAction.updateProfileAction(params)),\n [dispatch]\n )\n}\n\nexport const ActionPasswordRequest = () => {\n const dispatch = useDispatch()\n return useCallback(\n (params) => dispatch(HookAction.passwordRequestAction(params)),\n [dispatch]\n )\n}\n\nexport const ActionPasswordReset = () => {\n const dispatch = useDispatch()\n return useCallback(\n (params) => dispatch(HookAction.passwordResetAction(params)),\n [dispatch]\n )\n}\n\nexport const ActionInit = () => {\n const dispatch = useDispatch()\n return useCallback(\n (params) => dispatch(HookAction.initAction(params)),\n [dispatch]\n )\n}\n","import {createSelector} from 'reselect'\n\nconst stateReducer = state => state.authReducer;\n\nexport const getProfile = (initData) =>\n createSelector(\n stateReducer,\n authReducer => authReducer.user\n )\n\nexport const getFetchingAuth = (initData) =>\n createSelector(\n stateReducer,\n authReducer => authReducer.isFetching\n )\n\nexport const getStatusAction = (initData) =>\n createSelector(\n stateReducer,\n authReducer => authReducer.statusAction\n )\n\nexport const getPasswordRequest = (initData) =>\n createSelector(\n stateReducer,\n authReducer => authReducer.hash\n )\n\n// export const getDataOrderItem = (initItems) =>\n// createSelector(\n// stateReducer,\n// orderReducer => Object.keys(initItems?.item || {}).length > 0 ? initItems?.item : orderReducer.detail?.item\n// )\n//\n// export const getErrors = (initItems) =>\n// createSelector(\n// stateReducer,\n// orderReducer => orderReducer.errors\n// )\n//\n// export const getDataUpdate = (initItems) =>\n// createSelector(\n// stateReducer,\n// orderReducer => orderReducer.url\n// )\n","import React, {useEffect, useState} from 'react';\nimport {Tabs, Breadcrumb} from \"antd\";\nimport {find} from \"lodash\";\nimport {capitalizeFirstLetter} from \"../../../utils/functions\";\nimport {HomeOutlined} from '@ant-design/icons';\n\nimport {getProfile} from '../../../data/reselects/authSelector'\nimport {useSelector} from \"react-redux\";\n\nconst {TabPane} = Tabs;\n\nconst MainLayout = (props) => {\n const itemAuthProfile = useSelector(getProfile()),\n [title, setTitle] = useState(props?.title || \"\"),\n [itemMenu, setItemMenu] = useState([]);\n\n useEffect(() => {\n if (!props?.disabledTab) {\n if (props?.pathname) {\n let generateSubMenu = (itemAuthProfile?.menu || []).map(value =>\n value.items.map(child => Object.assign({group: value.group}, child))\n ).reduce((l, n) => l.concat(n), []),\n group = find(generateSubMenu, {route: (props?.pathname).replace(\"/\", \"\")})?.group;\n setTitle(find(itemAuthProfile?.menu, {group: group})?.name)\n setItemMenu(generateSubMenu.filter(i => i?.group === group))\n }\n } else {\n setTitle(props?.title)\n }\n }, [itemAuthProfile?.menu, props]);\n\n return (\n
\n {\n (props.disabledTab && (props?.breadcrumb || []).length > 0) && (\n
\n \n Home\n {\n props?.breadcrumb.map((i, k) => {i})\n }\n \n
\n )\n }\n

{title}

\n {\n (!props.disabledTab && itemMenu.length) > 0 && (\n props.history.push(`/${e}`)}\n className=\"hn__tabs-menu\">\n {\n itemMenu.map((i, k) => {\n return (\n \n {\n props.children\n }\n \n )\n })\n }\n \n )\n }\n {\n (props.disabledTab) && (\n
\n {props.children}\n
\n )\n }\n
\n )\n}\n\nexport default MainLayout\n","import React, {useEffect} from 'react';\nimport {connect} from \"react-redux\";\nimport {withRouter} from 'react-router-dom';\nimport {loginAction} from \"../../data/actions/authAction\";\nimport {ActionUpdateProfile} from \"../../data/hooks/auth\"\nimport {ROUTE_LIST} from \"../../constants/define\";\nimport MainLayout from \"../common/layout/MainLayout\";\n\nconst Index = (props) => {\n useEffect(() => {\n // ==> First page loading <===\n // props.history.push(ROUTE_LIST.PreForeClosure)\n }, []);\n\n return (\n \n asd\n \n )\n // return \n}\n\nconst mapStateToProps = state => {\n return {\n // categories: state.reducerCategory,\n auth: state.authReducer,\n }\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n onLogin: (params) => {\n dispatch(loginAction(params))\n },\n }\n};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Index))\n","import React, {useEffect, useState} from \"react\";\nimport {connect} from \"react-redux\";\nimport {\n CaretDownOutlined,\n CaretUpOutlined,\n InfoCircleOutlined,\n LoadingOutlined,\n SearchOutlined\n} from \"@ant-design/icons\";\nimport {Form, Button, Input, Typography, Row, Col, AutoComplete, Select, Card, message} from \"antd\";\n\nimport {address_lookup, filter_comparables, address_lookup_reset} from \"../../../data/actions/fastCMA\";\nimport {useScript} from \"../../../utils/commonUtils\"\nimport {predictions as samplePredictions, texas_predictions as texasPredictions} from \"./demo_google_predictions\";\nimport queryString from \"query-string\";\n\nconst {Title, Text} = Typography;\nconst {Option} = Select;\n\nconst googleAddressParser = (place) => {\n const detail = {}\n if (place.address_components) {\n detail.address = place.formatted_address\n for (var component of place.address_components) {\n\n if (component.types.indexOf('street_number') >= 0) {\n detail.street_box_num = component.short_name;\n }\n if (component.types.indexOf('route') >= 0) {\n detail.street_name = component.long_name;\n detail.address = detail.address.replace(component.short_name, component.long_name)\n }\n if (component.types.indexOf('administrative_area_level_1') >= 0) {\n detail.state = component.short_name;\n }\n if (component.types.indexOf('locality') >= 0) {\n detail.city = component.long_name;\n }\n if (component.types.indexOf('country') >= 0) {\n detail.country = component.short_name;\n }\n if (component.types.indexOf('postal_code') >= 0) {\n detail.zipcode = component.long_name;\n }\n }\n detail.Lat = place?.geometry.location.lat();\n detail.Lon = place?.geometry.location.lng();\n }\n return detail;\n}\n\nconst AddressLookup = (props) => {\n const {onLookup, lookup, showFilter, resetLookUpField} = props\n const [canLookup, enableLookup] = useState(false)\n const [addresses, setAddress] = useState([]);\n const [addressError, setAddressError] = useState(false)\n const [lookupAddress, setLookupAddress] = useState('');\n const [form] = Form.useForm();\n\n useEffect(() => {\n if (props?.location) {\n let paramsFilters = queryString.parse(props.location.search, {arrayFormat: 'comma'});\n form.setFieldsValue({\"address-search\": paramsFilters?.fullAddress})\n if (window.getPredictions) clearTimeout(window.getPredictions);\n if (paramsFilters?.fullAddress) {\n window.getPredictions = setTimeout(() => {\n if (lookup.status !== 'idle') {\n resetLookUpField();\n }\n const service = new window.google.maps.places.AutocompleteService();\n service.getPlacePredictions({\n input: paramsFilters?.fullAddress\n }, displaySuggestion)\n window.getPredictions = false;\n }, 500);\n } else {\n // setLookupAddress(false)\n setAddress([])\n }\n }\n }, []);\n\n\n const isTexasState = (terms = []) => {\n if (terms.length) {\n for (let value of terms.map(i => i.value)) {\n if (value.match(/tx|texas/i)) {\n return true;\n }\n }\n }\n return false;\n }\n\n const onSubmitHandle = (values) => {\n let selected = false;\n if (addresses) {\n selected = addresses.filter(item => item.value === values['address-search']);\n if (selected.length > 0) {\n selected = selected[0]\n }\n }\n\n if (!selected || !isTexasState(selected.terms)) {\n setAddressError(true)\n } else {\n setAddressError(false)\n // start lookup\n if (window.google) {\n const request = {\n placeId: selected.place_id,\n fields: ['name', 'address_component', 'formatted_address', 'geometry']\n };\n const map = new window.google.maps.Map(document.createElement('div'))\n const service = new window.google.maps.places.PlacesService(map);\n service.getDetails(request, (place, status) => {\n if (status === window.google.maps.places.PlacesServiceStatus.OK) {\n const detail = googleAddressParser(place);\n\n form.setFieldsValue({\n address: ''\n })\n onLookup(detail);\n }\n });\n }\n // setLookupAddress(selected)\n }\n }\n\n const onSelectAddress = (value) => {\n resetLookUpField();\n enableLookup(true)\n }\n\n const displaySuggestion = (predictions, status) => {\n if (window.google && status != window.google.maps.places.PlacesServiceStatus.OK || !predictions) {\n setAddress([])\n return;\n }\n setAddress(predictions.map(addr => {\n return {\n value: addr.description,\n terms: addr.terms,\n place_id: addr.place_id\n }\n }))\n\n }\n\n const onAddressChange = (address) => {\n if (window.getPredictions) clearTimeout(window.getPredictions);\n if (address) {\n window.getPredictions = setTimeout(() => {\n if (lookup.status !== 'idle') {\n resetLookUpField();\n }\n const service = new window.google.maps.places.AutocompleteService();\n service.getPlacePredictions({\n input: address\n }, displaySuggestion)\n window.getPredictions = false;\n }, 500);\n } else {\n // setLookupAddress(false)\n setAddress([])\n }\n }\n\n const onSelectValidAddress = (value) => {\n enableLookup(false);\n // Start find comparable\n const selectItem = lookup.result.filter(item => value == item.mls_num || value == item.address);\n let lat, lon, address;\n if (selectItem.length > 0) {\n lat = selectItem[0].lat;\n lon = selectItem[0].lon;\n address = selectItem[0].address;\n }\n props.setGetAddress(address)\n showFilter(value, lat, lon, address);\n }\n\n return (\n
\n
\n {/*
*/}\n {/* */}\n {/* {props?.selectProfile}*/}\n {/* */}\n {/*
*/}\n {/*
*/}\n {/* */}\n {/* {props?.selectMarket}*/}\n {/* */}\n {/*
*/}\n
\n \n \n \n {addresses.map(item => {\n return {item.value}\n })}\n \n \n
\n
\n \n \n {/*{addressError &&*/}\n {/* <>*/}\n {/*
*/}\n {/* Please*/}\n {/* provide Texas state location */}\n {/* */}\n {/*}*/}\n
\n
\n
\n {/*{lookup.status === 'success' && lookup.result && lookup.result.length > 0 &&*/}\n {/* */}\n {/* */}\n {/* /!*Please, validate the address provided*!/*/}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/*}*/}\n
\n )\n}\n\nconst mapStateToProps = (state) => {\n const fastCMA = state.FastCMAReducer;\n return {\n cmaStep: fastCMA.step,\n lookup: fastCMA.address_lookup,\n googleSessionToken: fastCMA.google ? fastCMA.google.session : false\n }\n}\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n onLookup: (address) => {\n dispatch(address_lookup(address));\n },\n showFilter: (mls_num, lat, lon, address) => {\n dispatch(filter_comparables({\n mls_num: mls_num,\n address: address,\n latitude: lat,\n longitude: lon\n }));\n },\n resetLookUpField: () => {\n dispatch(address_lookup_reset());\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AddressLookup);\n","import React, { useState } from \"react\";\nimport {connect} from \"react-redux\";\n\nimport { Form, Button, Input, Row, Col, InputNumber } from \"antd\";\n\nimport { mls_lookup } from \"../../../data/actions/fastCMA\";\n\nconst MLSNumberLookUp = (props) => {\n const { onSubmitMLSNumber, status } = props;\n const [form] = Form.useForm();\n\n const escapeNumber = (event) => {\n const validatedNumber = event.target.value.replace(/[^0-9]/g, '');\n form.setFieldsValue({\n mlsnumber: validatedNumber\n });\n }\n\n const doLookup = (event) => {\n onSubmitMLSNumber(form.getFieldValue('mlsnumber'));\n }\n\n\treturn (\n\t\t
\n \n \n \n \n \n \n \n \n \n \n \n \n\t\t
\n\t);\n};\n\nconst mapStatesToProps = (state) => {\n const data = state.FastCMAReducer\n return {\n status: data.status\n }\n}\nconst mapDispatchToProps = (dispatch) => {\n return {\n onSubmitMLSNumber: () => {\n dispatch(mls_lookup())\n },\n }\n};\n\nexport default connect(mapStatesToProps, mapDispatchToProps)(MLSNumberLookUp);","import React, {Component} from 'react';\nimport {SearchOutlined, DeleteOutlined, FormOutlined, MoreOutlined, CloseCircleOutlined, IdcardOutlined, SyncOutlined, FilterOutlined, ZoomInOutlined, CloseOutlined, LoadingOutlined, PlusOutlined, UploadOutlined, EditOutlined, EyeOutlined, CarryOutOutlined} from \"@ant-design/icons\";\nimport {omit} from 'lodash';\n\nexport default class Icon extends Component {\n\n render() {\n const {className, type} = this.props;\n const props = omit(this.props, ['className']);\n switch (type) {\n case \"carry-out-outlined\":\n return (\n {this.props.children}\n );\n case \"edit-outlined\":\n return (\n {this.props.children}\n );\n case \"eye-outlined\":\n return (\n {this.props.children}\n );\n case \"upload-outlined\":\n return (\n {this.props.children}\n );\n case \"search\":\n return (\n {this.props.children}\n );\n case \"delete\":\n return (\n {this.props.children}\n );\n case \"form\":\n return (\n {this.props.children}\n );\n case \"more\":\n return (\n {this.props.children}\n );\n case \"close-circle\":\n return (\n {this.props.children}\n );\n case \"id-card-outlined\":\n return (\n {this.props.children}\n );\n case \"sync-outlined\":\n return (\n {this.props.children}\n );\n case \"filter-outlined\":\n return (\n {this.props.children}\n );\n case \"zoom-in\":\n return (\n {this.props.children}\n );\n case \"close-outlined\":\n return (\n {this.props.children}\n );\n case \"loading-outlined\":\n return (\n {this.props.children}\n );\n case \"plus-outlined\":\n return (\n {this.props.children}\n );\n default:\n return \"\";\n }\n }\n}\n","import React, {useEffect, useState} from \"react\";\nimport {useSelector} from \"react-redux\";\nimport {getProfile} from \"../../../data/reselects/authSelector\";\nimport {Menu} from \"antd\";\nimport {Link} from \"react-router-dom\";\nimport {capitalizeFirstLetter} from \"../../../utils/functions\";\nimport {MailOutlined} from \"@ant-design/icons\";\n\nconst {SubMenu} = Menu;\n\nconst HeaderMenu = props => {\n const [itemMenu, setItemMenu] = useState([]),\n itemAuthProfile = useSelector(getProfile());\n\n useEffect(() => {\n let menu = itemAuthProfile?.menu || [];\n let updatedMenu = [\n ...menu.slice(0, 1),\n {\n name: \"Eva\",\n group: \"cma\",\n route: \"fast-cma\"\n },\n {\n name: \"Eva Profiles\",\n group: \"cma\",\n route: \"fast-cma/profiles\"\n },\n {\n name: \"Comparables Request\",\n group: \"comparables\",\n route: \"comparables-request/list\"\n },\n ...menu.slice(1, menu.length)\n ]\n setItemMenu(updatedMenu)\n }, [itemAuthProfile.menu]);\n\n return (\n <>\n {\n itemMenu.length > 0 && (\n document.getElementById(\"custom-selector-antd\")}\n defaultSelectedKeys={['/']}\n selectedKeys={[props?.location?.pathname]}\n mode=\"horizontal\"\n expandIcon={false}\n // inlineCollapsed={props?.collapsed}\n className=\"hn__header--menu\"\n >\n {\n itemMenu.map((i, k) => {\n if ((i?.items || []).length > 0) {\n return (\n \n {/**/}\n {\n props.collapsed ?\n : \"\"\n }\n {!props?.collapsed && i?.name}\n \n } className=\"fs--14px hn__navigation--hide-all-submenu\"\n onTitleClick={() => props.history.push(`/${i?.route}`)}>\n {renderMenuItem(i?.items || [])}\n \n )\n } else {\n return (\n \n \n {/**/}\n {!props?.collapsed && capitalizeFirstLetter(i.name)}\n \n \n )\n }\n })\n }\n \n )\n }\n \n )\n}\n\nconst renderMenuItem = (item) => {\n let arrayMenu = [];\n if (item.length > 0) {\n item.map((i, k) => arrayMenu.push(\n \n {capitalizeFirstLetter(i.name)}\n \n ))\n }\n return arrayMenu\n}\nexport default HeaderMenu\n","import React, {Component, useState} from \"react\";\nimport {Link, withRouter} from \"react-router-dom\";\nimport {Avatar, Button, Dropdown, Form, Input, Menu, message, Modal, Space} from \"antd\";\nimport * as LocalStorage from \"../../../utils/localStorage\";\nimport {CONFIG_LOCAL_STORAGE} from \"../../../constants/define\";\nimport {Icon} from \"../index\";\nimport {useSelector} from \"react-redux\";\nimport {getFetchingAuth, getProfile} from \"../../../data/reselects/authSelector\";\nimport {ActionUpdateProfile} from \"../../../data/hooks/auth\";\n\nimport {\n AppstoreOutlined,\n MenuUnfoldOutlined,\n MenuFoldOutlined,\n PieChartOutlined,\n DesktopOutlined,\n ContainerOutlined,\n MailOutlined,\n} from '@ant-design/icons';\nimport HeaderMenu from \"./HeaderMenu\";\n\nconst Header = (props) => {\n const agent = \"RealEstateIQ\",\n [showProfile, setShowProfile] = useState(false),\n getUpdateProfile = ActionUpdateProfile(),\n itemFetching = useSelector(getFetchingAuth()),\n itemProfile = useSelector(getProfile());\n const menu = () => (\n \n setShowProfile(true)}>\n {(itemProfile?.first_name || \"\") + \" \" + (itemProfile?.last_name || \"\")}\n \n My\n subscription\n My\n transaction\n Package\n subscription\n onLogout()}> Logout\n \n );\n\n const onLogout = () => {\n const token = LocalStorage.get(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN);\n if (token) {\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.PROFILE);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.EXPIRES);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.REFRESH_TOKEN);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN);\n }\n window.location = `${process.env.REACT_APP_AUTH0}/auth/verify?callback=${process.env.REACT_APP_BASE_URL}/auth/loyalty&agent=${agent}&action=logout`\n // props.history.go(`${process.env.REACT_APP_AUTH0}/auth/verify?callback=${process.env.REACT_APP_BASE_URL}/auth/loyalty&agent=${agent}&action=logout`)\n }\n\n const updateProfile = (val) => {\n if (val.password || val.confirm_password) {\n if (val.password === val.confirm_password) {\n getUpdateProfile({...val, id: props?.profile?.id})\n } else {\n message.error(\"Password does not match\")\n }\n } else {\n getUpdateProfile({...val, id: props?.profile?.id})\n }\n }\n\n return (\n <>\n setShowProfile(false)}\n onCancel={() => setShowProfile(false)} footer={null}>\n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n ({\n validator(rule, value) {\n if (value && (value.length > 1)) {\n if (!/^\\s+|\\s+$/g.test(value[0]) && !/^\\s+|\\s+$/g.test(value[value.length - 1])) {\n return Promise.resolve();\n }\n return Promise.reject(\"'password' cannot be empty\");\n }\n return Promise.resolve();\n },\n })]}\n >\n \n \n
\n
\n ({\n validator(rule, value) {\n if (value && (value.length > 1)) {\n if (!/^\\s+|\\s+$/g.test(value[0]) && !/^\\s+|\\s+$/g.test(value[value.length - 1])) {\n return Promise.resolve();\n }\n return Promise.reject(\"'password' cannot be empty\");\n }\n return Promise.resolve();\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
\n \n
\n
\n \n )\n}\n\nexport default withRouter(Header);\n","import {Icon} from \"../../../../common\";\nimport {ROUTE_REDIRECT} from \"../../../../../constants/define\";\nimport React from \"react\";\nimport {moneyFormatter} from \"../../../../../utils/commonUtils\";\n\nexport const properties = [\n {\n title: \"select/unselect all\",\n type: \"checkbox\",\n },\n {\n title: \"Rank\",\n type: \"image\",\n key: \"uid\",\n },\n {\n title: \"Address\",\n type: \"street_name\",\n childs: [\n {\n title: \"City\",\n key: \"city\",\n },\n {\n title: \"Zipcode\",\n key: \"zipcode\",\n },\n {\n title: \"County\",\n key: \"county\",\n },\n ],\n },\n {\n title: \"Property Type\",\n key: \"prop_type\",\n childs: [\n {\n title: \"House type\",\n key: \"house_type\",\n },\n {\n title: \"House style\",\n key: \"house_style\",\n },\n {\n title: \"HOA frequency / dues\",\n key: [\"hoa_frequency\", \"hoa_amount\"],\n },\n ],\n },\n {\n title: \"Price per square foot\",\n type: \"price_per_square_foot\",\n },\n {\n title: \"Distance (miles)\",\n type: \"distance\",\n },\n {\n title: \"Recency (days)\",\n type: \"recency_day\",\n },\n {\n title: \"Subdivision\",\n key: \"subdivision\",\n },\n {\n title: \"School district\",\n key: \"school_district\",\n childs: [\n {\n title: \"Elementary School\",\n key: \"school_name1\",\n },\n {\n title: \"Middle School\",\n key: \"school_name2\",\n },\n {\n title: \"High School\",\n key: \"school_name3\",\n },\n ],\n },\n {\n title: \"Days on market\",\n key: \"dom\",\n },\n {\n title: \"Seller type\",\n key: \"seller_type\",\n },\n {\n title: \"List Price\",\n key: \"list_price\",\n type: \"money\",\n childs: [\n {\n title: \"List Date\",\n key: \"list_date\",\n type: \"date\"\n },\n {\n title: \"Original list price\",\n key: \"list_price_orig\",\n type: \"money\"\n },\n {\n title: \"List price to original list price\",\n key: \"list_price_orig\",\n type: \"list_price_orig\"\n },\n ],\n },\n {\n title: \"Sold Price\",\n key: \"sold_price\",\n type: \"money\",\n childs: [\n {\n title: \"Sold Date\",\n key: \"sold_date\",\n type: \"date\"\n },\n ],\n },\n {\n title: \"Seller Contribution\",\n key: \"seller_contribution\",\n null: \"N/A\"\n },\n {\n title: \"Year built\",\n key: \"year_built\",\n },\n\n {\n title: \"Construction type\",\n key: \"construction_type\",\n childs: [\n {\n title: \"Roof\",\n key: \"roof\",\n },\n {\n title: \"Foundation\",\n key: \"foundation\",\n },\n ],\n },\n {\n title: 'Square feet',\n key: 'square_feet'\n },\n {\n title: 'Bed /bath',\n key: ['bedroom', 'bathroom_total']\n },\n {\n title: 'Stories',\n key: 'storie'\n },\n {\n title: 'Pool',\n key: 'pool'\n },\n {\n title: 'Grage / carport',\n key: ['garage', 'carport']\n },\n {\n title: 'Fireplace',\n key: 'fireplace'\n },\n {\n title: 'Lot size',\n key: 'acre',\n childs: [\n {\n title: 'Lot size (acres)',\n key: 'acres'\n },\n {\n title: 'Lot description',\n key: 'lot_description'\n }\n ]\n },\n {\n title: 'MLS #',\n key: 'mls_num',\n childs: [\n {\n title: 'Public remark',\n key: 'public_remark'\n },\n {\n title: 'Agent Name',\n key: 'listing_agent_name'\n },\n {\n title: 'Agent Phone Number',\n key: 'agent_listing_appt_phone'\n },\n {\n title: 'Showing instruction',\n key: 'showing_instruction'\n }\n ]\n }\n];\n\nexport const FIELD_COMPARA = [\n // {\n // title: \"Rank\",\n // type: \"image\",\n // key: \"uid\",\n // fixed: 'left',\n // },\n {\n title: \"Address\",\n type: \"street_name\",\n dataIndex: \"street_name\",\n isNote: true\n },\n {\n title: \"City\",\n key: \"city\",\n dataIndex: \"city\",\n },\n {\n title: \"Zipcode\",\n key: \"zipcode\",\n dataIndex: \"zipcode\",\n },\n {\n title: \"County\",\n key: \"county\",\n dataIndex: \"county\",\n },\n {\n title: \"Property Type\",\n key: \"prop_type\",\n dataIndex: \"prop_type\",\n },\n {\n title: \"House type\",\n key: \"house_type\",\n dataIndex: \"house_type\",\n },\n {\n title: \"House style\",\n key: \"house_style\",\n dataIndex: \"house_style\",\n },\n {\n title: \"HOA frequency / dues\",\n key: [\"hoa_frequency\", \"hoa_amount\"],\n dataIndex: \"hoa_frequency\",\n isNote: true\n },\n {\n title: \"Price per square foot\",\n type: \"price_per_square_foot\",\n dataIndex: \"price_per_square_foot\",\n isNote: true\n },\n {\n title: \"Distance (miles)\",\n type: \"distance\",\n dataIndex: \"distance\",\n isNote: true\n },\n {\n title: \"Recency (days)\",\n type: \"recency_day\",\n dataIndex: \"recency_day\",\n isNote: true\n },\n {\n title: \"Subdivision\",\n key: \"subdivision\",\n dataIndex: \"subdivision\",\n },\n {\n title: \"School district\",\n key: \"school_district\",\n dataIndex: \"school_district\",\n },\n {\n title: \"Elementary School\",\n key: \"school_name1\",\n dataIndex: \"school_name1\",\n },\n {\n title: \"Middle School\",\n key: \"school_name2\",\n dataIndex: \"school_name2\",\n },\n {\n title: \"High School\",\n key: \"school_name3\",\n dataIndex: \"school_name3\",\n },\n {\n title: \"Days on market\",\n key: \"dom\",\n dataIndex: \"dom\",\n },\n {\n title: \"Seller type\",\n key: \"seller_type\",\n dataIndex: \"seller_type\",\n },\n {\n title: \"List Price\",\n key: \"list_price\",\n dataIndex: \"list_price\",\n type: \"money\",\n isNote: true\n },\n {\n title: \"List Date\",\n key: \"list_date\",\n dataIndex: \"list_date\",\n type: \"date\",\n isNote: true\n },\n {\n title: \"Original list price\",\n key: \"list_price_orig\",\n dataIndex: \"list_price_orig\",\n type: \"money\",\n isNote: true\n },\n {\n title: \"List price to original list price\",\n key: \"list_price_orig\",\n dataIndex: \"list_price_orig\",\n type: \"list_price_orig\",\n isNote: true\n },\n {\n title: \"Sold Price\",\n key: \"sold_price\",\n dataIndex: \"sold_price\",\n type: \"money\",\n isNote: true\n },\n {\n title: \"Sold Date\",\n key: \"sold_date\",\n dataIndex: \"sold_date\",\n type: \"date\",\n isNote: true\n },\n {\n title: \"Seller Contribution\",\n key: \"seller_contribution\",\n dataIndex: \"seller_contribution\",\n null: \"N/A\",\n isNote: true\n },\n {\n title: \"Year built\",\n key: \"year_built\",\n dataIndex: \"year_built\",\n },\n\n {\n title: \"Construction type\",\n key: \"construction_type\",\n dataIndex: \"construction_type\",\n },\n {\n title: \"Roof\",\n key: \"roof\",\n dataIndex: \"roof\",\n },\n {\n title: \"Foundation\",\n key: \"foundation\",\n dataIndex: \"foundation\",\n },\n {\n title: 'Square feet',\n key: 'square_feet',\n dataIndex: 'square_feet'\n },\n {\n title: 'Bed /bath',\n key: ['bedroom', 'bathroom_total'],\n dataIndex: \"bedroom\",\n isNote: true\n },\n {\n title: 'Stories',\n key: 'storie',\n dataIndex: 'storie'\n },\n {\n title: 'Pool',\n key: 'pool',\n dataIndex: 'pool'\n },\n {\n title: 'Grage / carport',\n key: ['garage', 'carport'],\n dataIndex: \"garage\",\n isNote: true\n },\n {\n title: 'Fireplace',\n key: 'fireplace',\n dataIndex: 'fireplace'\n },\n {\n title: 'Lot size',\n key: 'acre',\n dataIndex: 'acre',\n },\n {\n title: 'Lot size (acres)',\n key: 'acres',\n dataIndex: 'acres'\n },\n {\n title: 'Lot description',\n key: 'lot_description',\n dataIndex: 'lot_description'\n },\n // {\n // title: 'MLS #',\n // key: 'mls_num',\n // dataIndex: 'mls_num',\n // },\n // {\n // title: 'Public remark',\n // key: 'public_remark',\n // dataIndex: 'public_remark'\n // },\n {\n title: 'Agent Name',\n key: 'listing_agent_name',\n dataIndex: 'listing_agent_name'\n },\n {\n title: 'Agent Phone Number',\n key: 'agent_listing_appt_phone',\n dataIndex: 'agent_listing_appt_phone'\n },\n {\n title: 'Showing instruction',\n key: 'showing_instruction',\n dataIndex: 'showing_instruction'\n }\n]\n\nexport const COLUMN_PRIMARY = [\n {\n title: \"Properties\",\n type: \"street_name\",\n dataIndex: \"street_name\",\n isNote: true,\n render: (text, record) => [record[\"street_box_num\"], record[\"street_name\"], record[\"street_type\"]].join(' '),\n },\n {\n title: \"Price per square foot\",\n type: \"price_per_square_foot\",\n dataIndex: \"price_per_square_foot\",\n isNote: true,\n sorter: true,\n render: (text, record) => ${Math.round((record['sold_price'] || record['list_price']) / record['square_feet'] * 100) / 100},\n },\n {\n title: \"Distance (miles)\",\n type: \"distance\",\n dataIndex: \"distance\",\n isNote: true,\n sorter: true,\n render: (text, record) => Math.round((record['dist'] || 0) * 0.00062137 * 100) / 100,\n },\n {\n title: \"Recency (days)\",\n type: \"recency_day\",\n dataIndex: \"recency_day\",\n sorter: true,\n render: (text, record) => Math.round((((new Date()) - (new Date(record['sold_date'] || record['modified_date']))) / (24 * 60 * 60 * 1000))),\n },\n {\n title: \"Subdivision\",\n key: \"subdivision\",\n dataIndex: \"subdivision\",\n render: (text, record) => text ? text : \"N/A\"\n },\n {\n title: \"Days on market\",\n key: \"dom\",\n dataIndex: \"dom\",\n sorter: true,\n },\n {\n title: \"Sold Price\",\n key: \"sold_price\",\n dataIndex: \"sold_price\",\n sorter: true,\n render: (text, record) => moneyFormatter.format(text)\n },\n]\nexport const COLUMN_SECONDARY = [\n {\n title: \"Properties\",\n type: \"street_name\",\n dataIndex: \"street_name\",\n isNote: true,\n render: (text, record) => [record[\"street_box_num\"], record[\"street_name\"], record[\"street_type\"]].join(' '),\n },\n {\n title: \"School district\",\n key: \"school_district\",\n dataIndex: \"school_district\",\n render: (text, record) => text ? text : \"N/A\",\n },\n {\n title: \"Seller Contribution\",\n key: \"seller_contribution\",\n dataIndex: \"seller_contribution\",\n null: \"N/A\",\n render: (text, record) => text ? text : \"N/A\",\n isNote: true\n },\n {\n title: \"List Price & Date\",\n key: \"list_price\",\n dataIndex: \"list_price\",\n type: \"money\",\n render: (text, record) => `${moneyFormatter.format(text)} (${record?.list_date})`,\n },\n {\n title: \"Original List Price\",\n key: \"list_price_orig\",\n dataIndex: \"list_price_orig\",\n type: \"money\",\n render: (text, record) => moneyFormatter.format(text)\n },\n {\n title: \"Seller type\",\n key: \"seller_type\",\n dataIndex: \"seller_type\",\n render: (text, record) => text ? text : \"N/A\"\n },\n {\n title: \"Sold Price & Date\",\n key: \"sold_price\",\n dataIndex: \"sold_price\",\n type: \"money\",\n isNote: true,\n render: (text, record) => `${moneyFormatter.format(text)} (${record?.sold_date})`,\n },\n]\nexport const HOUSE_CHARACTERISTICS = [\n {\n title: \"Properties\",\n type: \"street_name\",\n dataIndex: \"street_name\",\n isNote: true,\n render: (text, record) => [record[\"street_box_num\"], record[\"street_name\"], record[\"street_type\"]].join(' '),\n },\n {\n title: \"Year built\",\n key: \"year_built\",\n dataIndex: \"year_built\",\n },\n {\n title: 'Square feet',\n key: 'square_feet',\n dataIndex: 'square_feet'\n },\n {\n title: 'Bed /bath',\n key: ['bedroom', 'bathroom_total'],\n dataIndex: \"bedroom\",\n isNote: true,\n render: (text, record) => `${text}/${record?.bathroom_total}`,\n },\n {\n title: 'Stories',\n key: 'storie',\n dataIndex: 'storie',\n render: (text, record) => text ? text : \"N/A\"\n },\n {\n title: 'Pool',\n key: 'pool',\n dataIndex: 'pool'\n },\n {\n title: 'Grage / carport',\n key: ['garage', 'carport'],\n dataIndex: \"garage\",\n isNote: true,\n render: (text, record) => `${text}/${record?.carport}`,\n },\n {\n title: \"Construction type\",\n key: \"construction_type\",\n dataIndex: \"construction_type\",\n },\n {\n title: \"Roof\",\n key: \"roof\",\n dataIndex: \"roof\",\n },\n {\n title: \"Foundation\",\n key: \"foundation\",\n dataIndex: \"foundation\",\n },\n {\n title: 'Fireplace',\n key: 'fireplace',\n dataIndex: 'fireplace',\n render: (text, record) => text ? text : \"N/A\"\n },\n {\n title: 'Lot size',\n key: 'acre',\n dataIndex: 'acre',\n },\n {\n title: 'Lot description',\n key: 'lot_description',\n dataIndex: 'lot_description'\n }\n]\n\nexport const TAB_COMPARABLES = [\n {\n title: \"Primary information\",\n key: \"primary\",\n column: COLUMN_PRIMARY\n }, {\n title: \"Secondary information\",\n key: \"secondary\",\n column: COLUMN_SECONDARY\n }, {\n title: \"House characteristics\",\n key: \"house\",\n column: HOUSE_CHARACTERISTICS\n }, {\n title: \"MLS\",\n key: \"mls\",\n column: []\n },\n]\n\n","import React from \"react\";\nimport { connect } from \"react-redux\";\n\nimport { Radio } from \"antd\";\nimport { PROPERTY } from \"../../../../../constants/fastCMA\";\n\nimport { cma_set_active_status } from \"../../../../../data/actions/fastCMA\";\n\nconst ComparableStatusSwitch = (props) => {\n const { properties, activeStatus, setActiveStatus } = props\n\n const handleTypeChange = (event) => {\n // setActiveType(event.target.value)\n console.log(999, event.target.value)\n setActiveStatus(event.target.value)\n }\n\n return (\n \n {PROPERTY.STATUS && Object.values(PROPERTY.STATUS).map(item =>\n {item.label} ({properties[item.key].length})\n )}\n \n )\n}\n\nconst mapStateToProps = state => {\n const fastCMA = state.FastCMAReducer\n\n return {\n properties: fastCMA.cma?.result.payload,\n activeStatus: fastCMA.cma?.active_status\n }\n}\n\nconst mapDispatchToProps = dispatch => {\n return {\n setActiveStatus: (status) => {\n dispatch(cma_set_active_status({\n status: status\n }))\n }\n }\n}\nexport default connect(mapStateToProps, mapDispatchToProps)(ComparableStatusSwitch);\n","import React, { useEffect } from \"react\";\n\n\nconst GoogleMap = (props) => {\n const { centerCoordinate, coordinates } = props\n\n const loadMap = (center) => {\n let container = document.getElementById(\"report-google-map\");\n\n if ( container && window.google ) {\n let bounds = new window.google.maps.LatLngBounds();\n let infoWindow = new window.google.maps.InfoWindow();\n if ( center ) {\n center = new window.google.maps.LatLng(center[1], center[0]);\n }\n\n const map = new window.google.maps.Map(container, {\n zoom: 10,\n center: center\n });\n\n coordinates && coordinates.length && coordinates.map((cord, index) => { // The marker, positioned at Uluru\n let marker = new window.google.maps.Marker({\n position: { lat: cord[1], lng: cord[0]},\n map: map,\n });\n\n bounds.extend(marker.position)\n window.google.maps.event.addListener(marker, 'click', (function(marker, i) {\n return function() {\n infoWindow.setContent(cord[0]);\n infoWindow.open(map, marker);\n }\n })(marker, index));\n });\n\n map.fitBounds(bounds);\n\n \n }\n }\n\n useEffect(() => {\n window.addEventListener('google-map-api-loaded', loadMap)\n return () => {\n window.removeEventListener('google-map-api-loaded', loadMap);\n }\n }, []);\n\n useEffect(() => {\n loadMap();\n }, [coordinates]);\n\n return (\n
\n )\n}\n\nexport default GoogleMap;\n","import React, {useState, useEffect} from \"react\";\nimport {connect} from \"react-redux\";\n\nimport {Card, Row, Col, Switch, Table, Space} from \"antd\";\n\nimport GoogleMap from \"../GoogleMap\";\nimport {moneyFormatter, toTitleCase} from \"../../../../../utils/commonUtils\";\nimport {PROPERTY} from \"../../../../../constants/fastCMA\";\nimport './ComparablesEstimate.scss';\n\nconst formatNumber = (number) => {\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\n}\n\nconst Statistics = connect(state => {\n const fastCMA = state.FastCMAReducer\n return {\n subject: fastCMA.cma.result.subject,\n properties: fastCMA.cma.result.payload,\n activeStatus: fastCMA.cma.active_status,\n selectedProperties: fastCMA.cma.selected_properties,\n }\n}, null)(props => {\n const {className, activeStatus, properties, subject, isSelected, selectedProperties} = props\n const current = activeStatus === PROPERTY.STATUS.NONACTIVE.key ? PROPERTY.STATUS.SOLD.key : activeStatus;\n\n const propertiesData = isSelected ? properties[current].filter((i, idx) => selectedProperties[current].indexOf(idx) >= 0) : properties[current];\n let minPrice, maxPrice,\n minSquareFeet, maxSquareFeet,\n averagePrice = 0, averageSquareFeet = 0,\n minYearBuilt, maxYearBuilt, averageYearBuilt = 0,\n minBathRoom, maxBathRoom, averageBathRoom = 0,\n minRecency, maxRecency, averageRecency = 0,\n minDist, maxDist, averageDist = 0,\n minLotSize, maxLotSize, averageLotSize = 0;\n\n const today = new Date()\n propertiesData.forEach(item => {\n let recency = Math.round((today - new Date(item.sold_date || item.list_date)) / (24 * 60 * 60 * 1000))\n let distance = item.dist * 0.000621\n minRecency = !minRecency ? recency : (recency < minRecency ? recency : minRecency);\n maxRecency = !maxRecency ? recency : (recency < maxRecency ? maxRecency : recency);\n averageRecency += recency;\n\n minDist = !minDist ? distance : (distance < minDist ? distance : minDist);\n maxDist = !maxDist ? distance : (distance < maxDist ? maxDist : distance);\n averageDist += distance;\n\n minLotSize = !minLotSize ? item.acres : (item.acres < minLotSize ? item.acres : minLotSize);\n maxLotSize = !maxLotSize ? item.acres : (item.acres < maxLotSize ? maxLotSize : item.acres);\n averageLotSize += item.acres;\n\n let price = item['sold_price'] || item['list_price']\n minPrice = !minPrice ? price : (price < minPrice ? price : minPrice);\n maxPrice = !maxPrice ? price : (price < maxPrice ? maxPrice : price);\n averagePrice += price;\n\n minSquareFeet = !minSquareFeet ? item['square_feet'] : (item['square_feet'] < minSquareFeet ? item['square_feet'] : minSquareFeet);\n maxSquareFeet = !maxSquareFeet ? item['square_feet'] : (item['square_feet'] < maxSquareFeet ? maxSquareFeet : item['square_feet']);\n averageSquareFeet += item.square_feet;\n\n minYearBuilt = !minYearBuilt ? item['year_built'] : (item['year_built'] < minYearBuilt ? item['year_built'] : minYearBuilt);\n maxYearBuilt = !maxYearBuilt ? item['year_built'] : (item['year_built'] < maxYearBuilt ? maxYearBuilt : item['year_built']);\n averageYearBuilt += parseInt(item['year_built'] || 0);\n\n minBathRoom = !minBathRoom ? item['bathroom_total'] : (item['bathroom_total'] < minBathRoom ? item['bathroom_total'] : minBathRoom);\n maxBathRoom = !maxBathRoom ? item['bathroom_total'] : (item['bathroom_total'] < maxBathRoom ? maxBathRoom : item['bathroom_total']);\n averageBathRoom += parseInt(item['bathroom_total'] || 0);\n })\n\n const columns = [\n {\n title: `Available (${propertiesData.length})`,\n dataIndex: 'key'\n },\n {\n title: `${activeStatus === PROPERTY.STATUS.NONACTIVE.key || activeStatus === PROPERTY.STATUS.SOLD.key ? 'Sold' : (activeStatus === PROPERTY.STATUS.ACTIVE.key ? 'List' : 'Leased')} Price`,\n dataIndex: 'price'\n },\n {\n title: \"Square feet\",\n dataIndex: 'squareFeet'\n },\n {\n title: \"Recency (days)\",\n dataIndex: 'recency',\n },\n {\n title: \"Year built\",\n dataIndex: 'yearBuilt'\n },\n {\n title: \"Bathroom\",\n dataIndex: 'bathRoom'\n },\n {\n title: \"Distance (miles)\",\n dataIndex: 'distance'\n },\n {\n title: 'Lot size (acres)',\n dataIndex: 'acres'\n }\n ]\n\n let data = [\n {\n key: 'Minimum',\n price: moneyFormatter.format(minPrice),\n squareFeet: formatNumber(minSquareFeet),\n yearBuilt: minYearBuilt,\n bathRoom: minBathRoom,\n recency: minRecency,\n distance: Math.round(minDist * 100) / 100,\n acres: Math.round(minLotSize * 100) / 100,\n },\n {\n key: 'Maximum',\n price: moneyFormatter.format(maxPrice),\n squareFeet: formatNumber(maxSquareFeet),\n yearBuilt: maxYearBuilt,\n bathRoom: maxBathRoom,\n recency: maxRecency,\n distance: Math.round(maxDist * 100) / 100,\n acres: Math.round(maxLotSize * 100) / 100,\n },\n {\n key: 'Average',\n price: moneyFormatter.format((averagePrice / propertiesData.length).toFixed()),\n squareFeet: formatNumber(Math.round(averageSquareFeet / propertiesData.length)),\n yearBuilt: Math.round(averageYearBuilt / propertiesData.length),\n bathRoom: maxBathRoom,\n recency: Math.round(averageRecency / propertiesData.length),\n distance: Math.round(averageDist / propertiesData.length * 100) / 100,\n acres: Math.round(averageLotSize / propertiesData.length * 100) / 100,\n }\n ]\n return (\n \n )\n})\n\nconst EstimateBlock = (props) => {\n const {estimate, title, extra, switcher, statusKey, activeStatus} = props\n if (!estimate) {\n return null;\n }\n const round = statusKey === PROPERTY.STATUS.LEASED.key ? 2 : 0;\n return (\n \n \n \n {moneyFormatter.format(estimate.sold_price.toFixed(round))}
\n {statusKey === PROPERTY.STATUS.LEASED.key ? 'Monthly Lease' : `${toTitleCase(statusKey)} Price`}\n \n \n {(statusKey === PROPERTY.STATUS.SOLD.key\n || statusKey === PROPERTY.STATUS.ACTIVE.key\n || statusKey === PROPERTY.STATUS.NONACTIVE.key\n ) &&\n <>\n {moneyFormatter.format(estimate.price_per_square_foot.toFixed(2))}\n
\n {(statusKey === PROPERTY.STATUS.SOLD.key && activeStatus === PROPERTY.STATUS.NONACTIVE.key) ? 'Rental Index™' : 'Price per square foot'}\n \n }\n {statusKey === PROPERTY.STATUS.LEASED.key &&\n <>\n {(estimate.rental_index * 100).toFixed(2) || 0}
\n Rental Index\n \n }\n \n \n {(typeof switcher === 'function' && activeStatus !== PROPERTY.STATUS.NONACTIVE.key) &&\n \n
\n Statistics\n \n \n }\n \n )\n}\n\nconst ComparableEstimate = (props) => {\n const {subject, properties, selectedProperties, activeStatus, estimate} = props\n const [showStatistics, setShowStatistics] = useState(false)\n\n const selectedIndex = selectedProperties[activeStatus] || [];\n const data = properties[activeStatus] && properties[activeStatus].length ? properties[activeStatus].filter((item, idx) => selectedIndex.indexOf(idx) >= 0) : [];\n\n let coordinates = [[parseFloat(subject.lon), parseFloat(subject.lat)]];\n if (data.length > 0) {\n for (let property of data) {\n coordinates.push([\n property.lon,\n property.lat\n ]);\n }\n }\n\n const current = activeStatus === PROPERTY.STATUS.NONACTIVE.key ? PROPERTY.STATUS.SOLD.key : activeStatus;\n\n useEffect(() => {\n if (activeStatus === PROPERTY.STATUS.NONACTIVE.key) {\n setShowStatistics(false)\n }\n }, [activeStatus])\n const round = current === PROPERTY.STATUS.LEASED.key ? 2 : 0;\n return (\n <>\n
\n
\n {\n (props?.checkTab === props?.keyItem) ? : null\n }\n
\n
\n
\n

{`${toTitleCase(current)} CMA`}

\n \n
\n

{current === PROPERTY.STATUS.LEASED.key ? 'Monthly Lease' : `${toTitleCase(current)} Price`}

\n

{moneyFormatter.format(estimate[current].sold_price.toFixed(round))}

\n
\n
\n

{(current === PROPERTY.STATUS.SOLD.key && activeStatus === PROPERTY.STATUS.NONACTIVE.key) ? 'Rental Index™' : 'Price per square foot'}

\n \n

{moneyFormatter.format(estimate[current].price_per_square_foot.toFixed(2))}

\n {`${selectedProperties[current].length}/${properties[current].length}`}\n
\n
\n
\n {Object.values(PROPERTY.STATUS).map((item, k) => {\n if (item.key === current || item.key === PROPERTY.STATUS.NONACTIVE.key || item.key === PROPERTY.STATUS.LEASED.key) return null;\n\n return (\n <>\n

{`${item.label} CMA`}

\n
\n
\n

{item.key === PROPERTY.STATUS.LEASED.key ? 'Monthly Lease' : `${toTitleCase(item.key)} Price`}

\n

{moneyFormatter.format(estimate[item.key].sold_price.toFixed(round))}

\n
\n {item.key === PROPERTY.STATUS.LEASED.key ? (\n
\n

Rental Index

\n \n

{(estimate.rental_index * 100).toFixed(2) || 0}

\n {`(${selectedProperties[item.key].length}/${properties[item.key].length})`}\n
\n
\n ) : (\n
\n

{(item.key === PROPERTY.STATUS.SOLD.key && activeStatus === PROPERTY.STATUS.NONACTIVE.key) ? 'Rental Index™' : 'Price per square foot'}

\n \n

{moneyFormatter.format(estimate[item.key].price_per_square_foot.toFixed(2))}

\n {`(${selectedProperties[item.key].length}/${properties[item.key].length})`}\n
\n
\n )}\n
\n \n )\n })}\n
\n
\n \n {/**/}\n {/*
*/}\n\n {/* */}\n {/* */}\n {/* {*/}\n {/* setShowStatistics(checked)*/}\n {/* }}*/}\n {/* statusKey={current}*/}\n {/* activeStatus={activeStatus}*/}\n {/* />*/}\n {/* */}\n {/* */}\n {/* {Object.values(PROPERTY.STATUS).map(item => {*/}\n {/* if (item.key === current || item.key === PROPERTY.STATUS.NONACTIVE.key) return null;*/}\n\n {/* let itemData = properties[item.key] && properties[item.key].length ? properties[item.key].filter((item, idx) => selectedIndex.indexOf(idx) >= 0) : [];*/}\n\n {/* return */}\n {/* })}*/}\n {/* */}\n {/**/}\n {showStatistics &&\n \n \n \n \n }\n \n )\n}\n\nconst mapStateToProps = state => {\n const fastCMA = state.FastCMAReducer\n\n return {\n subject: fastCMA.cma.result.subject,\n properties: fastCMA.cma.result.payload,\n activeStatus: fastCMA.cma.active_status,\n selectedProperties: fastCMA.cma.selected_properties,\n estimate: fastCMA.cma.estimate\n }\n}\n\nexport default connect(mapStateToProps, null)(ComparableEstimate);\n","import React, {useEffect, useState, useMemo} from \"react\";\nimport {connect} from \"react-redux\";\n\nimport {Card, Row, Col, Tabs, Input} from \"antd\";\nimport GoogleMap from \"../GoogleMap\";\nimport {moneyFormatter} from \"../../../../../utils/commonUtils\";\nimport {PROPERTY} from \"../../../../../constants/fastCMA\";\nimport './ComparablesShortEstimate.scss';\nimport {initial} from \"lodash\";\n\nconst {TabPane} = Tabs;\n\nconst EstimateCard = (props) => {\n const {estimate, extend, subject, status, defaultEstimate, single} = props\n const currentStatus = status;\n const soldPrice = status === PROPERTY.STATUS.LEASED.key || status === PROPERTY.STATUS.NONACTIVE.key ? estimate[PROPERTY.STATUS.SOLD.key].sold_price : estimate[currentStatus].sold_price\n let initials = {};\n let estimateStatus = status === PROPERTY.STATUS.ACTIVE.key ? PROPERTY.STATUS.ACTIVE.key : PROPERTY.STATUS.SOLD.key;\n if (defaultEstimate) {\n initials = {\n [PROPERTY.STATUS.SOLD.key]: {\n gross: defaultEstimate[PROPERTY.STATUS.SOLD.key].price - defaultEstimate[PROPERTY.STATUS.SOLD.key].grossDiscount,\n percent: defaultEstimate[PROPERTY.STATUS.SOLD.key].percentDiscount.toFixed(2)\n },\n [PROPERTY.STATUS.ACTIVE.key]: {\n gross: defaultEstimate[PROPERTY.STATUS.ACTIVE.key].price - defaultEstimate[PROPERTY.STATUS.ACTIVE.key].grossDiscount,\n percent: defaultEstimate[PROPERTY.STATUS.ACTIVE.key].percentDiscount.toFixed(2)\n },\n }\n } else {\n initials = {\n [PROPERTY.STATUS.SOLD.key]: {\n gross: estimate[PROPERTY.STATUS.SOLD.key].sold_price * 0.7,\n percent: 30\n },\n [PROPERTY.STATUS.ACTIVE.key]: {\n gross: estimate[PROPERTY.STATUS.ACTIVE.key].sold_price.price * 0.7,\n percent: 30\n },\n }\n }\n\n const [config, setConfig] = useState(initials)\n\n const gridStyle = {\n width: extend ? '16.65%' : '25%'\n }\n\n const handleChange = (e) => {\n const {value} = e.target;\n let offer = parseFloat(value.replace(/([^\\d\\.\\s]+)/g, ''))\n offer = isNaN(offer) ? 0 : offer;\n setConfig({\n ...config,\n [estimateStatus]: {\n gross: offer.toFixed(),\n percent: ((soldPrice - offer) / soldPrice * 100).toFixed()\n }\n });\n };\n\n return (\n \n \n {moneyFormatter.format(Math.floor(soldPrice))}\n Estimated price\n \n \n {currentStatus === PROPERTY.STATUS.NONACTIVE.key ? 0 : moneyFormatter.format(Math.floor(estimate[PROPERTY.STATUS.LEASED.key].sold_price))}\n Monthly lease\n \n {extend &&\n <>\n \n \n \n \n Asking/offer price\n \n \n {currentStatus === PROPERTY.STATUS.NONACTIVE.key ? 0 : moneyFormatter.format(Math.floor(soldPrice - config[estimateStatus].gross))}\n IQ Discount™\n \n \n {currentStatus === PROPERTY.STATUS.NONACTIVE.key ? 0 : config[estimateStatus].percent}%\n IQ Discount %™\n \n \n {((estimate[PROPERTY.STATUS.LEASED.key].sold_price / parseFloat(config[estimateStatus].gross)) * 100).toFixed(2)}\n Rental Index™\n \n \n }\n \n )\n}\n\nconst ComparableShortEstimate = (props) => {\n const {subject, properties, selectedProperties, activeStatus, estimate, defaultEstimate} = props\n // const selectedIndex = selectedProperties[activeStatus] || [];\n // const data = properties[activeStatus] && properties[activeStatus].length ? properties[activeStatus].filter((item, idx) => selectedIndex.indexOf(idx) >= 0) : [];\n //\n // let coordinates = [[subject.lon, subject.lat]];\n // if (data.length > 0) {\n // for (let property of data) {\n // coordinates.push([\n // property.lon,\n // property.lat\n // ]);\n // }\n // }\n\n return (\n \n \n \n \n {/**/}\n \n \n {/**/}\n \n \n \n \n )\n}\n\nconst mapStateToProps = state => {\n const fastCMA = state.FastCMAReducer\n\n return {\n // subject: fastCMA.cma.result.subject,\n // properties: fastCMA.cma.result.payload,\n // defaultEstimate: {\n // distance: fastCMA.cma.result.distance,\n // recency: fastCMA.cma.result.recency,\n // active: {\n // grossDiscount: fastCMA.cma.result.activeEstGrossDiscount,\n // percentDiscount: fastCMA.cma.result.activeEstPercentDiscount,\n // price: fastCMA.cma.result.activeEstimatedPrice\n // },\n // leased: {\n // monthly: fastCMA.cma.result.estimatedMonthlyLease,\n // rentalIndex: fastCMA.cma.result.rentalIndex\n // },\n // sold: {\n // grossDiscount: fastCMA.cma.result.soldEstGrossDiscount,\n // percentDiscount: fastCMA.cma.result.soldEstPercentDiscount,\n // price: fastCMA.cma.result.soldEstimatedPrice\n // }\n // },\n // selectedProperties: fastCMA.cma.selected_properties,\n activeStatus: fastCMA.cma.active_status,\n // estimate: fastCMA.cma.estimate\n }\n}\n\nexport default connect(mapStateToProps, null)(ComparableShortEstimate);\n\nexport {\n EstimateCard\n}\n","import React from \"react\"\nimport {connect} from \"react-redux\";\n\nimport {MARKET} from \"../../../constants/fastCMA\";\nimport {Image as AntdImage} from \"antd\";\n\nconst Image = (props) => {\n const {market, id, width, height, index, className} = props\n\n const getImageUrl = (id) => {\n let url = MARKET[market.toUpperCase()].STATIC_URI.replace('[id]', id)\n if (index) url = url.replace('img-1', `img-${index}`);\n return url;\n }\n return \n}\n\nexport default connect(state => {\n const data = state.FastCMAReducer\n return {\n market: data?.cma.market || 'houston'\n }\n}, null)(Image);\n","import React, {useState, useEffect, useRef} from \"react\";\nimport {connect} from \"react-redux\";\n\nimport './Comparables.scss';\nimport {Typography, Checkbox, Row, Col, Image as AntdImage, Tabs, Card, Radio, Grid, Table, Button} from \"antd\";\nimport {StarFilled, UnorderedListOutlined, FileImageOutlined} from \"@ant-design/icons\";\nimport {TAB_COMPARABLES, FIELD_COMPARA, properties as compareFields, COLUMN_PRIMARY} from \"./compareFields\";\nimport ComparableStatusSwitch from \"./ComparableStatusSwitch\"\nimport ComparablesEstimate from \"./ComparablesEstimate\";\nimport ComparablesShortEstimate from \"./ComparablesShortEstimate\";\nimport {moneyFormatter} from \"../../../../../utils/commonUtils\";\n\nimport {cma_set_active_status, set_selected_property} from \"../../../../../data/actions/fastCMA\";\nimport {MARKET, PROPERTY} from \"../../../../../constants/fastCMA\";\nimport Image from \"../../Image\"\nimport {cloneDeep} from \"lodash\";\n\nconst {Title} = Typography\nconst {TabPane} = Tabs\n\nconst TableScroll = connect(state => {\n const fastCMA = state.FastCMAReducer;\n\n return {\n selectedProperty: fastCMA.cma?.selected_properties\n }\n}, null)(props => {\n const {selectedProperty} = props\n useEffect(() => {\n let table = window.document.querySelector('.comparable__table-wrapper')\n let scrollLeft = table.getAttribute('data-scroll-left')\n if (table.scrollLeft !== scrollLeft) {\n table.scrollLeft = scrollLeft\n }\n })\n\n return <>\n})\nconst PropertySelectBox = connect(state => {\n const fastCMA = state.FastCMAReducer;\n\n return {\n // subject: fastCMA.cma?.result.subject,\n // properties: fastCMA.cma?.result.payload,\n activeStatus: fastCMA.cma?.active_status,\n // selectedProperty: fastCMA.cma?.selected_properties\n }\n}, dispatch => {\n return {\n setSelectedProperty: (selectedIndex) => {\n dispatch(set_selected_property({\n selectedIndex: selectedIndex\n }))\n }\n }\n})((props) => {\n const {index, selectedProperty, setSelectedProperty, activeStatus, properties, className, title} = props\n const compareData = properties && properties[activeStatus] ? properties[activeStatus] : [];\n const checkedList = selectedProperty[activeStatus];\n const isChecked = index === 'all' ? checkedList.length === compareData.length : (checkedList && checkedList.indexOf(index) >= 0);\n\n const changeHandle = (e) => {\n const index = e.target.value\n let listItem = [...checkedList];\n\n let keys = Object.keys(compareData).map(i => parseInt(i));\n if (e.target.checked) {\n if (index === 'all') {\n listItem = keys;\n } else {\n if (listItem.indexOf(index) < 0) {\n listItem.push(index)\n }\n }\n } else {\n if (index === 'all') {\n listItem = [];\n } else {\n for (let i = 0; i < listItem.length; i++) {\n if (listItem[i] === index) {\n listItem.splice(i, 1);\n }\n }\n }\n }\n setSelectedProperty(listItem);\n }\n\n if (checkedList.indexOf(index) >= 0) {\n className.push('comparable__cell--selected')\n }\n\n return \n})\n\nconst ComparableCol = connect(state => {\n const fastCMA = state.FastCMAReducer;\n return {\n activeStatus: fastCMA.cma?.active_status,\n // selectedProperty: fastCMA.cma?.selected_properties,\n market: fastCMA.cma?.market,\n }\n\n}, null)(props => {\n const {isSubject, index, type, data, dataKey, selectedProperty, activeStatus, market} = props\n const today = (new Date())\n const selectedList = selectedProperty[activeStatus]\n const isSelected = selectedList && selectedList.indexOf(index) >= 0\n\n const displayCell = (className) => {\n switch (type) {\n case 'checkbox':\n return isSubject ? : ;\n case 'image':\n return \n case 'money':\n return moneyFormatter.format(data[dataKey]);\n case 'list_price_orig':\n return Math.round(data['list_price'] / data['list_price_orig'] * 100) + '%';\n case 'date':\n const d = new Date(data[dataKey]);\n\n let month = '' + (d.getMonth() + 1),\n day = '' + d.getDate(),\n year = d.getFullYear(),\n hour = d.getHours(),\n second = \"0\" + d.getSeconds();\n return `${month}-${day}-${year} ${(\"0\" + hour).slice(-2)}:${second.slice(-2)} ${hour >= 12 ? 'PM' : 'AM'}`;\n case 'price_per_square_foot':\n return ${Math.round((data['sold_price'] || data['list_price']) / data['square_feet'] * 100) / 100}\n case 'recency_day':\n return Math.round(((today - (new Date(data['sold_date'] || data['modified_date']))) / (24 * 60 * 60 * 1000)));\n case 'distance':\n return Math.round((data['dist'] || 0) * 0.00062137 * 100) / 100;\n case 'street_name':\n return [data[\"street_box_num\"], data[\"street_name\"], data[\"street_type\"]].join(' ');\n default:\n let value = Array.isArray(dataKey) ? dataKey.map(k => data[k] || 'N/A').join(' / ') : data[dataKey];\n return {value || 'N/A'};\n }\n }\n const className = ['comparable__cell']\n !!isSubject && className.push('comparable__cell--subject');\n !!isSelected && !isSubject && className.push('comparable__cell--selected');\n if (type === 'checkbox' && !isSubject) {\n return displayCell(className)\n }\n return (\n \n )\n})\n\nfunction useTraceUpdate(props) {\n const prev = useRef(props);\n useEffect(() => {\n const changedProps = Object.entries(props).reduce((ps, [k, v]) => {\n if (prev.current[k] !== v) {\n ps[k] = [prev.current[k], v];\n }\n return ps;\n }, {});\n if (Object.keys(changedProps).length > 0) {\n console.log('Changed props:', changedProps);\n }\n prev.current = props;\n });\n}\n\nconst PropertyImagesRow = connect(state => {\n const data = state.FastCMAReducer\n return {\n market: data?.cma.market\n }\n}, null)((props) => {\n let {uid, market} = props\n let row = [];\n let style = {\n paddingTop: '8px',\n paddingBottom: '8px',\n }\n for (let i = 0; i < 24; i++) {\n row.push(\n \n \n \n )\n }\n return (\n \n {row}\n \n );\n})\n\nconst Comparables = (props) => {\n const {subject, properties, activeStatus, setActiveStatus, setSelectedProperty} = props;\n const [selectedRowKeys, setSelectedRowKeys] = useState([0]),\n [resultTable, setResultTable] = useState([]),\n [selectedRowByTab, setSelectedRowByTab] = useState({\n sold: [0],\n active: [0],\n leased: [0],\n nonActive: [0],\n }),\n [checkTab, setCheckTab] = useState(props?.tabActive);\n\n const compareData = properties && properties[activeStatus] ? properties[activeStatus] : [];\n\n const toggleChildRows = (event) => {\n const target = event.target;\n if (target.classList.contains('comparable__head')) {\n const row = target.parentElement;\n if (!row.classList.contains('comparable__row--has-children')) return;\n if (row.classList.contains('show-child')) {\n row.classList.remove('show-child');\n } else {\n row.classList.add('show-child');\n }\n }\n }\n\n useEffect(() => {\n document.addEventListener('click', toggleChildRows);\n\n return () => {\n document.removeEventListener('click', toggleChildRows)\n }\n }, [])\n\n useEffect(() => {\n setSelectedRowKeys(props?.selectedProperty[activeStatus])\n setSelectedRowByTab(props?.selectedProperty)\n }, [props?.selectedProperty])\n\n useEffect(() => {\n if (Object.keys(properties || {}).length > 0) {\n if ((properties[activeStatus] || []).length > 0) {\n }\n // onSelectChange([properties[activeStatus][0][\"_id\"]])\n }\n }, [properties])\n\n useEffect(() => {\n props?.getTabActive(checkTab)\n }, [checkTab])\n\n useEffect(() => {\n let newResult = [{...subject, keyOrder: -1}, ...compareData.map((i, k) => {\n return {...i, keyOrder: k}\n })];\n setResultTable(newResult || [])\n props?.sendResultTable(newResult)\n }, [subject, compareData]);\n\n useEffect(() => {\n setResultTable(props?.resultTable)\n }, [props?.resultTable]);\n\n if (!properties) {\n return null;\n }\n\n const scrollHandle = (evt) => {\n evt.target.setAttribute('data-scroll-left', evt.target.scrollLeft || 0)\n }\n\n const onSelectChange = (newSelectedRowKeys) => {\n // console.log('selectedRowKeys-changed: ', newSelectedRowKeys);\n console.log('selectedRowKeys-changed: ', newSelectedRowKeys);\n setSelectedRowKeys(newSelectedRowKeys);\n setSelectedProperty(newSelectedRowKeys)\n };\n\n const rowSelection = {\n selectedRowKeys,\n onChange: onSelectChange,\n getCheckboxProps: (record) => ({\n disabled: record.keyOrder === -1,\n }),\n };\n\n const changeTabTable = e => {\n setActiveStatus(e)\n setCheckTab(e)\n setSelectedProperty(selectedRowByTab[e])\n }\n\n // console.log(2222, selectedRowByTab)\n\n return (\n <>\n
\n
\n
\n

Comparables

\n
\n
\n \n
\n
\n
\n changeTabTable(e)}>\n {PROPERTY.STATUS && Object.values(PROPERTY.STATUS).map((item, k) =>\n \n \n \n )}\n \n
\n
\n console.log(e)}>\n {\n TAB_COMPARABLES.map((i, k) => {\n return (\n \n 8 ? {\n x: 2000,\n } : false}\n />\n \n )\n })\n }\n \n\n
\n
\n\n {/**/}\n {/**/}\n {/**/}\n\n {/*
*/}\n {/* Comparables*/}\n {/* */}\n {/* List} key=\"list\">*/}\n {/* /!* *!/*/}\n {/*
*/}\n {/* */}\n {/*
{title || (index + 1)}\n {displayCell()}\n
*/}\n {/* {compareFields && compareFields.map((head, index) => (*/}\n {/* <>*/}\n {/* */}\n {/* {index === 0*/}\n {/* ? */}\n {/* : }*/}\n {/* */}\n {/* {compareData.map((property, colIdx) => )}*/}\n {/* */}\n {/* {head.childs &&*/}\n {/* */}\n {/* {head.childs.map((child, childIdx) => (*/}\n {/* */}\n {/* */}\n {/* */}\n {/* {compareData.map((property, colIdx) => )}*/}\n {/* */}\n {/* ))}*/}\n {/* */}\n {/* }*/}\n {/* */}\n {/* ))}*/}\n {/*
{head.title}
{child.title}
*/}\n {/* */}\n {/* /!* *!/*/}\n {/* */}\n {/* Photo} key=\"photo\">*/}\n {/* */}\n {/* */}\n {/* {subject &&*/}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/* }*/}\n {/* {compareData.map((property, colIdx) => (*/}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/* ))}*/}\n {/* */}\n {/*
*/}\n {/* */}\n {/*
{colIdx + 1}*/}\n {/* */}\n {/*
*/}\n {/*
*/}\n {/* */}\n\n {/**/}\n \n )\n}\n\n\nconst mapStateToProps = state => {\n const fastCMA = state.FastCMAReducer;\n\n return {\n subject: fastCMA.cma?.result.subject,\n properties: fastCMA.cma?.result.payload,\n activeStatus: fastCMA.cma?.active_status,\n selectedProperty: fastCMA.cma?.selected_properties\n }\n}\n\nconst mapDispatchToProps = dispatch => {\n return {\n setActiveStatus: (status) => {\n dispatch(cma_set_active_status({\n status: status\n }))\n },\n setSelectedProperty: (selectedIndex) => {\n dispatch(set_selected_property({\n selectedIndex: selectedIndex\n }))\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Comparables);\n","import Comparables from \"./Comparables\";\n\nexport default Comparables;","import React from \"react\"\nimport { Card, Image as AntdImage, Typography } from \"antd\"\nimport { connect } from \"react-redux\";\nimport { MARKET } from \"../../../../../constants/fastCMA\";\nimport Image from \"../../Image\"\n\nconst { Title } = Typography\n\nconst gridStyles = {\n border: 'none',\n boxShadow: 'none',\n padding: '1.125em',\n display: 'flex',\n flexWrap: 'wrap',\n fontSize: '14px',\n flexDirection: 'column'\n}\n\nconst formatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n});\n\nconst Grid = (props) => {\n const { style, isRow } = props\n let combineStyle = {\n ...gridStyles,\n ...style\n }\n if ( isRow ) {\n combineStyle.flexDirection = 'row';\n }\n\n return (\n \n {props.children}\n \n )\n}\n\nconst DetailListing = (props) => {\n const { data } = props\n return (\n
    \n {data.map((item, idx) => \n
  • \n {item.label && {item.label}: }\n {item.value}\n
  • \n )}\n
\n )\n}\n\nconst SubjectDetails = connect(state => {\n const data = state.fastCMAReducer\n return {\n market: data?.cma.market\n }\n}, null)((props) => {\n const { subject, market } = props\n \n return (\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 Subdivision and schools\n \n \n \n \n MLS\n \n \n \n \n CMA\n \n \n \n \n {subject.public_remark || \"\"}\n \n \n )\n})\n\nexport default SubjectDetails;","import React, {useEffect} from \"react\";\nimport {connect} from \"react-redux\";\nimport {find_comparables} from \"../../../data/actions/fastCMA\";\n\nimport \"./FindComparablesForm.scss\";\n\nimport {Form, Row, Col, Button, Space, Radio, Input, InputNumber, Slider, Checkbox} from \"antd\";\nimport {CaretDownOutlined, CaretUpOutlined, LoadingOutlined} from \"@ant-design/icons\";\nimport {Typography, Select} from \"antd\";\nimport {useState} from \"react\";\nimport {MARKET} from \"../../../constants/fastCMA\";\n\nconst {Title} = Typography;\nconst {Option} = Select;\n\nconst TextField = (props) => {\n const {name, field, type, step, min, max} = props\n const numberParser = (value) => {\n return Math.round(parseFloat(value.replace(/[^0-9\\.\\,]*/g, '')) * 100) / 100\n }\n const onSliderChange = (value) => {\n\n }\n\n return (\n <>\n \n {type === 'number' ?\n : }\n \n {/* {typeof min !== 'undefined' && typeof max !== 'undefined' && } */}\n \n )\n}\n\nconst SelectField = (props) => {\n const {name, field} = props\n const [getValues, setGetValues] = useState();\n const handleChange = (value) => {\n setGetValues(value)\n // console.log(value)\n }\n\n useEffect(() => {\n setGetValues(props?.form?.getFieldValue(name))\n // setGetValues(props?.form?.getFieldsValue(name))\n }, []);\n\n if (field.mode === \"multiple\") {\n return (\n \n e?.open ? : }\n showArrow\n className=\"custom--selector\"\n mode={field.mode}\n style={{width: \"100%\"}}\n onChange={handleChange}\n optionLabelProp=\"label\"\n >\n {/**/}\n {/*{Object.keys(field.options).map((key) => )}*/}\n {Object.keys(field.options).map((key) => {\n return (\n \n )\n })}\n \n \n )\n } else {\n return (\n \n e?.open ? : }\n className=\"custom--selector\"\n mode={field.mode}\n style={{width: \"100%\"}}\n onChange={handleChange}\n >\n \n {Object.keys(field.options).map((key) => )}\n \n \n )\n }\n}\n\nconst FindComparablesForm = (props) => {\n const {findComparables, cmaStatus, subject, defaultType, market} = props;\n const [type, setType] = useState(defaultType || \"arv-distance\");\n const [odlParams, setOdlParams] = useState({});\n const [form] = Form.useForm();\n useEffect(() => {\n return () => {\n form.resetFields();\n }\n }, []);\n\n useEffect(() => {\n setOdlParams(props?.params)\n if (Object.keys(props?.params || {}).length > 0) {\n form.setFieldsValue({\n \"property-type\": props?.params?.property_type,\n \"property-sub-type\": (props?.params?.property_subtype || \"\").split((\",\")),\n \"year-build\": props?.params?.year_built,\n \"latitude\": props?.params?.latitude,\n \"longitude\": props?.params?.longitude,\n \"property_address\": props?.params?.property_address,\n \"square-feet\": props?.params?.square_feet,\n })\n }\n }, [props.params]);\n\n\n const formFields = {\n \"property-type\": {\n label: \"Property type\",\n options: MARKET[market.toUpperCase()].PROPERTY_TYPE,\n },\n \"property-sub-type\": {\n label: \"Property Sub type\",\n mode: \"multiple\",\n options: MARKET[market.toUpperCase()].PROPERTY_SUB_TYPE,\n },\n \"year-build\": {\n label: \"Year build\",\n defaultValue: subject ? subject.year_built : \"2006\"\n },\n \"square-feet\": {\n label: \"Square feet\",\n defaultValue: subject ? subject.square_feet : \"1694\"\n },\n \"recency\": {\n label: 'Recency (days)',\n defaultValue: 180,\n tooltip: 'Number of days to find Sold/Leased properties from CMA date. Minimum value can be 0 days and maximum can be 1080 days. If it is 0, it will show all properties.'\n },\n 'distance': {\n label: 'Distance range +/-(miles)',\n defaultValue: '0.25',\n tooltip: 'Distance is in miles. Maximum distance is 10 miles, minimum distance 0 of a mile. If it is 0, it will show all properties.'\n },\n 'year-build-range': {\n label: 'Year built range +/-(years)',\n defaultValue: 10,\n tooltip: 'Year Built +-. If the property was built in 2000 and you have 10+-, it means the system will find comparables between 1990 and 2010. Maximum is 200 years. If it is 0, it will show all properties.'\n },\n 'square-feet-range': {\n label: 'Square feet range (%)',\n defaultValue: 20,\n tooltip: 'Square Feet percentage. For example if it is 1000 sf and you have 20%. The system will search houses between 800 sf and 1,200 sf. Minimum is 0 maximum is 100%. If it is 0%, it will show all properties.'\n }\n };\n\n const initialValues = {};\n for (let key in formFields) {\n let defaultValue = (formFields[key].defaultValue || '');\n if (formFields[key].options) {\n defaultValue = Object.keys(formFields[key].options);\n if (formFields[key].mode !== 'multiple') {\n defaultValue = defaultValue[0]\n }\n }\n initialValues[key] = defaultValue;\n }\n\n const handleTypeChange = (event) => {\n const updateType = event.target.value;\n setType(updateType);\n };\n\n const onReset = () => {\n form.resetFields();\n };\n\n const onSubmitHandle = (values) => {\n if (Object.keys(props?.params || {}).length < 1) {\n values.subject = subject?.mls_num;\n values.latitude = subject?.latitude;\n values.longitude = subject?.longitude;\n values.property_address = props?.getAddress;\n values.idres_property = subject?.idres_property || \"\";\n }\n if (!!defaultType) {\n values = {\n ...subject,\n ...values\n };\n }\n if (Object.keys(props?.params || {}).length > 0) {\n findComparables(type, values, !!defaultType, values)\n } else {\n findComparables(type, values, !!defaultType)\n }\n }\n\n // useEffect(() => {\n // form.resetFields();\n // }, [subject])\n return (\n \n {!defaultType &&\n \n ARV - Distance\n ARV - Subdivision\n Custom CMA\n \n }\n\n \n Property Information\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n {/*{type === 'custom' &&*/}\n {/* <>*/}\n {/* */}\n {/* Comparable criteria*/}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/*}*/}\n\n
\n
\n \n \n
\n
\n \n );\n};\n\nconst mapStatesToProps = state => {\n const data = state.FastCMAReducer\n return {\n cmaStatus: data.cma.status,\n subject: data.address_lookup.subject,\n market: data.cma.market || 'houston'\n }\n}\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n findComparables: (type, params, showResult, popupValue) => {\n dispatch(find_comparables({\n type: type,\n filter: params,\n showResult: showResult,\n popupValue: popupValue\n }));\n }\n }\n}\n\nexport default connect(mapStatesToProps, mapDispatchToProps)(FindComparablesForm);\n","import SubjectDetailOverview from \"./SubjectDetailOverview\";\nimport SubjectDetails from \"./SubjectDetails\";\n\nexport default SubjectDetailOverview;","import React, {useState} from \"react\";\nimport {connect} from \"react-redux\";\n\nimport {\n Card,\n Row,\n Col,\n Image as AntdImage,\n Button,\n Modal,\n Collapse,\n Space,\n InputNumber,\n Input,\n Form,\n Badge\n} from \"antd\";\nimport {EditOutlined, ShareAltOutlined} from \"@ant-design/icons\";\nimport SubjectDetails from \"./SubjectDetails\";\nimport FindComparablesForm from \"./../../FindComparablesForm\";\nimport Image from \"../../Image\";\nimport {show_cma_report} from \"../../../../../data/actions/fastCMA\";\n\nconst SubjectDetailOverview = (props) => {\n const {subject, market, showReport} = props\n const [showSubjectDetail, setIsSubjectModalVisible] = useState(false);\n const [showFindComparableModal, setshowFindComparableModal] = useState(false);\n\n const openFindComparableModal = (evt) => {\n setshowFindComparableModal(true);\n }\n\n const hideFindComparableModal = (evt) => {\n setshowFindComparableModal(false);\n }\n\n const openDetailModal = (event) => {\n setIsSubjectModalVisible(true)\n }\n\n const hideDetailModalHandle = () => {\n setIsSubjectModalVisible(false)\n }\n\n const showReportAndShare = () => {\n showReport();\n }\n\n if (!subject) {\n return null;\n }\n\n return (\n <>\n {\n }} className=\"mb-3 hn__detail-cma--section-overview box--shadow\">\n \n
\n
\n \n
\n

No Image

\n \n
\n
\n

{subject.prop_type} \n

\n

{props.params?.property_address || \"-\"}

\n \n \n {subject?.square_feet || \"0\"} sq ft\n \n {subject?.acres || \"\"} acres\n \n
\n \n
\n

House type

\n

{subject?.house_type || \"\"}

\n
\n
\n

Subdivision

\n

{subject?.subdivision || \"\"}

\n
\n
\n

Year built

\n

{subject?.year_built || \"\"}

\n
\n
\n
\n

\n + info\n

\n
\n \n
\n
\n

Estimated Value

\n \n
\n

Estimated Price

\n

$0

\n
\n
\n

Montly Lease

\n

$0

\n
\n
\n
\n

Investment Summary

\n \n
\n

Offer / Asking Price

\n

\n \n \n \n

\n
\n
\n

IQ Discount

\n

\n $0\n \n

\n
\n
\n

Rental Index

\n

0

\n
\n
\n
\n
\n \n \n\n {/**/}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/*
    */}\n {/*
  • Year build: {subject.year_built}
  • */}\n {/*
  • Square feet: {subject.square_feet}
  • */}\n {/*
  • Lot size (acres): {subject.acres}
  • */}\n {/*
  • */}\n {/*
*/}\n {/* */}\n {/* */}\n {/*
    */}\n {/*
  • Property type: {subject.prop_type}
  • */}\n {/*
  • House type: {subject.house_type}
  • */}\n {/*
  • Subdivision: {subject.subdivision}
  • */}\n {/*
*/}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/* */}\n {/*
*/}\n {/*
*/}\n\n \n \n \n\n \n \n \n \n )\n}\n\nconst mapStateToProps = (state) => {\n const fastCMA = state.FastCMAReducer;\n\n return {\n subject: fastCMA.cma?.result.subject,\n market: fastCMA.cma?.market\n }\n}\n\nconst mapDispatchToProps = dispatch => {\n return {\n showReport: (params) => {\n dispatch(show_cma_report());\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SubjectDetailOverview);\n","import React, {useEffect, useState} from \"react\"\nimport {EditOutlined, ShareAltOutlined} from \"@ant-design/icons\"\n\nimport {Radio, Row, Col, Image, Card, Modal, Button, Typography, Checkbox} from \"antd\"\nimport {mls_search_result as searchResult} from \"../../../../data/demos/demo_cma\";\n\nimport Comparables from \"./Comparables\";\nimport SubjectDetailOverview from \"./Subject\";\nimport \"./Report.scss\"\nimport {PROPERTY} from \"../../../../constants/fastCMA\";\n\nconst Report = (props) => {\n const data = searchResult.payload\n const [selectedProperty, setSelectedProperty] = useState({}),\n [defaultEstimate, setDefaultEstimate] = useState({})\n\n useEffect(() => {\n if (Object.keys(props?.subject || {}).length > 0 && Object.keys(props?.properties || {}).length > 0) {\n let selected_properties = {},\n newDefaultEstimate = {\n distance: props?.response?.distance,\n recency: props?.response?.recency,\n active: {\n grossDiscount: props?.response?.activeEstGrossDiscount,\n percentDiscount: props?.response?.activeEstPercentDiscount,\n price: props?.response?.activeEstimatedPrice\n },\n leased: {\n monthly: props?.response?.estimatedMonthlyLease,\n rentalIndex: props?.response?.rentalIndex\n },\n sold: {\n grossDiscount: props?.response?.soldEstGrossDiscount,\n percentDiscount: props?.response?.soldEstPercentDiscount,\n price: props?.response?.soldEstimatedPrice\n }\n }\n setDefaultEstimate(newDefaultEstimate)\n for (let i in PROPERTY.STATUS) {\n let currentStatus = (PROPERTY.STATUS[i])\n selected_properties[currentStatus.key] = props?.properties && props?.properties[currentStatus.key] ?\n props?.properties[currentStatus.key].map((i, idx) => ({\n index: idx,\n select: i.select\n })).filter(i => i.select).map(i => i.index) : [];\n }\n setSelectedProperty(selected_properties)\n }\n }, []);\n\n const calculateEstimate = (subject, properties, activeStatus) => {\n let result = {}\n\n for (let key in PROPERTY.STATUS) {\n let status = PROPERTY.STATUS[key]\n let sold_price = 0;\n let data = properties[status.key]\n let price_per_square_foot = 0;\n\n if (properties) {\n data = data.filter((item, index) => selectedProperty[status.key].indexOf(index) >= 0)\n if (data.length > 0) {\n for (let property of data) {\n price_per_square_foot += ((property.sold_price || property.list_price) || 0) / property.square_feet;\n sold_price += (property.sold_price || property.list_price) || 0;\n }\n\n price_per_square_foot = price_per_square_foot / data.length;\n sold_price = sold_price / data.length;\n // sold_price = price_per_square_foot * subject.square_feet;\n }\n }\n\n result[status.key] = {\n price_per_square_foot: price_per_square_foot,\n sold_price: sold_price\n }\n if (status.key === PROPERTY.STATUS.LEASED.key) {\n result[status.key].rental_index = sold_price / subject.list_price\n }\n }\n return result;\n }\n\n return (\n
\n \n\n props?.sendResultTable(e)}\n source={data}\n onShowReportnShare={e => props?.onShowReportnShare(e)}\n tabActive={props?.tabActive}\n getTabActive={e => props?.getTabActive(e)}\n />\n
\n )\n}\n\nexport default Report;\n","import React, {useEffect, useState} from \"react\";\n\nimport {Card, Row, Col, Tabs, Typography, Table, Radio, Checkbox, Button, Modal, Form, Input} from \"antd\";\nimport {StarFilled} from \"@ant-design/icons\";\nimport {connect} from \"react-redux\";\n\nimport {PROPERTY} from \"../../../../constants/fastCMA\";\nimport {moneyFormatter} from \"../../../../utils/commonUtils\";\nimport {cma_export_pdf} from \"../../../../data/actions/fastCMA\";\n\nimport Image from \"../Image\";\nimport \"./ReportAndShare.scss\";\n\nconst {TabPane} = Tabs;\nconst {Title, Text} = Typography\nconst {TextArea} = Input\n\n\nconst EstimateCard = connect(state => {\n const data = state.FastCMAReducer;\n\n return {\n subject: data.cma?.result.subject,\n properties: data.cma?.result.payload,\n selectedProperty: data.cma?.selected_properties,\n estimate: data.cma?.estimate,\n defaultEstimate: {\n distance: data?.cma.result.distance,\n recency: data?.cma.result.recency,\n active: {\n grossDiscount: data?.cma.result.activeEstGrossDiscount,\n percentDiscount: data?.cma.result.activeEstPercentDiscount,\n price: data?.cma.result.activeEstimatedPrice\n },\n leased: {\n monthly: data?.cma.result.estimatedMonthlyLease,\n rentalIndex: data?.cma.result.rentalIndex\n },\n sold: {\n grossDiscount: data?.cma.result.soldEstGrossDiscount,\n percentDiscount: data?.cma.result.soldEstPercentDiscount,\n price: data?.cma.result.soldEstimatedPrice\n }\n },\n }\n}, null)((props) => {\n const {estimate, subject, status, defaultEstimate, extend, selectedProperty, properties, reportType} = props\n\n const currentStatus = Object.values(PROPERTY.STATUS).filter(i => i.key === status)[0];\n const soldPrice = estimate[status].sold_price;\n const activePrice = estimate[PROPERTY.STATUS.ACTIVE.key].sold_price;\n\n let estimateStatus = status === PROPERTY.STATUS.ACTIVE.key ? PROPERTY.STATUS.ACTIVE.key : PROPERTY.STATUS.SOLD.key;\n let selectedProp = properties[status] ? properties[status].filter((i, idx) => selectedProperty[status].indexOf(idx) >= 0) : [];\n let avgDom = 0;\n\n if (selectedProp.length > 0) {\n for (let i in selectedProp) {\n if (selectedProp[i].dom) avgDom += selectedProp[i].dom\n }\n avgDom = avgDom / selectedProp.length;\n }\n\n\n const gross = defaultEstimate[PROPERTY.STATUS.SOLD.key].price - defaultEstimate[PROPERTY.STATUS.SOLD.key].grossDiscount;\n const percent = defaultEstimate[PROPERTY.STATUS.SOLD.key].percentDiscount.toFixed(2)\n // const avgDom\n const gridStyle = {\n width: extend ? '16.65%' : '25%'\n }\n\n return (\n \n {(extend || (!extend && status !== PROPERTY.STATUS.LEASED.key)) &&\n \n {moneyFormatter.format(Math.floor(soldPrice))}\n Estimated {currentStatus.label} price\n \n }\n\n {extend && reportType === 'retail-report' &&\n <>\n \n {moneyFormatter.format(Math.round(soldPrice / subject?.square_feet))}\n Sold price per square foot\n \n \n {moneyFormatter.format(Math.round(activePrice))}\n Estimate active price\n \n \n {moneyFormatter.format(Math.round(activePrice / subject?.square_feet))}\n Active price per square foot\n \n \n }\n\n {(extend\n || (!extend && status === PROPERTY.STATUS.LEASED.key)) &&\n \n {moneyFormatter.format(Math.floor(estimate[PROPERTY.STATUS.LEASED.key].sold_price))}\n Monthly lease\n \n }\n\n {!extend && status !== PROPERTY.STATUS.LEASED.key &&\n <>\n \n {moneyFormatter.format(Math.round(soldPrice / subject?.square_feet))}\n Price per square foot\n \n \n {Math.round(avgDom)}\n Average days on market\n \n \n }\n\n {(extend && reportType !== 'retail-report') &&\n <>\n \n {moneyFormatter.format(Math.floor(gross))}\n Asking/offer price\n \n \n {moneyFormatter.format(Math.floor(soldPrice - gross))}\n {currentStatus.label} IQ Discount™\n \n \n %{percent}\n {currentStatus.label} IQ Discount %™\n \n \n }\n {((extend && reportType !== 'retail-report') || (!extend && status === PROPERTY.STATUS.LEASED.key)) &&\n \n {((estimate[PROPERTY.STATUS.LEASED.key].sold_price / parseFloat(gross)) * 100).toFixed(2)}\n Rental Index™\n \n }\n \n )\n})\n\nconst DetailListing = (props) => {\n const {data} = props\n return (\n
    \n {data.map((item, idx) =>\n
  • \n {item.label && {item.label}: }\n {item.value}\n
  • \n )}\n
\n )\n}\n\nconst StatusTableRow = props => {\n const {data, status, reportType} = props\n return (\n \n {data.address}\n {data.status}\n\n {data.dist ? Math.round(data.dist * 0.000621 * 100) / 100 : }\n {data.subdivision}\n {data.year_built}\n {data.square_feet}\n {(data.bedroom || 'N/A')}/ {(data.bathroom_total || 'N/A')}\n {(data.garage || 'N/A')}/ {(data.carport || 'N/A')}/ {(data.pool || 'N/A')}\n\n\n {reportType !== 'retail-report' &&\n <>\n {status.key === PROPERTY.STATUS.SOLD.key ? data.sold_date : data.list_date}\n {data.dom}\n {moneyFormatter.format(data.list_price_orig)}\n {moneyFormatter.format(status.key === PROPERTY.STATUS.SOLD.key ? data.sold_price : data.list_price)}\n {moneyFormatter.format(Math.round((status.key === PROPERTY.STATUS.SOLD.key ? data.sold_price : data.list_price) / data.square_feet))}\n \n }\n \n )\n}\n\nconst StatusTable = connect(state => {\n const data = state.FastCMAReducer\n\n return {\n subject: data.cma?.result.subject,\n properties: data.cma?.result.payload,\n selectedProperty: data.cma?.selected_properties\n }\n}, null)(props => {\n const {status, subject, properties, selectedProperty, reportType} = props\n const checkedList = selectedProperty[status.key];\n const rows = properties[status.key].filter((i, idx) => checkedList.indexOf(idx) >= 0);\n\n return (\n <>\n {status.label}\n {reportType !== 'retail-report' && }\n \n \n \n \n \n {reportType !== 'retail-report' && }\n \n \n \n \n\n \n \n\n \n \n \n \n\n {reportType !== 'retail-report' &&\n <>\n \n \n \n \n \n \n }\n \n \n \n \n {rows && rows.map(i => )}\n \n
PropertyDetailsSales Information
AddressStatusDistanceSubdivisionYear builtSquare feetBed/ bathGarage/ carport/ pool{status.key === 'sold' ? 'Sold' : 'List'} dateDays on marketOriginal Price{status.key === 'sold' ? 'Sold' : 'List'} price{status.key === 'sold' ? 'Sold' : 'List'} price/ square foot
\n \n )\n})\n\n\nconst ReportAndShare = (props) => {\n const {subject, exportReportPDF, estimate, properties} = props\n let reportOptions = [];\n for (let key in PROPERTY.STATUS) {\n reportOptions.push({\n label: PROPERTY.STATUS[key].label,\n value: PROPERTY.STATUS[key].key,\n checked: true,\n })\n }\n reportOptions.push({\n label: 'MLS Information',\n checked: true,\n value: 'mls-infor'\n })\n reportOptions.push({\n label: 'Photos',\n value: 'photo'\n })\n\n const [reportOptionsSelect, setReportOptionsSelect] = useState(reportOptions.map(i => i.value))\n\n const [reportType, setReportType] = useState('investment-report')\n const [shareModalVisible, setModalVisible] = useState(false)\n const [confirmLoading, setConfirmLoading] = useState(false)\n const [downloading, setDownloading] = useState(false)\n const [shareEmails, setShareEmails] = useState()\n\n const changeReportTypeHandle = (event) => {\n const updateType = event.target.value;\n setReportType(updateType)\n }\n\n const changeReportOptionsHandle = (checkedValues) => {\n setReportOptionsSelect(checkedValues)\n }\n\n const onExportReportPDF = () => {\n setDownloading(true)\n exportReportPDF({\n options: reportOptionsSelect,\n type: reportType\n })\n }\n\n const onExportReportEmail = () => {\n setConfirmLoading(true);\n exportReportPDF({\n options: reportOptionsSelect,\n type: reportType,\n isEmail: true,\n emails: shareEmails\n });\n\n setTimeout(() => {\n setModalVisible(false);\n setConfirmLoading(false);\n }, 2000);\n }\n\n const handleCancelExportReportEmail = () => {\n setModalVisible(false);\n }\n\n const onShare = () => {\n setModalVisible(true);\n }\n\n const handleTextAreaChange = (event) => {\n setShareEmails(event.target.value)\n }\n\n useEffect(() => {\n window.addEventListener('cma-file-download-already', (event) => {\n setDownloading(false)\n });\n }, []);\n return (\n
\n
\n \n \n \n Retail Report\n Investment Report\n \n
\n

Display the following information in the report:

\n \n\n
\n \n \n \n

{subject?.address}

\n
Add Email Address (optional)
\n\n Email addresses entered here will not be saved to your contact\n list\n \n \n \n \n \n \n
\n
\n \n \n Summary\n <StarFilled/> {subject?.address}\n {\n Object?.keys(estimate || {}).length > 0 ?\n : null\n }\n \n\n \n Details\n \n \n \n \n \n \n \n \n \n\n {reportOptionsSelect.indexOf('mls-infor') >= 0 &&\n \n MLS Information\n \n \n \n \n \n \n \n\n \n \n \n \n \n }\n\n {Object.keys(properties || []).length > 0 ? Object.values(PROPERTY.STATUS).map(i => {\n if (reportOptionsSelect.indexOf(i.key) < 0) {\n return null;\n }\n return (\n \n \n \n )\n }) : null}\n\n {/*{reportOptionsSelect.indexOf('photo') >= 0 &&*/}\n {/* */}\n {/* Photos*/}\n {/* */}\n {/* {[...Array(24)].map((i, idx) =>*/}\n {/* */}\n {/* */}\n {/* */}\n {/* )}*/}\n {/* */}\n {/* */}\n {/*}*/}\n\n \n Our automated CMA is a calculation of estimated market price, computed using\n proprietary algorithms with 100% MLS data. It is not an appraisal. It is a starting point in\n determining a home's price. It is a broker price opinion or comparative market analysis and\n should not be considered an appraisal or opinion of value. In making any decision that relies\n upon Agents or computer work, you should know that we have not followed the guidelines for\n development of an appraisal or analysis contained in the Uniform Standards of Professional\n Appraisal Practice of the Appraisal Foundation.\n \n
\n
\n
\n )\n}\n\nexport default connect(state => {\n const data = state.FastCMAReducer\n\n return {\n subject: data.cma?.result.subject,\n properties: data.cma?.result.payload,\n estimate: data.cma?.estimate\n }\n}, dispatch => {\n return {\n exportReportPDF: (params) => {\n dispatch(cma_export_pdf(params))\n }\n }\n})(ReportAndShare);\n","import React from \"react\";\n\nimport { Typography, Form, Button, Input, Table, Layout, Row, Col, Tabs, Upload, Card } from \"antd\";\nimport { DownloadOutlined, UploadOutlined } from '@ant-design/icons';\nimport './BatchCMA.scss';\n\nconst { Content } = Layout\nconst { Title, Text, Link } = Typography\nconst { TabPane } = Tabs;\n\n\n\nconst UploadCMA = (props) => {\n const [form] = Form.useForm();\n\n return (\n <>\n Upload a list of addresses and have Batch CMA perform automated valuation on each address using the ARV-Distance and ARV-Subdivision algorithms. Each address in the input file will deduct one from the Batch CMAs Available counter.\n
\n \n \n Download template
\n Download our template and add multiple addresses and re-upload it for searching batch cma.
\n \n \n \n Download CSV template here\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\nconst BatchCMA = (props) => {\n const columns = [\n {\n title: 'Batch CMAs Run',\n dataIndex: 'batch-run',\n key: 'batch-run'\n },\n {\n title: 'Batch CMAs Available',\n dataIndex: 'batch-available',\n key: 'batch-available'\n },\n ];\n const data = [\n {\n 'batch-run': 18,\n 'batch-available': 982\n }\n ]\n return (\n \n \n \n My CMAs\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default BatchCMA;","import React from \"react\";\nimport {connect} from \"react-redux\";\nimport {useParams} from \"react-router-dom\";\n\nimport {\n Select\n} from \"antd\"\n\nimport {cma_load_profiles, cma_select_profile} from \"../../../../data/actions/fastCMA\";\nimport {useEffect} from \"react\";\nimport {CaretDownOutlined, CaretUpOutlined} from \"@ant-design/icons\";\n\nconst ProfileSelect = props => {\n const {profiles, editProfile, selectedProfile, disabled, className, loadProfiles} = props\n const {add} = useParams();\n useEffect(() => {\n let storeSearch = localStorage.getItem(\"search_eva\");\n if (storeSearch) {\n storeSearch = JSON.parse(storeSearch)\n editProfile(storeSearch?.profile)\n }\n }, []);\n\n const onProfileChange = (value) => {\n let storeSearch = localStorage.getItem(\"search_eva\");\n if (storeSearch) {\n storeSearch = JSON.parse(storeSearch)\n storeSearch = {\n ...storeSearch,\n profile: value\n }\n localStorage.setItem(\"search_eva\", JSON.stringify(storeSearch))\n } else {\n localStorage.setItem(\"search_eva\", JSON.stringify({profile: value}))\n }\n editProfile(value)\n }\n useEffect(() => {\n if (add !== 'add') {\n loadProfiles();\n }\n }, [])\n\n return (\n e?.open ? : }\n className={` custom--selector ${className ? className : \"\"}`}\n disabled={disabled || !profiles}\n loading={!profiles}\n // value={selectedProfile}\n value={`${localStorage.getItem(\"search_eva\") ? JSON.parse(localStorage.getItem(\"search_eva\") || {})?.profile ? JSON.parse(localStorage.getItem(\"search_eva\") || {})?.profile : (selectedProfile || \"\") : (selectedProfile || \"\")}`}\n style={{width: 120}}\n onChange={onProfileChange}>\n {!profiles && Default}\n {profiles && profiles.map(item =>\n {item.name}\n )}\n \n )\n};\n\nexport default connect(state => {\n const data = state.FastCMAReducer\n\n return {\n profiles: data.cma.profiles || null,\n selectedProfile: data.cma.edit_profile\n }\n}, dispatch => {\n\n return {\n loadProfiles: () => {\n dispatch(cma_load_profiles())\n },\n editProfile: id => {\n dispatch(cma_select_profile(id))\n }\n }\n})(ProfileSelect);\n","import React from \"react\"\nimport {connect} from \"react-redux\"\nimport {run_cma} from \"../../../data/actions/fastCMA\";\n\nimport {Button, Typography, Row, Col, Table} from \"antd\";\nimport {LoadingOutlined} from \"@ant-design/icons\";\n\nconst {Title} = Typography\n\nconst CMAResults = (props) => {\n const {runCMA, data} = props\n const columns = [\n {\n title: 'Sold',\n dataIndex: 'sold',\n key: 'sold',\n },\n {\n title: 'Active',\n dataIndex: 'active',\n key: 'active',\n },\n {\n title: 'Non-Active',\n dataIndex: 'non-active',\n key: 'non-active',\n },\n {\n title: 'Leased',\n dataIndex: 'leased',\n key: 'leased',\n },]\n\n let count = [];\n let total = 0;\n console.log(222, data.payload)\n if (data.payload) {\n const row = {\n sold: data.payload.sold.length,\n active: data.payload.active.length,\n ['non-active']: data.payload.nonActive.length,\n ['leased']: data.payload.leased.length,\n };\n count.push(row)\n } else {\n count.push({\n sold: 0,\n active: 0,\n 'non-active': 0,\n leased: 0\n })\n }\n\n return (\n
\n
\n 0 ? \"fast-cma-findings__item--active\" : \"\"}`}>\n
\n
\n {(data.payload?.sold || []).length}\n
\n
\n

Sold

\n

Properties

\n
\n
\n
\n
\n
\n 0 ? \"fast-cma-findings__item--active\" : \"\"}`}>\n
\n
\n {(data.payload?.active || []).length}\n
\n
\n

Active

\n

Properties

\n
\n
\n
\n \n
\n 0 ? \"fast-cma-findings__item--active\" : \"\"}`}>\n
\n
\n {(data.payload?.leased || []).length}\n
\n
\n

Leased

\n

Properties

\n
\n
\n
\n \n
\n 0 ? \"fast-cma-findings__item--active\" : \"\"}`}>\n
\n
\n {(data.payload?.nonActive || []).length}\n
\n
\n

Non Active

\n

Properties

\n
\n
\n
\n \n
\n \n
\n \n )\n}\n\nconst mapStatesToProps = state => {\n const data = state.FastCMAReducer\n return {\n data: data.cma.result\n }\n}\nconst mapDispatchToProps = (dispatch) => {\n return {\n runCMA: () => {\n dispatch(run_cma())\n }\n }\n}\n\nexport default connect(mapStatesToProps, mapDispatchToProps)(CMAResults);\n","import { useCallback } from \"react\";\nimport { useDispatch } from \"react-redux\";\n\nimport * as HookAction from \"../actions/fastCMA\";\n\nexport const ActionAppendResponse = () => {\n const dispatch = useDispatch()\n return useCallback(\n (filters) => dispatch(HookAction.find_comparables_success(filters)),\n [dispatch]\n )\n}\n\nexport const ActionInit = () => {\n const dispatch = useDispatch()\n return useCallback(\n (filters) => dispatch(HookAction.cmd_init(filters)),\n [dispatch]\n )\n}\n","import {useCallback} from 'react'\nimport {useDispatch} from 'react-redux'\n\nimport * as HookAction from '../actions/comparablesRequestAction'\nimport {comparablesRequestInitStore} from \"../actions/comparablesRequestAction\";\n\nexport const ActionInit = () => {\n const dispatch = useDispatch()\n return useCallback(\n (params) => dispatch(HookAction.comparablesRequestInitStore(params)),\n [dispatch]\n )\n}\n\nexport const ActionGetList = () => {\n const dispatch = useDispatch()\n return useCallback(\n (filters) => dispatch(HookAction.comparablesRequestListAction(filters)),\n [dispatch]\n )\n}\n\nexport const ActionGetItem = () => {\n const dispatch = useDispatch()\n return useCallback(\n (params) => dispatch(HookAction.comparablesRequestDetailAction(params)),\n [dispatch]\n )\n}\n","import React, {useEffect, useState} from \"react\";\nimport {connect} from \"react-redux\";\nimport {withRouter} from \"react-router-dom\";\nimport {loginAction} from \"../../../data/actions/authAction\";\nimport {switch_type} from \"../../../data/actions/fastCMA\";\n\nimport {Tabs, Layout, Typography, Card, Select, Anchor, Button} from \"antd\";\n\nimport AddressLookup from \"./AddressLookUp\";\nimport MLSNumberLookUp from \"./MLSNumberLookUp\";\nimport Report, {ReportAndShare} from \"./Report\";\n\nimport BatchCMA from \"./BatchCMA\";\nimport FindComparablesForm from \"./FindComparablesForm\";\nimport {useScript} from \"../../../utils/commonUtils\";\nimport {STEPS, STEP_VISIBLE} from \"../../../constants/fastCMA\";\nimport {change_market_channel, address_lookup_reset, run_cma} from \"../../../data/actions/fastCMA\";\n\nimport MainLayout from \"../../common/layout/MainLayout\";\nimport CMAResults from \"./CMAResults\";\nimport \"./FastCMA.scss\";\nimport ProfileSelect from \"./Profile/ProfileSelect\";\nimport {CaretDownOutlined, CaretUpOutlined, ReloadOutlined} from \"@ant-design/icons\";\nimport {ActionInit} from \"../../../data/hooks/fastCMA\";\nimport {ActionInit as ActionInitComparables} from \"../../../data/hooks/comparablesRequest\";\n\nconst {TabPane} = Tabs;\n\n\nconst blockStyles = {\n marginTop: '16px',\n backgroundColor: '#f0f0f0',\n}\n\nconst showStep = (checker, currentStep) => {\n return STEP_VISIBLE[checker] && STEP_VISIBLE[checker].indexOf(currentStep) >= 0;\n}\n// change_market_channel\nconst MarketSwitcher = connect(state => {\n const data = state.FastCMAReducer\n return {\n cmaStep: data.step\n }\n}, dispatch => {\n return {\n changeMarket: (market) => {\n dispatch(change_market_channel({\n market: market\n }))\n }\n }\n})((props) => {\n const {changeMarket, cmaStep} = props;\n\n useEffect(() => {\n let storeSearch = localStorage.getItem(\"search_eva\");\n if (storeSearch) {\n storeSearch = JSON.parse(storeSearch)\n changeMarket(storeSearch?.market)\n }\n }, [])\n\n const handleMarketChange = (value) => {\n let storeSearch = localStorage.getItem(\"search_eva\");\n if (storeSearch) {\n storeSearch = JSON.parse(storeSearch)\n storeSearch = {\n ...storeSearch,\n market: value\n }\n localStorage.setItem(\"search_eva\", JSON.stringify(storeSearch))\n } else {\n localStorage.setItem(\"search_eva\", JSON.stringify({market: value}))\n }\n changeMarket(value)\n }\n\n return (\n e?.open ? : }\n className={`custom--selector ${props?.className ? props?.className : \"\"}`}\n defaultValue={`${localStorage.getItem(\"search_eva\") ? JSON.parse(localStorage.getItem(\"search_eva\") || {})?.market ? JSON.parse(localStorage.getItem(\"search_eva\") || {})?.market : \"houston\" : \"houston\"}`}\n disabled={cmaStep !== STEPS.LOOKUP}\n style={{width: 200}}\n onChange={handleMarketChange}>\n Austin Metro\n Houston Metro\n DFW Metro\n SanAntonio Metro\n \n )\n})\n\nconst FastCMA = (props) => {\n const {cmaStep, onTabChange, restart, showCMAResult} = props,\n actionInitComparables = ActionInitComparables(),\n actionInit = ActionInit();\n\n const [getAddress, setGetAddress] = useState(\"\");\n\n useEffect(() => {\n actionInitComparables();\n actionInit();\n // ==> First page loading <===\n // props.history.push(ROUTE_LIST.PreForeClosure)\n return () => {\n actionInit();\n setGetAddress(\"\");\n }\n }, []);\n\n const onChangeHandle = (activeKey) => {\n onTabChange(activeKey)\n }\n\n const onResetFilter = (evt) => {\n evt.preventDefault();\n restart()\n }\n\n const onShowCMAResult = (evt) => {\n evt.preventDefault();\n showCMAResult()\n }\n\n const onGGLoad = () => {\n\n window.dispatchEvent(new Event('google-map-api-loaded'))\n }\n\n // Load script of google map library\n useScript('https://maps.googleapis.com/maps/api/js?key=' + process.env.REACT_APP_GOOGLE_API_KEY + '&libraries=places', onGGLoad);\n\n return (\n \n \n {cmaStep === STEPS.SHOW_CMA_REPORT &&\n <>\n  >  > Report\n & Share\n \n }\n \n \n }\n >\n {\n showStep(STEPS.LOOKUP, cmaStep) && (\n
\n \n \n setGetAddress(e)}\n selectProfile={}\n selectMarket={}\n />\n \n \n \n \n \n \n \n \n
\n )\n }\n\n {/*{showStep(STEPS.FIND_COMPARABLES, cmaStep) &&*/}\n {/*
*/}\n {/*

Find comparables

*/}\n {/* */}\n {/*
*/}\n {/*}*/}\n\n\n {/*{showStep(STEPS.RUN_CMA, cmaStep) &&*/}\n {/*
*/}\n {/*

Run CMA

*/}\n {/* */}\n {/*
*/}\n {/*}*/}\n\n {/*{showStep(STEPS.SHOW_CMA_RESULTS, cmaStep) &&*/}\n {/* */}\n {/* */}\n {/* */}\n {/*}*/}\n\n {/*{showStep(STEPS.SHOW_CMA_REPORT, cmaStep) &&*/}\n {/* */}\n {/* */}\n {/* */}\n {/*}*/}\n\n \n );\n // return \n};\n\nconst mapStateToProps = (state) => {\n const data = state.FastCMAReducer\n return {\n // categories: state.reducerCategory,\n auth: state.authReducer,\n cmaStep: data.step\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n onLogin: (params) => {\n dispatch(loginAction(params));\n },\n onTabChange: (active) => {\n dispatch(switch_type())\n },\n restart: () => {\n // dispatch(address_lookup_reset())\n window.location.reload();\n },\n showCMAResult: () => {\n dispatch(run_cma())\n }\n };\n};\n\nexport default withRouter(\n connect(mapStateToProps, mapDispatchToProps)(FastCMA)\n);\n","import React, { useEffect, useState } from \"react\"\nimport { connect } from \"react-redux\";\nimport { useParams, useHistory } from \"react-router-dom\";\n\nimport MainLayout from \"../../../common/layout/MainLayout\";\nimport { cma_load_profiles, cma_select_profile, cma_delete_profile, cma_update_profile } from \"../../../../data/actions/fastCMA\";\n\nimport { \n Form,\n Input,\n Button,\n Select,\n Anchor,\n InputNumber,\n Modal,\n } from \"antd\"\n\nimport ProfileSelect from './ProfileSelect'\nimport \"./Profile.scss\"\nimport { PlusOutlined } from \"@ant-design/icons\";\n\nconst Profile = (props) => {\n const { loadProfiles, profiles, updateProfile, deleteProfile } = props;\n const [showConfirmDeleteModal, setShowConfirmDeleteModal] = useState(false);\n const navigate = useHistory();\n\n const configs = {\n RECENCY : { \n label: 'RECENCY',\n default: 360,\n tooltip: \"in days\"\n },\n DISTANCE : { \n label: 'DISTANCE',\n default: 804.672,\n tooltip: \"0.5 miles FMV (ARV SUBDIVISION)\"\n },\n ARV_DISTANCE : { \n label: 'ARV_DISTANCE',\n default: 804.672,\n tooltip: \"Revert back to 0.5 miles(25 sept, 2019) old-changes=> 0.5 mile to 1 miles (1609.344) 28 March, 2019\"\n },\n YEAR_BUILT_RANGE : { \n label: 'YEAR_BUILT_RANGE',\n default: 10,\n tooltip: \" number +/-\"\n }, //\n SQUARE_FEET_RANGE : { \n label: 'SQUARE_FEET_RANGE',\n default: 25\n ,tooltip: \"percentage +/- (25%) FMV (SUBDIVISION)\",\n },\n ARV_SQUARE_FEET_RANGE : { \n label: 'ARV_SQUARE_FEET_RANGE',\n default: 20\n ,tooltip: \"percentage +/- (20%) ARV (DISTANCE)\",\n },\n FMV_ACRE_RANGE : { \n label: 'FMV_ACRE_RANGE',\n default: 25\n ,tooltip: \"percentage +/- (25%) FMV (SUBDIVISION)\",\n },\n ARV_ACRE_RANGE : { \n label: 'ARV_ACRE_RANGE',\n default: 20\n ,tooltip: \"percentage +/- (20%) ARV (DISTANCE)\",\n },\n SUBDIVISION : { \n label: 'SUBDIVISION',\n default: 20000\n },\n DISTANCE1 : { \n label: 'DISTANCE1',\n default: 1000\n ,tooltip: \"0.25 Miles\",\n },\n DISTANCE2 : { \n label: 'DISTANCE2',\n default: 800\n ,tooltip: \"0.5 Miles\",\n },\n DISTANCE3 : { \n label: 'DISTANCE3',\n default: 400\n ,tooltip: \"0.75 Miles\",\n },\n DISTANCE4 : { \n label: 'DISTANCE4',\n default: 200\n ,tooltip: \"1 Miles\",\n },\n SQUARE_FOOTAGE1 : { \n label: 'SQUARE_FOOTAGE1',\n default: 700\n ,tooltip: \"0 %\",\n },\n SQUARE_FOOTAGE2 : { \n label: 'SQUARE_FOOTAGE2',\n default: 650\n ,tooltip: \"2 %\",\n },\n SQUARE_FOOTAGE3 : { \n label: 'SQUARE_FOOTAGE3',\n default: 600\n ,tooltip: \"4 %\",\n },\n SQUARE_FOOTAGE4 : { \n label: 'SQUARE_FOOTAGE4',\n default: 550\n ,tooltip: \"6 %\",\n },\n SQUARE_FOOTAGE5 : { \n label: 'SQUARE_FOOTAGE5',\n default: 500\n ,tooltip: \"8 %\",\n },\n SQUARE_FOOTAGE6 : { \n label: 'SQUARE_FOOTAGE6',\n default: 450\n ,tooltip: \"10 %\",\n },\n SQUARE_FOOTAGE7 : { \n label: 'SQUARE_FOOTAGE7',\n default: 400\n ,tooltip: \"12 %\",\n },\n SQUARE_FOOTAGE8 : { \n label: 'SQUARE_FOOTAGE8',\n default: 350\n ,tooltip: \"14 %\",\n },\n SQUARE_FOOTAGE9 : { \n label: 'SQUARE_FOOTAGE9',\n default: 300\n ,tooltip: \"16 %\",\n },\n SQUARE_FOOTAGE10 : { \n label: 'SQUARE_FOOTAGE10',\n default: 250\n ,tooltip: \"18 %\",\n },\n SQUARE_FOOTAGE11 : { \n label: 'SQUARE_FOOTAGE11',\n default: 200\n ,tooltip: \"20 %\",\n },\n YEAR_BUILT1 : { \n label: 'YEAR_BUILT1',\n default: 1000\n ,tooltip: \"0 +/-\",\n },\n YEAR_BUILT2 : { \n label: 'YEAR_BUILT2',\n default: 900\n ,tooltip: \"1 +/-\",\n },\n YEAR_BUILT3 : { \n label: 'YEAR_BUILT3',\n default: 800\n ,tooltip: \"2 +/-\",\n },\n YEAR_BUILT4 : { \n label: 'YEAR_BUILT4',\n default: 700\n ,tooltip: \"3 +/-\",\n },\n YEAR_BUILT5 : { \n label: 'YEAR_BUILT5',\n default: 600\n ,tooltip: \"4 +/-\",\n },\n YEAR_BUILT6 : { \n label: 'YEAR_BUILT6',\n default: 500\n ,tooltip: \"5 +/-\",\n },\n YEAR_BUILT7 : { \n label: 'YEAR_BUILT7',\n default: 400\n ,tooltip: \"6 +/-\",\n },\n YEAR_BUILT8 : { \n label: 'YEAR_BUILT8',\n default: 300\n ,tooltip: \"7 +/-\",\n },\n YEAR_BUILT9 : { \n label: 'YEAR_BUILT9',\n default: 200\n ,tooltip: \"8 +/-\",\n },\n YEAR_BUILT10 : { \n label: 'YEAR_BUILT10',\n default: 100\n ,tooltip: \"9 +/-\",\n },\n ACRE1 : { \n label: 'ACRE1',\n default: 90\n ,tooltip: \"0% to less than 10%\",\n },\n ACRE2 : { \n label: 'ACRE2',\n default: 80\n ,tooltip: \"10% to less than 20%\",\n },\n ACRE3 : { \n label: 'ACRE3',\n default: 70\n ,tooltip: \"20% to less than 30%\",\n },\n ACRE4 : { \n label: 'ACRE4',\n default: 60\n ,tooltip: \"30% to less than 40%\",\n },\n ACRE5 : { \n label: 'ACRE5',\n default: 50\n ,tooltip: \"40% to less than 50%\",\n },\n ACRE6 : { \n label: 'ACRE6',\n default: 40\n ,tooltip: \"50% to less than 75%\",\n },\n ACRE7 : { \n label: 'ACRE7',\n default: 30\n ,tooltip: \"75% to less than 100%\",\n },\n STORIE : { \n label: 'STORIE',\n default: 100\n },\n POOL : { \n label: 'POOL',\n default: 5000\n ,tooltip: \"comparable property types shoud be Single-Family.\",\n },\n GARAGE : { \n label: 'GARAGE',\n default: 2500\n ,tooltip: \"comparable property types shoud be Single-Family.\",\n },\n HOUSE_TYPE : { \n label: 'HOUSE_TYPE',\n default: 9\n ,tooltip: \"comparable property types shoud be Single-Family.\",\n },\n FOUNDATION_TYPE : { \n label: 'FOUNDATION_TYPE',\n default: 9\n },\n HOUSE_STYLE : { \n label: 'HOUSE_STYLE',\n default: 9\n },\n CONSTRUCTION_TYPE : { \n label: 'CONSTRUCTION_TYPE',\n default: 9\n },\n ROOF_TYPE : { \n label: 'ROOF_TYPE',\n default: 9\n },\n CARPORT : { \n label: 'CARPORT',\n default: 9\n ,tooltip: \"comparable property types shoud be Single-Family.\",\n },\n FIREPLACE : { \n label: 'FIREPLACE',\n default: 4\n ,tooltip: \"comparable property types shoud be Single-Family.\",\n },\n HOA : { \n label: 'HOA',\n default: 4\n },\n SCHOOL_DISTRICT : { \n label: 'SCHOOL_DISTRICT',\n default: 4\n },\n SCHOOL_ELEMENTARY : { \n label: 'SCHOOL_ELEMENTARY',\n default: 2\n },\n SCHOOL_MIDDLE : { \n label: 'SCHOOL_MIDDLE',\n default: 2\n },\n SCHOOL_HIGH: {\n label: \"SCHOOL_HIGH\",\n default: 2\n }\n }\n\n let { add } = useParams();\n let selectedProfile = add === 'add' ? 'new' : props.selectedProfile;\n const defaultProfile = {\n id: 'new',\n name: 'default'\n }\n const loadCurrentProfile = () => {\n if ( add === 'add' ) return defaultProfile;\n\n let profile = profiles && profiles.length ? profiles.filter(i => i.id === selectedProfile) : {};\n \n if ( profile.length ) {\n if ( typeof profile[0].configs !== 'undefined' ) {\n return {\n id: profile[0].id,\n name: profile[0].name,\n ...profile[0].configs\n }\n } else {\n return profile[0];\n }\n } else {\n profile = (profiles && profiles.length ? profiles[0] : {});\n }\n return profile;\n }\n\n let currentProfile = loadCurrentProfile()\n\n const [form] = Form.useForm();\n let initialValues = {\n name: \"Untitle\"\n };\n for( let key in configs) {\n let value = (configs[key].default || '');\n initialValues[key] = value;\n }\n\n useEffect(() => {\n loadProfiles();\n }, []);\n\n useEffect(() => {\n setShowConfirmDeleteModal(false);\n\n let formValues;\n let profile = loadCurrentProfile();\n\n if ( add === 'add' ) {\n formValues = {\n name: 'Untitle'\n }\n } else {\n formValues = {\n name: profile.name || 'Untitle'\n }\n }\n\n for( let key in configs) {\n let value = (profile[key] || configs[key].default || '');\n formValues[key] = value;\n }\n\n form.setFieldsValue(formValues);\n\n }, [selectedProfile, profiles])\n\n \n const onSubmitHandle = (values) => {\n if ( selectedProfile === 'default' ) {\n return;\n }\n \n updateProfile(values, selectedProfile === 'new' ? false : selectedProfile, navigate);\n }\n\n const onDeleteProfile = () => {\n setShowConfirmDeleteModal(true);\n }\n\n const confirmDelete = () => {\n deleteProfile(currentProfile.id, navigate);\n }\n\n const cancelDeleteProfile = () => {\n setShowConfirmDeleteModal(false);\n }\n \n return (\n\t\t\n \n \n \n {add !== 'add' && (\n
\n \n \n
\n )}\n \n }\n >\n \n\n \n \n \n\n {Object.keys(configs).map(key => {\n return (\n \n \n \n )\n })}\n {selectedProfile !== 'default' &&\n \n \n {add === 'add' && }\n {add !== 'add' && \n <>\n \n \n

Remove {currentProfile.name} profile?

\n \n
\n \n }\n
\n }\n \n \n )\n}\n\nconst mapDispatchToProps = dispatch => {\n return {\n loadProfiles: () => {\n dispatch(cma_load_profiles())\n },\n updateProfile: (values, id, navigate) => {\n dispatch(cma_update_profile({\n data: {\n id: id,\n ...values\n }, \n navigate: navigate\n }))\n },\n deleteProfile: (id, navigate) => {\n dispatch(cma_delete_profile({\n id: id,\n navigate: navigate\n }))\n }\n }\n}\n\nconst mapStatesToProps = state => {\n const data = state.FastCMAReducer;\n return {\n profiles: data.cma.profiles,\n selectedProfile: data.cma.edit_profile || 'default'\n }\n}\n\nexport default connect(mapStatesToProps, mapDispatchToProps)(Profile);","import React, {Component} from 'react';\nimport {Menu, Dropdown, Icon, Avatar, Badge, Input, Button} from 'antd';\nimport {Link, withRouter} from \"react-router-dom\";\nimport TAG_DEFINE from '../../../constants/common';\nimport {capitalizeFirstLetter} from '../../../utils/functions';\n\nconst path = document.location.origin;\n\nconst HeaderAction = (props) => {\n return (\n
\n
\n \n
\n {/*
*/}\n {/* */}\n {/* */}\n {/*
*/}\n
\n );\n\n}\n\nexport default HeaderAction;\n","import {createSelector} from 'reselect'\n\nconst stateReducer = state => state.comparablesRequestReducer;\n\nexport const selectFetching = (initData) =>\n createSelector(\n stateReducer,\n resultReducer => resultReducer.isFetching\n )\n\nexport const selectStatusAction = (initData) =>\n createSelector(\n stateReducer,\n resultReducer => resultReducer.statusAction\n )\n\nexport const selectErrors = (initItems) =>\n createSelector(\n stateReducer,\n resultReducer => resultReducer.errors\n )\n\nexport const selectList = (initItems) =>\n createSelector(\n stateReducer,\n resultReducer => resultReducer.data\n )\n\nexport const selectMasterData = (initItems) =>\n createSelector(\n stateReducer,\n resultReducer => resultReducer.master\n )\nexport const selectItem = (initItems) =>\n createSelector(\n stateReducer,\n resultReducer => resultReducer.detail\n )\n","import React, {Fragment} from \"react\";\nimport {PAGINATION} from \"../../constants/define\";\nimport TAG_DEFINE from \"../../constants/common\";\nimport {Empty, Table, Tag} from \"antd\";\nimport Icon from \"./Icon\";\n\nconst ListComponent = (props) => {\n\n const onChange = (pagination, filters, sorter) => {\n props.onChange(pagination, filters, sorter);\n };\n const pagination = props.pagination && !(props.pagination.total <= PAGINATION.pageSize) ? props.pagination : false;\n if (pagination) {\n pagination.showTotal = (total, range) => `${range[0]}-${range[1]} ${TAG_DEFINE.PAGINATE.of} ${total} ${TAG_DEFINE.PAGINATE.items}`;\n pagination.showSizeChanger = true;\n pagination.showQuickJumper = true;\n pagination.hideOnSinglePage = false;\n pagination.locale = {\n items_per_page: TAG_DEFINE.PAGINATE.itemsPerPage,\n jump_to: TAG_DEFINE.PAGINATE.jumpTo,\n }\n }\n\n return (\n \n \n
\n
\n
\n {props.componentTableList && (props.componentTableList.left !== undefined || props.componentTableList.right !== undefined) &&\n
\n
\n {\n props.componentTableList.left\n }\n
\n
\n {\n props.componentTableList.right\n }\n
\n
\n }\n
,\n filterConfirm: ,\n filterReset: Hủy,\n }}\n onChange={onChange}\n pagination={pagination}\n />\n \n \n \n \n \n )\n};\n\nexport default ListComponent\n","import HeaderAction from \"../../common/layout/HeaderAction\";\nimport {Button, Form, Input, Space} from \"antd\"\nimport {ActionGetItem, ActionGetList} from \"../../../data/hooks/comparablesRequest\";\nimport {useEffect, useState} from \"react\";\nimport {useSelector} from \"react-redux\";\nimport {\n selectFetching,\n selectItem,\n selectList,\n selectStatusAction\n} from \"../../../data/reselects/comparablesRequestSelector\";\nimport ComparablesRequestResponse, {\n column,\n filtersResponse\n} from \"../../../data/mapping/Response/ComparablesRequestResponse\";\nimport {\n columnsTable,\n genaratePaginateFilterSort,\n getDataSource,\n getTitleTable, removeObjectNullFull,\n setParamsUrlFilter\n} from \"../../../utils/functions\";\nimport {ROUTE_REDIRECT} from \"../../../constants/define\";\nimport ListComponent from \"../../common/ListComponent\";\nimport {omit} from \"lodash\";\nimport queryString from \"query-string\";\nimport {Icon} from \"../../common\";\n\nconst ModelFields = Object.getOwnPropertyNames(new ComparablesRequestResponse());\nconst Index = props => {\n const namePage = \"comparables_request\",\n [initData, setInitData] = useState({\n titleItemTable: getTitleTable(column, ['action'], []),\n modelItem: ModelFields,\n }),\n [paramsFilters, setPramsFilters] = useState({}),\n componentTable = {\n action: {\n width: 100,\n align: 'center',\n key: 'action',\n fixed: 'right',\n render: (text, record) => (record?.status === 2) ? props.history.push((ROUTE_REDIRECT.COMPARABLES_REQUEST.UPDATE).replace(\":id\", record.id)) : {}}/>,\n }\n };\n const [form] = Form.useForm(),\n [isFetching, setIsFetching] = useState(false),\n [resultList, setResultList] = useState([]),\n [pagination, setPagination] = useState({}),\n actionGetList = ActionGetList(),\n actionGetItem = ActionGetItem(),\n itemList = useSelector(selectList()),\n itemFetching = useSelector(selectFetching()),\n itemStatusAction = useSelector(selectStatusAction())\n\n useEffect(() => {\n setIsFetching(itemFetching)\n }, [itemFetching]);\n\n useEffect(() => {\n if (Object.keys(queryString.parse(props.location.search)).length > 0) {\n let paramsFilters = queryString.parse(props.location.search, {arrayFormat: 'comma'});\n paramsFilters = removeObjectNullFull(paramsFilters)\n setPramsFilters(paramsFilters)\n form.setFieldsValue(paramsFilters)\n actionGetList(paramsFilters);\n } else {\n actionGetList();\n }\n }, []);\n\n const onSearch = val => {\n let getFilters = filtersResponse(removeObjectNullFull({\n ...initData.filters, ...paramsFilters, ...val,\n page_index: 1\n }));\n setPramsFilters(getFilters);\n setInitData({...initData, filters: paramsFilters})\n props.history.replace(setParamsUrlFilter(ROUTE_REDIRECT.COMPARABLES_REQUEST.HOME, getFilters))\n actionGetList(removeObjectNullFull(getFilters));\n }\n\n const onTableChange = (pagination, filters, sorter) => {\n // let currentFilters = getCurrentFilters();\n filters = omit({...paramsFilters, ...filters}, ['page_index', 'page_size']);\n let newFilters = genaratePaginateFilterSort(pagination, filters, sorter);\n setPramsFilters(newFilters)\n setPramsFilters(newFilters)\n form.setFieldsValue(newFilters)\n setInitData({\n ...initData,\n filters: newFilters\n });\n props.history.replace(setParamsUrlFilter(ROUTE_REDIRECT.COMPARABLES_REQUEST.HOME, newFilters))\n actionGetList(newFilters);\n };\n\n useEffect(() => {\n setResultList(itemList?.result || [])\n setPagination({\n total: itemList?.pagination?.total || 0,\n totalPage: itemList?.pagination?.total_page || 0,\n defaultCurrent: itemList?.pagination?.page_index || 1,\n pageSize: itemList?.pagination?.page_size || 10\n })\n }, [itemList]);\n\n return (\n <>\n onCreate(e)}\n isCustomize\n />\n

{itemList?.usage_count}

\n
\n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n
\n \n \n )\n}\n\nexport default Index\n","import Report from \"../../FastCMA/Report/Report\";\nimport HeaderAction from \"../../../common/layout/HeaderAction\";\nimport {ActionGetItem, ActionInit as ActionInitComparables} from \"../../../../data/hooks/comparablesRequest\";\nimport React, {useEffect, useState} from \"react\";\nimport {useSelector} from \"react-redux\";\nimport {filter} from \"lodash\";\nimport {selectItem} from \"../../../../data/reselects/comparablesRequestSelector\";\nimport {ActionAppendResponse, ActionInit} from \"../../../../data/hooks/fastCMA\";\nimport {selectFetching} from \"../../../../data/reselects/comparablesRequestSelector\";\nimport {Card, Form, Input, PageHeader, Spin, Radio, Button, Space, InputNumber, Select} from \"antd\";\nimport {useScript} from \"../../../../utils/commonUtils\";\nimport {ReportAndShare} from \"../../FastCMA/Report\";\n\nconst Index = props => {\n const [form] = Form.useForm(),\n actionGetItem = ActionGetItem(),\n actionAppendResponse = ActionAppendResponse(),\n actionInit = ActionInit(),\n actionInitComparables = ActionInitComparables(),\n itemDetail = useSelector(selectItem()),\n itemFetching = useSelector(selectFetching())\n const [onShowReportnShare, setOnShowReportnShare] = useState(false),\n [resultTable, setResultTable] = useState([]),\n [valueSquareFeet, setValueSquareFeet] = useState(),\n [originTableData, setOriginTableData] = useState([]),\n [getTabActive, setGetTabActive] = useState(\"sold\");\n\n const squareFeetOptions = [\n {\n value: Math.floor(Number(originTableData[0]?.square_feet || 0) - (Number(originTableData[0]?.square_feet || 0) * 0.2)),\n label: Math.floor(Number(originTableData[0]?.square_feet || 0) - (Number(originTableData[0]?.square_feet || 0) * 0.2)).toLocaleString(),\n },\n {\n value: Math.floor(Number(originTableData[0]?.square_feet || 0) - (Number(originTableData[0]?.square_feet || 0) * 0.1)),\n label: Math.floor(Number(originTableData[0]?.square_feet || 0) - (Number(originTableData[0]?.square_feet || 0) * 0.1)).toLocaleString(),\n },\n {\n value: Math.floor(Number(originTableData[0]?.square_feet || 0)),\n label: Math.floor(Number(originTableData[0]?.square_feet || 0)).toLocaleString()\n },\n {\n value: Math.floor(Number(originTableData[0]?.square_feet || 0) + (Number(originTableData[0]?.square_feet || 0) * 0.1)),\n label: Math.floor(Number(originTableData[0]?.square_feet || 0) + (Number(originTableData[0]?.square_feet || 0) * 0.1)).toLocaleString(),\n },\n {\n value: Math.floor(Number(originTableData[0]?.square_feet || 0) + (Number(originTableData[0]?.square_feet || 0) * 0.2)),\n label: Math.floor(Number(originTableData[0]?.square_feet || 0) + (Number(originTableData[0]?.square_feet || 0) * 0.2)).toLocaleString(),\n },\n ];\n\n useEffect(() => {\n actionInit()\n actionInitComparables()\n return () => {\n actionInit();\n actionInitComparables();\n };\n }, []);\n\n useEffect(() => {\n const {match} = props;\n if (Object.keys(match.params).length > 0) {\n if (Object.keys(itemDetail || {}).length < 1) {\n actionGetItem({id: match.params?.id, props: props});\n }\n }\n }, [props.match]);\n\n useEffect(() => {\n if (Object.keys(itemDetail || {}).length > 0) {\n actionAppendResponse(itemDetail?.response)\n }\n }, [itemDetail]);\n\n const onGGLoad = () => {\n\n window.dispatchEvent(new Event('google-map-api-loaded'))\n }\n\n // Load script of google map library\n useScript('https://maps.googleapis.com/maps/api/js?key=' + process.env.REACT_APP_GOOGLE_API_KEY + '&libraries=places', onGGLoad);\n\n const onFilterFunction = params => {\n const newResult = structuredClone(originTableData);\n\n return filter(newResult, property => {\n const passesBedFilter = params?.bed ? Number(property?.bedroom || 0) === Number(params?.bed || 0) : true;\n const passesBathFilter = params?.bath ? Number(property?.bathroom_total) === Number(params?.bath || 0) : true;\n const passesSquareFootMin = params?.square_feet?.min ? Number(property?.square_feet) >= Number(params?.square_feet?.min || 0) : true;\n const passesSquareFootMax = params?.square_feet?.max ? Number(property?.square_feet) <= Number(params?.square_feet?.max || 0) : true;\n const passesYearBuiltMin = params?.year_built?.min ? Number(property?.year_built) >= Number(params?.year_built?.min || 0) : true;\n const passesYearBuiltMax = params?.year_built?.max ? Number(property?.year_built) <= Number(params?.year_built?.max || 0) : true;\n const passesDistanceMin = params?.distance?.min ? Number(Math.round((property['dist'] || 0) * 0.00062137 * 100) / 100) >= Number(params?.distance?.min || 0) : true;\n const passesDistanceMax = params?.distance?.max ? Number(Math.round((property['dist'] || 0) * 0.00062137 * 100) / 100) <= Number(params?.distance?.max || 0) : true;\n return passesBedFilter && passesBathFilter && passesSquareFootMin && passesSquareFootMax && passesYearBuiltMin && passesYearBuiltMax && passesDistanceMin && passesDistanceMax;\n })\n }\n\n const onSubmit = val => {\n let resultFilters;\n resultFilters = onFilterFunction(val)\n setResultTable(resultFilters)\n }\n\n return <>\n \n \n {\n onShowReportnShare ? (\n
setOnShowReportnShare(false)}>\n setOnShowReportnShare(false)}\n title=\"Back to detail\"\n subTitle=\"\"\n />\n
\n ) : null\n }\n
\n
\n {\n setValueSquareFeet(val?.square_feet)\n }}\n // requiredMark={requiredMark}\n >\n
\n
\n \n \n Any\n 1\n 2\n 3\n 4\n 5\n \n \n
\n
\n \n \n Any\n 1\n 2\n 3\n 4\n 5\n \n \n
\n
\n \n \n \n \n \n \n \n value?.value === valueSquareFeet?.min) + 1).filter(value => value?.value !== undefined)]}\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
\n
\n {\n onShowReportnShare ? (\n \n ) : (\n {\n setResultTable(e)\n setOriginTableData(e)\n }}\n resultTable={resultTable}\n getTabActive={e => setGetTabActive(e)}\n tabActive={getTabActive}\n onShowReportnShare={e => setOnShowReportnShare(e)}\n response={itemDetail?.response}\n subject={itemDetail?.response?.subject}\n params={itemDetail?.params}\n properties={itemDetail?.response?.payload}/>\n )\n }\n\n {/*{*/}\n {/* (Object?.keys(itemDetail).length > 0) ? (*/}\n {/* */}\n {/* */}\n {/* */}\n {/* ) : null*/}\n {/*}*/}\n
\n \n}\n\nexport default Index\n","const Login = props => {\n const agent = \"RealEstateIQ\"\n return (\n
\n
\n
\n
\n
\n \n
\n

Please login to access

\n
\n
\n \n
\n
\n
\n )\n}\n\nexport default Login\n","import React, {useEffect, useState} from \"react\"\nimport {Button, Form, Input, message, Modal, Spin, Statistic} from \"antd\";\nimport {ActionInit, ActionPasswordRequest, ActionPasswordReset} from \"../../../data/hooks/auth\";\nimport {useSelector} from \"react-redux\";\nimport {getPasswordRequest, getStatusAction} from \"../../../data/reselects/authSelector\";\n\nconst {Countdown} = Statistic;\n\nconst ForgotPassword = props => {\n const [isForgotPassword, setIsForgotPassword] = useState(false),\n [isPasswordRequest, setIsPasswordRequest] = useState(true),\n [isPasswordReset, setIsPasswordReset] = useState(false),\n actionInit = ActionInit(),\n itemStatusAction = useSelector(getStatusAction());\n\n useEffect(() => {\n return () => {\n // actionInit();\n }\n }, []);\n\n useEffect(() => {\n setIsPasswordRequest(!itemStatusAction.passwordRequestSuccess)\n setIsPasswordReset(itemStatusAction.passwordRequestSuccess)\n }, [itemStatusAction]);\n\n useEffect(() => {\n setIsForgotPassword(props.isForgotPassword)\n }, [props.isForgotPassword]);\n\n const actionModal = e => {\n setIsForgotPassword(e);\n actionInit();\n setIsPasswordRequest(true);\n setIsPasswordReset(false);\n props.actionModal(e)\n }\n\n return (\n actionModal(false)}\n >\n {\n isPasswordRequest && \n }\n {\n isPasswordReset && \n }\n \n )\n}\nexport default ForgotPassword\n\nconst PasswordRequest = props => {\n\n const [onSubmit, setOnSubmit] = useState(false),\n actionPasswordRequest = ActionPasswordRequest(),\n itemStatusAction = useSelector(getStatusAction());\n\n useEffect(() => {\n setOnSubmit(itemStatusAction.isPasswordRequest)\n }, [itemStatusAction]);\n\n\n const onFinish = val => {\n setOnSubmit(true);\n actionPasswordRequest(val)\n }\n\n return (\n \n
\n \n \n \n \n \n \n \n
\n )\n}\n\nconst PasswordReset = props => {\n\n const [onSubmit, setOnSubmit] = useState(false),\n actionPasswordReset = ActionPasswordReset(),\n itemPasswordRequest = useSelector(getPasswordRequest()),\n itemStatusAction = useSelector(getStatusAction());\n\n useEffect(() => {\n // setOnSubmit(itemStatusAction.passwordResetSuccess)\n if (itemStatusAction.passwordResetSuccess) {\n props.actionModal(false);\n }\n }, [itemStatusAction]);\n\n const onFinish = val => {\n setOnSubmit(true);\n actionPasswordReset({\n ...val,\n hash: itemPasswordRequest\n })\n }\n\n return (\n \n {\n Modal.warning({\n title: 'Notification',\n content: 'Reset Password Request Is Expired. Please Try Again',\n onOk: () => props.actionModal(false)\n });\n }}/>\n

*One Time Passcode (OTP) has been sent to your email. Please check your INBOX, also make sure to check your SPAM folder.

\n
\n \n \n \n \n \n \n ({\n validator(_, value) {\n if (!value || getFieldValue('password') === value) {\n return Promise.resolve();\n }\n return Promise.reject(new Error('The two passwords that you entered do not match!'));\n },\n }),\n ]}>\n \n \n \n \n \n \n
\n )\n}\n","import React, {Component} from 'react';\nimport {connect} from \"react-redux\";\nimport {Switch, Route} from 'react-router-dom';\nimport routes from '../routers';\nimport {loginAction, registerAction} from \"../data/actions/authAction\";\nimport {\n Icon\n} from './common';\nimport {message, Modal} from \"antd\";\nimport \"../assets/pages/login.scss\"\nimport TAG_DEFINE from \"../constants/common\";\nimport ForgotPassword from \"./common/components/ForgotPassword\";\nimport LoginComponent from \"./pages/authentication/login\";\n\n// import '../assets/layout/css/pages/login-register-lock.css'\n\nclass Login extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isForgotPassword: false,\n fetchingLogin: true,\n email: \"\",\n password: \"\",\n code: \"\",\n checkAuth: false,\n registerSuccess: false,\n register: {\n email: \"\",\n password: \"\",\n confirm_password: \"\",\n first_name: \"\",\n last_name: \"\"\n }\n }\n }\n\n // componentDidMount() {\n // const signUpButton = document.getElementById('signUp');\n // const signInButton = document.getElementById('signIn');\n // const container = document.getElementById('id_login_container');\n //\n // signUpButton.addEventListener('click', () => {\n // container.classList.add(\"right-panel-active\");\n // });\n //\n // signInButton.addEventListener('click', () => {\n // container.classList.remove(\"right-panel-active\");\n // });\n // }\n //\n // componentWillReceiveProps(nextProps) {\n // if (nextProps) {\n // this.setState({checkAuth: nextProps.checkAuth.logging})\n // }\n // }\n //\n // componentDidUpdate(prevProps, prevState) {\n // if ((this.props.checkAuth?.registerSuccess !== prevProps.checkAuth?.registerSuccess)) {\n // this.setState({\n // registerSuccess: this.props.checkAuth?.registerSuccess\n // })\n // if (this.props.checkAuth?.registerSuccess) {\n // const container = document.getElementById('id_login_container');\n // container.classList.remove(\"right-panel-active\");\n // this.setState({\n // register: {\n // email: \"\",\n // password: \"\",\n // confirm_password: \"\",\n // first_name: \"\",\n // last_name: \"\"\n // }\n // })\n // Modal.success({\n // title: TAG_DEFINE.VALIDATION.statusCode.code[\"201\"],\n // content: `Thank you for creating the account, you can now log in with the provided information`,\n // });\n // }\n // }\n // }\n //\n // onChange = (e) => {\n // let target = e.target;\n // let name = target.name;\n // let value = target.value;\n // this.setState({\n // [name]: value\n // });\n // };\n //\n // onChangeRegister = (e) => {\n // let target = e.target;\n // let name = target.name;\n // let value = target.value;\n // this.setState({\n // register: {\n // ...this.state.register,\n // [name]: value\n // }\n // });\n // };\n //\n // onSubmit = (e) => {\n // e.preventDefault();\n // this.login();\n // };\n //\n // onRegister = (e) => {\n // e.preventDefault();\n // if (this.state.register.password) {\n // if (this.state.register.password === this.state.register.confirm_password) {\n // if ((/^\\s+|\\s+$/g.test(this.state.register.password[0]) || /^\\s+|\\s+$/g.test(this.state.register.password[this.state.register.password.length - 1])) || /^\\s+|\\s+$/g.test(this.state.register.confirm_password [0]) || /^\\s+|\\s+$/g.test(this.state.register.confirm_password [this.state.register.confirm_password.length - 1])) {\n // message.error(\"'password' cannot be empty\")\n // } else {\n // if ((this.state.register?.password || \"\").length < 6) {\n // message.error(\"Password minimum 6 characters\")\n // } else {\n // this.props.onActionRegister(this.state.register);\n // }\n // }\n // } else {\n // message.error(\"Password does not match\")\n // }\n // } else {\n // message.error(\"Password is required\")\n // }\n // };\n //\n // login() {\n // this.props.onLogin(this.state);\n // this.setState({fetchingLogin: false})\n // }\n\n render() {\n const {email, password, fetchingLogin, checkAuth, isForgotPassword} = this.state;\n return \n // return (\n //
\n // this.setState({\n // isForgotPassword: e\n // })}/>\n //
\n // \n //
\n //
\n //
\n //
\n //

Create Account

\n // \n // \n // \n // \n // \n // \n // \n //
\n //
\n //
\n //

Sign in

\n //
\n // \n // \n //
\n //

this.setState({isForgotPassword: true})}>Forgot your password?

\n // \n // \n //
\n //
\n //
\n //
\n //

Welcome to Megalith

\n //
\n // To keep connected with us please\n // login with your personal\n // info\n //
\n // \n //
\n //
\n //

Welcome to Megalith

\n //
\n // Enter your personal details and start\n // journey with us\n //
\n // \n //
\n //
\n //
\n //
\n //
\n // );\n }\n}\n\nconst mapStateToProps = state => {\n return {\n // categories: state.reducerCategory,\n checkAuth: state.authReducer,\n }\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n onLogin: (params) => {\n dispatch(loginAction(params))\n },\n onActionRegister: (params) => {\n dispatch(registerAction(params))\n },\n }\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Login);\n\n","import React, {Component} from 'react';\nimport { Link } from 'react-router-dom';\n// import {withTranslation} from \"react-i18next\";\n\nclass Component403 extends Component {\n render() {\n // const { t } = this.props;\n return (\n
\n

403

\n

Bạn không có quyền truy cập vào khu vực này

\n
\n Bạn vui lòng liên hệ quản lý để được hỗ trợ.\n
\n Quay về\n {/*{ t('action.backIndex') }*/}\n
\n );\n }\n}\n\nexport default Component403;\n// export default withTranslation()(Component403);\n","import React, {Component} from 'react';\nimport { Link } from 'react-router-dom';\n\nclass Error extends Component {\n render() {\n return (\n
\n
\n
\n

404

\n

Page Not Found !

\n

YOU SEEM TO BE TRYING TO FIND HIS WAY HOME

\n Back Home\n
\n
© 2017 Admin Pro.
\n
\n
\n );\n }\n}\n\nexport default Error;\n","import React, {useState, useEffect} from \"react\";\nimport {Link, withRouter} from \"react-router-dom\";\nimport routers from \"../../../routers\";\nimport {find} from \"lodash\";\nimport {Menu, Button, Drawer} from 'antd';\nimport {\n AppstoreOutlined,\n MenuUnfoldOutlined,\n MenuFoldOutlined,\n PieChartOutlined,\n DesktopOutlined,\n ContainerOutlined,\n MailOutlined,\n} from '@ant-design/icons';\nimport {useSelector} from \"react-redux\";\nimport {capitalizeFirstLetter} from \"../../../utils/functions\";\nimport {getProfile} from \"../../../data/reselects/authSelector\";\n\nconst {SubMenu} = Menu;\n\nconst Navigation = (props) => {\n const [itemMenu, setItemMenu] = useState([]),\n itemAuthProfile = useSelector(getProfile())\n\n useEffect(() => {\n let menu = itemAuthProfile?.menu || [];\n let updatedMenu = [\n ...menu.slice(0, 1),\n {\n name: \"Eva\",\n group: \"cma\",\n route: \"fast-cma\"\n },\n {\n name: \"Eva Profiles\",\n group: \"cma\",\n route: \"fast-cma/profiles\"\n },\n ...menu.slice(1, menu.length)\n ]\n setItemMenu(updatedMenu)\n }, [itemAuthProfile.menu]);\n // const [collapsed, setCollapsed] = useState(false);\n //\n // const toggleCollapsed = () => {\n // setCollapsed(!collapsed)\n // };\n\n const renderMenuItem = (item) => {\n let arrayMenu = [];\n if (item.length > 0) {\n item.map((i, k) => arrayMenu.push(\n \n {capitalizeFirstLetter(i.name)}\n \n ))\n }\n return arrayMenu\n }\n\n return (\n <>\n
\n {/**/}\n {\n itemMenu.length > 0 && (\n \n {\n itemMenu.map((i, k) => {\n if ((i?.items || []).length > 0) {\n return (\n props.history.push(`/${i?.route}`)}>\n {renderMenuItem(i?.items || [])}\n \n )\n } else {\n return (\n \n {capitalizeFirstLetter(i.name)}\n \n )\n }\n })\n }\n \n )\n }\n \n
\n }\n className=\"hn__navigation--mobile\"\n placement=\"left\" onClose={props.toggleCollapsed} visible={props?.collapsed}>\n {\n itemMenu.length > 0 && (\n \n {\n itemMenu.map((i, k) => {\n if ((i?.items || []).length > 0) {\n return (\n \n {renderMenuItem(i?.items || [])}\n \n )\n } else {\n return (\n \n {capitalizeFirstLetter(i.name)}\n \n )\n }\n })\n }\n \n )\n }\n \n \n );\n};\n\nexport default withRouter(Navigation);\n","import React, {Component, Fragment, useEffect, useState} from 'react';\nimport {connect, useSelector} from \"react-redux\";\nimport {Switch, Route, withRouter} from 'react-router-dom';\nimport {checkUserAction, refreshTokenAction} from \"../data/actions/authAction\";\nimport {logoutAction} from \"../data/actions/authAction\";\nimport DEFINE, {CONFIG_LOCAL_STORAGE} from \"../constants/define\";\nimport $ from \"jquery\";\nimport * as LocalStorage from \"../utils/localStorage\";\nimport {Spin, Tabs} from \"antd\"\nimport {Header} from \"./common\";\nimport Navigation from \"./common/layout/Navigation\";\nimport {capitalizeFirstLetter} from \"../utils/functions\";\n\nconst {TabPane} = Tabs;\n\nconst ContainerIndex = props => {\n\n const [collapsed, setCollapsed] = useState(false),\n [listTabs, setListTabs] = useState([]),\n [activeTab, setActiveTab] = useState(0);\n\n const toggleCollapsed = () => {\n setCollapsed(!collapsed)\n };\n\n useEffect(() => {\n let e = (window.innerHeight > 0 ? window.innerHeight : window.screen.height) - 1;\n $(\".page-wrapper\").css(\"min-height\", e + \"px\");\n console.log('VERSION:', process.env.REACT_APP_VERSION);\n // props.onCheckUser();\n\n // const profile = LocalStorage.get(CONFIG_LOCAL_STORAGE.PROFILE);\n const token = LocalStorage.get(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN);\n // const refreshToken = LocalStorage.get(CONFIG_LOCAL_STORAGE.REFRESH_TOKEN);\n // const expires = LocalStorage.get(CONFIG_LOCAL_STORAGE.EXPIRES);\n //TODO: Ad-hoc fix, recheck\n if (!token) {\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.PROFILE);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.EXPIRES);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.REFRESH_TOKEN);\n LocalStorage.remove(CONFIG_LOCAL_STORAGE.ACCESS_TOKEN);\n } else\n props.onCheckUser();\n }, [])\n\n if (Object.keys(props.authLogin?.user || {}).length > 0) {\n return (\n <>\n
\n {/*
*/}\n {/**/}\n {/*
*/}\n
\n {\n props.children\n }\n
\n \n \n );\n } else {\n return null\n }\n}\n\nconst mapStateToProps = state => {\n return {\n authLogin: state.authReducer,\n }\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n onCheckUser: () => {\n dispatch(checkUserAction())\n },\n onLogoutRequest: () => {\n dispatch(logoutAction());\n },\n refreshToken: token => dispatch(refreshTokenAction(token)),\n }\n};\n\n// export default ContainerIndex;\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ContainerIndex));\n\n","import {Redirect, Route, withRouter} from \"react-router-dom\";\nimport ContainerIndex from \"../../ContainerIndex\";\nimport {connect, useSelector} from \"react-redux\";\nimport React, {useEffect, useState} from \"react\";\nimport {getFetchingAuth, getProfile} from \"../../../data/reselects/authSelector\";\nimport {Button, Result} from \"antd\";\nimport {LoadingOutlined} from \"@ant-design/icons\";\nimport TAG_DEFINE from \"../../../constants/common\";\nimport queryString from \"query-string\";\nimport Login from \"../../Login\";\nimport {GoogleReCaptcha, GoogleReCaptchaProvider} from \"react-google-recaptcha-v3\";\nimport {ActionLogin} from \"../../../data/hooks/auth\";\n\nexport const Authentication = props => {\n const [urlCallback, setUrlCallback] = useState(\"\"),\n [googleCaptcha, setGoogleCaptcha] = useState(\"\"),\n [agent, setAgent] = useState(\"\"),\n actionLogin = ActionLogin(),\n itemFetching = useSelector(getFetchingAuth()),\n itemProfile = useSelector(getProfile());\n\n useEffect(() => {\n let {location} = props,\n queryParams = queryString.parse(location?.search)\n if (queryParams?.code && googleCaptcha) {\n actionLogin({\n token_captcha: googleCaptcha,\n code: queryParams?.code,\n fullAddress: queryParams?.fullAddress,\n })\n }\n // actionCheckUser();\n }, [googleCaptcha]);\n\n return (\n \n\n {\n !googleCaptcha ? setGoogleCaptcha(token)}/> : null\n }\n\n
\n
\n {\n (queryString.parse(props?.location?.search) || {})?.code ? (\n
\n
\n
\n \n
\n

Please wait a second.

\n

The system is processing.

\n
\n
\n
\n
\n \n
\n {/*{*/}\n {/* !itemFetching ? (*/}\n {/*
*/}\n {/* */}\n {/*
*/}\n {/* ) : null*/}\n {/*}*/}\n
\n
\n ) : (\n \n )\n }\n
\n
\n \n )\n}\n\nconst VerifyAuthRoute = ({component: Component, ...rest}) => (\n {\n const {authentication} = rest;\n return \n }}/>\n);\n\nconst mapStateToProps = state => ({\n authentication: state.authReducer,\n});\n\nexport default withRouter(connect(mapStateToProps)(VerifyAuthRoute));\n","import Index from \"./pages\";\nimport FastCMA from \"./pages/FastCMA\";\nimport { FastCMAProfile } from \"./pages/FastCMA/Profile\";\nimport ComparablesRequestList from \"./pages/comparablesRequest\";\nimport ComparablesRequestAction from \"./pages/comparablesRequest/action\";\nimport Login from \"./Login\";\nimport Error403 from \"./403\";\nimport Error from \"./Error\";\nimport Authentication from \"./pages/authentication\";\n// import Login from \"../Login\";\n\nexport default {\n Index,\n FastCMA,\n FastCMAProfile,\n ComparablesRequestList,\n ComparablesRequestAction,\n Login,\n Authentication,\n Error403,\n Error,\n // Login,\n};\n","import React, {Component} from 'react';\nimport {Redirect, Route} from \"react-router-dom\";\nimport connect from \"react-redux/es/connect/connect\";\n\nimport Login from \"./Login\";\nimport queryString from \"query-string\";\n\nconst agent = \"RealEstateIQ\"\n\n// const LoginRoute = ({component: Component, ...rest}) => (\n// {\n// const {authentication} = rest;\n// return !authentication.logged\n// ?\n// \n// \n// \n// :\n// \n// }}/>\n// );\n\nconst LoginRoute = ({component: Component, ...rest}) => (\n {\n const {authentication} = rest;\n if (!authentication.logged) {\n window.location = `${process.env.REACT_APP_AUTH0}/auth/verify?callback=${process.env.REACT_APP_BASE_URL}/auth/loyalty&agent=${agent}${queryString.parse(rest.location?.state?.from?.search, {arrayFormat: 'comma'})?.fullAddress ? `&fullAddress=${queryString.parse(rest.location?.state?.from?.search, {arrayFormat: 'comma'})?.fullAddress}` : \"\"}`\n } else {\n return \n }\n }}/>\n);\nconst mapStateToProps = state => ({\n authentication: state.authReducer,\n});\n\nexport default connect(mapStateToProps)(LoginRoute)\n","import React from 'react'\nimport {connect} from 'react-redux'\nimport {Redirect, Route, withRouter} from 'react-router-dom'\nimport ContainerIndex from \"./ContainerIndex\";\n\nconst PrivateRoute = ({component: Component, ...rest}) => (\n {\n const {authentication} = rest;\n return authentication.logged\n ? \n \n \n :\n \n }}/>\n);\n\nconst mapStateToProps = state => ({\n authentication: state.authReducer,\n});\n\nexport default withRouter(connect(mapStateToProps)(PrivateRoute));\n","import React, {Component} from \"react\";\nimport {Switch, Route} from \"react-router-dom\";\nimport {PATHS, ROUTE_LIST} from \"../constants/define\";\nimport Layout from \"./Main\";\nimport LoginRoute from \"./LoginRoute\";\nimport PrivateRoute from \"./PrivateRoute\";\n\nimport \"../assets/index.scss\";\nimport ComparablesRequestList from \"./pages/comparablesRequest\";\nimport VerifyAuthRoute from \"./pages/authentication\";\n\nclass MainCheck extends Component {\n componentDidMount() {\n // window.resizeLoadBody();\n }\n\n render() {\n return (\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n );\n }\n}\n\nexport default MainCheck;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport reportWebVitals from './reportWebVitals';\nimport {BrowserRouter as Router} from 'react-router-dom';\n\nimport {Provider} from 'react-redux';\nimport store from './data/store';\n\nimport 'antd/dist/antd.css';\nimport 'bootstrap/dist/css/bootstrap.min.css'\nimport MainCheck from \"./layouts/MainCheck\";\nimport './assets/index.scss';\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}