{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/common/Common.js","webpack:///./src/stores/loginSlice.js","webpack:///./src/Compare/CompareStore.js","webpack:///./src/stores/paylaterAPI.js","webpack:///external \"provinces\"","webpack:///./src/Search/DesktopFilterBar.js","webpack:///./src/Search/MobileFilterSearch.js","webpack:///./src/Compare/UseObservableState.js","webpack:///./src/Compare/UseSubscription.js","webpack:///./src/stores/paylaterSlice.js","webpack:///./src/common/Component.js","webpack:///./src/Search/Index.js","webpack:///./src/Search/index.css?9c56","webpack:///./src/Search/index.css","webpack:///./src/store.js","webpack:///./src/common/PropertyBox.js","webpack:///./src/stores/propertySlice.js","webpack:///./src/Compare/Common.js","webpack:///./src/common/SearchHeader.js","webpack:///./src/common/Header.js","webpack:///./src/Compare/Comparision.js","webpack:///./src/Compare/FloatingCompareButton.js","webpack:///./src/common/LoginFooter.js","webpack:///./src/Compare/Comparision.css?fb03","webpack:///./src/Compare/Comparision.css","webpack:///./src/Compare/FloatingCompareButton.css?9f28","webpack:///./src/Compare/FloatingCompareButton.css","webpack:///external \"configs\"","webpack:///./src/Search/PropertyBox.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","API_URL","process","Config","backendPFSURL","searchPagePath","_Config$pagesLink","pagesLink","search","$","mapipingForFriendlyUrl","gotoSearchPage","args","keys","queryParams","forEach","field","fieldName","from","to","indexOf","concat","unitToValue","values","split","location","option","filter","x","JSON","stringify","join","getUTM","num","multiple","parseFloat","replace","addSearchUrlParameter","obj","history","pushState","param","paramKeys","paramValues","_paramValues$i","_toConsumableArray","newurl","protocol","host","searchFilter","path","addCommas","nStr","z","x1","x2","rgx","test","undefined","isNaN","repeat","toFixed","utmParam","temp","getURLParameter","toLowerCase","decodeURIComponent","RegExp","exec","getPropertyType","_property$PropertyTyp","propertyType","PropertyTypeName","trim","getPropertyTypeEn","_property$PropertyTyp2","getArea","typeCode","hasValue","UseableArea","unit","AreaValue","Area","Rai","Ngan","SquareArea","formattedString","showBedAndBath","showAreaValue","showUseableAreaValue","val","isMobile","navigator","userAgent","postApiDataAsync","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","apiUrl","wrap","_context","prev","next","objRequest","abrupt","axios","post","urlPath","then","parse","Success","Data","error","success","errorMsg","errorCode","response","status","stop","_x","arguments","getApiDataAsync","_ref2","_callee2","_context2","params","headers","unused","sent","_x2","kloader","loader","removeClass","addClass","hasClass","valueRangeMaxMin","copyObject","getPathFromUrl","url","questionMarkIndex","sharpIndex","endIndex","areEqualObjValue","a","b","valid","index","_a$key$option","_b$key$option","noSpecialChar","scrollToValue","document","body","scrollTop","documentElement","setCookie","cname","cvalue","exdays","Date","setTime","getTime","expires","toUTCString","cookie","getCookie","ca","charAt","substring","after","times","func","this","setLikeProperty","PropertyID","like","favProp","includes","e","getCookieData","targetList","Promise","resolve","Items","PageSize","FavMaxPropertyReturnCount","CurrentPageIndex","PropertyIds","commonSearchDataChange","dispatch","payload","searchDataChange","OnsearchListChange","list","find","child","timeInRangeList","rangeList","time","some","range","dmyHmsToDateObj","str","dateTimeParts","dateParts","timeParts","getDateTimeFormat","date","hasTime","toLocaleDateString","year","month","day","toLocaleTimeString","hour","minute","groupDataBy","array","propertyName","reduce","acc","addQueryString","queryString","URLSearchParams","toString","getQueryStringParameter","addToFavoriteProperty","id","currentFavorites","updatedFavorites","Array","Set","removeFromFavoriteProperty","favorite","loginSlice","createSlice","initialState","customerInfo","fullName","required","errorMessage","label","placeholder","maxLength","phone","inputmode","email","otp","otpRef","otpID","token","IsActive","searchCriteria","customerSubscribeId","criteriaName","province","placeholderSearch","dropdownParent","district","subDistrict","housetype","code","group","land","townhouse","condo","commercialbuilding","warehouse","factory","apartment","office","resort","houseother","rangePrice","min","max","from_value","to_value","step","count","areaRange","useableAreaRange","frequency","submitFavEnable","AutoID","criteriaList","loading","reducers","searchCriteriaDataChange","state","action","searchCriteriaValidateChange","searchCriteriaListChange","searchCriteriaIonRangeChange","searchCriteriaIonRangeListChange","updateCriteriaIonRange","CheckBoxCriteriaChange","groupLength","entries","map","item","ClearSearchCriteria","addObjToCriteriaList","_action$payload","_action$payload2","_action$payload3","_provinceData$find","_action$payload4","_district$option$find","_action$payload5","_action$payload6","_action$payload7","_action$payload8","_action$payload9","provinceData","M","removeObjInCriteriaList","fillFromObjCriteriaList","assign","keyCheckBox","_typeof","searchCriteriaValidate","formsCusInfoDataChange","ClearCusInfo","_loginSlice$actions","actions","_rxjs","rxjs","BehaviorSubject","_rxjs$operators","Observable","defer","operators","tap","CompareStore","first","_createClass","_this","_classCallCheck","_defineProperty","compareProperty$","pipe","prop","Math","abs","_","openErrorPopup","initValue","element","addCompareProperty","message","html","css","display","on","_prop$BuildingAge","show","comparePropertyList","PropertyMediaes","newProperty","PropertyIDFormat","VillageTH","PromotionPrice","AdjustPrice","SellPrice","PMMaintenanceStatus","AmphurName","ProvinceName","Bedroom","Bathroom","BuildingAge","Age","MediaType","_objectSpread","section_comparision","compareStore","COMPARE_STORE_CONTEXT","createContext","merchantAPI","createApi","reducerPath","baseQuery","fetchBaseQuery","baseUrl","endpoints","builder","getMerchants","query","cacheTime","useGetMerchantsQuery","provinces","DesktopFilterBar","props","IonRangeDataChange","RangeInputDataChange","OnRadioCheck","GoToSearch","ClearSearch","OnInputChange","React","createElement","className","type","keyword","onChange","onKeyPress","assetTypes","CheckBoxCustomInput","_extends","OnformsDataChange","renderAssetTypesCheckBox","SelectList","CheckBoxIonInput","RangeInput","IonRange","style","paddingRight","CounterInput","bedroom","paddingLeft","bathroom","station","onClick","src","alt","MobileFilterSearch","click","renderCheckBox","useObservableState","source","_useState","useState","_useState2","_slicedToArray","setState","observer","useEffect","subscription","subscribe","unsubscribe","useSubscription","paylaterSlice","merchants","categories","subcategories","cate_relation","cate_logo","default_popular","selected_category","selected_subcategory","filter_popular_merchants","filter_merchants","search_popular_merchants","search_all_merchants","setMerchants","keysArray","sortedArray","sort","seq","parseInt","cate_th","subcat","subcate","popular","fg","unshift","self","findIndex","relation","temp2","arr","setSelectedCategory","setSelectedSubCategory","unselectedCategory","filterCategory","_state$subcategories","setSearch","nm_en","nm_th","clearSearch","filterSubCategory","_paylaterSlice$action","updateMerchants","_React$Component","_callSuper","templateSelection","minimumResultsForSearch","handleChange","handleOpen","_inherits","clearOption","preventDefault","$el","select2","el","select2Setting","allowClear","templateResult","idioma","$span","text","title","one","prevProps","trigger","_this2","ref","readOnly","notShowEmptyOption","isArray","renderChild","Component","_React$Component2","_this3","size","ionRangeSlider","skin","grid","hide_from_to","hide_min_max","onFinish","update","destroy","_this4","Start","setStartValue","_useState3","_useState4","setEndValue","_useState5","_useState6","StartList","_useState7","_useState8","EndList","setEndListValue","dropdown","createRef","setStart","current","setEnd","renderStartChild","startClick","renderEndChild","endClick","classnames","Fragment","checked","hidden","spanText","dangerouslySetInnerHTML","__html","DropLeadSelectList","_React$Component4","_this7","dropdownCssClass","_this8","DropLeadInputField","target","onBlur","formsBlur","inputMode","store","configureStore","mainTab","allTab","SearchPurposesData","promoProperty","popularProperty","arrayEmpty","SearchPage","_useSelector","useSelector","searchResult","favoriteProperty","Allow_Cookies","showTab","_useSelector2","favoritePropertyValue","_useCookies","useCookies","_useCookies2","cookies","useDispatch","findNameFromProvince","OnSearchDataChange","searchListChange","OnIonRangeDataChange","searchIonRangeChange","OnRangeInputDataChange","updateIonRange","CheckBoxChange","GetData","_GetData","request","PromotionPropertiesRequest","HotRequest","NewPropertiesRequest","getPromo","getHot","getNew","SearchPurposes","updateList","all","myData","notFoundProperties","showProperties","firstTime","searchResultDataChange","Search","AllCurrentPageIndex","propertyList","updateLikeInList","listName","PropertyLikeList","_x5","_GetDataForLoadMore","_callee3","PropertiesRequest","_context3","dataLength","searchResultPageIndexChange","TotalRows","updateSearchResultList","hasMore","suggest","_GoToSearch","_callee4","_args4","_context4","topFunction","isExpand","PDT_search","changePushState","genObjRequest","href","dataLayer","search_text","search_location","search_filter_1","search_filter_2","event","eventCategory","eventAction","eventLabel","dimension49","dimension7","dimension50","dimension51","_getURLParameter2","NearbyMeters","getRangeValue","Province","Amphur","Tambon","PropertyTypes","changePropertyTypesOther","_splitAssetType2","splitAssetType","SourceSaleTypes","SourceCodes","selectedStation","SearchNearbyMeters","MaxPropertyReturnCount","pageIndex","Provinces","Amphurs","Tambons","MinPrice","MaxPrice","Nearby","MinArea","MaxArea","MinUseableArea","MaxUseableArea","Ordering","getOrderingValue","order","new","priceasc","pricedesc","areaasc","areadesc","hot","OnClearSearch","event_category","event_action","event_label","open","getSecondaryTab","_x3","_x4","_getSecondaryTab","_callee5","tab","ordering","cookieConsent","_context5","whenSetCookie","OnLikeCheck","PropertyObj","likePropertyList","loadMore","page","OnPropertyListLoading","Tab","search_filters_2","GetDataForLoadMore","TabPropertiesClick","_TabPropertiesClick","_callee6","changeUrl","_args6","_context6","attr","MaxPromoPropertyReturnCount","ListItem","random","hide","margin","removeAttr","goToTab","tabName","_newProperty","_promoProperty","_popularProperty","_favoriteProperty","_recentlyviewedProper","bootstrap","tippy","hideAll","_getURLParameter","jQuery","requestData","provinceParam","SaleFirstDateFrom","SaleFirstDateTo","provinceCode","districtCode","updatesearchFilterCheckBox","_splitAssetType","updateSearchFilterFromQueryString","isTabExist","targetParam","has","orderDropdownValue","New","PriceAsc","PriceDesc","AreaAsc","AreaDesc","Hot","getDropdownOrderingValue","stations","StationNameTH","StationID","PlaceType","Latitude","Longitude","_a$text","localeCompare","initSearchPage","likeProperty","recentlyviewedProperty","querySelectorAll","addEventListener","innerText","SuggestLink","genSuggest","HeaderNav","MobileNav","home","rel","xmlns","width","height","viewBox","transform","fill","role","$state","PropertyPageResult","showLike","searchProperty","PropertyList","suggestProperty","LoginFooter","favClick","recentlyClick","ReactDOM","render","CookiesProvider","Provider","getElementById","api","content","default","options","locals","___CSS_LOADER_EXPORT___","reducer","propertyReducer","login","loginReducer","paylater","paylaterReducer","middleware","getDefaultMiddleware","devTools","mediaURLPrefix","defaultThumbnailURL","PropertyImgComp","imgUrl","_ref$altName","altName","onError","currentTarget","onerror","ImgHoverComponent","PropertyBox","_property$PropertyID","isLike","setIslike","_prepareDataForProope","prepareDataForProopertyBox","propertyDetailURL","thumbnailURL","tag","Price","areaHtml","bedRoomHtml","propertyTypeHtml","IsPartner","imgPCList","partner","pcUrl","IsNew","IsHot","PromotionName","active","CompareButton","_property$PropertyMed","_property$PropertyMed2","_property$PropertyID2","_property$PropertyID3","_property$PropertyID4","_ref3","_ref3$isBedPTag","isBedPTag","_ref3$atBath","atBath","detail","thumbnail","media","MediaPath","isInBangkok","addSpan","opacity","bed","bath","area","Logo","SourceImageLogo","checkIsPartner","SourceSaleType","propertySlice","rangeField","areaField","useableAreaField","propertybank","propertywaitsale","partnership","expand","resultLength","isLoading","favoritePropertyList","propertyDetail","AssetInfoTH","AddressNoTH","BuildingTH","FloorTH","SoiTH","RoadTH","TambonName","CarParking","PromotionRemark","ShowAreaValue","ShowUseableArea","GAScore","Like","CategoryGroup","CategoryDetail","AIImg","dropleadDetail","usertype","juJuristicId","juFirstName","juLastName","confirmphone","naCitizenId","consentCheck","juCompanyName","naFirstName","naLastName","naCareer","naSalary","availableTime","calcDetail","propertyTypeID","decoration","definedPropertyPrice","appraisalPrice","calcTypes","Home","Land","SME","appliedCalcTypes","forStay","forBusiness","smePropertyType","calculatorHomeLoanSetting","calculatorLandSetting","calculatorSMESetting","stayTotalInstallmentPerMonth","stayTotalLimitAmount","stayInstallmentYear","maxDigit","maxValue","note","stayPropertyLimitAmount","stayPropertyInstallmentPerMonth","stayDecorationLimitAmount","stayDecorationInstallmentPerMonth","stayIncomePerMonth","minValue","stayDebtBurdenPerMonth","stayCanTakeDecoration","businessTotalInstallmentPerMonth","businessTotalLimitAmount","businessInstallmentYear","businessPropertyLimitAmount","businessPropertyInstallmentPerMonth","businessDecorationLimitAmount","businessDecorationInstallmentPerMonth","businessIncomePerMonth","businessDebtBurdenPerMonth","stayValidateFields","businessValidateFields","searchIonRangeListChange","PropertyObjTemp","likeList","valueCode","toUpdate","updatePropertyDetail","formsCalcDataChange","visible","CalcValidateChange","formsCalcRangeInputChange","formsCalcPropsChange","formsDropleadDataChange","DropleadValidateChange","DropleadListChange","_propertySlice$action","useContext","isCompare","isExistCompareProperty","CompareButtonWithText","priceFilter","provinceFilter","propertyTypeFilter","areEqual","nextProps","PopUpSearch","memo","rangeMin","setRangeMin","rangeMax","setRangeMax","areaMin","setAreaMin","areaMax","setAreaMax","_useState9","_useState10","useableAreaMin","setUseableAreaMin","_useState11","_useState12","useableAreaMax","setUseableAreaMax","handleRadioChange","minMaxString","onRangeChange","onAreaChange","onUseableAreaChange","Body","searchBtn","promotion","tutorial","faq","tabIndex","marginRight","HeaderWithSearch","Header","setTimeout","querySelector","noti","Comparision","comparePropertyLength","comparePropertyLength$","onRemoveAllCompareProperty","removeAllCompareProperty","disabled","Compare","AllCardCompare","getComparePropertyList","GenerateCard","propertyMediaes","getPropertyName","propertyImage","removeCompareProperty","FloatingCompareButton","setCompareProperty","classNames","Boolean","likeCount","setLikeCount","goToUrl","setInterval","InfoFooter","PropertyforsaleLinkComponent","HouseLinkComponent","TownhouseLinkComponent","CondominiumLinkComponent","CommercialBuildingLinkComponent","LandLinkComponent","AllLinkComponent","showHomePage","pathname","configs","PropertyListMain","paramsObj","fromEntries","_$$","scrollIntoView","behavior","block","onClickProperty"],"mappings":"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","file":"Search.bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t10: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([308,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import Config from \"config\";\r\nimport axios from \"axios\";\r\n\r\nconst backendPFSURL = Config?.backendPFSURL;\r\nconst API_URL = process.env.API_ROOT_URL + backendPFSURL;\r\nconst searchPagePath = Config?.pagesLink?.search;\r\nconst $ = window.$;\r\n\r\nconst mapipingForFriendlyUrl = {\r\n \"Tab=popularProperty\": \"/th/propertyforsale/search/popular-propert\",\r\n \"Tab=newProperty\": \"/th/propertyforsale/search/new-property\",\r\n \"Tab=promoProperty\": \"/th/propertyforsale/search/promotion\",\r\n \"propertyType=01\": \"/th/propertyforsale/search/land\",\r\n \"propertyType=02\": \"/th/propertyforsale/search/house\",\r\n \"propertyType=03\": \"/th/propertyforsale/search/townhouse\",\r\n \"propertyType=05\": \"/th/propertyforsale/search/condominium\",\r\n \"propertyType=04\": \"/th/propertyforsale/search/commercial-building\",\r\n \"propertyType=12\": \"/th/propertyforsale/search/warehouse\",\r\n \"propertyType=09\": \"/th/propertyforsale/search/factory\",\r\n \"propertyType=15\": \"/th/propertyforsale/search/apartment\",\r\n \"propertyType=10\": \"/th/propertyforsale/search/office-building\",\r\n \"propertyType=20\": \"/th/propertyforsale/search/resort\",\r\n \"province=10\": \"/th/propertyforsale/search/bangkok\",\r\n \"province=12\": \"/th/propertyforsale/search/nonthaburi\",\r\n \"province=13\": \"/th/propertyforsale/search/pathumthani\",\r\n \"province=11\": \"/th/propertyforsale/search/samutprakan\",\r\n \"province=73\": \"/th/propertyforsale/search/nakhonpathom\",\r\n \"province=50\": \"/th/propertyforsale/search/chiangmai\",\r\n \"province=20\": \"/th/propertyforsale/search/chonburi\",\r\n \"province=40\": \"/th/propertyforsale/search/khonkaen\",\r\n \"province=30\": \"/th/propertyforsale/search/nakhonratchasima\",\r\n \"province=83\": \"/th/propertyforsale/search/phuket\",\r\n \"rangePrice=0,1000000\": \"/th/propertyforsale/search/price-0-1m\",\r\n \"rangePrice=1000000,3000000\": \"/th/propertyforsale/search/price-1-3m\",\r\n \"rangePrice=3000000,5000000\": \"/th/propertyforsale/search/price-3-5m\",\r\n \"rangePrice=5000000,10000000\": \"/th/propertyforsale/search/price-5-10m\",\r\n \"rangePrice=10000000,20000000\": \"/th/propertyforsale/search/price-10-20m\",\r\n \"rangePrice=20000000\": \"/th/propertyforsale/search/price-over20m\",\r\n};\r\n\r\nexport const gotoSearchPage = (args) => {\r\n // Province\r\n // District\r\n // SubDistrict\r\n // PropertyType\r\n // RangePrice\r\n // AreaRange\r\n // UseableAreaRange\r\n // Bedroom\r\n //bathroom\r\n // Station\r\n // Keyword\r\n // AssetTypes\r\n\r\n if (Object.keys(args).length === 0) {\r\n return searchPagePath;\r\n }\r\n\r\n let queryParams = [];\r\n Object.keys(args).forEach(function (key) {\r\n var field = args[key].fieldName;\r\n if (args[key].value) {\r\n if (key === \"rangePrice\" || key === \"areaRange\" || key === \"useableAreaRange\") {\r\n let value = args[key].value;\r\n let from = \"0\";\r\n let to = \"0\";\r\n\r\n if (value.indexOf(\"สูงสุด\") !== -1) {\r\n to = value;\r\n value = `${unitToValue(from)},${unitToValue(to)}`;\r\n } else if (value.indexOf(\"เริ่มต้น\") !== -1) {\r\n from = value;\r\n to = args[key].values.slice(-1)[0];\r\n value = `${unitToValue(from)}`;\r\n } else {\r\n from = value.split(\"-\")[0];\r\n to = value.split(\"-\")[1];\r\n value = `${unitToValue(from)},${unitToValue(to)}`;\r\n }\r\n\r\n // value = `${unitToValue(from)},${unitToValue(to)}`;\r\n queryParams.push(`${field}=${value}`);\r\n } else if (key === \"order\") {\r\n } else if (key === \"station\") {\r\n queryParams.push(`${field}=${args[key].value}`);\r\n var location = args[key].option.filter((x) => x.value == args[key].value)[0];\r\n if (location) {\r\n queryParams.push(`Nearby=${JSON.stringify(location.location)}`);\r\n }\r\n } else {\r\n queryParams.push(`${field}=${args[key].value}`);\r\n }\r\n } else if (typeof args[key] === \"string\" && args[key]) {\r\n queryParams.push(`${field}=${args[key]}`);\r\n }\r\n });\r\n if (mapipingForFriendlyUrl[queryParams.join(\"&\")]) {\r\n return mapipingForFriendlyUrl[queryParams.join(\"&\")] + \"?\";\r\n }\r\n return searchPagePath + \"?\" + queryParams.join(\"&\") + \"&\" + getUTM();\r\n};\r\n\r\nexport function unitToValue(num) {\r\n const multiple = num.indexOf(\"บาท\") !== -1 ? 1000000 : num.indexOf(\"ไร่\") !== -1 ? 400 : 1;\r\n const value = parseFloat(num.replace(/\\D+/g, \"\"));\r\n // console.log(\"float\", num, value)\r\n return value * multiple;\r\n}\r\n\r\nexport function addSearchUrlParameter(obj, property) {\r\n if (history.pushState) {\r\n let param = [];\r\n\r\n const paramKeys = Object.keys(obj);\r\n const paramValues = Object.values(obj);\r\n\r\n for (const i in paramKeys) {\r\n param = [...param, `${paramKeys[i]}=${paramValues[i] ?? \"\"}`];\r\n }\r\n\r\n var newurl =\r\n window.location.protocol +\r\n \"//\" +\r\n window.location.host +\r\n gotoSearchPage(property.searchFilter) +\r\n (param.length > 0 && `${param.join(\"&\")}`);\r\n window.history.pushState({ path: newurl }, \"\", newurl);\r\n }\r\n}\r\n\r\nexport function addCommas(nStr, z) {\r\n nStr += \"\";\r\n nStr = nStr.replace(/,/g, \"\");\r\n let x = nStr.split(\".\");\r\n let x1 = x[0];\r\n let x2 = x.length > 1 ? \".\" + x[1] : \"\";\r\n let rgx = /(\\d+)(\\d{3})/;\r\n while (rgx.test(x1)) {\r\n x1 = x1.replace(rgx, \"$1\" + \",\" + \"$2\");\r\n }\r\n if (z !== undefined) {\r\n if (z === 0) {\r\n x2 = \"\";\r\n } else {\r\n x2 = isNaN(parseFloat(x2)) ? \".\" + \"0\".repeat(z) : parseFloat(x2).toFixed(z).slice(1);\r\n }\r\n }\r\n return x1 + x2;\r\n}\r\n\r\nexport function getUTM() {\r\n let utmParam = \"\";\r\n [\"utm_source\", \"utm_medium\", \"utm_campaign\", \"utm_content\", \"utm_term\"].forEach((x) => {\r\n var temp = getURLParameter(x);\r\n if (temp) {\r\n utmParam += \"&\" + x + \"=\" + temp;\r\n }\r\n });\r\n return utmParam.length > 1 ? utmParam.slice(1) : utmParam;\r\n}\r\n\r\nexport function getURLParameter(name) {\r\n name = name.toLowerCase();\r\n return (\r\n decodeURIComponent(\r\n (new RegExp(\"[?|&]\" + name + \"=\" + \"([^&;]+?)(&|#|;|$)\").exec(\r\n location.search.toLowerCase()\r\n ) || [, \"\"])[1].replace(/\\+/g, \"%20\")\r\n ) || null\r\n );\r\n}\r\n\r\nexport function getPropertyType(property) {\r\n var propertyType = (property.PropertyTypeName ?? \"\")\r\n .trim()\r\n .replace(/ +(?= )/g, \"\")\r\n .split(\" \")[1];\r\n\r\n if (propertyType === \"บ้านพักอาศัย\") {\r\n return \"บ้านเดี่ยว\";\r\n } else if (propertyType === \"ห้องชุดพักอาศัย\") {\r\n return \"คอนโดมิเนียม\";\r\n } else if (propertyType === \"ที่ดินว่างเปล่า\") {\r\n return \"ที่ดิน\";\r\n } else if (propertyType === \"อาคารโรงงาน\") {\r\n return \"โรงงาน\";\r\n } else {\r\n return propertyType;\r\n }\r\n}\r\n\r\nexport function getPropertyTypeEn(property) {\r\n var propertyType = (property.PropertyTypeName ?? \"\")\r\n .trim()\r\n .replace(/ +(?= )/g, \"\")\r\n .split(\" \")[0];\r\n\r\n switch (propertyType) {\r\n case \"15\":\r\n return \"apartment\"; \r\n case \"05\":\r\n return \"condo\"; \r\n case \"02\":\r\n return \"house\"; \r\n case \"01\":\r\n return \"land\"; \r\n case \"99\":\r\n return \"manufactured\"; \r\n case \"03\":\r\n return \"townhouse\";\r\n default:\r\n return \"other\";\r\n }\r\n}\r\n\r\nexport function getArea(property) {\r\n var typeCode;\r\n\r\n if (hasValue(property.PropertyTypeName)) {\r\n typeCode = property.PropertyTypeName.trim().split(\" \")[0];\r\n } else {\r\n typeCode = null;\r\n }\r\n\r\n if (typeCode === \"05\") {\r\n //condo\r\n if (hasValue(property.UseableArea) && property.UseableArea !== 0) {\r\n return {\r\n value: property.UseableArea.toFixed(2),\r\n unit: \"ตร.ม.\",\r\n };\r\n } else if (hasValue(property.AreaValue) && property.AreaValue !== 0) {\r\n return {\r\n value: property.AreaValue.toFixed(2),\r\n unit: \"ตร.ม.\",\r\n };\r\n } else {\r\n return null;\r\n }\r\n } else if (typeCode === \"17\") {\r\n //Office suite\r\n if (hasValue(property.UseableArea) && property.UseableArea !== 0) {\r\n return {\r\n value: property.UseableArea.toFixed(2),\r\n unit: \"ตร.ม.\",\r\n };\r\n } else if (hasValue(property.AreaValue) && property.AreaValue !== 0) {\r\n return {\r\n value: property.AreaValue.toFixed(2),\r\n unit: \"ตร.ม.\",\r\n };\r\n } else {\r\n return null;\r\n }\r\n } else if (typeCode === \"02\" || typeCode === \"03\" || typeCode === \"04\" || typeCode === \"15\") {\r\n // House , Townhouse , Commercial building , Apartment\r\n if (hasValue(property.AreaValue) && property.AreaValue !== 0) {\r\n return {\r\n value: property.AreaValue.toFixed(2),\r\n unit: \"ตร.ว.\",\r\n };\r\n } else {\r\n return null;\r\n }\r\n } else if (typeCode === \"99\") {\r\n // Machine\r\n return null;\r\n } else {\r\n //other\r\n if (hasValue(property.Area) && property.Area !== \"0-0-0.00\") {\r\n return {\r\n value: property.Area,\r\n unit: \"ไร่\",\r\n };\r\n } else if (hasValue(property.Rai) && hasValue(property.Ngan) && hasValue(property.SquareArea)) {\r\n const formattedString = `${property.Rai}-${property.Ngan}-${\r\n property.SquareArea.toFixed(2) || \"0.00\"\r\n }`;\r\n if (formattedString == \"0-0-0.00\") {\r\n return null;\r\n }\r\n return {\r\n value: formattedString,\r\n unit: \"ไร่\",\r\n };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport function showBedAndBath(property) {\r\n var typeCode;\r\n\r\n if (hasValue(property.PropertyTypeName)) {\r\n typeCode = property.PropertyTypeName.trim().split(\" \")[0];\r\n } else {\r\n typeCode = null;\r\n }\r\n\r\n if (\r\n typeCode === \"02\" ||\r\n typeCode === \"03\" ||\r\n typeCode === \"04\" ||\r\n typeCode === \"15\" ||\r\n typeCode === \"05\" ||\r\n typeCode === \"20\" ||\r\n typeCode === \"08\"\r\n ) {\r\n //show bedroom and bathroom icon\r\n return true;\r\n } else {\r\n //other\r\n return false;\r\n }\r\n}\r\n\r\nexport function showAreaValue(property) {\r\n var typeCode;\r\n\r\n if (hasValue(property.PropertyTypeName)) {\r\n typeCode = property.PropertyTypeName.trim().split(\" \")[0];\r\n } else {\r\n typeCode = null;\r\n }\r\n\r\n if (typeCode === \"05\" || typeCode === \"17\") {\r\n //not show Area icon\r\n return false;\r\n } else {\r\n //other\r\n return true;\r\n }\r\n}\r\n\r\nexport function showUseableAreaValue(property) {\r\n const showUseableArea = [\"02\", \"03\", \"04\", \"15\", \"05\", \"17\"];\r\n var typeCode;\r\n\r\n if (hasValue(property.PropertyTypeName)) {\r\n typeCode = property.PropertyTypeName.trim().split(\" \")[0];\r\n } else {\r\n typeCode = null;\r\n }\r\n\r\n if (showUseableArea.indexOf(typeCode) !== -1) {\r\n //show UseableArea icon\r\n return true;\r\n } else {\r\n //other\r\n return false;\r\n }\r\n}\r\n\r\nfunction hasValue(val) {\r\n if (val === null || val === \"\" || val === undefined) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function isMobile() {\r\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\r\n}\r\n\r\nexport const postApiDataAsync = async (args) => {\r\n let objRequest = args.objRequest;\r\n console.log(\"in async (post) \", args.urlPath, objRequest);\r\n\r\n let apiUrl = API_URL;\r\n\r\n if (args.apiUrl) {\r\n apiUrl = process.env.API_ROOT_URL + args.apiUrl;\r\n }\r\n\r\n return axios.post(`${apiUrl}${args.urlPath}`, args.objRequest).then(\r\n function (data) {\r\n const result = JSON.parse(data.data.d);\r\n if (result.Success) {\r\n return result.Data;\r\n }\r\n throw result;\r\n },\r\n function (error) {\r\n throw {\r\n success: false,\r\n errorMsg: \"ไม่สามารถดำเนินการได้ในขณะนี้ โปรดลองใหม่ในภายหลัง\",\r\n errorCode: error.response ? error.response.status : error,\r\n };\r\n }\r\n );\r\n};\r\n\r\nexport const getApiDataAsync = async (args) => {\r\n console.log(\"in async (get) \", args.urlPath, args.params);\r\n\r\n let apiUrl = API_URL;\r\n\r\n if (args.apiUrl) {\r\n apiUrl = process.env.API_ROOT_URL + args.apiUrl;\r\n }\r\n\r\n return await axios\r\n .get(`${apiUrl}${args.urlPath}`, {\r\n params: args.params,\r\n headers: {\r\n \"Content-Type\": \"application/json;charset=utf-8\",\r\n },\r\n data: { unused: 0 },\r\n })\r\n .then(\r\n function (data) {\r\n const result = JSON.parse(data.data.d);\r\n if (result.Success) {\r\n return result.Data;\r\n }\r\n throw result;\r\n },\r\n function (error) {\r\n throw {\r\n success: false,\r\n errorMsg: \"ไม่สามารถดำเนินการได้ในขณะนี้ โปรดลองใหม่ในภายหลัง\",\r\n errorCode: error.response ? error.response.status : error,\r\n };\r\n }\r\n );\r\n};\r\n\r\nexport const tempgetApiDataAsync = async (args) => {\r\n return await axios\r\n .get(\"\\\\SiteCollectionDocuments\\\\assets\\\\PFS2022\\\\constants.json\", {\r\n headers: {\r\n \"Content-Type\": \"application/json;charset=utf-8\",\r\n },\r\n data: { unused: 0 },\r\n })\r\n .then(\r\n function (data) {\r\n const result = data.data.d;\r\n if (result.Success) {\r\n return result.Data;\r\n }\r\n throw result;\r\n },\r\n function (error) {\r\n throw {\r\n success: false,\r\n errorMsg: \"ไม่สามารถดำเนินการได้ในขณะนี้ โปรดลองใหม่ในภายหลัง\",\r\n errorCode: error.response ? error.response.status : error,\r\n };\r\n }\r\n );\r\n};\r\n\r\nexport function kloader(value) {\r\n const loader = $(\"#loadFormDiv\");\r\n\r\n if (typeof value !== \"undefined\") {\r\n if (value) {\r\n console.log(\"kloader start\");\r\n loader.removeClass(\"hide\");\r\n } else {\r\n console.log(\"kloader stop\");\r\n $(loader).addClass(\"hide\");\r\n }\r\n } else {\r\n if (loader.hasClass(\"hide\")) {\r\n console.log(\"kloader start\");\r\n loader.removeClass(\"hide\");\r\n } else {\r\n console.log(\"kloader stop\");\r\n $(loader).addClass(\"hide\");\r\n }\r\n }\r\n}\r\n\r\nexport function valueRangeMaxMin(fieldName, from, to) {\r\n let value = \"\";\r\n if (from === \"ไม่ระบุ\" && to === \"ไม่ระบุ\") {\r\n value = \"\";\r\n } else if (from === \"ไม่ระบุ\" || from === \"\") {\r\n value = \"สูงสุด \" + to;\r\n } else if (to === \"ไม่ระบุ\" || to === \"\") {\r\n value = \"เริ่มต้น \" + from;\r\n to = \"MAX\";\r\n } else {\r\n value = `${from} - ${to}`;\r\n }\r\n\r\n return { fieldName, value, from, to };\r\n}\r\n\r\nexport function copyObject(obj) {\r\n return JSON.parse(JSON.stringify(obj));\r\n}\r\n\r\nexport function getPathFromUrl(url) {\r\n var questionMarkIndex = url.indexOf(\"?\");\r\n var sharpIndex = url.indexOf(\"#\");\r\n\r\n if (questionMarkIndex === -1 && sharpIndex === -1) {\r\n return url;\r\n }\r\n\r\n var endIndex = url.length;\r\n\r\n if (questionMarkIndex !== -1 && questionMarkIndex < endIndex) {\r\n endIndex = questionMarkIndex;\r\n }\r\n\r\n if (sharpIndex !== -1 && sharpIndex < endIndex) {\r\n endIndex = sharpIndex;\r\n }\r\n\r\n return url.slice(0, endIndex);\r\n}\r\n\r\nexport function areEqualObjValue(a, b) {\r\n var valid = true;\r\n Object.keys(a).forEach((key, index) => {\r\n if (!a[key] || !b[key]) {\r\n return;\r\n }\r\n if (a[key].value !== b[key].value) {\r\n valid = false;\r\n return;\r\n }\r\n if (a[key].option?.length !== b[key].option?.length) {\r\n valid = false;\r\n return;\r\n }\r\n });\r\n return valid;\r\n}\r\n\r\nexport function noSpecialChar(value) {\r\n const noSpecialRegEx = /[^A-Za-z0-9\\u0E01-\\u0E3A\\u0E40-\\u0E4D\\-\\s]/g;\r\n return value.replace(noSpecialRegEx, \"\");\r\n}\r\n\r\nexport function scrollToValue(value) {\r\n document.body.scrollTop = value; // For Safari\r\n document.documentElement.scrollTop = value; // For Chrome, Firefox, IE and Opera\r\n}\r\n\r\nexport function setCookie(cname, cvalue, exdays) {\r\n console.log(\"react setCookie\" + cvalue);\r\n const d = new Date();\r\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\r\n let expires = \"expires=\" + d.toUTCString();\r\n document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\r\n}\r\n\r\nexport function getCookie(cname) {\r\n let name = cname + \"=\";\r\n let decodedCookie = decodeURIComponent(document.cookie);\r\n let ca = decodedCookie.split(\";\");\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) == \" \") {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) == 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return \"\";\r\n}\r\n\r\nfunction containThai(value) {\r\n const isThai = /([\\u0E00-\\u0E7F]+)/g;\r\n return isThai.test(value);\r\n}\r\n\r\nfunction encodeURIThaiObject(obj) {\r\n if (typeof obj !== \"object\" || Array.isArray(obj)) {\r\n return;\r\n }\r\n\r\n Object.keys(obj).forEach(function (key) {\r\n if (typeof obj[key] === \"string\" && containThai(obj[key])) {\r\n obj[key] = encodeURIComponent(obj[key]);\r\n } else if (Array.isArray(obj[key])) {\r\n obj[key].map((x) => {\r\n return encodeURIThaiObject(x);\r\n });\r\n }\r\n });\r\n return obj;\r\n}\r\n\r\nexport function encodeThai(obj) {\r\n obj = JSON.parse(JSON.stringify(obj));\r\n obj = encodeURIThaiObject(obj);\r\n return obj;\r\n}\r\n\r\nexport function after(times, func) {\r\n return function () {\r\n if (--times < 1) {\r\n return func.apply(this, arguments);\r\n }\r\n };\r\n}\r\n\r\nexport function setLikeProperty(PropertyID, like) {\r\n var favProp = getCookie(\"favoriteProperty\");\r\n if (like) {\r\n if (!favProp.split(\",\").includes(PropertyID)) {\r\n setCookie(\r\n \"favoriteProperty\",\r\n favProp\r\n .split(\",\")\r\n .concat(PropertyID)\r\n .filter((x) => x)\r\n .join(\",\"),\r\n 30\r\n );\r\n }\r\n } else {\r\n if (favProp) {\r\n setCookie(\r\n \"favoriteProperty\",\r\n favProp\r\n .split(\",\")\r\n .filter((e) => e != PropertyID)\r\n .join(\",\"),\r\n 30\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport const getCookieData = (targetList) => {\r\n if (targetList.length === 0) return Promise.resolve({ Items: [] });\r\n return postApiDataAsync({\r\n urlPath: \"/GetProperties\",\r\n objRequest: {\r\n filter: {\r\n PageSize: Config.FavMaxPropertyReturnCount,\r\n CurrentPageIndex: 1,\r\n PropertyIds: targetList,\r\n },\r\n },\r\n });\r\n};\r\n\r\nexport const commonSearchDataChange = (\r\n dispatch,\r\n payload,\r\n searchFilter,\r\n searchDataChange,\r\n OnsearchListChange\r\n) => {\r\n const field = payload.field;\r\n\r\n if (field === \"province\") {\r\n const list = searchFilter[field].option.find((x) => x.value == payload.value);\r\n OnsearchListChange({ field: \"district\", value: list?.child || [] });\r\n OnsearchListChange({ field: \"subDistrict\", value: [] });\r\n } else if (field === \"district\") {\r\n const list = searchFilter[field].option.find((x) => x.value == payload.value);\r\n\r\n OnsearchListChange({ field: \"subDistrict\", value: list?.child || [] });\r\n }\r\n dispatch(searchDataChange(payload));\r\n};\r\n\r\nexport function timeInRangeList(rangeList, time = new Date()) {\r\n var result = null;\r\n rangeList.some((range) => {\r\n return time >= range[0] && time <= range[1] ? ((result = range), true) : false;\r\n });\r\n return result;\r\n}\r\n\r\nexport function dmyHmsToDateObj(str) {\r\n var dateTimeParts = str.split(\"T\");\r\n var dateParts = dateTimeParts[0].split(\"-\");\r\n var timeParts = dateTimeParts[1].split(\":\");\r\n\r\n return new Date(\r\n +dateParts[0],\r\n +dateParts[1] - 1,\r\n +dateParts[2],\r\n +timeParts[0],\r\n +timeParts[1],\r\n +timeParts[2]\r\n );\r\n}\r\nexport function getDateTimeFormat(date, hasTime = true) {\r\n var str = date.toLocaleDateString(\"th-TH\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n });\r\n if (hasTime) {\r\n str +=\r\n \" เวลา \" +\r\n date.toLocaleTimeString(\"th-TH\", {\r\n hour: \"2-digit\",\r\n minute: \"2-digit\",\r\n }) +\r\n \" น.\";\r\n }\r\n\r\n return str;\r\n}\r\n\r\n// Global favorite func\r\nwindow.addToFavoriteProperty = function (id) {\r\n // Retrieve existing 'favoriteProperty' cookie value\r\n const existingFavorites = getCookie(\"favoriteProperty\") || \"\";\r\n\r\n // Split the existing favorites by commas\r\n const currentFavorites = existingFavorites.split(\",\");\r\n\r\n // Add the new ID to the existing favorites\r\n const updatedFavorites = [...currentFavorites, id];\r\n\r\n // Deduplicate the array by converting it to a Set and then back to an array\r\n const uniqueFavorites = Array.from(new Set(updatedFavorites));\r\n\r\n // Join the unique ids into a comma-separated string\r\n const updatedFavoritesString = uniqueFavorites.join(\",\");\r\n\r\n // Set the 'favoriteProperty' cookie with the updated value\r\n setCookie(\"favoriteProperty\", updatedFavoritesString, 30); // Change 30 to the desired expiration time in days\r\n};\r\n\r\nwindow.removeFromFavoriteProperty = function (id) {\r\n // Retrieve existing 'favoriteProperty' cookie value\r\n const existingFavorites = getCookie(\"favoriteProperty\") || \"\";\r\n\r\n // Split the existing favorites by commas\r\n const currentFavorites = existingFavorites.split(\",\");\r\n\r\n // Remove the specified ID from the existing favorites\r\n const updatedFavorites = currentFavorites.filter((favorite) => favorite !== id);\r\n\r\n // Join the remaining favorites into a comma-separated string\r\n const updatedFavoritesString = updatedFavorites.join(\",\");\r\n\r\n // Set the 'favoriteProperty' cookie with the updated value\r\n setCookie(\"favoriteProperty\", updatedFavoritesString, 30); // Change 30 to the desired expiration time in days\r\n};\r\n\r\nexport function groupDataBy(array, propertyName) {\r\n if (array) {\r\n return array.reduce((acc, obj) => {\r\n const key = obj[propertyName];\r\n if (!acc[key]) {\r\n acc[key] = [];\r\n }\r\n acc[key].push(obj);\r\n return acc;\r\n }, {});\r\n }else{\r\n return [];\r\n }\r\n}\r\n\r\nexport function addQueryString(queryParams) {\r\n const queryString = new URLSearchParams(queryParams).toString();\r\n return `?${queryString}`;\r\n}\r\n\r\nexport function getQueryStringParameter(param) {\r\n // Get the full query string from the URL\r\n const queryString = window.location.search;\r\n\r\n // Create a URLSearchParams object\r\n const urlParams = new URLSearchParams(queryString);\r\n\r\n // Get the value of the specified parameter\r\n return urlParams.get(param);\r\n}","import { createSlice } from '@reduxjs/toolkit'\r\nimport { noSpecialChar, valueRangeMaxMin } from '../common/Common'\r\nimport provinceData from 'province';\r\n\r\nexport const loginSlice = createSlice({\r\n name: \"counter\",\r\n initialState: {\r\n customerInfo: {\r\n fullName: { value: '', required: true, errorMessage: '', fieldName: 'fullName', label: 'ชื่อ-นามสกุล', placeholder: \"ชื่อ-นามสกุล\", maxLength: 250 },\r\n phone: { value: '', required: true, errorMessage: '', fieldName: 'phone', label: 'เบอร์โทรศัพท์', placeholder: \"เบอร์โทรศัพท์\", maxLength: 10, inputmode: \"numeric\" },\r\n email: { value: '', required: true, errorMessage: '', fieldName: 'email', label: 'อีเมล', placeholder: \"อีเมล\", maxLength: 100 },\r\n otp: { value: '', required: true, errorMessage: '', fieldName: 'otp', label: 'OTP', placeholder: \"กรุณากรอก OTP\", maxLength: 10, inputmode: \"numeric\" },\r\n otpRef: { value: '' },\r\n otpID: { value: '' },\r\n token: { value: '' },\r\n IsActive: { value: true },\r\n },\r\n searchCriteria: {\r\n customerSubscribeId: { value: '' },\r\n criteriaName: { value: '', required: true, errorMessage: '', fieldName: 'criteriaName', label: '', placeholder: \"กรอกตั้งชื่อการแจ้งเตือน\", maxLength: 250 },\r\n province: {\r\n value: \"\", fieldName: \"province\", placeholderSearch: \"ชื่อจังหวัด\", placeholder: \"จังหวัด\", dropdownParent: \"#favorite-popup\",\r\n option: []\r\n },\r\n district: {\r\n value: \"\", fieldName: \"district\", placeholderSearch: \"ชื่อเขต/อำเภอ\", placeholder: \"เขต/อำเภอ\", dropdownParent: \"#favorite-popup\",\r\n option: []\r\n },\r\n subDistrict: {\r\n value: \"\", fieldName: \"subDistrict\", placeholderSearch: \"ชื่อแขวง/ตำบล\", placeholder: \"แขวง/ตำบล\", dropdownParent: \"#favorite-popup\",\r\n option: []\r\n },\r\n\r\n propertyType: {\r\n value: \"\", fieldName: \"propertyType\", errorMessage: '', required: true,\r\n housetype: { value: false, code: \"02\", name: \"บ้านเดี่ยว\", fieldName: \"housetype\", group: \"propertyType\" },\r\n land: { value: false, code: \"01\", name: \"ที่ดิน\", fieldName: \"land\", group: \"propertyType\" },\r\n townhouse: { value: false, code: \"03\", name: \"ทาวน์เฮ้าส์\", fieldName: \"townhouse\", group: \"propertyType\" },\r\n condo: { value: false, code: \"05\", name: \"คอนโดมิเนียม\", fieldName: \"condo\", group: \"propertyType\" },\r\n commercialbuilding: { value: false, code: \"04\", name: \"อาคารพาณิชย์\", fieldName: \"commercialbuilding\", group: \"propertyType\" },\r\n warehouse: { value: false, code: \"12\", name: \"โกดัง\", fieldName: \"warehouse\", group: \"propertyType\" },\r\n factory: { value: false, code: \"09\", name: \"โรงงาน\", fieldName: \"factory\", group: \"propertyType\" },\r\n apartment: { value: false, code: \"15\", name: \"อพาร์ทเม้นท์\", fieldName: \"apartment\", group: \"propertyType\" },\r\n office: { value: false, code: \"10\", name: \"อาคารสำนักงาน\", fieldName: \"office\", group: \"propertyType\" },\r\n resort: { value: false, code: \"20\", name: \"รีสอร์ท\", fieldName: \"resort\", group: \"propertyType\" },\r\n houseother: { value: false, code: \"19\", name: \"อื่น ๆ\", fieldName: \"houseother\", group: \"propertyType\" },\r\n },\r\n rangePrice: {\r\n value: \"\", fieldName: \"rangePrice\", min: 0, max: 11, from: 0, from_value: 0, to: 0, to_value: 0, step: 1, count: 0, placeholder: \"ราคาเริ่มต้น - สิ้นสุด\",\r\n values: [\r\n \"ไม่ระบุ\", \"1 ล้านบาท\", \"3 ล้านบาท\", \"5 ล้านบาท\", \"10 ล้านบาท\", \"20 ล้านบาท\", \"50 ล้านบาท\"\r\n ]\r\n },\r\n areaRange: {\r\n value: \"\", fieldName: \"areaRange\", min: 0, max: 8, from: 0, to: 0, step: 1, count: 0, placeholder: \"เนื้อที่เริ่มต้น - สิ้นสุด\",\r\n values: [\r\n \"ไม่ระบุ\", \"50 ตร.ว.\", \"100 ตร.ว.\", \"200 ตร.ว.\", \"300 ตร.ว.\", \"1 ไร่\", \"5 ไร่\", \"10 ไร่\", \"50 ไร่\"\r\n ]\r\n },\r\n useableAreaRange: {\r\n value: \"\", fieldName: \"useableAreaRange\", min: 0, max: 6, from: 0, to: 0, step: 1, count: 0, placeholder: \"พื้นที่เริ่มต้น - สิ้นสุด\",\r\n values: [\r\n \"ไม่ระบุ\", \"30 ตร.ม.\", \"50 ตร.ม.\", \"100 ตร.ม.\", \"200 ตร.ม.\", \"500 ตร.ม.\",\r\n ]\r\n },\r\n frequency: { value: 'D' },\r\n },\r\n submitFavEnable: {\r\n value: false\r\n },\r\n AutoID: \"\",\r\n criteriaList: [],\r\n loading: null,\r\n },\r\n reducers: {\r\n searchCriteriaDataChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n const errorMessage = action.payload.errorMessage;\r\n\r\n state.searchCriteria[field].value = value;\r\n\r\n state.searchCriteria[field].errorMessage = errorMessage;\r\n },\r\n searchCriteriaValidateChange: (state, action) => {\r\n const field = action.payload.field;\r\n const errorMessage = action.payload.errorMessage;\r\n state.searchCriteria[field].errorMessage = errorMessage;\r\n },\r\n searchCriteriaListChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n\r\n state.searchCriteria[field].value = \"\";\r\n state.searchCriteria[field].option = value;\r\n },\r\n searchCriteriaIonRangeChange: (state, action) => {\r\n const field = action.payload.fieldName;\r\n const value = action.payload.value;\r\n const from = action.payload.from;\r\n const to = action.payload.to;\r\n\r\n state.searchCriteria[field].value = value;\r\n state.searchCriteria[field].from = state.searchCriteria[field].values.indexOf(from);\r\n if (to === \"MAX\") {\r\n state.searchCriteria[field].to = state.searchCriteria[field].max;\r\n }\r\n else {\r\n state.searchCriteria[field].to = state.searchCriteria[field].values.indexOf(to);\r\n }\r\n },\r\n searchCriteriaIonRangeListChange: (state, action) => {\r\n const field = action.payload.fieldName;\r\n const value = action.payload.value;\r\n\r\n state.searchCriteria[field].values = value;\r\n },\r\n updateCriteriaIonRange: (state, action) => {\r\n const field = action.payload.fieldName;\r\n\r\n state.searchCriteria[field].count += 1;\r\n },\r\n CheckBoxCriteriaChange: (state, action) => {\r\n const field = action.payload.fieldName;\r\n const value = action.payload.value;\r\n const group = action.payload.group;\r\n\r\n const groupLength = Object.keys(state.searchCriteria[group]).length - 2\r\n\r\n state.searchCriteria[group][field].value = value;\r\n\r\n const temp = Object.entries(state.searchCriteria[group]).map((item) => {\r\n if (item[0] !== \"fieldName\" && item[0] !== \"value\" && item[1].value) {\r\n return item[1].code\r\n }\r\n }).filter(x => x);\r\n\r\n state.searchCriteria[group].value = temp.length === groupLength ? \"\" : temp.join(',');\r\n state.searchCriteria[group].errorMessage = ''\r\n },\r\n ClearSearchCriteria: (state, action) => {\r\n console.log(\"clear dis\")\r\n Object.keys(state.searchCriteria).forEach(function (key) {\r\n if (key === \"bathroom\" || key === \"bedroom\") {\r\n state.searchCriteria[key].value = 0\r\n } else if (key === \"frequency\") {\r\n state.searchCriteria[key].value = \"D\"\r\n } else {\r\n state.searchCriteria[key].value = \"\"\r\n }\r\n });\r\n\r\n state.searchCriteria.criteriaName.errorMessage = \"\";\r\n state.searchCriteria.propertyType.errorMessage = \"\";\r\n\r\n state.searchCriteria.propertyType.housetype.value = false\r\n state.searchCriteria.propertyType.land.value = false\r\n state.searchCriteria.propertyType.townhouse.value = false\r\n state.searchCriteria.propertyType.condo.value = false\r\n state.searchCriteria.propertyType.commercialbuilding.value = false\r\n state.searchCriteria.propertyType.warehouse.value = false\r\n state.searchCriteria.propertyType.factory.value = false\r\n state.searchCriteria.propertyType.apartment.value = false\r\n state.searchCriteria.propertyType.office.value = false\r\n state.searchCriteria.propertyType.resort.value = false\r\n state.searchCriteria.propertyType.houseother.value = false\r\n\r\n state.searchCriteria.rangePrice.from = 0\r\n state.searchCriteria.rangePrice.to = 0\r\n state.searchCriteria.rangePrice.count += 1\r\n state.searchCriteria.areaRange.from = 0\r\n state.searchCriteria.areaRange.to = 0\r\n state.searchCriteria.areaRange.count += 1\r\n state.searchCriteria.useableAreaRange.from = 0\r\n state.searchCriteria.useableAreaRange.to = 0\r\n state.searchCriteria.useableAreaRange.count += 1\r\n\r\n state.submitFavEnable.value = false\r\n\r\n },\r\n addObjToCriteriaList: (state, action) => {\r\n let customerSubscribeId = { value: action.payload.customerSubscribeId || \"\" };\r\n let criteriaName = { value: action.payload?.criteriaName || \"\" };\r\n let province = { value: action.payload?.province || \"\" };\r\n let district = { value: action.payload?.district || \"\", option: provinceData.find(x => x.value == province.value)?.child || [] };\r\n let subDistrict = { value: action.payload?.subDistrict || \"\", option: district.option.find(x => x.value == district.value)?.child || [] };\r\n let propertyType = { value: action.payload?.propertyType || \"\" };\r\n let rangePrice = { value: action.payload?.rangePrice || \"\" };\r\n let areaRange = { value: action.payload?.areaRange || \"\" };\r\n let useableAreaRange = { value: action.payload?.useableAreaRange || \"\" };\r\n let frequency = { value: action.payload?.frequency || \"D\" };\r\n\r\n if (propertyType.value) {\r\n var propertyTypeValueName = propertyType.value.split(\",\").map((code) => {\r\n return Object.keys(state.searchCriteria.propertyType).filter((key) => {\r\n return state.searchCriteria.propertyType[key].code === code\r\n })[0]\r\n }).filter((x) => x)\r\n\r\n // console.log(\"propertyTypeValueName\", propertyTypeValueName)\r\n\r\n propertyTypeValueName.map((field) => {\r\n propertyType[field] = { value: true };\r\n })\r\n }\r\n\r\n if (rangePrice.value) {\r\n rangePrice.value = rangePrice.value + \"\"\r\n const M = 1000000\r\n let from = rangePrice.value.split(',')[0];\r\n let to = rangePrice.value.split(',')[1];\r\n\r\n if (from === \"0\") {\r\n from = 'ไม่ระบุ'\r\n } else {\r\n from = (parseFloat(from) / M) + \" ล้านบาท\"\r\n }\r\n if (to) {\r\n to = (parseFloat(to) / M) + \" ล้านบาท\"\r\n } else {\r\n to = 'ไม่ระบุ'\r\n }\r\n\r\n rangePrice = valueRangeMaxMin(\"rangePrice\", from, to)\r\n rangePrice.from = state.searchCriteria.rangePrice.values.indexOf(rangePrice.from);\r\n rangePrice.to = rangePrice.to === \"MAX\" ?\r\n state.searchCriteria.rangePrice.max :\r\n state.searchCriteria.rangePrice.values.indexOf(rangePrice.to);\r\n }\r\n if (areaRange.value) {\r\n areaRange.value = areaRange.value + \"\"\r\n let from = areaRange.value.split(',')[0];\r\n let to = areaRange.value.split(',')[1];\r\n\r\n if (from === \"0\") {\r\n from = 'ไม่ระบุ'\r\n } else {\r\n from = parseFloat(from)\r\n if (from >= 400) {\r\n from = (from / 400) + ' ไร่'\r\n } else {\r\n from = from + ' ตร.ว.'\r\n }\r\n }\r\n if (to) {\r\n to = parseFloat(to)\r\n if (to >= 400) {\r\n to = (to / 400) + ' ไร่'\r\n } else {\r\n to = to + ' ตร.ว.'\r\n }\r\n } else {\r\n to = 'ไม่ระบุ'\r\n }\r\n\r\n areaRange = valueRangeMaxMin(\"areaRange\", from, to)\r\n areaRange.from = state.searchCriteria.areaRange.values.indexOf(areaRange.from);\r\n areaRange.to = areaRange.to === \"MAX\" ?\r\n state.searchCriteria.areaRange.max :\r\n state.searchCriteria.areaRange.values.indexOf(areaRange.to);\r\n }\r\n if (useableAreaRange.value) {\r\n useableAreaRange.value = useableAreaRange.value + \"\"\r\n let from = useableAreaRange.value.split(',')[0];\r\n let to = useableAreaRange.value.split(',')[1];\r\n\r\n if (from === \"0\") {\r\n from = 'ไม่ระบุ'\r\n } else {\r\n from = parseFloat(from) + \" ตร.ม.\"\r\n }\r\n if (to) {\r\n to = parseFloat(to) + \" ตร.ม.\"\r\n } else {\r\n to = 'ไม่ระบุ'\r\n }\r\n\r\n useableAreaRange = valueRangeMaxMin(\"useableAreaRange\", from, to)\r\n useableAreaRange.from = state.searchCriteria.useableAreaRange.values.indexOf(useableAreaRange.from);\r\n useableAreaRange.to = useableAreaRange.to === \"MAX\" ?\r\n state.searchCriteria.useableAreaRange.max :\r\n state.searchCriteria.useableAreaRange.values.indexOf(useableAreaRange.to);\r\n }\r\n\r\n const obj = {\r\n customerSubscribeId: customerSubscribeId,\r\n criteriaName: criteriaName,\r\n province: province,\r\n district: district,\r\n subDistrict: subDistrict,\r\n propertyType: propertyType,\r\n rangePrice: rangePrice,\r\n areaRange: areaRange,\r\n useableAreaRange: useableAreaRange,\r\n frequency: frequency,\r\n };\r\n state.criteriaList = [...state.criteriaList.filter(x => x.customerSubscribeId.value != customerSubscribeId.value), obj];\r\n },\r\n removeObjInCriteriaList: (state, action) => {\r\n const index = action.payload.index;\r\n\r\n if (index > -1) {\r\n state.criteriaList.splice(index, 1);\r\n }\r\n },\r\n fillFromObjCriteriaList: (state, action) => {\r\n const index = action.payload.index;\r\n\r\n Object.keys(state.searchCriteria).forEach((key) => {\r\n if (key != \"propertyType\") {\r\n Object.assign(state.searchCriteria[key], state.criteriaList[index][key]);\r\n } else {\r\n Object.keys(state.criteriaList[index][key]).forEach((keyCheckBox) => {\r\n if (typeof state.criteriaList[index][key][keyCheckBox] === 'object') {\r\n Object.assign(state.searchCriteria[key][keyCheckBox], state.criteriaList[index][key][keyCheckBox]);\r\n } else {\r\n state.searchCriteria[key][keyCheckBox] = state.criteriaList[index][key][keyCheckBox];\r\n }\r\n\r\n })\r\n }\r\n\r\n if ([\"rangePrice\", \"areaRange\", \"useableAreaRange\"].includes(key)) {\r\n state.searchCriteria[key].count += 1;\r\n }\r\n })\r\n },\r\n searchCriteriaValidate: (state, action) => {\r\n if (state.searchCriteria.criteriaName.value &&\r\n state.searchCriteria.propertyType.value &&\r\n state.searchCriteria.frequency.value) {\r\n state.submitFavEnable.value = true\r\n } else {\r\n state.submitFavEnable.value = false\r\n }\r\n },\r\n formsCusInfoDataChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n const errorMessage = action.payload.errorMessage;\r\n if (state.customerInfo[field].maxLength) {\r\n state.customerInfo[field].value = value.slice(0, state.customerInfo[field].maxLength);\r\n } else {\r\n state.customerInfo[field].value = value;\r\n }\r\n\r\n state.customerInfo[field].errorMessage = errorMessage;\r\n },\r\n ClearCusInfo: (state, action) => {\r\n Object.keys(state.customerInfo).forEach(function (key) {\r\n if (key === \"bathroom\" || key === \"bedroom\") {\r\n state.customerInfo[key].value = 0\r\n } else if (key === \"order\") {\r\n // state.customerInfo[key].value = \"new\"\r\n } else {\r\n state.customerInfo[key].value = \"\"\r\n }\r\n });\r\n },\r\n },\r\n})\r\n\r\n// Action creators are generated for each case reducer function\r\nexport const { searchCriteriaDataChange, searchCriteriaListChange, searchCriteriaIonRangeChange, searchCriteriaIonRangeListChange, updateCriteriaIonRange, CheckBoxCriteriaChange, ClearSearchCriteria,\r\n addObjToCriteriaList, fillFromObjCriteriaList, searchCriteriaValidateChange, removeObjInCriteriaList, searchCriteriaValidate,\r\n formsCusInfoDataChange, ClearCusInfo,\r\n} = loginSlice.actions\r\n\r\nexport default loginSlice.reducer","import React, { createContext, useContext } from \"react\";\r\nimport { getCookie, setCookie, encodeThai, getCookieData } from \"../common/Common\";\r\nconst { BehaviorSubject, Observable, defer } = rxjs;\r\nconst { tap, map, filter, first } = rxjs.operators;\r\n\r\nexport class CompareStore {\r\n compareProperty$ = new BehaviorSubject([]);\r\n\r\n comparePropertyLength$ = this.compareProperty$.pipe(\r\n map((item) => item.length)\r\n );\r\n\r\n constructor() {\r\n window.openErrorPopup = this.openErrorPopup;\r\n\r\n console.log(\"compare cookie\" + getCookie(\"compareProperty\"));\r\n\r\n const initValue = getCookie(\"compareProperty\") !== \"\"\r\n ? JSON.parse(getCookie(\"compareProperty\"))\r\n : []\r\n // window.setTimeout(() => {\r\n // this.compareProperty$.next(initValue);\r\n // }, 1000)\r\n console.log(getCookieData)\r\n var result = getCookieData(initValue).then((data) => {\r\n data.Items.forEach(element => this.addCompareProperty(element, false));\r\n })\r\n }\r\n\r\n openErrorPopup(message) {\r\n $(\"#error-popup div div p\").html(message);\r\n $(\"#error-popup\").css({\r\n display: \"flex\",\r\n });\r\n\r\n $(\"#close-error-popup\").on(\"click\", function () {\r\n $(\"#error-popup\").css({\r\n display: \"\",\r\n });\r\n });\r\n }\r\n\r\n addCompareProperty(prop, show = true) {\r\n let comparePropertyList = this.compareProperty$.value;\r\n\r\n if (\r\n comparePropertyList.some((item) => item.PropertyID === prop.PropertyID)\r\n ) {\r\n this.compareProperty$.next([...comparePropertyList]);\r\n return;\r\n }\r\n\r\n comparePropertyList = comparePropertyList.filter((item) => item);\r\n\r\n if (comparePropertyList.length >= 5) {\r\n openErrorPopup(\"เลือกได้ไม่เกิน 5 ทรัพย์\");\r\n return;\r\n }\r\n\r\n let PropertyMediaes = (prop?.PropertyMediaes === \"\") ? [] : prop.PropertyMediaes;\r\n\r\n // const newProperty = {\r\n // ...prop,\r\n // PropertyMediaes: [\r\n // ...prop.PropertyMediaes.filter(\r\n // (item) => item.MediaType === \"IMAGE-THUMBNAIL\"\r\n // ),\r\n // ],\r\n // NearbyPlaces: null,\r\n // PropertiesInfoRelated: null,\r\n // };\r\n\r\n const newProperty = {\r\n PropertyID: prop.PropertyID,\r\n PropertyIDFormat: prop.PropertyIDFormat,\r\n VillageTH: prop.VillageTH,\r\n PropertyTypeName: prop.PropertyTypeName,\r\n PromotionPrice: prop.PromotionPrice,\r\n AdjustPrice: prop.AdjustPrice,\r\n SellPrice: prop.SellPrice,\r\n PMMaintenanceStatus: prop.PMMaintenanceStatus,\r\n AmphurName: prop.AmphurName,\r\n ProvinceName: prop.ProvinceName,\r\n AreaValue: prop.AreaValue,\r\n UseableArea: prop.UseableArea,\r\n Bedroom: prop.Bedroom,\r\n Bathroom: prop.Bathroom,\r\n BuildingAge: prop.BuildingAge ?? prop.Age,\r\n PropertyMediaes: [\r\n ...PropertyMediaes.filter(\r\n (item) => item.MediaType === \"IMAGE-THUMBNAIL\"\r\n ),\r\n ],\r\n };\r\n\r\n comparePropertyList = [...comparePropertyList, { ...newProperty }];\r\n\r\n setCookie(\"compareProperty\", JSON.stringify(Array.from(comparePropertyList, x => x.PropertyID)), 30);\r\n // setCookie(\"compareProperty\", JSON.stringify(comparePropertyList.map((item) => { return encodeThai(item) })), 30);\r\n\r\n console.log(\"compare after set cookie\" + getCookie(\"compareProperty\"));\r\n\r\n this.compareProperty$.next([...comparePropertyList]);\r\n\r\n let section_comparision = $(\"#comparision\");\r\n if (show) section_comparision.addClass(\"active\");\r\n\r\n return [...comparePropertyList];\r\n }\r\n\r\n removeCompareProperty(prop) {\r\n let comparePropertyList = this.compareProperty$.value;\r\n\r\n comparePropertyList = comparePropertyList.filter(\r\n (item) => item.PropertyID !== prop.PropertyID\r\n );\r\n\r\n setCookie(\"compareProperty\", JSON.stringify([...comparePropertyList]), 30);\r\n\r\n this.compareProperty$.next([...comparePropertyList]);\r\n }\r\n\r\n removeAllCompareProperty() {\r\n let comparePropertyList = this.compareProperty$.value;\r\n\r\n comparePropertyList = [];\r\n\r\n setCookie(\"compareProperty\", JSON.stringify([...comparePropertyList]), 30);\r\n\r\n this.compareProperty$.next([...comparePropertyList]);\r\n }\r\n\r\n canAddCompareProperty = (prop = null) =>\r\n this.compareProperty$.pipe(\r\n map((list) =>\r\n prop ? !(list.PropertyID === prop.PropertyID) : list.length <= 5\r\n )\r\n );\r\n\r\n isExistCompareProperty = (prop = null) =>\r\n this.compareProperty$.pipe(\r\n map((list) => {\r\n const isCompared = list.some(\r\n (item) => item.PropertyID === prop.PropertyID\r\n );\r\n return isCompared;\r\n })\r\n );\r\n\r\n getComparePropertyList = this.compareProperty$.pipe(\r\n map((list) => {\r\n const result = [\r\n ...list,\r\n ...Array.from({ length: Math.abs(list.length - 5) }, (_) => null),\r\n ];\r\n return result;\r\n })\r\n );\r\n}\r\n\r\nconst compareStore = new CompareStore();\r\n\r\nexport const COMPARE_STORE_CONTEXT = createContext(compareStore);\r\n\r\nexport const CompareStoreProvider = (prop) => {\r\n return (\r\n \r\n {prop.children}\r\n \r\n );\r\n};\r\n","import { createApi, fetchBaseQuery } from \"@reduxjs/toolkit/query/react\";\r\n\r\n// Define a service using a base URL and expected endpoints\r\nexport const merchantAPI = createApi({\r\n reducerPath: \"merchantAPI\",\r\n baseQuery: fetchBaseQuery({\r\n baseUrl:\r\n \"/th/KpaylaterConsoleDoc/\",\r\n // \"/SiteCollectionDocuments/personal/loan/personal-loan/paylater-map/json/\",\r\n }),\r\n endpoints: (builder) => ({\r\n getMerchants: builder.query({\r\n query: () => \"merchant.txt?limit=10\",\r\n cacheTime: 60000,\r\n }),\r\n }),\r\n});\r\n\r\n// Export hooks for usage in functional components, which are\r\n// auto-generated based on the defined endpoints\r\nexport const { useGetMerchantsQuery } = merchantAPI;\r\n","module.exports = provinces;","import React from \"react\";\r\n\r\nimport { SelectList, IonRange, RangeInput, CounterInput, CheckBoxIonInput, CheckBoxCustomInput } from '../common/Component'\r\n\r\n// axios.defaults.headers.common['Authorization'] = store.getState().Token;\r\n//process.env.API_ROOT_URL\r\n\r\n\r\nexport const DesktopFilterBar = (props) => {\r\n const searchFilter = props.searchFilter\r\n const searchDataChange = props.searchDataChange\r\n const IonRangeDataChange = props.IonRangeDataChange\r\n const RangeInputDataChange = props.RangeInputDataChange\r\n const OnRadioCheck = props.OnRadioCheck\r\n const GoToSearch = props.GoToSearch\r\n const ClearSearch = props.ClearSearch\r\n const OnInputChange = props.OnInputChange\r\n\r\n const renderAssetTypesCheckBox = (item, index) => {\r\n if (item[0] !== \"fieldName\" && item[0] !== \"value\") {\r\n const fieldName = item[0];\r\n const data = item[1];\r\n // console.log('item', fieldName, data,item[1]);\r\n // console.log(\"asset-type-m\" + index)\r\n return
\r\n \r\n
\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

ค้นหาอย่างละเอียด

\r\n
\r\n
\r\n OnInputChange(\"keyword\", e)} onKeyPress={(e) => e.key === 'Enter' && GoToSearch()} />\r\n
\r\n
\r\n {/*
\r\n \r\n
\r\n
\r\n \r\n
*/}\r\n {Object.entries(searchFilter.assetTypes).map((item, index) => renderAssetTypesCheckBox(item, index))}\r\n
\r\n
\r\n

ทำเลที่ตั้ง

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

ประเภททรัพย์

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

ช่วงราคา (บาท)

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

เนื้อที่ (ตร.ว.)

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

พื้นที่ใช้สอย (ตร.ม.)

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

ห้องนอน

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

ห้องน้ำ

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

สถานีใกล้เคียง BTS/MRT

\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n};\r\n\r\n// export const DeskTopSearch = () => {\r\n// return (\r\n\r\n// )\r\n// };\r\n\r\n\r\n","import React from \"react\";\r\nimport { SelectList, IonRange, RangeInput, CounterInput, CheckBoxIonInput, CheckBoxCustomInput } from '../common/Component'\r\n\r\n\r\nexport const MobileFilterSearch = (props) => {\r\n const searchFilter = props.searchFilter\r\n const searchDataChange = props.searchDataChange\r\n const IonRangeDataChange = props.IonRangeDataChange\r\n const RangeInputDataChange = props.RangeInputDataChange\r\n const OnRadioCheck = props.OnRadioCheck\r\n const GoToSearch = props.GoToSearch\r\n const ClearSearch = props.ClearSearch\r\n const OnInputChange = props.OnInputChange\r\n\r\n const renderCheckBox = (item, index) => {\r\n if (item[0] !== \"fieldName\" && item[0] !== \"value\") {\r\n const fieldName = item[0];\r\n const data = item[1];\r\n // console.log('item', fieldName, data,item[1]);\r\n // console.log(\"property-type-m\" + index)\r\n return
\r\n
\r\n \r\n
\r\n
\r\n }\r\n }\r\n\r\n const renderAssetTypesCheckBox = (item, index) => {\r\n if (item[0] !== \"fieldName\" && item[0] !== \"value\") {\r\n const fieldName = item[0];\r\n const data = item[1];\r\n // console.log('item', fieldName, data,item[1]);\r\n // console.log(\"asset-type-m\" + index)\r\n return
\r\n \r\n
\r\n }\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

ค้นหาอย่างละเอียด

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n OnInputChange(\"keyword\", e)} onKeyPress={(e) => e.key === 'Enter' && GoToSearch() && $('#more-filter-mobile .btn-close').click()} />\r\n
\r\n
\r\n {Object.entries(searchFilter.assetTypes).map((item, index) => renderAssetTypesCheckBox(item, index))}\r\n
\r\n
\r\n

ทำเลที่ตั้ง

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

ประเภททรัพย์

\r\n
\r\n
\r\n {Object.entries(searchFilter.propertyType).map((item, index) => renderCheckBox(item, index))}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

ช่วงราคา (บาท)

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

เนื้อที่ (ตร.ว.)

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

พื้นที่ใช้สอย (ตร.ม.)

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

ห้องนอน

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

ห้องน้ำ

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

สถานีใกล้เคียง BTS/MRT

\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}","import { useState } from \"react\";\r\nimport { useSubscription } from \"./UseSubscription\";\r\n\r\nexport function useObservableState(source) {\r\n const [state, setState] = useState(null);\r\n useSubscription(source, {\r\n next: (value) => {\r\n setState(value);\r\n },\r\n });\r\n return state;\r\n}\r\n","import { useEffect } from \"react\";\r\n\r\nexport function useSubscription(source, observer = undefined) {\r\n useEffect(() => {\r\n const subscription = source.subscribe(observer);\r\n return () => {\r\n subscription.unsubscribe();\r\n };\r\n }, [source]);\r\n}\r\n","import { createSlice } from \"@reduxjs/toolkit\";\r\n\r\nexport const paylaterSlice = createSlice({\r\n name: \"merchant\",\r\n initialState: {\r\n merchants: [],\r\n categories: [],\r\n subcategories: [],\r\n cate_relation: [],\r\n cate_logo: [],\r\n default_popular: null,\r\n search: \"\",\r\n selected_category: null,\r\n selected_subcategory: \"\",\r\n loading: null,\r\n filter_popular_merchants: null,\r\n filter_merchants: null,\r\n search_popular_merchants: null,\r\n search_all_merchants: null,\r\n },\r\n reducers: {\r\n setMerchants: (state, action) => {\r\n const data = action.payload.data.map((m) => {\r\n const keysArray = m.keys.split(\";\");\r\n return { ...m, keys: keysArray };\r\n });\r\n state.merchants = data;\r\n const temp = action.payload.data;\r\n\r\n // state.merchants?.sort((a, b) => a.seq - b.seq);\r\n // const sortedArray = [...state.merchants].sort((a, b) => a.seq - b.seq);\r\n const sortedArray = [...state.merchants].sort((a, b) => {\r\n if (a.seq !== \"\" && b.seq !== \"\") {\r\n return parseInt(a.seq) - parseInt(b.seq);\r\n } else if (a.seq !== \"\") {\r\n return -1; // a.seq is not empty, so it comes before b.seq\r\n } else if (b.seq !== \"\") {\r\n return 1; // b.seq is not empty, so it comes before a.seq\r\n } else {\r\n return 0; // both a.seq and b.seq are empty, no preference in order\r\n }\r\n });\r\n state.merchants = sortedArray;\r\n // let cat = state.merchants.map((m) => m.cate_th);\r\n let cate_logo = state.merchants.map(({ cate_th, cate_logo }) => ({\r\n cate_th,\r\n cate_logo,\r\n }));\r\n\r\n // let subcat = state.merchants.map((m) => m.subcate);\r\n let subcat = state.merchants.map((m) => m.subcate).filter((x) => x);\r\n let popular = state.merchants.filter((m) => m.fg == \"Y\");\r\n let all = { cate_th: \"ร้านค้ายอดนิยม\", cate_logo: \"popular\" };\r\n cate_logo.unshift(all);\r\n state.categories = [...new Set(cate_logo)];\r\n const uniqueData = Array.from(new Set(state.categories.map(JSON.stringify))).map(JSON.parse);\r\n\r\n const result = uniqueData.filter(\r\n (obj, index, self) =>\r\n index ===\r\n self.findIndex((o) => o.cate_th === obj.cate_th && o.cate_logo === obj.cate_logo)\r\n );\r\n state.categories = result;\r\n state.subcategories = [...new Set(subcat)];\r\n\r\n state.default_popular = [...new Set(popular)];\r\n // state.sort = [...new Set(cate_logo)];\r\n let relation = state.categories.map((c) => {\r\n let temp = state.merchants.filter((m) => m.cate_th == c);\r\n let temp2 = temp.map((t) => t.subcate);\r\n let arr = [];\r\n arr[c] = [...new Set(temp2)];\r\n return arr;\r\n });\r\n\r\n state.cate_relation = relation;\r\n },\r\n setSelectedCategory: (state, action) => {\r\n state.selected_category = action.payload;\r\n },\r\n setSelectedSubCategory: (state, action) => {\r\n if (action.payload == \"ทั้งหมด\") {\r\n state.selected_subcategory = null;\r\n } else {\r\n state.selected_subcategory = action.payload;\r\n }\r\n },\r\n unselectedCategory: (state, action) => {\r\n state.selected_category = null;\r\n state.selected_subcategory = null;\r\n state.filter_popular_merchants = null;\r\n state.filter_merchants = null;\r\n },\r\n filterCategory: (state, action) => {\r\n state.filter_merchants = state.merchants.filter((m) => m.cate_th == state.selected_category);\r\n state.filter_popular_merchants = state.filter_merchants.filter((m) => m.fg == \"Y\");\r\n\r\n if (state.selected_category != \"ร้านค้ายอดนิยม\") {\r\n let temp = state.filter_merchants.map((m) => m.subcate).filter((x) => x);\r\n // let temp = state.filter_merchants.map((m) => m.subcate);\r\n\r\n if (temp != 0) {\r\n state.subcategories = [...new Set(temp)];\r\n } else {\r\n state.subcategories = null;\r\n }\r\n } else {\r\n let subcat = state.merchants.map((m) => m.subcate);\r\n state.subcategories = [...new Set(subcat)];\r\n }\r\n let s = state.subcategories?.length ? state.subcategories : [];\r\n state.subcategories = s;\r\n },\r\n setSearch: (state, action) => {\r\n state.search = action.payload;\r\n if (state.selected_category != null) {\r\n state.filter_merchants = state.filter_merchants.filter(\r\n (m) =>\r\n m.nm_en.toLowerCase().includes(action.payload.toLowerCase()) ||\r\n m.nm_th.includes(action.payload) ||\r\n m.keys.includes(action.payload)\r\n );\r\n } else {\r\n state.filter_merchants = state.merchants.filter(\r\n (m) =>\r\n m.nm_en.toLowerCase().includes(action.payload.toLowerCase()) ||\r\n m.nm_th.includes(action.payload) ||\r\n m.keys.includes(action.payload)\r\n );\r\n }\r\n state.filter_merchants = state.filter_merchants.filter(\r\n (m) =>\r\n m.nm_en.toLowerCase().includes(action.payload.toLowerCase()) ||\r\n m.nm_th.includes(action.payload) ||\r\n m.keys.includes(action.payload)\r\n );\r\n\r\n console.log(\"🚀 ------------------------------------------------------------------------------🚀\")\r\n console.log(\"🚀 ~ file: paylaterSlice.js:128 ~ tate.filter_merchants:\", state.filter_merchants)\r\n console.log(\"🚀 ------------------------------------------------------------------------------🚀\")\r\n\r\n state.filter_popular_merchants = state.filter_merchants.filter((m) => m.fg == \"Y\");\r\n },\r\n clearSearch: (state, action) => {\r\n state.search = \"\";\r\n state.filter_merchants = null;\r\n state.filter_popular_merchants = null;\r\n state.selected_category = null;\r\n state.selected_subcategory = \"\";\r\n },\r\n filterSubCategory: (state, action) => {\r\n if (state.selected_subcategory != null) {\r\n state.filter_merchants = state.merchants.filter(\r\n (m) => m.subcate == state.selected_subcategory\r\n );\r\n\r\n state.filter_popular_merchants = state.filter_merchants.filter((m) => m.fg == \"Y\");\r\n } else {\r\n state.filter_merchants = state.merchants.filter(\r\n (m) => m.cate_th == state.selected_category\r\n );\r\n state.filter_popular_merchants = state.filter_merchants.filter((m) => m.fg == \"Y\");\r\n }\r\n },\r\n },\r\n});\r\n\r\n// Action creators are generated for each case reducer function\r\nexport const {\r\n setMerchants,\r\n setSelectedCategory,\r\n setSelectedSubCategory,\r\n updateMerchants,\r\n filterCategory,\r\n filterSubCategory,\r\n setSearch,\r\n clearSearch,\r\n unselectedCategory,\r\n} = paylaterSlice.actions;\r\n\r\nexport default paylaterSlice.reducer;\r\n","import classnames from \"classnames/bind\";\r\nimport Config from \"config\";\r\nimport React, { createRef, useEffect, useState } from \"react\";\r\n\r\nconst $ = window.$;\r\nexport class SelectList extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n if (this.props.className) {\r\n this.className = this.props.className;\r\n } else {\r\n this.className = \"select-field mb-3\";\r\n }\r\n\r\n if (this.props.templateSelection) {\r\n this.templateSelection = this.props.templateSelection;\r\n } else {\r\n this.templateSelection = \"\";\r\n }\r\n\r\n this.minimumResultsForSearch = this.props.minimumResultsForSearch;\r\n\r\n // console.log(\"select name\",this.className)\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleOpen = this.handleOpen.bind(this);\r\n }\r\n\r\n handleChange(e) {\r\n // console.log(e)\r\n\r\n if (this.props.clearOption && e.params.args.data.id == \"clear\") {\r\n this.props.OnformsDataChange({\r\n field: this.props.fieldName,\r\n value: \"\",\r\n });\r\n } else {\r\n this.props.OnformsDataChange({\r\n field: this.props.fieldName,\r\n value: e.params.args.data.id,\r\n });\r\n }\r\n\r\n e.preventDefault();\r\n this.$el.select2(\"close\");\r\n }\r\n\r\n handleOpen() {\r\n console.log(\"this.props.placeholderSearch\", this.props.placeholderSearch);\r\n $(\"input.select2-search__field\").prop(\r\n \"placeholder\",\r\n this.props.placeholderSearch\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n //const props = this.props\r\n this.$el = $(this.el);\r\n\r\n if (this.$el.data(\"select2\")) {\r\n this.$el.select2(\"destroy\");\r\n }\r\n\r\n this.select2Setting = {\r\n placeholder: this.props.placeholder,\r\n allowClear: true,\r\n //onChange: this.handleChange\r\n };\r\n\r\n if (this.props.dropdownParent) {\r\n this.select2Setting.dropdownParent = $(this.props.dropdownParent);\r\n }\r\n\r\n if (this.props.fieldName === \"station\") {\r\n this.select2Setting.templateResult = function (idioma) {\r\n if (idioma.id === \"clear\") {\r\n var $span = $(\r\n \"\" +\r\n idioma.text +\r\n \"\"\r\n );\r\n }\r\n else if (idioma.title == \"bts\") {\r\n var $span = $(\r\n \"\" +\r\n idioma.text +\r\n \"\"\r\n );\r\n } else {\r\n var $span = $(\r\n \"\" +\r\n idioma.text +\r\n \"\"\r\n );\r\n }\r\n return $span;\r\n };\r\n\r\n this.select2Setting.templateSelection = function (idioma) {\r\n if (idioma.id) {\r\n if (idioma.title == \"bts\") {\r\n var $span = $(\r\n \"\" +\r\n idioma.text +\r\n \"\"\r\n );\r\n } else {\r\n var $span = $(\r\n \"\" +\r\n idioma.text +\r\n \"\"\r\n );\r\n }\r\n } else {\r\n var $span = $(\"\" + idioma.text + \"\");\r\n }\r\n return $span;\r\n };\r\n }\r\n\r\n if (this.props.templateSelection) {\r\n this.select2Setting.templateSelection = this.props.templateSelection;\r\n }\r\n\r\n if (this.props.minimumResultsForSearch) {\r\n this.select2Setting.minimumResultsForSearch =\r\n this.props.minimumResultsForSearch;\r\n }\r\n\r\n // console.log(this.select2Setting)\r\n this.$el\r\n .select2(this.select2Setting)\r\n .one(\"select2:open\", this.handleOpen)\r\n .on(\"select2:selecting\", this.handleChange);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.option !== this.props.option) {\r\n this.$el.select2(\"destroy\");\r\n this.$el\r\n .select2(\r\n this.select2Setting\r\n // {\r\n // placeholder: this.props.placeholder,\r\n // allowClear: true,\r\n // //onChange: this.handleChange\r\n // }\r\n )\r\n .one(\"select2:open\", this.handleOpen)\r\n .on(\"select2:selecting\", this.handleChange);\r\n // console.log(`SelectList ${this.props.fieldName} Updated`)\r\n }\r\n if (prevProps.value !== this.props.value) {\r\n this.$el.trigger(\"change.select2\");\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n (this.el = el)}\r\n readOnly\r\n >\r\n {!this.props.notShowEmptyOption && }\r\n {this.props.clearOption && }\r\n {Array.isArray(this.props.option) &&\r\n this.props.option.map((item, index) => renderChild(item, index))}\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nfunction renderChild(item, index) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport class IonRange extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n //this.formsDataChange = props.formsDataChange;\r\n //this = props;\r\n // Don't call this.setState() here!\r\n // this.state = { counter: 0 };\r\n // this.handleClick = this.handleClick.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n handleChange(data) {\r\n this.props.OnformsDataChange(\r\n this.props.fieldName,\r\n data.from_value,\r\n (new Set([data.from, data.to, data.max]).size === 1) ? \"\" : data.to_value\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n //const props = this.props\r\n // console.log(this.props, \" <--slider value\");\r\n this.$el = $(this.el);\r\n this.$el.ionRangeSlider({\r\n skin: \"big\",\r\n type: \"double\",\r\n grid: false,\r\n min: this.props.min,\r\n max: this.props.max,\r\n from: this.props.from,\r\n to: this.props.to,\r\n step: this.props.step,\r\n values: this.props.values,\r\n hide_from_to: true,\r\n hide_min_max: true,\r\n // skin: \"round\",\r\n // prettify_separator: \",\",\r\n //onChange: this.handleChange\r\n onFinish: this.handleChange,\r\n });\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n // Typical usage (don't forget to compare props):\r\n if (\r\n this.props.max !== prevProps.max ||\r\n this.props.min !== prevProps.min ||\r\n this.props.step !== prevProps.step ||\r\n this.props.count !== prevProps.count\r\n ) {\r\n this.$el.data(\"ionRangeSlider\").update({\r\n min: this.props.min,\r\n max: this.props.max,\r\n step: this.props.step,\r\n from: this.props.from,\r\n to: this.props.to,\r\n });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.$el.data(\"ionRangeSlider\").destroy();\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n (this.el = el)} />\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport const RangeInput = (props) => {\r\n const [Start, setStartValue] = useState(\"\");\r\n const [End, setEndValue] = useState(\"\");\r\n const [StartList, setStartListValue] = useState(props.values);\r\n const [EndList, setEndListValue] = useState(props.values);\r\n const dropdown = createRef();\r\n\r\n function clickRangeInput() {\r\n if ($(\".range-dropdown.active\").length > 0) {\r\n $(\".range-dropdown.active\").removeClass(\"active\");\r\n }\r\n $(dropdown.current).addClass(\"active\");\r\n setStart();\r\n }\r\n\r\n function setStart() {\r\n $(dropdown.current).addClass(\"start\");\r\n $(dropdown.current).removeClass(\"end\");\r\n }\r\n\r\n function setEnd() {\r\n $(dropdown.current).addClass(\"end\");\r\n $(dropdown.current).removeClass(\"start\");\r\n }\r\n\r\n function startClick(item) {\r\n // console.log(\"start\",item)\r\n setStartValue(item);\r\n const index = StartList.indexOf(item);\r\n if (index > 0) {\r\n setEndListValue(\r\n StartList.slice(0, 1).concat(\r\n StartList.slice(StartList.indexOf(item) + 1)\r\n )\r\n );\r\n } else {\r\n setEndListValue(StartList);\r\n }\r\n props.OnformsDataChange(props.fieldName, item, \"\");\r\n setEnd();\r\n }\r\n\r\n function endClick(item) {\r\n // console.log(\"end\",item)\r\n setEndValue(item);\r\n props.OnformsDataChange(props.fieldName, Start, item);\r\n $(dropdown.current).removeClass(\"active\");\r\n }\r\n\r\n function renderStartChild(item, index) {\r\n return (\r\n
  • startClick(item)}>\r\n {item}\r\n
  • \r\n );\r\n }\r\n\r\n function renderEndChild(item, index) {\r\n return (\r\n
  • endClick(item)}>\r\n {item}\r\n
  • \r\n );\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n เริ่มต้น\r\n
    \r\n
    -
    \r\n
    \r\n สิ้นสุด\r\n
    \r\n
    \r\n
    \r\n
      \r\n {StartList.map((item, index) => renderStartChild(item, index))}\r\n
    \r\n
      \r\n {EndList.map((item, index) => renderEndChild(item, index))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport const CounterInput = (props) => {\r\n function decrease() {\r\n if (props.value > props.min) {\r\n props.OnformsDataChange({\r\n field: props.fieldName,\r\n value: props.value - 1,\r\n });\r\n }\r\n }\r\n\r\n function increase() {\r\n if (props.value < props.max) {\r\n props.OnformsDataChange({\r\n field: props.fieldName,\r\n value: props.value + 1,\r\n });\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport const CheckBoxIonInput = (props) => {\r\n function check() {\r\n props.OnformsDataChange(props.fieldName, !props.value, props.group);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n

    {props.name}

    \r\n \r\n );\r\n};\r\n\r\nexport const CheckBoxCustomInput = (props) => {\r\n function check() {\r\n props.OnformsDataChange(props.fieldName, !props.value, props.group);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n

    \r\n \r\n );\r\n};\r\n\r\nexport class CalcSelectList extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n // console.log(\"select name\",this.className)\r\n this.handleChange = this.handleChange.bind(this);\r\n this.renderChild = this.renderChild.bind(this);\r\n }\r\n\r\n handleChange(e) {\r\n // console.log(e)\r\n this.props.OnformsDataChange(this.props.fieldName, e.params.args.data.id);\r\n e.preventDefault();\r\n this.$el.select2(\"close\");\r\n }\r\n\r\n componentDidMount() {\r\n //const props = this.props\r\n this.$el = $(this.el);\r\n\r\n if (this.$el.data(\"select2\")) {\r\n this.$el.select2(\"destroy\");\r\n }\r\n\r\n this.select2Setting = {\r\n placeholder: this.props.placeholder,\r\n allowClear: true,\r\n minimumResultsForSearch: -1,\r\n dropdownCssClass: \"cs-dropdown\",\r\n };\r\n\r\n this.$el\r\n .select2(this.select2Setting)\r\n .on(\"select2:selecting\", this.handleChange);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.option !== this.props.option) {\r\n this.$el.select2(\"destroy\");\r\n this.$el\r\n .select2(this.select2Setting)\r\n .on(\"select2:selecting\", this.handleChange);\r\n // console.log(`SelectList ${this.props.fieldName} Updated`)\r\n }\r\n if (prevProps.value !== this.props.value) {\r\n this.$el.trigger(\"change.select2\");\r\n }\r\n }\r\n\r\n renderChild(item) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n (this.el = el)}\r\n readOnly\r\n >\r\n \r\n {Array.isArray(this.props.option) &&\r\n this.props.option.map((item) => this.renderChild(item))}\r\n \r\n {this.props.errorMessage && (\r\n \r\n {this.props.errorMessage}\r\n \r\n )}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport const CalcInputField = (props) => {\r\n // console.log(\"InputField Render\",props.fieldName)\r\n\r\n function OnformsDataChange(e) {\r\n console.log(\"on change\", e.target.value);\r\n props.OnformsDataChange(props.fieldName, e.target.value);\r\n }\r\n\r\n function OnformsBlur(e) {\r\n if (props.formsBlur) {\r\n var value = e.target.value;\r\n // if (value === props.placeholder) {\r\n // value = '';\r\n // }\r\n console.log(\"on change\", value);\r\n props.formsBlur(props.fieldName, value);\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n \r\n \r\n {props.errorMessage && (\r\n \r\n {props.errorMessage}\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nexport class DropLeadSelectList extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n // console.log(\"select name\",this.className)\r\n this.handleChange = this.handleChange.bind(this);\r\n this.renderChild = this.renderChild.bind(this);\r\n }\r\n\r\n handleChange(e) {\r\n // console.log(e)\r\n this.props.OnformsDataChange(this.props.fieldName, e.params.args.data.id);\r\n e.preventDefault();\r\n this.$el.select2(\"close\");\r\n }\r\n\r\n componentDidMount() {\r\n //const props = this.props\r\n this.$el = $(this.el);\r\n\r\n if (this.$el.data(\"select2\")) {\r\n this.$el.select2(\"destroy\");\r\n }\r\n\r\n this.select2Setting = {\r\n placeholder: this.props.placeholder,\r\n allowClear: true,\r\n minimumResultsForSearch: -1,\r\n dropdownCssClass: \"border-dropdown\",\r\n };\r\n\r\n this.$el\r\n .select2(this.select2Setting)\r\n .on(\"select2:selecting\", this.handleChange);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.option !== this.props.option) {\r\n this.$el.select2(\"destroy\");\r\n this.$el\r\n .select2(this.select2Setting)\r\n .on(\"select2:selecting\", this.handleChange);\r\n // console.log(`SelectList ${this.props.fieldName} Updated`)\r\n }\r\n if (prevProps.value !== this.props.value) {\r\n this.$el.trigger(\"change.select2\");\r\n }\r\n }\r\n\r\n renderChild(item) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n
    \r\n (this.el = el)}\r\n readOnly\r\n >\r\n \r\n {Array.isArray(this.props.option) &&\r\n this.props.option.map((item) => this.renderChild(item))}\r\n \r\n
    \r\n {this.props.errorMessage && (\r\n \r\n {this.props.errorMessage}\r\n \r\n )}\r\n
    \r\n );\r\n }\r\n}\r\n\r\nexport const DropLeadInputField = (props) => {\r\n // console.log(\"InputField Render\",props.fieldName)\r\n\r\n function OnformsDataChange(e) {\r\n props.OnformsDataChange(props.fieldName, e.target.value);\r\n }\r\n\r\n function OnformsBlur(e) {\r\n if (props.formsBlur) {\r\n var value = e.target.value;\r\n props.formsBlur(props.fieldName, value);\r\n }\r\n }\r\n\r\n return (\r\n
    \r\n \r\n \r\n {props.errorMessage && (\r\n \r\n {props.errorMessage}\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n","import React, { useEffect } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { Provider } from \"react-redux\";\r\nimport classnames from \"classnames/bind\";\r\nimport Config from \"config\";\r\nimport { CookiesProvider, useCookies } from \"react-cookie\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport {\r\n addCommas,\r\n addSearchUrlParameter,\r\n getApiDataAsync,\r\n getURLParameter,\r\n gotoSearchPage,\r\n isMobile,\r\n kloader,\r\n noSpecialChar,\r\n postApiDataAsync,\r\n unitToValue,\r\n valueRangeMaxMin,\r\n commonSearchDataChange,\r\n} from \"../common/Common\";\r\nimport { SelectList } from \"../common/Component\";\r\nimport { PropertyList } from \"../common/PropertyBox\";\r\nimport { HeaderNav, MobileNav } from \"../common/Header\";\r\nimport configureStore from \"../store\";\r\nimport {\r\n CheckBoxChange,\r\n ClearSearch,\r\n likePropertyList,\r\n OnPropertyListLoading,\r\n searchDataChange,\r\n searchIonRangeChange,\r\n searchListChange,\r\n searchResultDataChange,\r\n searchResultPageIndexChange,\r\n updateIonRange,\r\n updateLikeInList,\r\n updatesearchFilterCheckBox,\r\n updateSearchResultList,\r\n} from \"../stores/propertySlice\";\r\nimport { DesktopFilterBar } from \"./DesktopFilterBar\";\r\nimport \"./index.css\";\r\nimport { MobileFilterSearch } from \"./MobileFilterSearch\";\r\nimport { PropertyPageResult } from \"./PropertyBox\";\r\n\r\nimport province from \"province\";\r\nimport { LoginFooter } from \"../common/LoginFooter\";\r\n\r\nconst store = configureStore();\r\n\r\nconst pagesLink = Config.pagesLink;\r\nconst mainTab = [\"newProperty\", \"promoProperty\", \"popularProperty\"];\r\nconst allTab = [\r\n \"newProperty\",\r\n \"promoProperty\",\r\n \"popularProperty\",\r\n \"favoriteProperty\",\r\n \"recentlyviewedProperty\",\r\n];\r\n\r\nconst $ = window.$;\r\n\r\nconst SearchPurposesData = {\r\n promoProperty: \"PromotionProperties\",\r\n popularProperty: \"Hot\",\r\n newProperty: \"NewProperties\",\r\n};\r\n\r\n// axios.defaults.headers.common['Authorization'] = store.getState().Token;\r\n//process.env.API_ROOT_URL\r\n\r\nconst arrayEmpty = (element) => (element.length ? element : null);\r\n\r\nconst SearchPage = () => {\r\n const [property, searchFilter, searchResult, favoritePropertyValue, Allow_Cookies, showTab] =\r\n useSelector((state) => [\r\n state.property,\r\n state.property.searchFilter,\r\n state.property.searchResult,\r\n state.property.searchResult.favoriteProperty.value,\r\n state.property.searchResult.Allow_Cookies.value,\r\n state.property.searchResult.showTab.value,\r\n ]);\r\n const [cookies, setCookie] = useCookies(); //(['favoriteProperty']);\r\n //setCookie('name', newName, { path: '/' });\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n kloader();\r\n const params = new URLSearchParams(jQuery(\"#HiddenParam\").val());\r\n\r\n // dispatch(searchListChange({ field: \"province\", value: province })).then(()=>updateSearchFilterFromQueryString(params))\r\n dispatch(searchListChange({ field: \"province\", value: province }));\r\n let requestData = updateSearchFilterFromQueryString(params);\r\n\r\n let Tab = params.get(\"Tab\");\r\n\r\n if (Tab) {\r\n if (!isTabExist) {\r\n Tab = \"newProperty\";\r\n }\r\n goToTab(Tab, false);\r\n }\r\n\r\n //Keyword H1\r\n if (params.toString().split(\"&\").length === 1) {\r\n var targetParam = decodeURIComponent(params.toString()).split(\"=\");\r\n var value = \"ทรัพย์มือสองทั้งหมด\";\r\n\r\n if (targetParam[0] === \"propertyType\") {\r\n var list = {\r\n \"02\": \"บ้านเดี่ยว บ้านมือสอง\",\r\n \"01\": \"ที่ดิน ที่ดินว่างเปล่า\",\r\n \"03\": \"ทาวน์เฮ้าส์\",\r\n \"05\": \"คอนโดมิเนียม\",\r\n \"04\": \"อาคารพาณิชย์\",\r\n 12: \"โกดัง\",\r\n \"09\": \"โรงงาน\",\r\n 15: \"อพาร์ทเม้นท์\",\r\n 10: \"อาคารสำนักงาน\",\r\n 20: \"รีสอร์ท\",\r\n 19: \"อื่น ๆ\",\r\n };\r\n console.log(Config.propertyTypeFilter);\r\n value = list[targetParam[1]] || value;\r\n } else if (targetParam[0] === \"province\") {\r\n var list = {\r\n 10: \"ทรัพย์มือสอง ในกรุงเทพ\",\r\n 12: \"ทรัพย์มือสอง ในนนทบุรี\",\r\n 13: \"ทรัพย์มือสอง ในปทุมธานี\",\r\n 11: \"ทรัพย์มือสอง ในสมุทรปราการ\",\r\n 73: \"ทรัพย์มือสอง ในนครปฐม\",\r\n 50: \"ทรัพย์มือสอง ในเชียงใหม่\",\r\n 20: \"ทรัพย์มือสอง ในชลบุรี\",\r\n 40: \"ทรัพย์มือสอง ในขอนแก่น\",\r\n 30: \"ทรัพย์มือสอง ในนครราชสีมา\",\r\n 83: \"ทรัพย์มือสอง ในภูเก็ต\",\r\n };\r\n value = list[targetParam[1]] || value;\r\n } else if (targetParam[0] === \"rangePrice\") {\r\n value = \"ทรัพย์ราคา\";\r\n let from = targetParam[1].split(\",\")[0];\r\n let to = targetParam[1].split(\",\")[1];\r\n const M = 1000000;\r\n if (to) {\r\n if (from === \"0\") {\r\n value += `ไม่เกิน ${parseFloat(to) / M} ล้านบาท`;\r\n } else {\r\n value += ` ${parseFloat(from) / M}-${parseFloat(to) / M} ล้านบาท`;\r\n }\r\n } else {\r\n value += `ไม่ต่ำกว่า ${parseFloat(from) / M} ล้านบาท`;\r\n }\r\n } else if (params.has(\"Tab\")) {\r\n var list = {\r\n promoProperty: \"ทรัพย์โปรโมชัน\",\r\n popularProperty: \"ทรัพย์ยอดนิยม\",\r\n newProperty: \"ทรัพย์มือสองทั้งหมด\",\r\n };\r\n value = list[params.get(\"Tab\")] || value;\r\n } else if (params.has(\"keyword\")) {\r\n value = params.get(\"keyword\");\r\n }\r\n dispatch(searchResultDataChange({ field: \"keyword\", value: value }));\r\n }\r\n\r\n const ordering = getURLParameter(\"Ordering\") || (Tab === \"newProperty\" ? \"new\" : null);\r\n\r\n requestData.Ordering = getOrderingValue(ordering ?? searchFilter.order.value);\r\n\r\n const orderDropdownValue = getDropdownOrderingValue(requestData.Ordering);\r\n dispatch(searchDataChange({ field: \"order\", value: orderDropdownValue }));\r\n\r\n requestData.PageSize = Config.MaxPropertyReturnCount;\r\n requestData.CurrentPageIndex = getURLParameter(\"CurrentPageIndex\") ?? 1;\r\n requestData.AllCurrentPageIndex = 1;\r\n requestData.firstTime = true;\r\n\r\n var stations = getApiDataAsync({\r\n urlPath: \"/RequestStations\",\r\n })\r\n .then((data) => {\r\n // console.log(data)\r\n var list = Array.from(data, (x) => {\r\n return {\r\n text: x.StationNameTH,\r\n value: x.StationID,\r\n title: x.PlaceType,\r\n location: { Latitude: x.Latitude, Longitude: x.Longitude },\r\n };\r\n });\r\n\r\n list = [...list].sort(function (a, b) {\r\n return a.text?.localeCompare(b.text);\r\n });\r\n\r\n dispatch(searchListChange({ field: \"station\", value: list }));\r\n return data;\r\n })\r\n .catch(function (error) {\r\n console.log(error);\r\n // alertErrorAsync(error);\r\n });\r\n\r\n var initSearchPage = GetData(requestData);\r\n\r\n Promise.all([stations, initSearchPage])\r\n .then(() => {\r\n const station = params.get(\"station\");\r\n station && dispatch(searchDataChange({ field: \"station\", value: station }));\r\n const likeProperty = cookies[\"favoriteProperty\"];\r\n const recentlyviewedProperty = cookies[\"recentlyviewedProperty\"];\r\n if (cookies.Allow_Cookies === \"N\" && false) {\r\n dispatch(searchResultDataChange({ field: \"Allow_Cookies\", value: false }));\r\n } else {\r\n if (likeProperty && likeProperty !== \"undefined\") {\r\n console.log(\"init likeProperty -> \", likeProperty);\r\n dispatch(\r\n searchResultDataChange({\r\n field: \"favoriteProperty\",\r\n value: likeProperty,\r\n })\r\n );\r\n dispatch(\r\n updateLikeInList({\r\n listName: \"newProperty\",\r\n PropertyLikeList: likeProperty,\r\n })\r\n );\r\n }\r\n if (recentlyviewedProperty && recentlyviewedProperty !== \"undefined\") {\r\n console.log(\"init recentlyviewedProperty -> \", recentlyviewedProperty);\r\n dispatch(\r\n searchResultDataChange({\r\n field: \"recentlyviewedProperty\",\r\n value: recentlyviewedProperty,\r\n })\r\n );\r\n }\r\n }\r\n\r\n //Tab\r\n })\r\n .catch(function (error) {\r\n console.log(error);\r\n // alertErrorAsync(error);\r\n })\r\n .then(() => {\r\n kloader();\r\n //nav tab search\r\n document.querySelectorAll(\"#property-nav .property-nav a\").forEach(function (item) {\r\n item.addEventListener(\"click\", function (e) {\r\n dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"Tab_content\",\r\n event_action: \"click\",\r\n event_label: e.target.innerText,\r\n });\r\n });\r\n });\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n console.log(\"favoriteProperty\", favoritePropertyValue);\r\n whenSetCookie(\"favoriteProperty\", favoritePropertyValue);\r\n }, [favoritePropertyValue]);\r\n\r\n function findNameFromProvince(value) {\r\n let result = {\r\n province: \"\",\r\n district: \"\",\r\n subDistrict: \"\",\r\n };\r\n\r\n // temp\r\n result.province = value;\r\n result.district = value;\r\n result.subDistrict = value;\r\n\r\n return result;\r\n\r\n try {\r\n let list = [];\r\n\r\n if (value.length >= 2) {\r\n list = province.find((x) => x.value == value.slice(0, 2));\r\n result.province = list.text;\r\n }\r\n if (value.length >= 4) {\r\n list = list.child.find((x) => x.value == value.slice(0, 4));\r\n result.district = list.text;\r\n }\r\n if (value.length >= 6) {\r\n list = list.child.find((x) => x.value == value.slice(0, 6));\r\n result.subDistrict = list.text;\r\n }\r\n return result;\r\n } catch {\r\n return result;\r\n }\r\n }\r\n\r\n function updateSearchFilterFromQueryString(params) {\r\n var result = {};\r\n\r\n const keyword = params.get(\"keyword\");\r\n const provinceParam = params.get(\"province\");\r\n const district = params.get(\"district\");\r\n const subDistrict = params.get(\"subDistrict\") || params.get(\"subdistrict\");\r\n const station = params.get(\"station\");\r\n const Nearby = params.get(\"Nearby\") || params.get(\"nearby\");\r\n const propertyType = params.get(\"propertyType\") || params.get(\"propertytype\");\r\n const assetTypes = params.get(\"assetTypes\") || params.get(\"assettypes\");\r\n const rangePrice = params.get(\"rangePrice\") || params.get(\"rangeprice\");\r\n const areaRange = params.get(\"areaRange\") || params.get(\"arearange\");\r\n const useableAreaRange = params.get(\"useableAreaRange\") || params.get(\"useablearearange\");\r\n const bedroom = params.get(\"bedroom\");\r\n const bathroom = params.get(\"bathroom\");\r\n\r\n const SaleFirstDateFrom = params.get(\"SaleFirstDateFrom\");\r\n const SaleFirstDateTo = params.get(\"SaleFirstDateTo\");\r\n\r\n if (keyword !== null) {\r\n dispatch(searchDataChange({ field: \"keyword\", value: keyword }));\r\n result.Search = noSpecialChar(keyword);\r\n }\r\n\r\n if (provinceParam !== null) {\r\n const provinceCode = provinceParam;\r\n const list = province.find((x) => x.value == provinceCode);\r\n\r\n OnsearchListChange({ field: \"district\", value: list.child });\r\n\r\n dispatch(searchDataChange({ field: \"province\", value: provinceParam }));\r\n\r\n const temp = findNameFromProvince(provinceParam).province;\r\n if (temp) {\r\n result.Province = temp;\r\n }\r\n }\r\n\r\n if (district !== null) {\r\n const provinceCode = district.slice(0, 2);\r\n const districtCode = district;\r\n const list = province\r\n .find((x) => x.value == provinceCode)\r\n .child.find((x) => x.value == districtCode);\r\n\r\n OnsearchListChange({ field: \"subDistrict\", value: list.child });\r\n\r\n dispatch(searchDataChange({ field: \"district\", value: district }));\r\n\r\n const temp = findNameFromProvince(district).district;\r\n if (temp) {\r\n result.Amphur = temp;\r\n }\r\n }\r\n\r\n if (subDistrict !== null) {\r\n dispatch(searchDataChange({ field: \"subDistrict\", value: subDistrict }));\r\n\r\n const temp = findNameFromProvince(subDistrict).subDistrict;\r\n if (temp) {\r\n result.Tambon = temp;\r\n }\r\n }\r\n\r\n if (station !== null) {\r\n // move to after request station list\r\n // dispatch(searchDataChange({ field: \"station\", value: station }));\r\n result.Nearby = JSON.parse(Nearby);\r\n result.NearbyMeters = Config.SearchNearbyMeters;\r\n }\r\n\r\n if (propertyType !== null) {\r\n dispatch(\r\n updatesearchFilterCheckBox({\r\n field: \"propertyType\",\r\n value: propertyType,\r\n })\r\n );\r\n var temp = propertyType.split(\",\");\r\n result.PropertyTypes = changePropertyTypesOther(temp);\r\n }\r\n\r\n if (assetTypes !== null) {\r\n dispatch(updatesearchFilterCheckBox({ field: \"assetTypes\", value: assetTypes }));\r\n\r\n const { SourceSaleTypes, SourceCodes } = splitAssetType(assetTypes);\r\n result.SourceSaleTypes = arrayEmpty(SourceSaleTypes);\r\n result.SourceCodes = arrayEmpty(SourceCodes);\r\n }\r\n\r\n if (rangePrice !== null) {\r\n const M = 1000000;\r\n let from = rangePrice.split(\",\")[0];\r\n let to = rangePrice.split(\",\")[1];\r\n if (from === \"0\") {\r\n from = \"ไม่ระบุ\";\r\n } else {\r\n from = parseFloat(from) / M + \" ล้านบาท\";\r\n }\r\n if (to) {\r\n to = parseFloat(to) / M + \" ล้านบาท\";\r\n } else {\r\n to = \"ไม่ระบุ\";\r\n }\r\n OnRangeInputDataChange(\"rangePrice\", from, to);\r\n\r\n result.MinPrice = rangePrice.split(\",\")[0];\r\n result.MaxPrice = rangePrice.split(\",\")[1];\r\n }\r\n\r\n if (areaRange !== null) {\r\n let from = areaRange.split(\",\")[0];\r\n let to = areaRange.split(\",\")[1];\r\n if (from === \"0\") {\r\n from = \"ไม่ระบุ\";\r\n } else {\r\n from = parseFloat(from);\r\n if (from >= 400) {\r\n from = from / 400 + \" ไร่\";\r\n } else {\r\n from = from + \" ตร.ว.\";\r\n }\r\n }\r\n if (\r\n to === \"0\" ||\r\n parseFloat(searchFilter.areaRange.values.slice(-1)[0]) === parseFloat(to) / 400\r\n ) {\r\n to = \"ไม่ระบุ\";\r\n } else {\r\n to = parseFloat(to);\r\n if (to >= 400) {\r\n to = to / 400 + \" ไร่\";\r\n } else {\r\n to = to + \" ตร.ว.\";\r\n }\r\n }\r\n OnRangeInputDataChange(\"areaRange\", from, to);\r\n\r\n result.MinArea = areaRange.split(\",\")[0];\r\n result.MaxArea = areaRange.split(\",\")[1];\r\n }\r\n\r\n if (useableAreaRange !== null) {\r\n let from = useableAreaRange.split(\",\")[0];\r\n let to = useableAreaRange.split(\",\")[1];\r\n if (from === \"0\") {\r\n from = \"ไม่ระบุ\";\r\n } else {\r\n from = parseFloat(from) + \" ตร.ม.\";\r\n }\r\n\r\n if (\r\n to === \"0\" ||\r\n parseFloat(searchFilter.useableAreaRange.values.slice(-1)[0]) === parseFloat(to)\r\n ) {\r\n to = \"ไม่ระบุ\";\r\n } else {\r\n to = parseFloat(to) + \" ตร.ม.\";\r\n }\r\n OnRangeInputDataChange(\"useableAreaRange\", from, to);\r\n\r\n result.MinUseableArea = useableAreaRange.split(\",\")[0];\r\n result.MaxUseableArea = useableAreaRange.split(\",\")[1];\r\n }\r\n\r\n if (bedroom !== null) {\r\n dispatch(searchDataChange({ field: \"bedroom\", value: bedroom }));\r\n result.Bedroom = bedroom;\r\n }\r\n\r\n if (bathroom !== null) {\r\n dispatch(searchDataChange({ field: \"bathroom\", value: bathroom }));\r\n result.Bathroom = bathroom;\r\n }\r\n\r\n if (SaleFirstDateFrom != null && SaleFirstDateFrom.length >= 8) {\r\n result.SaleFirstDateFrom = `${SaleFirstDateFrom.slice(0, 4)} ${SaleFirstDateFrom.slice(\r\n 4,\r\n 6\r\n )} ${SaleFirstDateFrom.slice(6, 8)}`;\r\n }\r\n\r\n if (SaleFirstDateTo != null && SaleFirstDateTo.length >= 8) {\r\n result.SaleFirstDateTo = `${SaleFirstDateTo.slice(0, 4)} ${SaleFirstDateTo.slice(\r\n 4,\r\n 6\r\n )} ${SaleFirstDateTo.slice(6, 8)}`;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function OnSearchDataChange(payload) {\r\n commonSearchDataChange(dispatch, payload, searchFilter, searchDataChange, OnsearchListChange);\r\n // const field = payload.field;\r\n // if (field === \"province\") {\r\n // const list = property.searchFilter[field].option.find(\r\n // (x) => x.value == payload.value\r\n // );\r\n\r\n // OnsearchListChange({ field: \"district\", value: list.child });\r\n // OnsearchListChange({ field: \"subDistrict\", value: [] });\r\n // } else if (field === \"district\") {\r\n // const list = property.searchFilter[field].option.find(\r\n // (x) => x.value == payload.value\r\n // );\r\n\r\n // OnsearchListChange({ field: \"subDistrict\", value: list.child });\r\n // }\r\n // dispatch(searchDataChange(payload));\r\n }\r\n\r\n function OnsearchListChange(payload) {\r\n dispatch(searchListChange(payload));\r\n }\r\n\r\n function OnInputChange(fieldName, e) {\r\n const value = e.target.value;\r\n dispatch(searchDataChange({ field: fieldName, value: value }));\r\n }\r\n\r\n function OnIonRangeDataChange(fieldName, from, to) {\r\n const payload = valueRangeMaxMin(fieldName, from, to);\r\n console.log(fieldName, payload.value);\r\n dispatch(searchIonRangeChange(payload));\r\n }\r\n\r\n function OnRangeInputDataChange(fieldName, from, to) {\r\n const payload = valueRangeMaxMin(fieldName, from, to);\r\n console.log(fieldName, payload.value);\r\n dispatch(searchIonRangeChange(payload));\r\n dispatch(updateIonRange({ fieldName }));\r\n }\r\n\r\n function OnRadioCheck(fieldName, value, group) {\r\n console.log(fieldName, value, group);\r\n dispatch(CheckBoxChange({ fieldName, value, group }));\r\n }\r\n\r\n async function GetData(request) {\r\n let PromotionPropertiesRequest = JSON.parse(JSON.stringify(request));\r\n if (PromotionPropertiesRequest.SearchPurposes) {\r\n PromotionPropertiesRequest.SearchPurposes.push(\"PromotionProperties\");\r\n } else {\r\n PromotionPropertiesRequest.SearchPurposes = [\"PromotionProperties\"];\r\n }\r\n let HotRequest = JSON.parse(JSON.stringify(request));\r\n if (HotRequest.SearchPurposes) {\r\n HotRequest.SearchPurposes.push(\"Hot\");\r\n } else {\r\n HotRequest.SearchPurposes = [\"Hot\"];\r\n }\r\n let NewPropertiesRequest = JSON.parse(JSON.stringify(request));\r\n if (NewPropertiesRequest.SearchPurposes) {\r\n //NewPropertiesRequest.SearchPurposes.push(\"NewProperties\")\r\n } else {\r\n //NewPropertiesRequest.SearchPurposes = [\"NewProperties\"]\r\n }\r\n\r\n var getPromo = postApiDataAsync({\r\n urlPath: \"/GetProperties\",\r\n objRequest: {\r\n filter: {\r\n ...PromotionPropertiesRequest,\r\n },\r\n },\r\n }).then((data) => {\r\n updateList(\"promoProperty\", data, request);\r\n return data;\r\n });\r\n\r\n var getHot = postApiDataAsync({\r\n urlPath: \"/GetProperties\",\r\n objRequest: {\r\n filter: {\r\n ...HotRequest,\r\n },\r\n },\r\n }).then((data) => {\r\n updateList(\"popularProperty\", data, request);\r\n return data;\r\n });\r\n\r\n var getNew = postApiDataAsync({\r\n urlPath: \"/GetProperties\",\r\n objRequest: {\r\n filter: {\r\n ...NewPropertiesRequest,\r\n },\r\n },\r\n }).then((data) => {\r\n updateList(\"newProperty\", data, request);\r\n return data;\r\n });\r\n\r\n //TODO For Dev test Data\r\n // const testData = Config.testData.Data;\r\n // updateList(\"popularProperty\", testData, false);\r\n // updateList(\"promoProperty\", testData, request);\r\n // updateList(\"newProperty\", testData, request);\r\n // return Promise.resolve({});\r\n\r\n //TODO For FetchAPI in UAT\r\n return Promise.all([getPromo, getHot, getNew]).then(async (data) => {\r\n const promoPropertyList = data[0].Items ? data[0].Items : [];\r\n const popularPropertyList = data[1].Items ? data[1].Items : [];\r\n const newPropertyList = data[2].Items ? data[2].Items : [];\r\n\r\n if (newPropertyList.length === 0) {\r\n await notFoundProperties();\r\n } else {\r\n showProperties();\r\n }\r\n\r\n const myData = {\r\n promoProperty: data[0],\r\n popularProperty: data[1],\r\n newProperty: data[2],\r\n };\r\n\r\n // console.log(promoPropertyList, popularPropertyList, newPropertyList)\r\n\r\n // var tempkeyword = genKeywordFromRequest(request);\r\n if (!request.firstTime) {\r\n dispatch(searchResultDataChange({ field: \"keyword\", value: request.Search }));\r\n }\r\n\r\n // dispatch(\r\n // searchResultDataChange({\r\n // field: \"resultLength\",\r\n // value: myData[\"newProperty\"].TotalRows,\r\n // })\r\n // );\r\n // dispatch(searchResultDataChange({ field: \"resultLength\", value: newPropertyList.length }))\r\n\r\n if (request && request.AllCurrentPageIndex) {\r\n // updateList(\"promoProperty\", data[0], request);\r\n // updateList(\"popularProperty\", data[1], request);\r\n // updateList(\"newProperty\", data[2], request);\r\n } else if (request && request.CurrentPageIndex) {\r\n updateList(showTab, myData[showTab], request);\r\n }\r\n\r\n if (request && request.propertyList) {\r\n dispatch(\r\n updateLikeInList({\r\n listName: request.propertyList,\r\n PropertyLikeList: favoritePropertyValue,\r\n })\r\n );\r\n }\r\n\r\n return data;\r\n });\r\n }\r\n\r\n function genKeywordFromRequest(request) {\r\n delete request[\"PageSize\"];\r\n delete request[\"CurrentPageIndex\"];\r\n delete request[\"propertyList\"];\r\n delete request[\"Ordering\"];\r\n\r\n if (\r\n request.SearchPurposes.length === 1 &&\r\n (request.SearchPurposes.includes(\"NewProperties\") ||\r\n request.SearchPurposes.includes(\"Hot\") ||\r\n request.SearchPurposes.includes(\"PromotionProperties\"))\r\n ) {\r\n delete request[\"SearchPurposes\"];\r\n }\r\n\r\n const requestLen = Object.keys(request).length;\r\n\r\n var result = request.Search || \"\";\r\n\r\n if (request.PropertyTypes && request.PropertyTypes.length === 1 && requestLen === 1) {\r\n var list = {\r\n \"02\": \"บ้านเดี่ยว บ้านมือสอง\",\r\n \"01\": \"ที่ดิน ที่ดินว่างเปล่า\",\r\n \"03\": \"ทาวน์เฮ้าส์\",\r\n \"05\": \"คอนโดมิเนียม\",\r\n \"04\": \"อาคารพาณิชย์\",\r\n 12: \"โกดัง\",\r\n \"09\": \"โรงงาน\",\r\n 15: \"อพาร์ทเม้นท์\",\r\n 10: \"อาคารสำนักงาน\",\r\n 20: \"รีสอร์ท\",\r\n 19: \"อื่น ๆ\",\r\n };\r\n result = list[PropertyTypes[0]] || result;\r\n } else if (request.Province && requestLen === 1) {\r\n var list = {\r\n 10: \"ทรัพย์มือสอง ในกรุงเทพ\",\r\n 12: \"ทรัพย์มือสอง ในนนทบุรี\",\r\n 13: \"ทรัพย์มือสอง ในปทุมธานี\",\r\n 11: \"ทรัพย์มือสอง ในสมุทรปราการ\",\r\n 73: \"ทรัพย์มือสอง ในนครปฐม\",\r\n 50: \"ทรัพย์มือสอง ในเชียงใหม่\",\r\n 20: \"ทรัพย์มือสอง ในชลบุรี\",\r\n 40: \"ทรัพย์มือสอง ในขอนแก่น\",\r\n 30: \"ทรัพย์มือสอง ในนครราชสีมา\",\r\n 83: \"ทรัพย์มือสอง ในภูเก็ต\",\r\n };\r\n result = list[Province] || result;\r\n } else if ((request.MinPrice || request.MaxPrice) && requestLen <= 2) {\r\n var value = \"ทรัพย์ราคา\";\r\n let from = request.MinPrice;\r\n let to = request.MaxPrice;\r\n const M = 1000000;\r\n if (to) {\r\n if (!from || from === \"0\") {\r\n value += `ไม่เกิน ${parseFloat(to) / M} ล้านบาท`;\r\n } else {\r\n value += ` ${parseFloat(from) / M}-${parseFloat(to) / M} ล้านบาท`;\r\n }\r\n } else {\r\n value += `ไม่ต่ำกว่า ${parseFloat(from) / M} ล้านบาท`;\r\n }\r\n\r\n result = value || result;\r\n } else if (requestLen === 0) {\r\n result = \"ทรัพย์มือสองทั้งหมด\";\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async function GetDataForLoadMore(request) {\r\n let PropertiesRequest = JSON.parse(JSON.stringify(request));\r\n if (PropertiesRequest.SearchPurposes && showTab !== \"newProperty\") {\r\n PropertiesRequest.SearchPurposes.push(SearchPurposesData[showTab]);\r\n } else if (showTab !== \"newProperty\") {\r\n PropertiesRequest.SearchPurposes = [SearchPurposesData[showTab]];\r\n }\r\n\r\n return postApiDataAsync({\r\n urlPath: \"/GetProperties\",\r\n objRequest: {\r\n filter: {\r\n ...PropertiesRequest,\r\n },\r\n },\r\n }).then((data) => {\r\n updateList(showTab, data, request);\r\n\r\n if (request && request.propertyList) {\r\n dispatch(\r\n updateLikeInList({\r\n listName: request.propertyList,\r\n PropertyLikeList: favoritePropertyValue,\r\n })\r\n );\r\n }\r\n return data;\r\n });\r\n }\r\n\r\n function updateList(field, data, request) {\r\n if (!data.Items) data.Items = [];\r\n\r\n if (data.CurrentPageIndex > 1) {\r\n data.Items = [...searchResult[field].list, ...data.Items];\r\n }\r\n\r\n const dataLength = data.Items.length;\r\n\r\n dispatch(\r\n searchResultPageIndexChange({\r\n field: field,\r\n value: data.CurrentPageIndex,\r\n })\r\n );\r\n\r\n if (\r\n !data.TotalRows ||\r\n data.TotalRows <= dataLength ||\r\n field === \"favoriteProperty\" ||\r\n field === \"recentlyviewedProperty\"\r\n ) {\r\n // console.log(\"no more\", data.Items, field)\r\n dispatch(\r\n updateSearchResultList({\r\n fieldName: field,\r\n list: data.Items,\r\n hasMore: false,\r\n TotalRows: data.TotalRows,\r\n suggest: data.suggest,\r\n })\r\n );\r\n } else {\r\n // console.log(\"more\", data.Items, field)\r\n dispatch(\r\n updateSearchResultList({\r\n fieldName: field,\r\n list: data.Items,\r\n hasMore: request,\r\n TotalRows: data.TotalRows,\r\n suggest: data.suggest,\r\n })\r\n );\r\n }\r\n }\r\n\r\n async function GoToSearch(goToTop = true) {\r\n if (goToTop) {\r\n topFunction();\r\n }\r\n\r\n console.log(\"search\", isExpand());\r\n if (isExpand()) {\r\n $(\"#more-filter-mobile-btn-close\").click();\r\n }\r\n PDT_search();\r\n kloader();\r\n\r\n // to keep search condition in url\r\n changePushState();\r\n\r\n let objRequest = genObjRequest();\r\n objRequest.CurrentPageIndex = 1;\r\n objRequest.AllCurrentPageIndex = 1;\r\n return await GetData(objRequest)\r\n .catch((error) => {\r\n console.log(error);\r\n })\r\n .then(() => {\r\n kloader();\r\n });\r\n // if (isExpand()) {\r\n // var url = gotoSearchPage(property.searchFilter)\r\n // console.log(url)\r\n // window.open(url, \"_self\");\r\n // } else {\r\n // var url = gotoSearchPage({ \"keyword\": property.searchFilter.keyword.value })\r\n // console.log(url)\r\n // window.open(url, \"_self\");\r\n // }\r\n }\r\n\r\n function changePushState() {\r\n if (history.pushState) {\r\n var newurl =\r\n window.location.protocol +\r\n \"//\" +\r\n window.location.host +\r\n gotoSearchPage(property.searchFilter);\r\n window.history.pushState({ path: newurl }, \"\", newurl);\r\n }\r\n }\r\n\r\n function PDT_LoadMore(page) {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push({\r\n event: \"submitSearchResult\",\r\n search_filters_2: page.toString(),\r\n });\r\n }\r\n\r\n function PDT_search() {\r\n var url = window.location.href;\r\n window.dataLayer = window.dataLayer || [];\r\n var search_text = property.searchFilter.keyword.value;\r\n\r\n var search_location = [\r\n property.searchFilter.province.value,\r\n property.searchFilter.district.value,\r\n property.searchFilter.subDistrict.value,\r\n ]\r\n .filter((x) => x)\r\n .join(\",\");\r\n\r\n var search_filter_1 = [\r\n property.searchFilter.propertyType.value,\r\n property.searchFilter.rangePrice.value,\r\n property.searchFilter.areaRange.value,\r\n property.searchFilter.useableAreaRange.value,\r\n property.searchFilter.bedroom.value,\r\n property.searchFilter.bathroom.value,\r\n property.searchFilter.station.value,\r\n ]\r\n .filter((x) => x)\r\n .join(\",\");\r\n\r\n var search_filter_2 = property.searchFilter.assetTypes.value;\r\n window.dataLayer.push({\r\n event: \"submitSearch\",\r\n eventCategory: \"search\",\r\n eventAction: \"submit_filters_NPA\",\r\n eventLabel: `ค้นหาทรัพย์มือสองทำเลดีทั่วไทย_${url}`, //หน้าที่ค้นหา\r\n dimension49: `${search_text}`, //คำค้นหา\r\n dimension7: `${search_location}`, //จังหวัด,อำเภอ,ตำบล\r\n dimension50: `${search_filter_1}`, //ประเภททรัพย์,ช่วงราคา,เนื้อที่,พื้นที่ใช้สอย,ห้องนอน,ห้องน้ำ,สถานีใกล้เคียง\r\n dimension51: `${search_filter_2}`, //ทรัพย์โปรโมชั่น,ทรัพย์ฝากขาย\r\n });\r\n }\r\n\r\n function topFunction() {\r\n document.body.scrollTop = 0; // For Safari\r\n document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera\r\n }\r\n\r\n function genObjRequest() {\r\n const rangePrice = getRangeValue(searchFilter.rangePrice);\r\n const areaRange = getRangeValue(searchFilter.areaRange);\r\n const useableAreaRange = getRangeValue(searchFilter.useableAreaRange);\r\n // let Province = searchFilter.province.option.find(x => x.value == searchFilter.province.value)\r\n // let Amphur = searchFilter.district.option.find(x => x.value == searchFilter.district.value)\r\n // let Tambon = searchFilter.subDistrict.option.find(x => x.value == searchFilter.subDistrict.value)\r\n // Province = Province ? Province.text : \"\"\r\n // Amphur = Amphur ? Amphur.text : \"\"\r\n // Tambon = Tambon ? Tambon.text : \"\"\r\n const Province = searchFilter.province.value;\r\n const Amphur = searchFilter.district.value;\r\n const Tambon = searchFilter.subDistrict.value;\r\n const PropertyTypes = changePropertyTypesOther(\r\n searchFilter.propertyType.value ? searchFilter.propertyType.value.split(\",\") : []\r\n );\r\n\r\n const { SourceSaleTypes, SourceCodes } = splitAssetType(searchFilter.assetTypes.value);\r\n\r\n let selectedStation = searchFilter.station.option.find(\r\n (x) => x.value === searchFilter.station.value\r\n );\r\n let NearbyMeters;\r\n if (selectedStation) {\r\n selectedStation = selectedStation.location;\r\n NearbyMeters = Config.SearchNearbyMeters;\r\n }\r\n console.log(searchFilter.station.value, selectedStation);\r\n\r\n var result = {\r\n PageSize: Config.MaxPropertyReturnCount,\r\n CurrentPageIndex: searchResult[showTab].pageIndex,\r\n Province: Province,\r\n Amphur: Amphur,\r\n Tambon: Tambon,\r\n Provinces: Province ? [Province] : [],\r\n Amphurs: Amphur ? [Amphur] : [],\r\n Tambons: Tambon ? [Tambon] : [],\r\n PropertyTypes: arrayEmpty(PropertyTypes),\r\n MinPrice: rangePrice.min,\r\n MaxPrice: rangePrice.max,\r\n Search: searchFilter.keyword.value,\r\n Bedroom: searchFilter.bedroom.value,\r\n Bathroom: searchFilter.bathroom.value,\r\n Nearby: selectedStation,\r\n NearbyMeters: NearbyMeters, //SearchNearbyMeters = 10000\r\n SourceSaleTypes: arrayEmpty(SourceSaleTypes),\r\n MinArea: areaRange.min,\r\n MaxArea: areaRange.max,\r\n MinUseableArea: useableAreaRange.min,\r\n MaxUseableArea: useableAreaRange.max,\r\n SourceCodes: arrayEmpty(SourceCodes),\r\n Ordering: getURLParameter(\"Ordering\") ?? getOrderingValue(searchFilter.order.value),\r\n propertyList: showTab,\r\n };\r\n\r\n Object.keys(result).forEach((x) => {\r\n if (!result[x]) {\r\n delete result[x];\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n function splitAssetType(assetTypes) {\r\n var SourceSaleTypes = [];\r\n var SourceCodes = [];\r\n\r\n SourceSaleTypes = assetTypes ? assetTypes.split(\",\") : [];\r\n SourceSaleTypes[SourceSaleTypes.findIndex((x) => x.indexOf(\"partner\") !== -1)] = \"Partner\";\r\n // SourceCodes = assetTypes ? assetTypes.split(\",\") : [];\r\n // const opposite =\r\n // (f) =>\r\n // (...args) =>\r\n // !f(...args);\r\n // const partnerProperties = (element) => element.indexOf(\"partner\") !== -1;\r\n\r\n // if (SourceCodes.some(partnerProperties)) {\r\n // SourceCodes = SourceCodes.filter(opposite(partnerProperties));\r\n // SourceSaleTypes.push(\"Partner\");\r\n // }\r\n\r\n return { SourceSaleTypes, SourceCodes };\r\n }\r\n\r\n function getOrderingValue(value) {\r\n var result = {\r\n new: \"New\",\r\n \"min-max\": \"PriceAsc\",\r\n \"max-min\": \"PriceDesc\",\r\n \"min-max-area\": \"AreaAsc\",\r\n \"max-min-area\": \"AreaDesc\",\r\n priceasc: \"PriceAsc\",\r\n pricedesc: \"PriceDesc\",\r\n areaasc: \"AreaAsc\",\r\n areadesc: \"AreaDesc\",\r\n hot: \"Hot\",\r\n };\r\n return result[value];\r\n }\r\n\r\n function getDropdownOrderingValue(value) {\r\n var result = {\r\n New: \"new\",\r\n PriceAsc: \"min-max\",\r\n PriceDesc: \"max-min\",\r\n AreaAsc: \"min-max-area\",\r\n AreaDesc: \"max-min-area\",\r\n Hot: \"hot\",\r\n };\r\n return result[value];\r\n }\r\n\r\n function getRangeValue(item) {\r\n let value = item.value;\r\n let from = \"0\";\r\n let to = \"0\";\r\n\r\n if (!value) {\r\n } else if (value.indexOf(\"สูงสุด\") !== -1) {\r\n to = value;\r\n } else if (value.indexOf(\"เริ่มต้น\") !== -1) {\r\n from = value;\r\n to = item.values.slice(-1)[0];\r\n } else {\r\n from = value.split(\"-\")[0];\r\n to = value.split(\"-\")[1];\r\n }\r\n return { min: unitToValue(from), max: unitToValue(to) };\r\n }\r\n\r\n function OnClearSearch() {\r\n console.log(\"Clear Filter\");\r\n dispatch(ClearSearch());\r\n\r\n //clear advanced filter\r\n window.dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"NPA-SEARCH-2022\",\r\n event_action: \"event_click\",\r\n event_label: \"ล้างการค้นหา\",\r\n });\r\n\r\n window.open(pagesLink.search, \"_self\");\r\n }\r\n\r\n function OrderChange(payload) {\r\n console.log(\"order\", payload);\r\n\r\n //sorting datalayer\r\n dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"NPA-SEARCH-2022\",\r\n event_action: \"event_click\",\r\n event_label: payload.value,\r\n });\r\n\r\n dispatch(searchDataChange(payload));\r\n if (mainTab.includes(showTab)) {\r\n kloader();\r\n let objRequest = genObjRequest();\r\n objRequest.CurrentPageIndex = 1;\r\n objRequest.AllCurrentPageIndex = 1;\r\n objRequest.Ordering = getOrderingValue(payload.value);\r\n\r\n addSearchUrlParameter(\r\n {\r\n CurrentPageIndex: objRequest.CurrentPageIndex,\r\n Ordering: objRequest.Ordering,\r\n Tab: showTab,\r\n },\r\n property\r\n );\r\n\r\n GetData(objRequest).then(() => {\r\n kloader();\r\n });\r\n } else {\r\n getSecondaryTab(showTab, payload.value);\r\n }\r\n }\r\n\r\n async function getSecondaryTab(tab, ordering) {\r\n const cookieConsent = whenSetCookie(\"test\", true);\r\n\r\n // let targetList = [];\r\n // if (tab === \"favoriteProperty\") {\r\n // targetList = searchResult[tab].value.split(\",\").filter((x) => x);\r\n // } else if (tab === \"recentlyviewedProperty\") {\r\n // targetList = cookies[\"recentlyviewedProperty\"];\r\n // if (!targetList || targetList == \"undefined\") {\r\n // targetList = [];\r\n // } else {\r\n // targetList = targetList.split(\",\").filter((x) => x);\r\n // }\r\n // }\r\n\r\n let targetList = cookies[tab];\r\n\r\n if (!targetList || targetList == \"undefined\") {\r\n targetList = [];\r\n } else {\r\n targetList = targetList.split(\",\").filter((x) => x);\r\n }\r\n\r\n if (targetList.length === 0 || !cookieConsent) {\r\n console.log(\"NO MORE\");\r\n return;\r\n }\r\n\r\n kloader();\r\n await postApiDataAsync({\r\n urlPath: \"/GetProperties\",\r\n objRequest: {\r\n filter: {\r\n PageSize: Config.FavMaxPropertyReturnCount,\r\n CurrentPageIndex: 1,\r\n Ordering: getOrderingValue(ordering),\r\n propertyList: tab,\r\n PropertyIds: targetList,\r\n },\r\n },\r\n })\r\n .then((data) => {\r\n updateList(tab, data, false);\r\n dispatch(\r\n updateLikeInList({\r\n listName: tab,\r\n PropertyLikeList: cookies[\"favoriteProperty\"],\r\n })\r\n );\r\n return data;\r\n })\r\n .catch(function (error) {\r\n console.log(error);\r\n // alertErrorAsync(error);\r\n })\r\n .then(() => {\r\n kloader();\r\n });\r\n }\r\n\r\n function isExpand() {\r\n if (isMobile()) {\r\n return $(\"#more-filter-mobile\").hasClass(\"show\");\r\n }\r\n return $(\"#more-filter-desktop\").css(\"height\") != \"0px\";\r\n }\r\n\r\n function OnLikeCheck(e, PropertyObj, listName) {\r\n e.preventDefault();\r\n console.log(\"PropertyObj\", PropertyObj);\r\n dispatch(likePropertyList({ PropertyObj, listName }));\r\n }\r\n\r\n function whenSetCookie(name, value) {\r\n // console.log(\"when set cookie\", cookies.Allow_Cookies)\r\n if (cookies.Allow_Cookies === \"N\" && false) {\r\n dispatch(searchResultDataChange({ field: \"Allow_Cookies\", value: false }));\r\n return false;\r\n } else {\r\n setCookie(name, value, { path: \"/\" });\r\n }\r\n return true;\r\n }\r\n\r\n function loadMore(propertyList, request) {\r\n let objRequest = JSON.parse(JSON.stringify(request));\r\n delete objRequest.AllCurrentPageIndex;\r\n\r\n console.log(\"load more\", propertyList);\r\n // kloader()\r\n\r\n dispatch(OnPropertyListLoading({ field: propertyList, value: true }));\r\n objRequest.CurrentPageIndex = +objRequest.CurrentPageIndex + 1;\r\n\r\n addSearchUrlParameter(\r\n {\r\n CurrentPageIndex: objRequest.CurrentPageIndex,\r\n Ordering: objRequest.Ordering,\r\n Tab: showTab,\r\n },\r\n property\r\n );\r\n\r\n PDT_LoadMore(objRequest.CurrentPageIndex);\r\n\r\n GetDataForLoadMore(objRequest).then(() => {\r\n dispatch(OnPropertyListLoading({ field: propertyList, value: false }));\r\n });\r\n // dispatch(updateSearchResultList({ fieldName: propertyList, list: searchResult[propertyList].list.concat(HotProperties) }))\r\n\r\n // kloader()\r\n }\r\n\r\n async function TabPropertiesClick(changeUrl = true) {\r\n const tab = $(\"#property-nav .nav-link.active\").attr(\"href\").slice(10) + \"Property\";\r\n\r\n if (changeUrl) {\r\n addSearchUrlParameter({ Tab: tab }, property);\r\n }\r\n\r\n dispatch(searchResultDataChange({ field: \"showTab\", value: tab }));\r\n\r\n if (mainTab.includes(tab)) {\r\n dispatch(\r\n updateLikeInList({\r\n listName: tab,\r\n PropertyLikeList: favoritePropertyValue,\r\n })\r\n );\r\n } else {\r\n getSecondaryTab(tab, searchFilter.order.value);\r\n }\r\n\r\n console.log(tab);\r\n }\r\n\r\n function notFoundProperties() {\r\n window.dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"NPAhome2022\",\r\n event_action: \"event_click\",\r\n event_label: \"ไม่พบทรัพย์สินที่ค้นหา\",\r\n });\r\n\r\n return postApiDataAsync({\r\n urlPath: \"/GetProperties\",\r\n objRequest: {\r\n filter: {\r\n CurrentPageIndex: 1,\r\n PageSize: Config.MaxPromoPropertyReturnCount,\r\n PropertyTypes: [\"02\", \"01\", \"03\", \"05\"],\r\n SearchPurposes: [\"PromotionProperties\"],\r\n },\r\n },\r\n }).then((data) => {\r\n const ListItem = data.Items.sort(function () {\r\n return 0.5 - Math.random();\r\n }).slice(0, Config.MaxPromoPropertyReturnCount);\r\n\r\n dispatch(\r\n updateSearchResultList({\r\n fieldName: \"suggestProperty\",\r\n list: ListItem,\r\n hasMore: false,\r\n })\r\n );\r\n\r\n console.log(\"not found\");\r\n $(\".property-nav-container\").hide();\r\n $(\"#found-wrapper\").hide();\r\n $(\"#property-nav\").hide();\r\n $(\".right > .result-header\").hide();\r\n $(\"#not-found-wrapper\").show();\r\n $(\".result-header\").css({\r\n margin: \"0 auto\",\r\n });\r\n });\r\n }\r\n\r\n function showProperties() {\r\n console.log(\"found!!!\");\r\n $(\".property-nav-container\").show();\r\n $(\"#found-wrapper\").show();\r\n $(\"#property-nav\").show();\r\n $(\".right > .result-header\").show();\r\n $(\"#not-found-wrapper\").hide();\r\n $(\".result-header\").removeAttr(\"style\");\r\n }\r\n\r\n function goToTab(tabName, changeUrl = true) {\r\n // var triggerTabList = [].slice.call($('#property-nav ul a'))\r\n if (tabName?.toLowerCase() === \"newProperty\"?.toLowerCase()) {\r\n new bootstrap.Tab($(\"#property-new a\")).show();\r\n // new bootstrap.Tab(triggerTabList[0]).show()\r\n } else if (tabName?.toLowerCase() === \"promoProperty\"?.toLowerCase()) {\r\n new bootstrap.Tab($(\"#property-promo a\")).show();\r\n } else if (tabName?.toLowerCase() === \"popularProperty\"?.toLowerCase()) {\r\n // new bootstrap.Tab($(\"#property-new a\")).show()\r\n // new bootstrap.Tab(triggerTabList[2]).show()\r\n } else if (tabName?.toLowerCase() === \"favoriteProperty\"?.toLowerCase()) {\r\n new bootstrap.Tab($(\"#property-favorite a\")).show();\r\n } else if (tabName?.toLowerCase() === \"recentlyviewedProperty\"?.toLowerCase()) {\r\n new bootstrap.Tab($(\"#property-recentlyviewed a\")).show();\r\n }\r\n\r\n tippy.hideAll();\r\n TabPropertiesClick(changeUrl);\r\n }\r\n\r\n function changePropertyTypesOther(params) {\r\n if (params && params.find((x) => x === \"19\")) {\r\n params = params.concat([\r\n \"06\",\r\n \"07\",\r\n \"08\",\r\n \"11\",\r\n \"13\",\r\n \"14\",\r\n \"16\",\r\n \"17\",\r\n \"18\",\r\n \"21\",\r\n \"22\",\r\n \"23\",\r\n \"24\",\r\n \"25\",\r\n \"26\",\r\n \"27\",\r\n \"28\",\r\n \"29\",\r\n \"30\",\r\n \"31\",\r\n \"81\",\r\n \"83\",\r\n \"99\",\r\n ]);\r\n }\r\n return params;\r\n }\r\n\r\n function iconOrder(state) {\r\n if (!state.id) {\r\n return state.text;\r\n }\r\n\r\n var $state = $(\r\n ''\r\n );\r\n $state.find(\"span\").text(state.text);\r\n\r\n if (state.id == \"min-max\" || state.id == \"min-max-area\") {\r\n $state.find(\".ic-npa\").addClass(\"ic-npa-icon-sortmin2max\");\r\n } else if (state.id == \"max-min\" || state.id == \"max-min-area\") {\r\n $state.find(\".ic-npa\").addClass(\"ic-npa-icon-sortmax2min\");\r\n } else if (state.id == \"hot\") {\r\n $state.find(\".ic-npa\").addClass(\"ic-npa-icon-popular\");\r\n } else {\r\n $state.find(\".ic-npa\").addClass(\"ic-npa-icon-new\");\r\n }\r\n\r\n return $state;\r\n }\r\n\r\n function genSuggest(data) {\r\n // suggest data\r\n if (data) {\r\n try {\r\n var x = JSON.parse(data);\r\n return x[0].keyword || \"\";\r\n } catch (e) {\r\n return \"\";\r\n }\r\n }\r\n return \"\";\r\n }\r\n\r\n const SuggestLink = (props) => {\r\n var keyword = genSuggest(props.data);\r\n function suggestSearch(keyword) {\r\n var newurl =\r\n window.location.protocol +\r\n \"//\" +\r\n window.location.host +\r\n gotoSearchPage({ ...property.searchFilter, keyword: keyword });\r\n window.open(newurl, \"_self\");\r\n }\r\n if (keyword) {\r\n return (\r\n <>\r\n
    \r\n คำค้นหาใกล้เคียง :{\" \"}\r\n \r\n {keyword}\r\n \r\n
    \r\n \r\n );\r\n }\r\n return <>;\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    ค้นหาทรัพย์มือสองทำเลดี ทั่วไทย

    \r\n
    \r\n
    \r\n OnInputChange(\"keyword\", e)}\r\n onKeyPress={(e) => e.key === \"Enter\" && GoToSearch()}\r\n />\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n

    ค้นหาทรัพย์มือสองทำเลดี ทั่วไทย

    \r\n
    \r\n
    \r\n OnInputChange(\"keyword\", e)}\r\n onKeyPress={(e) => e.key === \"Enter\" && GoToSearch()}\r\n />\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n {/* < DeskTopSearch {...property} searchDataChange={OnSearchDataChange} IonRangeDataChange={OnIonRangeDataChange} RangeInputDataChange={OnRangeInputDataChange} OnRadioCheck={OnRadioCheck} GoToSearch={GoToSearch} ClearSearch={OnClearSearch} OnInputChange={OnInputChange} /> */}\r\n
    \r\n
    \r\n
    \r\n \r\n\r\n \r\n {/* */}\r\n
    \r\n
    \r\n

    ค้นหาทรัพย์มือสองทำเลดี ทั่วไทย

    \r\n
    \r\n \r\n หน้าแรก\r\n \r\n \r\n \r\n \r\n

    \r\n ค้นหาทรัพย์สิน\r\n

    \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
      \r\n
    • \r\n \r\n \r\n ทรัพย์ทั้งหมด\r\n \r\n
    • \r\n
    • \r\n \r\n \r\n ทรัพย์โปรโมชัน\r\n \r\n
    • \r\n {/*
    • \r\n \r\n \r\n ทรัพย์ยอดนิยม\r\n \r\n
    • */}\r\n \r\n \r\n \r\n ทรัพย์ถูกใจ\r\n {favoritePropertyValue.split(\",\").filter((x) => x).length !== 0 && (\r\n \r\n {favoritePropertyValue.split(\",\").filter((x) => x).length}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n ดูล่าสุด\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n กรุณาเลือกหมวดหมู่\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n

    ผลการค้นหา

    \r\n

    “{searchResult.keyword.value}”

    \r\n
    \r\n

    \r\n {addCommas(searchResult[showTab].TotalRows)} รายการ\r\n

    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n\r\n \r\n\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n\r\n {/* */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    ผลการค้นหา

    \r\n

    “{searchResult.keyword.value}”

    \r\n
    \r\n \r\n
    \r\n
    \r\n 0 รายการ\r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n

    \r\n ไม่พบทรัพย์สินมือสอง\r\n
    \r\n ที่คุณค้นหา\r\n

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

    ทรัพย์แนะนำ

    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n {\r\n goToTab(\"favoriteProperty\");\r\n }}\r\n recentlyClick={() => {\r\n goToTab(\"recentlyviewedProperty\");\r\n }}\r\n />\r\n\r\n {/* */}\r\n
    \r\n
    \r\n \r\n
    \r\n

    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById(\"react-app-search\")\r\n);\r\n\r\nconsole.log(\"react app property search start\");\r\n\r\nfunction isTabExist(tab) {\r\n return allTab\r\n .map((a) => {\r\n return a.toLowerCase();\r\n })\r\n .includes(tab.toLowerCase());\r\n}\r\n\r\n// export const DeskTopSearch = () => {\r\n// return (\r\n\r\n// )\r\n// };\r\n","var api = require(\"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../node_modules/css-loader/dist/cjs.js!./index.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".c-black {\\r\\n color: #333 !important;\\r\\n}\\r\\n\\r\\n#icw .assets-recommend-swiper .md-thumbnail-img {\\r\\n height: 0;\\r\\n padding-bottom: 54.6875%;\\r\\n position: relative;\\r\\n overflow: hidden;\\r\\n border-top-left-radius: 10px;\\r\\n border-top-right-radius: 10px;\\r\\n}\\r\\n\\r\\n#icw .assets-recommend-swiper .md-thumbnail-img img {\\r\\n width: 100%;\\r\\n border-top-right-radius: 10px;\\r\\n border-top-left-radius: 10px;\\r\\n position: absolute;\\r\\n top: 50%;\\r\\n transform: translateY(-50%);\\r\\n object-fit: cover;\\r\\n}\\r\\n\\r\\n.mousePointer {\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n#error-popup .popup-modal,\\r\\n#error-popup .popup-inner {\\r\\n height: auto;\\r\\n}\\r\\n\\r\\n#icw .popup-error-backdrop,\\r\\n#icw .form-backdrop {\\r\\n position: fixed;\\r\\n display: flex;\\r\\n justify-content: center;\\r\\n align-items: center;\\r\\n top: 0;\\r\\n left: 0;\\r\\n width: 100%;\\r\\n height: 100%;\\r\\n z-index: 3000;\\r\\n background-color: rgba(0, 0, 0, 0.8);\\r\\n display: none;\\r\\n}\\r\\n\\r\\n#icw .popup-modal {\\r\\n position: relative;\\r\\n max-width: 1000px;\\r\\n height: 120px;\\r\\n padding: 30px 20px;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n border-radius: 10px;\\r\\n}\\r\\n\\r\\n#icw .popup-inner {\\r\\n border-radius: 10px;\\r\\n max-width: 900px;\\r\\n height: 80px;\\r\\n padding: 20px 40px;\\r\\n background-color: white;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n border-bottom: 4px solid var(--green-color-3);\\r\\n}\\r\\n\\r\\n#icw .more-filter-btn.error {\\r\\n border: none;\\r\\n position: absolute;\\r\\n top: 0;\\r\\n right: 0;\\r\\n}\\r\\n\\r\\n#icw .is-compare {\\r\\n opacity: 0.3;\\r\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://src/Search/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,sBAAsB;AAC1B;;AAEA;IACI,SAAS;IACT,wBAAwB;IACxB,kBAAkB;IAClB,gBAAgB;IAChB,4BAA4B;IAC5B,6BAA6B;AACjC;;AAEA;IACI,WAAW;IACX,6BAA6B;IAC7B,4BAA4B;IAC5B,kBAAkB;IAClB,QAAQ;IACR,2BAA2B;IAC3B,iBAAiB;AACrB;;AAEA;IACI,eAAe;AACnB;;AAEA;;IAEI,YAAY;AAChB;;AAEA;;IAEI,eAAe;IACf,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,MAAM;IACN,OAAO;IACP,WAAW;IACX,YAAY;IACZ,aAAa;IACb,oCAAoC;IACpC,aAAa;AACjB;;AAEA;IACI,kBAAkB;IAClB,iBAAiB;IACjB,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,mBAAmB;AACvB;;AAEA;IACI,mBAAmB;IACnB,gBAAgB;IAChB,YAAY;IACZ,kBAAkB;IAClB,uBAAuB;IACvB,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,6CAA6C;AACjD;;AAEA;IACI,YAAY;IACZ,kBAAkB;IAClB,MAAM;IACN,QAAQ;AACZ;;AAEA;IACI,YAAY;AAChB\",\"sourcesContent\":[\".c-black {\\r\\n color: #333 !important;\\r\\n}\\r\\n\\r\\n#icw .assets-recommend-swiper .md-thumbnail-img {\\r\\n height: 0;\\r\\n padding-bottom: 54.6875%;\\r\\n position: relative;\\r\\n overflow: hidden;\\r\\n border-top-left-radius: 10px;\\r\\n border-top-right-radius: 10px;\\r\\n}\\r\\n\\r\\n#icw .assets-recommend-swiper .md-thumbnail-img img {\\r\\n width: 100%;\\r\\n border-top-right-radius: 10px;\\r\\n border-top-left-radius: 10px;\\r\\n position: absolute;\\r\\n top: 50%;\\r\\n transform: translateY(-50%);\\r\\n object-fit: cover;\\r\\n}\\r\\n\\r\\n.mousePointer {\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n#error-popup .popup-modal,\\r\\n#error-popup .popup-inner {\\r\\n height: auto;\\r\\n}\\r\\n\\r\\n#icw .popup-error-backdrop,\\r\\n#icw .form-backdrop {\\r\\n position: fixed;\\r\\n display: flex;\\r\\n justify-content: center;\\r\\n align-items: center;\\r\\n top: 0;\\r\\n left: 0;\\r\\n width: 100%;\\r\\n height: 100%;\\r\\n z-index: 3000;\\r\\n background-color: rgba(0, 0, 0, 0.8);\\r\\n display: none;\\r\\n}\\r\\n\\r\\n#icw .popup-modal {\\r\\n position: relative;\\r\\n max-width: 1000px;\\r\\n height: 120px;\\r\\n padding: 30px 20px;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n border-radius: 10px;\\r\\n}\\r\\n\\r\\n#icw .popup-inner {\\r\\n border-radius: 10px;\\r\\n max-width: 900px;\\r\\n height: 80px;\\r\\n padding: 20px 40px;\\r\\n background-color: white;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n border-bottom: 4px solid var(--green-color-3);\\r\\n}\\r\\n\\r\\n#icw .more-filter-btn.error {\\r\\n border: none;\\r\\n position: absolute;\\r\\n top: 0;\\r\\n right: 0;\\r\\n}\\r\\n\\r\\n#icw .is-compare {\\r\\n opacity: 0.3;\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import { configureStore } from \"@reduxjs/toolkit\";\r\nimport loginReducer from \"./stores/loginSlice\";\r\nimport { merchantAPI } from \"./stores/paylaterAPI\";\r\nimport paylaterReducer from \"./stores/paylaterSlice\";\r\nimport propertyReducer from \"./stores/propertySlice\";\r\nexport default () =>\r\n configureStore({\r\n reducer: {\r\n property: propertyReducer,\r\n login: loginReducer,\r\n paylater: paylaterReducer,\r\n [merchantAPI.reducerPath]: merchantAPI.reducer,\r\n },\r\n middleware: (getDefaultMiddleware) =>\r\n getDefaultMiddleware().concat(merchantAPI.middleware),\r\n devTools: process.env.NODE_ENV !== \"production\",\r\n });\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n addCommas,\r\n getUTM,\r\n showBedAndBath,\r\n getArea,\r\n getPropertyType,\r\n getCookie,\r\n setCookie,\r\n setLikeProperty,\r\n} from \"../common/Common\";\r\nimport Config from \"config\";\r\nimport classnames from \"classnames/bind\";\r\nimport { CompareButton } from \"../Compare/Common\";\r\n\r\nconst pagesLink = Config.pagesLink;\r\nconst mediaURLPrefix = Config.mediaURLPrefix;\r\nconst defaultThumbnailURL = Config.defaultThumbnailURL;\r\n\r\nconst PropertyImgComp = ({ imgUrl, altName = \"pfs-image\" }) => {\r\n return (\r\n <>\r\n {\r\n currentTarget.onerror = null; // prevents looping\r\n currentTarget.src = defaultThumbnailURL;\r\n }}\r\n alt={altName}\r\n loading=\"lazy\"\r\n />\r\n \r\n );\r\n};\r\n\r\nconst ImgHoverComponent = () => {\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n ดูเพิ่มเติม\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nconst PropertyBox = (property) => {\r\n const [isLike, setIslike] = useState(false);\r\n const [showLike, setShowLike] = useState(true);\r\n\r\n useEffect(() => {\r\n // if (getCookie(\"Allow_Cookies\") === \"N\") {\r\n // setShowLike(false);\r\n // return;\r\n // }\r\n var favProp = getCookie(\"favoriteProperty\");\r\n if (favProp && favProp.split(\",\").includes(property.PropertyID)) {\r\n setIslike(true);\r\n }\r\n }, []);\r\n\r\n function OnLikeCheck(e) {\r\n // e.stopPropagation();\r\n e.preventDefault();\r\n // if (getCookie(\"Allow_Cookies\") === \"N\") {\r\n // setShowLike(false);\r\n // return;\r\n // }\r\n setLikeProperty(property.PropertyID, !isLike);\r\n setIslike(!isLike);\r\n // var favProp = getCookie(\"favoriteProperty\");\r\n // if (isLike) {\r\n // if (favProp) {\r\n // setCookie(\r\n // \"favoriteProperty\",\r\n // favProp\r\n // .split(\",\")\r\n // .filter((e) => e != property.PropertyID)\r\n // .join(\",\"),\r\n // 30\r\n // );\r\n // }\r\n // setIslike(false);\r\n // } else if (!isLike) {\r\n // if (!favProp.split(\",\").includes(property.PropertyID)) {\r\n // setCookie(\r\n // \"favoriteProperty\",\r\n // favProp\r\n // .split(\",\")\r\n // .concat(property.PropertyID)\r\n // .filter((x) => x)\r\n // .join(\",\"),\r\n // 30\r\n // );\r\n // }\r\n // setIslike(true);\r\n // }\r\n }\r\n\r\n function goToUrl(url) {\r\n window.location = url;\r\n }\r\n\r\n var {\r\n propertyDetailURL,\r\n thumbnailURL,\r\n location,\r\n propertyName,\r\n tag,\r\n PromotionPrice,\r\n Price,\r\n areaHtml,\r\n bedRoomHtml,\r\n propertyTypeHtml,\r\n PropertyIDFormat,\r\n IsPartner,\r\n imgPCList,\r\n } = prepareDataForProopertyBox(property);\r\n\r\n // console.log(\"imgPCList\", imgPCList);\r\n\r\n return (\r\n <>\r\n \r\n
    \r\n goToUrl(propertyDetailURL)}\r\n href={propertyDetailURL}\r\n >\r\n {IsPartner && (\r\n
    \r\n \"Logo\r\n
    \r\n )}\r\n {/*
    \r\n {\r\n currentTarget.onerror = null; // prevents looping\r\n currentTarget.src = defaultThumbnailURL;\r\n }}\r\n alt={propertyName}\r\n loading=\"lazy\"\r\n />\r\n
    \r\n \r\n
    \r\n
    */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {imgPCList.length == 0 && }\r\n {\r\n \r\n }\r\n
    \r\n
    \r\n {/* 2024 add multi img */}\r\n {imgPCList.length > 0 &&\r\n imgPCList.map((pcUrl, index) => {\r\n return (\r\n
    \r\n {index == imgPCList.length - 1 && }\r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n {imgPCList.length > 0 && (\r\n <>\r\n
    \r\n
    \r\n
    \r\n \r\n )}\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {IsPartner && (\r\n
    \r\n \r\n ทรัพย์ผู้ขาย\r\n
    \r\n )}\r\n {property.PropertyID?.slice(2, 4) === \"66\" && (\r\n
    \r\n \r\n  \r\n ทรัพย์ฝากขาย\r\n
    \r\n )}\r\n {property.IsNew && (\r\n
    \r\n  \r\n NEW\r\n
    \r\n )}\r\n {property.IsHot && (\r\n
    \r\n  \r\n HOT\r\n
    \r\n )}\r\n {property.PromotionName && (\r\n
    \r\n  \r\n Promotion\r\n
    \r\n )}\r\n
    \r\n
    \r\n
    \r\n \r\n

    {propertyName}

    \r\n
    \r\n
    \r\n
    \r\n {showLike && (\r\n OnLikeCheck(e)}\r\n >\r\n \r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n

    {location}

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

    {propertyTypeHtml}

    \r\n

    รหัส {PropertyIDFormat}

    \r\n
    \r\n
    \r\n
    {bedRoomHtml}
    \r\n
    {areaHtml}
    \r\n
    \r\n
    \r\n {tag}\r\n
    \r\n {PromotionPrice}\r\n {Price}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport const PropertyList = (props) => {\r\n if (!props.list) {\r\n return <>;\r\n }\r\n return (\r\n <>\r\n
    \r\n {props.list.map((property, i) => (\r\n \r\n ))}\r\n
    \r\n \r\n );\r\n};\r\n\r\nexport function prepareDataForProopertyBox(\r\n property,\r\n { isBedPTag = false, atBath = true } = {}\r\n) {\r\n // Link & img\r\n var propertyDetailURL =\r\n pagesLink.detail.replace(\"{{PropID}}\", property.PropertyID) + // + '&source=' + encodeURIComponent(window.location.href)\r\n \"?\" +\r\n getUTM();\r\n\r\n var thumbnail = property.PropertyMediaes?.filter(function (media) {\r\n return media.MediaType === \"IMAGE-THUMBNAIL\";\r\n })[0];\r\n\r\n var thumbnailURL;\r\n\r\n if (thumbnail !== undefined) {\r\n thumbnailURL = mediaURLPrefix + thumbnail.MediaPath;\r\n } else {\r\n thumbnailURL = defaultThumbnailURL;\r\n }\r\n\r\n var imgPCList = property.PropertyMediaes?.filter(function (media) {\r\n return media.MediaType === \"IMAGE-PC\";\r\n }).map((item) => {\r\n return mediaURLPrefix + item.MediaPath;\r\n });\r\n\r\n // Location\r\n var isInBangkok =\r\n property.ProvinceName && property.ProvinceName.indexOf(\"กรุงเทพ\") !== -1;\r\n var location = \"\";\r\n\r\n if (property.AmphurName) {\r\n if (isInBangkok) {\r\n location +=\r\n property.AmphurName.indexOf(\"เขต\") !== -1\r\n ? property.AmphurName\r\n : \"เขต\" + property.AmphurName;\r\n } else {\r\n location += property.AmphurName;\r\n }\r\n location += \" \";\r\n }\r\n\r\n if (property.ProvinceName) {\r\n location += property.ProvinceName;\r\n }\r\n\r\n // Property Name\r\n var propertyName;\r\n var title;\r\n\r\n if (property.VillageTH && property.VillageTH !== \"-\") {\r\n propertyName = property.VillageTH;\r\n if (propertyName.length > 46) {\r\n propertyName = propertyName.slice(0, 50) + \"...\";\r\n }\r\n title = \"ดูเพิ่มเติม \" + propertyName;\r\n } else {\r\n propertyName = `${getPropertyType(property)} ${property.ProvinceName}`;\r\n title = \"ดูเพิ่มเติม\";\r\n }\r\n\r\n // Price\r\n let tag = \"\";\r\n let PromotionPrice = \"\";\r\n let Price = \"\";\r\n if (property.PromotionPrice) {\r\n tag = (\r\n
    \r\n

    ราคาพิเศษ

    \r\n
    \r\n );\r\n PromotionPrice = (\r\n

    \r\n {addSpan(property.PromotionPrice, atBath)}\r\n

    \r\n );\r\n Price =

    {addCommas(property.SellPrice, 0)} บาท

    ;\r\n } else if (property.AdjustPrice) {\r\n tag = (\r\n
    \r\n

    ราคาลดลงกว่าเดิม

    \r\n
    \r\n );\r\n PromotionPrice = (\r\n

    \r\n {addSpan(property.AdjustPrice, atBath)}\r\n

    \r\n );\r\n Price =

    {addCommas(property.SellPrice, 0)} บาท

    ;\r\n } else {\r\n PromotionPrice = (\r\n

    \r\n {addSpan(property.SellPrice, atBath)}\r\n

    \r\n );\r\n Price = (\r\n

    \r\n -\r\n

    \r\n );\r\n\r\n tag = (\r\n
    \r\n

    -

    \r\n
    \r\n );\r\n }\r\n\r\n //area\r\n var areaHtml;\r\n var area = getArea(property);\r\n\r\n if (area !== null) {\r\n areaHtml = (\r\n

    \r\n {area.value}{\" \"}\r\n {area.unit}\r\n

    \r\n );\r\n } else {\r\n areaHtml = (\r\n

    \r\n  \r\n

    \r\n );\r\n }\r\n\r\n //bed & bath\r\n var bedRoomHtml;\r\n if (showBedAndBath(property)) {\r\n var bed;\r\n var bath;\r\n if (property.Bedroom && property.Bedroom > 0) {\r\n if (isBedPTag) {\r\n bed = (\r\n

    \r\n \r\n {property.Bedroom}\r\n

    \r\n );\r\n } else {\r\n bed = (\r\n \r\n \r\n {property.Bedroom}\r\n \r\n );\r\n }\r\n }\r\n if (property.Bathroom && property.Bathroom > 0) {\r\n if (isBedPTag) {\r\n bath = (\r\n

    \r\n \r\n {property.Bathroom}\r\n

    \r\n );\r\n } else {\r\n bath = (\r\n \r\n \r\n {property.Bathroom}\r\n \r\n );\r\n }\r\n }\r\n if (bed && bath) {\r\n bedRoomHtml = [bed, , bath];\r\n } else if (bed || bath) {\r\n bedRoomHtml = [bed, bath];\r\n } else {\r\n bedRoomHtml =

     

    ;\r\n }\r\n }\r\n\r\n //assetType\r\n var propertyTypeHtml;\r\n if (property.PropertyTypeName) {\r\n propertyTypeHtml = getPropertyType(property);\r\n } else {\r\n propertyTypeHtml = \" \";\r\n }\r\n\r\n var PropertyIDFormat = property.PropertyID\r\n ? `${property.PropertyID?.slice(0, 2)}-${property.PropertyID?.slice(\r\n 2,\r\n 4\r\n )}-${property.PropertyID?.slice(4)}`\r\n : \"\";\r\n\r\n var Logo =\r\n \"/SiteCollectionDocuments/assets/PFS2022/theme/img/logo/\" +\r\n property.SourceImageLogo;\r\n var IsPartner = checkIsPartner(property) ? Logo : false;\r\n\r\n return {\r\n propertyDetailURL,\r\n thumbnailURL,\r\n location,\r\n propertyName,\r\n tag,\r\n PromotionPrice,\r\n Price,\r\n areaHtml,\r\n bedRoomHtml,\r\n propertyTypeHtml,\r\n PropertyIDFormat,\r\n IsPartner,\r\n imgPCList,\r\n };\r\n}\r\n\r\nfunction addSpan(value, atBath = true) {\r\n if (atBath) {\r\n return (\r\n <>\r\n {addCommas(value, 0)} บาท\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n {\" \"}\r\n {addCommas(value, 0)} บาท\r\n \r\n );\r\n }\r\n}\r\n\r\nexport function checkIsPartner(data) {\r\n return data.SourceSaleType == \"Partner\";\r\n var propertyCode = data.PropertyID.slice(2, 4);\r\n switch (propertyCode) {\r\n case \"10\":\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n","import { createSlice } from '@reduxjs/toolkit'\r\n\r\nexport const propertySlice = createSlice({\r\n name: \"counter\",\r\n initialState: {\r\n searchFilter: {\r\n keyword: { value: \"\", fieldName: \"keyword\" },\r\n\r\n province: {\r\n value: \"\", fieldName: \"province\", placeholderSearch: \"ชื่อจังหวัด\", placeholder: \"จังหวัด\", clearOption: true,\r\n option: []\r\n },\r\n district: {\r\n value: \"\", fieldName: \"district\", placeholderSearch: \"ชื่อเขต/อำเภอ\", placeholder: \"เขต/อำเภอ\", clearOption: true,\r\n option: []\r\n },\r\n subDistrict: {\r\n value: \"\", fieldName: \"subDistrict\", placeholderSearch: \"ชื่อแขวง/ตำบล\", placeholder: \"แขวง/ตำบล\", clearOption: true,\r\n option: []\r\n },\r\n station: {\r\n value: \"\", fieldName: \"station\", placeholderSearch: \"ชื่อสถานี\", placeholder: \"เลือกสถานีใกล้เคียง\", clearOption: true,\r\n option: []\r\n },\r\n\r\n order: {\r\n value: \"hot\", fieldName: \"order\", minimumResultsForSearch: -1, notShowEmptyOption: true, option: [\r\n { text: \"ทรัพย์ยอดนิยม\", value: \"hot\" },\r\n { text: \"ทรัพย์มาใหม่\", value: \"new\" },\r\n { text: \"ราคา (น้อย-มาก)\", value: \"min-max\" },\r\n { text: \"ราคา (มาก-น้อย)\", value: \"max-min\" },\r\n { text: \"พื้นที่ (น้อย-มาก)\", value: \"min-max-area\" },\r\n { text: \"พื้นที่ (มาก-น้อย)\", value: \"max-min-area\" },\r\n ]\r\n },\r\n\r\n propertyType: {\r\n value: \"\", fieldName: \"propertyType\",\r\n housetype: { value: false, code: \"02\", name: \"บ้านเดี่ยว\", fieldName: \"housetype\", group: \"propertyType\" },\r\n land: { value: false, code: \"01\", name: \"ที่ดิน\", fieldName: \"land\", group: \"propertyType\" },\r\n townhouse: { value: false, code: \"03\", name: \"ทาวน์เฮ้าส์\", fieldName: \"townhouse\", group: \"propertyType\" },\r\n condo: { value: false, code: \"05\", name: \"คอนโดมิเนียม\", fieldName: \"condo\", group: \"propertyType\" },\r\n commercialbuilding: { value: false, code: \"04\", name: \"อาคารพาณิชย์\", fieldName: \"commercialbuilding\", group: \"propertyType\" },\r\n warehouse: { value: false, code: \"12\", name: \"โกดัง\", fieldName: \"warehouse\", group: \"propertyType\" },\r\n factory: { value: false, code: \"09\", name: \"โรงงาน\", fieldName: \"factory\", group: \"propertyType\" },\r\n apartment: { value: false, code: \"15\", name: \"อพาร์ทเม้นท์\", fieldName: \"apartment\", group: \"propertyType\" },\r\n office: { value: false, code: \"10\", name: \"อาคารสำนักงาน\", fieldName: \"office\", group: \"propertyType\" },\r\n resort: { value: false, code: \"20\", name: \"รีสอร์ท\", fieldName: \"resort\", group: \"propertyType\" },\r\n houseother: { value: false, code: \"19\", name: \"อื่น ๆ\", fieldName: \"houseother\", group: \"propertyType\" },\r\n },\r\n rangePrice: {\r\n value: \"\", fieldName: \"rangePrice\", min: 0, max: 11, from: 0, from_value: 0, to: 0, to_value: 0, step: 1, count: 0, placeholder: \"ราคาเริ่มต้น - สิ้นสุด\",\r\n values: [\r\n \"ไม่ระบุ\", \"1 ล้านบาท\", \"3 ล้านบาท\", \"5 ล้านบาท\", \"10 ล้านบาท\", \"20 ล้านบาท\", \"50 ล้านบาท\"\r\n ]\r\n },\r\n areaRange: {\r\n value: \"\", fieldName: \"areaRange\", min: 0, max: 8, from: 0, to: 0, step: 50, count: 0, placeholder: \"เนื้อที่เริ่มต้น - สิ้นสุด\",\r\n values: [\r\n \"ไม่ระบุ\", \"50 ตร.ว.\", \"100 ตร.ว.\", \"200 ตร.ว.\", \"300 ตร.ว.\", \"1 ไร่\", \"5 ไร่\", \"10 ไร่\", \"50 ไร่\"\r\n ]\r\n },\r\n useableAreaRange: {\r\n value: \"\", fieldName: \"useableAreaRange\", min: 0, max: 150, from: 0, to: 0, step: 50, count: 0, placeholder: \"พื้นที่เริ่มต้น - สิ้นสุด\",\r\n values: [\r\n \"ไม่ระบุ\", \"30 ตร.ม.\", \"50 ตร.ม.\", \"100 ตร.ม.\", \"200 ตร.ม.\", \"500 ตร.ม.\",\r\n ]\r\n },\r\n rangeField: {value: \"\", fieldName: \"rangePrice\"},\r\n areaField: {value: \"\", fieldName: \"areaRange\"},\r\n useableAreaField: {value: \"\", fieldName: \"useableAreaRange\"},\r\n bedroom: { value: 0, min: 0, max: 99, fieldName: \"bedroom\" },\r\n bathroom: { value: 0, min: 0, max: 99, fieldName: \"bathroom\" },\r\n assetTypes: {\r\n value: \"\", fieldName: \"assetTypes\",\r\n // PromotionProperties: { value: false, code: \"PromotionProperties\", name: \"บ้านเดี่ยว\", fieldName: \"PromotionProperties\" }, // fieldName is icon classname\r\n propertybank: { value: false, code: \"kbank\", name: \"ทรัพย์
    ธนาคาร\", fieldName: \"propertybank\", group: \"assetTypes\" },\r\n propertywaitsale: { value: false, code: \"npl\", name: \"ทรัพย์
    ฝากขาย\", fieldName: \"propertywaitsale\", group: \"assetTypes\" },\r\n partnership: { value: false, code: \"partner\", name: \"ทรัพย์
    ผู้ขาย\", fieldName: \"partnership\", group: \"assetTypes\", spanText: \"(บุคคลภายนอก)\" },\r\n },\r\n expand: { value: \"\", fieldName: \"expand\" },\r\n },\r\n searchResult: {\r\n keyword: { value: \"\", fieldName: \"keyword\" },\r\n resultLength: { value: 0, fieldName: \"resultLength\" },\r\n Allow_Cookies: { value: true, fieldName: \"Allow_Cookies\" },\r\n showTab: { value: \"newProperty\", fieldName: \"showTab\" },\r\n newProperty: { value: \"\", fieldName: \"newProperty\", list: [], pageIndex: 1, hasMore: true, isLoading: false, TotalRows: 0 },\r\n promoProperty: { value: \"\", fieldName: \"promoProperty\", list: [], pageIndex: 1, hasMore: true, isLoading: false, TotalRows: 0 },\r\n popularProperty: { value: \"\", fieldName: \"popularProperty\", list: [], pageIndex: 1, hasMore: true, isLoading: false, TotalRows: 0 },\r\n favoriteProperty: { value: \"\", fieldName: \"favoriteProperty\", list: [], pageIndex: 1, hasMore: true, isLoading: false, favoritePropertyList: [], TotalRows: 0 },\r\n recentlyviewedProperty: { value: \"\", fieldName: \"recentlyviewedProperty\", list: [], pageIndex: 1, hasMore: true, isLoading: false, TotalRows: 0 },\r\n suggestProperty: { value: \"\", fieldName: \"suggestProperty\", list: [], pageIndex: 1, hasMore: true, isLoading: false },\r\n },\r\n propertyDetail: {\r\n AssetInfoTH: \"\",\r\n AddressNoTH: \"\",\r\n BuildingTH: \"\",\r\n FloorTH: \"\",\r\n VillageTH: \"\",\r\n SoiTH: \"\",\r\n RoadTH: \"\",\r\n TambonName: \"\",\r\n AmphurName: \"\",\r\n ProvinceName: \"\",\r\n location: \"\",\r\n PropertyTypeName: \"\",\r\n Bedroom: \"\",\r\n Bathroom: \"\",\r\n CarParking: \"\",\r\n SellPrice: \"\",\r\n PromotionPrice: \"\",\r\n AdjustPrice: \"\",\r\n PromotionName: \"\",\r\n PromotionRemark: \"\",\r\n PropertyIDFormat: \"\",\r\n PropertyID: \"\",\r\n Area: \"\",\r\n AreaValue: \"\",\r\n UseableArea: \"\",\r\n ShowAreaValue: \"\",\r\n ShowUseableArea: \"\",\r\n PropertyMediaes: [],\r\n GAScore: \"\",\r\n Like: \"\",\r\n IsNew: \"\",\r\n CategoryGroup:\"\",\r\n CategoryDetail: \"\",\r\n AIImg: [],\r\n \r\n // AssetInfoTH: { value: \"\", fieldName: \"AssetInfoTH\" },\r\n // AddressNoTH: { value: \"\", fieldName: \"AddressNoTH\" },\r\n // BuildingTH: { value: \"\", fieldName: \"BuildingTH\" },\r\n // FloorTH: { value: \"\", fieldName: \"FloorTH\" },\r\n // VillageTH: { value: \"\", fieldName: \"VillageTH\" },\r\n // SoiTH: { value: \"\", fieldName: \"SoiTH\" },\r\n // RoadTH: { value: \"\", fieldName: \"RoadTH\" },\r\n // TambonName: { value: \"\", fieldName: \"TambonName\" },\r\n // AmphurName: { value: \"\", fieldName: \"AmphurName\" },\r\n // ProvinceName: { value: \"\", fieldName: \"ProvinceName\" },\r\n // location: { value: \"\", fieldName: \"location\" },\r\n // PropertyTypeName: { value: \"\", fieldName: \"PropertyTypeName\" },\r\n // Bedroom: { value: \"\", fieldName: \"Bedroom\" },\r\n // Bathroom: { value: \"\", fieldName: \"Bathroom\" },\r\n // SellPrice: { value: \"\", fieldName: \"SellPrice\" },\r\n // PromotionPrice: { value: \"\", fieldName: \"PromotionPrice\" },\r\n // AdjustPrice: { value: \"\", fieldName: \"AdjustPrice\" },\r\n // PromotionName: { value: \"\", fieldName: \"PromotionName\" },\r\n // PromotionRemark: { value: \"\", fieldName: \"PromotionRemark\" },\r\n // PropertyIDFormat: { value: \"\", fieldName: \"PropertyIDFormat\" },\r\n // PropertyID: { value: \"\", fieldName: \"PropertyID\" },\r\n // Area: { value: \"\", fieldName: \"Area\" },\r\n // AreaValue: { value: \"\", fieldName: \"AreaValue\" },\r\n // UseableArea: { value: \"\", fieldName: \"UseableArea\" },\r\n // PropertyMediaes: { value: \"\", fieldName: \"PropertyMediaes\" },\r\n // GAScore: { value: \"\", fieldName: \"GAScore\" },\r\n // Like: { value: false, fieldName: \"Like\" },\r\n },\r\n dropleadDetail: {\r\n usertype: { value: 'normal' },\r\n juJuristicId: { value: '', required: true, errorMessage: '', fieldName: 'juJuristicId', label: 'เลขที่นิติบุคคล', placeholder: \"กรุณากรอกเลขที่นิติบุคคล*\", maxLength: 250, inputmode: \"numeric\" },\r\n juFirstName: { value: '', required: true, errorMessage: '', fieldName: 'juFirstName', label: 'ชื่อ', placeholder: \"กรุณากรอกชื่อ*\", maxLength: 250 },\r\n juLastName: { value: '', required: true, errorMessage: '', fieldName: 'juLastName', label: 'นามสกุล', placeholder: \"กรุณากรอกนามสกุล*\", maxLength: 250 },\r\n\r\n phone: { value: '', required: true, errorMessage: '', fieldName: 'phone', label: 'เบอร์มือถือ', placeholder: \"กรุณากรอกเบอร์มือถือ*\", maxLength: 10, inputmode: \"numeric\" },\r\n confirmphone: { value: '', required: true, errorMessage: '', fieldName: 'confirmphone', label: 'ยืนยันเบอร์มือถือ', placeholder: \"กรุณายืนยันเบอร์มือถือ*\", maxLength: 10, inputmode: \"numeric\" },\r\n\r\n naCitizenId: { value: '', required: true, errorMessage: '', fieldName: 'naCitizenId', label: 'เลขบัตรประชาชน', placeholder: \"กรุณากรอกเลขบัตรประชาชน*\", maxLength: 13, inputmode: \"numeric\" },\r\n\r\n email: { value: '', required: true, errorMessage: '', fieldName: 'email', label: 'อีเมล', placeholder: \"กรุณากรอกอีเมล*\", maxLength: 250 },\r\n consentCheck: { value: true, required: true, errorMessage: '', fieldName: 'consentCheck', label: 'สนใจสินเชื่อทรัพย์มือสอง', placeholder: \"0\" },\r\n\r\n juCompanyName: { value: '', required: true, errorMessage: '', fieldName: 'juCompanyName', label: 'ชื่อบริษัท', placeholder: \"ชื่อบริษัท*\", maxLength: 500 },\r\n naFirstName: { value: '', required: true, errorMessage: '', fieldName: 'naFirstName', label: 'ชื่อ', placeholder: \"ชื่อ*\", maxLength: 250 },\r\n naLastName: { value: '', required: true, errorMessage: '', fieldName: 'naLastName', label: 'นามสกุล', placeholder: \"นามสกุล*\", maxLength: 250 },\r\n naCareer: {\r\n value: '', required: true, errorMessage: '', fieldName: 'naCareer', label: 'อาชีพ', placeholder: \"อาชีพ*\",\r\n option: [\r\n ]\r\n },\r\n naSalary: { value: '', required: true, errorMessage: '', fieldName: 'naSalary', label: 'รายได้ต่อเดือน', placeholder: \"รายได้ต่อเดือน*\", maxLength: 250, inputmode: \"numeric\" },\r\n\r\n availableTime: {\r\n value: '', required: true, errorMessage: '', fieldName: 'availableTime', label: 'ช่วงเวลาที่สะดวกให้ติดต่อกลับ', placeholder: \"ช่วงเวลาที่สะดวกให้ติดต่อกลับ*\",\r\n option: [\r\n ]\r\n },\r\n },\r\n calcDetail: {\r\n propertyTypeID: { value: null },\r\n decoration: { value: null },\r\n definedPropertyPrice: { value: 0 },\r\n appraisalPrice: { value: 0 },\r\n calcTypes: {\r\n Home: 'Home Loan',\r\n Land: 'Land',\r\n SME: 'SME'\r\n },\r\n appliedCalcTypes: {\r\n value: {\r\n forStay: null,\r\n forBusiness: null,\r\n },\r\n },\r\n smePropertyType: { value: null },\r\n calculatorHomeLoanSetting: { value: 0, fieldName: \"calculatorHomeLoanSetting\" },\r\n calculatorLandSetting: { value: 0, fieldName: \"calculatorLandSetting\" },\r\n calculatorSMESetting: { value: 0, fieldName: \"calculatorSMESetting\" },\r\n\r\n stayTotalInstallmentPerMonth: { value: 0 },\r\n stayTotalLimitAmount: { value: 0 },\r\n stayInstallmentYear: { value: 0, maxLength: 2, maxDigit: 2, maxValue: 0, errorMessage: '', note: '' },\r\n stayPropertyLimitAmount: { value: 0, maxLength: 11, maxDigit: 9, maxValue: 0, errorMessage: '' },\r\n stayPropertyInstallmentPerMonth: { value: 0 },\r\n stayDecorationLimitAmount: { value: 0, maxLength: 11, maxDigit: 9, maxValue: 0, errorMessage: '' },\r\n stayDecorationInstallmentPerMonth: { value: 0 },\r\n stayIncomePerMonth: { value: 0, maxLength: 11, maxDigit: 9, minValue: 7500, errorMessage: '' },\r\n stayDebtBurdenPerMonth: { value: 0, maxLength: 11, maxDigit: 9, errorMessage: '' },\r\n stayCanTakeDecoration: { value: true },\r\n\r\n businessTotalInstallmentPerMonth: { value: 0 },\r\n businessTotalLimitAmount: { value: 0 },\r\n businessInstallmentYear: { value: 0, maxLength: 2, maxValue: 0, errorMessage: '', note: '' },\r\n businessPropertyLimitAmount: { value: 0, maxLength: 11, maxDigit: 9, maxValue: 0, errorMessage: '' },\r\n businessPropertyInstallmentPerMonth: { value: 0 },\r\n businessDecorationLimitAmount: { value: 0, maxLength: 11, maxDigit: 9, maxValue: 0, errorMessage: '' },\r\n businessDecorationInstallmentPerMonth: { value: 0 },\r\n businessIncomePerMonth: { value: 0, maxLength: 11, maxDigit: 9, errorMessage: '' },\r\n businessDebtBurdenPerMonth: { value: 0, maxLength: 11, maxDigit: 9, errorMessage: '' },\r\n\r\n stayValidateFields: { value: [] },\r\n businessValidateFields: { value: [] },\r\n\r\n // calcType: { value: '' },\r\n // price: { value: '', required: true, errorMessage: '', fieldName: 'price', label: 'ราคาทรัพย์/ราคาเสนอซื้อ (บาท)', placeholder: \"0\" },\r\n // income: { value: '', required: true, errorMessage: '', fieldName: 'income', label: 'รายได้ต่อเดือน (บาท) ตั้งแต่ 7,500 บาท ขึ้นไป', placeholder: \"0\" },\r\n // dept: { value: '', required: false, errorMessage: '', fieldName: 'dept', label: 'ภาระหนี้ต่อเดือน (บาท)', placeholder: \"0\" },\r\n // age: { value: '', required: true, errorMessage: '', fieldName: 'age', label: 'อายุผู้กู้ (ปี)', placeholder: \"0\", maxLength: 2 },\r\n // profit: { value: '', required: true, errorMessage: '', fieldName: 'profit', label: 'กำไรสุทธิต่อเดือน (บาท)', placeholder: \"0\" },\r\n // career: {\r\n // value: '', required: true, errorMessage: '', fieldName: 'career', label: 'อาชีพ', placeholder: \"เลือกอาชีพ\",\r\n // option: [\r\n // { text: 'พนักงานประจำ', value: 'employee' },\r\n // { text: 'เจ้าของกิจการ', value: 'business_owner' }\r\n // ]\r\n\r\n // },\r\n // home: {\r\n // value: '', required: true, errorMessage: '', fieldName: 'home', label: 'เลือกการกู้บ้านหลังที่', placeholder: \"เลือกการกู้บ้านหลังที่\",\r\n // option: [\r\n // { text: 'บ้านหลังที่ 1', value: 'home1' },\r\n // { text: 'บ้านหลังที่ 2 (ผ่อนหลังที่ 1 มาแล้วไม่ถึง 2 ปี)', value: 'home2_with_home1_lessthan_2years' },\r\n // { text: 'บ้านหลังที่ 2 (ผ่อนหลังที่ 1 มาแล้วตั้งแต่ 2 ปี ขึ้นไป)', value: 'home2_with_home1_2years_or_more' },\r\n // { text: 'บ้านหลังที่ 3 เป็นต้นไป', value: 'home3_or_else' },\r\n // ]\r\n\r\n // },\r\n // land: {\r\n // value: '', required: true, errorMessage: '', fieldName: 'land', label: 'เป็นการกู้ซื้อทรัพย์ชิ้นที่', placeholder: \"เลือกการกู้ซื้อทรัพย์ชิ้นที่\",\r\n // option: [\r\n // { text: 'ทรัพย์ชิ้นที่ 1 (ไม่มีภาระสินเชื่อบ้านขณะนี้)', value: 'home1' },\r\n // { text: 'ทรัพย์ชิ้นที่ 2 (ผ่อนหลังที่ 1 มาแล้วไม่ถึง 2 ปี)', value: 'home2_with_home1_lessthan_2years' },\r\n // { text: 'ทรัพย์ชิ้นที่ 2 (ผ่อนหลังที่ 1 มาแล้วตั้งแต่ 2 ปีขึ้นไป)', value: 'home2_with_home1_2years_or_more' },\r\n // { text: 'ทรัพย์ชิ้นที่ 3 เป็นต้นไป', value: 'home3_or_else' },\r\n // ]\r\n\r\n // },\r\n // personType: {\r\n // value: '', required: true, errorMessage: '', fieldName: 'personType', label: 'กู้ในนาม', placeholder: \"เลือกกู้ในนาม\",\r\n // option: [\r\n // { text: 'บุคคลธรรมดา', value: 'natural' },\r\n // { text: 'นิติบุคคล', value: 'juristic' },\r\n // ]\r\n\r\n // },\r\n // businessAge: {\r\n // value: '', required: true, errorMessage: '', fieldName: 'businessAge', label: 'ระยะเวลาดำเนินธุรกิจ(ปี)', placeholder: \"เลือกระยะเวลาดำเนินธุรกิจ\",\r\n // option: [\r\n // { text: 'น้อยกว่า 6 เดือน', value: 'less_than_6m' },\r\n // { text: '6 เดือน แต่ไม่ถึง 1 ปี', value: '6m_to_1y' },\r\n // { text: '1-3 ปี', value: '1y_to_3y' },\r\n // { text: 'มากกว่า 3 ปี', value: 'greater_than_3y' },\r\n // ]\r\n\r\n // },\r\n // loanAmount: { value: \"\", fieldName: \"loanAmount\", min: 0, max: 11, from: 0, step: 1, count: 0 },\r\n // loanPeriod: { value: \"\", fieldName: \"loanPeriod\", min: 0, max: 11, from: 0, step: 1, count: 0 },\r\n // maxLimitResult: { value: 0, fieldName: \"maxLimitResult\" },\r\n // installmentResult: { value: 0, fieldName: \"installmentResult\" },\r\n },\r\n loading: null,\r\n },\r\n reducers: {\r\n searchDataChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n\r\n state.searchFilter[field].value = value;\r\n },\r\n searchListChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n\r\n state.searchFilter[field].value = \"\";\r\n state.searchFilter[field].option = value;\r\n },\r\n searchIonRangeChange: (state, action) => {\r\n const field = action.payload.fieldName;\r\n const value = action.payload.value;\r\n const from = action.payload.from;\r\n const to = action.payload.to;\r\n\r\n state.searchFilter[field].value = value;\r\n state.searchFilter[field].from = state.searchFilter[field].values.indexOf(from);\r\n if (to === \"MAX\") {\r\n state.searchFilter[field].to = state.searchFilter[field].max;\r\n }\r\n else {\r\n state.searchFilter[field].to = state.searchFilter[field].values.indexOf(to);\r\n }\r\n },\r\n searchIonRangeListChange: (state, action) => {\r\n const field = action.payload.fieldName;\r\n const value = action.payload.value;\r\n\r\n state.searchFilter[field].values = value;\r\n },\r\n updateIonRange: (state, action) => {\r\n const field = action.payload.fieldName;\r\n\r\n state.searchFilter[field].count += 1;\r\n },\r\n CheckBoxChange: (state, action) => {\r\n const field = action.payload.fieldName;\r\n const value = action.payload.value;\r\n const group = action.payload.group;\r\n\r\n const groupLength = Object.keys(state.searchFilter[group]).length - 2\r\n\r\n state.searchFilter[group][field].value = value;\r\n\r\n const temp = Object.entries(state.searchFilter[group]).map((item) => {\r\n if (item[0] !== \"fieldName\" && item[0] !== \"value\" && item[1].value) {\r\n return item[1].code\r\n }\r\n }).filter(x => x);\r\n\r\n state.searchFilter[group].value = temp.length === groupLength ? \"\" : temp.join(',');\r\n\r\n },\r\n ClearSearch: (state, action) => {\r\n console.log(\"clear dis\")\r\n Object.keys(state.searchFilter).forEach(function (key) {\r\n if (key === \"bathroom\" || key === \"bedroom\") {\r\n state.searchFilter[key].value = 0\r\n } else if (key === \"order\") {\r\n // state.searchFilter[key].value = \"new\"\r\n } else {\r\n state.searchFilter[key].value = \"\"\r\n }\r\n });\r\n\r\n state.searchFilter.propertyType.housetype.value = false\r\n state.searchFilter.propertyType.land.value = false\r\n state.searchFilter.propertyType.townhouse.value = false\r\n state.searchFilter.propertyType.condo.value = false\r\n state.searchFilter.propertyType.commercialbuilding.value = false\r\n state.searchFilter.propertyType.warehouse.value = false\r\n state.searchFilter.propertyType.factory.value = false\r\n state.searchFilter.propertyType.apartment.value = false\r\n state.searchFilter.propertyType.office.value = false\r\n state.searchFilter.propertyType.resort.value = false\r\n state.searchFilter.propertyType.houseother.value = false\r\n\r\n state.searchFilter.assetTypes.propertybank.value = false\r\n state.searchFilter.assetTypes.propertywaitsale.value = false\r\n state.searchFilter.assetTypes.partnership.value = false\r\n\r\n state.searchFilter.rangePrice.from = 0\r\n state.searchFilter.rangePrice.to = 0\r\n state.searchFilter.rangePrice.count += 1\r\n state.searchFilter.areaRange.from = 0\r\n state.searchFilter.areaRange.to = 0\r\n state.searchFilter.areaRange.count += 1\r\n state.searchFilter.useableAreaRange.from = 0\r\n state.searchFilter.useableAreaRange.to = 0\r\n state.searchFilter.useableAreaRange.count += 1\r\n\r\n },\r\n updateSearchResultList: (state, action) => {\r\n const field = action.payload.fieldName;\r\n const list = action.payload.list;\r\n const hasMore = action.payload.hasMore;\r\n const TotalRows = action.payload.TotalRows;\r\n const suggest = action.payload.suggest;\r\n\r\n state.searchResult[field].list = list\r\n state.searchResult[field].hasMore = hasMore\r\n state.searchResult[field].TotalRows = TotalRows\r\n state.searchResult[field].suggest = suggest\r\n },\r\n likePropertyList: (state, action) => {\r\n let PropertyObjTemp = action.payload.PropertyObj;\r\n const PropertyID = PropertyObjTemp.PropertyID\r\n const listName = action.payload.listName;\r\n\r\n const like = PropertyObjTemp.like ? false : true\r\n\r\n let likeList = state.searchResult.favoriteProperty.value.split(',')\r\n\r\n if (like && !likeList.includes(PropertyID)) {\r\n state.searchResult.favoriteProperty.value = [...likeList, PropertyID].filter(x => x).join(',')\r\n\r\n } else if (!like && likeList.includes(PropertyID)) {\r\n state.searchResult.favoriteProperty.value = likeList.filter(x => x !== PropertyID).join(',')\r\n }\r\n\r\n var target = state.searchResult[listName].list.find(x => x.PropertyID === PropertyID)\r\n if (target) target.like = like\r\n\r\n\r\n // const PropertyObj = { ...PropertyObjTemp, like: like }\r\n\r\n // var target = state.searchResult.newProperty.list.find(x => x.PropertyID === PropertyID)\r\n // if (target) target.like = like\r\n // target = state.searchResult.promoProperty.list.find(x => x.PropertyID === PropertyID)\r\n // if (target) target.like = like\r\n // target = state.searchResult.popularProperty.list.find(x => x.PropertyID === PropertyID)\r\n // if (target) target.like = like\r\n // target = state.searchResult.recentlyviewedProperty.list.find(x => x.PropertyID === PropertyID)\r\n // if (target) target.like = like\r\n\r\n // // var target = state.searchResult[listName].list.find(x => x.PropertyID === PropertyID)\r\n // // if(target)target.like = like\r\n\r\n\r\n // if (like && !state.searchResult.favoriteProperty.list.find(x => x.PropertyID === PropertyID)) {\r\n // state.searchResult.favoriteProperty.list.push(PropertyObj)\r\n // } else if (!like) {\r\n // state.searchResult.favoriteProperty.list = state.searchResult.favoriteProperty.list.filter(function (obj) {\r\n // return obj.PropertyID !== PropertyID;\r\n // });\r\n // }\r\n\r\n // state.searchResult.favoriteProperty.value = state.searchResult.favoriteProperty.list.map(x => x.PropertyID).join(',')\r\n },\r\n updateLikeInList: (state, action) => {\r\n const listName = action.payload.listName;\r\n const PropertyLikeList = action.payload.PropertyLikeList\r\n const targetList = state.searchResult[listName].list\r\n\r\n if (PropertyLikeList && targetList.length > 0) {\r\n const list = PropertyLikeList.split(',')\r\n Array.from(targetList, x => {\r\n if (list.includes(x.PropertyID)) {\r\n x.like = true\r\n } else {\r\n x.like = false\r\n }\r\n })\r\n }\r\n\r\n },\r\n updatesearchFilterCheckBox: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n\r\n state.searchFilter[field].value = value\r\n\r\n value.split(',').forEach((valueCode) => {\r\n let toUpdate = Object.keys(state.searchFilter[field]).find(x => state.searchFilter[field][x].code === valueCode)\r\n if (state.searchFilter[field][toUpdate]) {\r\n state.searchFilter[field][toUpdate].value = true\r\n }\r\n })\r\n\r\n Object.keys(state.searchFilter[field]).forEach((key) => {\r\n if (key !== \"fieldName\" && key !== \"value\" && state.searchFilter[field][key].code === value) {\r\n state.searchFilter[field][key].value = true\r\n }\r\n });\r\n },\r\n searchResultDataChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n\r\n state.searchResult[field].value = value;\r\n },\r\n OnPropertyListLoading: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n\r\n state.searchResult[field].isLoading = value;\r\n },\r\n searchResultPageIndexChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n\r\n state.searchResult[field].pageIndex = value;\r\n },\r\n updatePropertyDetail: (state, action) => {\r\n const value = action.payload.value;\r\n state.propertyDetail = value\r\n\r\n // Object.keys(value).forEach((key)=>{\r\n // if(state.propertyDetail[key]){\r\n // state.propertyDetail[key].value = value[key];\r\n // }\r\n // })\r\n },\r\n formsCalcDataChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n const maxValue = action.payload.maxValue;\r\n const minValue = action.payload.minValue;\r\n const errorMessage = action.payload.errorMessage;\r\n const visible = action.payload.visible;\r\n const note = action.payload.note;\r\n\r\n // if (state.calcDetail[field].maxLength) {\r\n // state.calcDetail[field].value = value.slice(0, state.calcDetail[field].maxLength);\r\n // } else {\r\n // state.calcDetail[field].value = value;\r\n // }\r\n\r\n if (value !== undefined) {\r\n state.calcDetail[field].value = value;\r\n }\r\n\r\n if (maxValue !== undefined) {\r\n state.calcDetail[field].maxValue = maxValue;\r\n }\r\n\r\n if (minValue !== undefined) {\r\n state.calcDetail[field].minValue = minValue;\r\n }\r\n\r\n if (errorMessage !== undefined) {\r\n state.calcDetail[field].errorMessage = errorMessage;\r\n }\r\n\r\n if (visible !== undefined) {\r\n state.calcDetail[field].visible = visible;\r\n }\r\n\r\n if (note !== undefined) {\r\n state.calcDetail[field].note = note;\r\n }\r\n },\r\n CalcValidateChange: (state, action) => {\r\n const field = action.payload.field;\r\n const errorMessage = action.payload.errorMessage;\r\n state.calcDetail[field].errorMessage = errorMessage;\r\n },\r\n formsCalcRangeInputChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n\r\n if (state.calcDetail[field].maxLength) {\r\n state.calcDetail[field].value = value.slice(0, state.calcDetail[field].maxLength);\r\n } else {\r\n state.calcDetail[field].value = value;\r\n }\r\n state.calcDetail[field].count += 1;\r\n },\r\n formsCalcPropsChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n\r\n state.calcDetail[field] = value;\r\n console.log(field, value)\r\n },\r\n formsDropleadDataChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n const errorMessage = action.payload.errorMessage;\r\n if (state.dropleadDetail[field].maxLength) {\r\n state.dropleadDetail[field].value = value.slice(0, state.dropleadDetail[field].maxLength);\r\n } else {\r\n state.dropleadDetail[field].value = value;\r\n }\r\n\r\n state.dropleadDetail[field].errorMessage = errorMessage;\r\n },\r\n DropleadValidateChange: (state, action) => {\r\n const field = action.payload.field;\r\n const errorMessage = action.payload.errorMessage;\r\n state.dropleadDetail[field].errorMessage = errorMessage;\r\n },\r\n DropleadListChange: (state, action) => {\r\n const field = action.payload.field;\r\n const value = action.payload.value;\r\n\r\n state.dropleadDetail[field].option = value;\r\n },\r\n },\r\n})\r\n\r\n// Action creators are generated for each case reducer function\r\nexport const { searchDataChange, searchListChange, searchIonRangeChange, searchIonRangeListChange, updateIonRange, CheckBoxChange, ClearSearch,\r\n updateSearchResultList, likePropertyList, updatesearchFilterCheckBox, searchResultDataChange, OnPropertyListLoading,\r\n updateLikeInList, searchResultPageIndexChange, updatePropertyDetail,\r\n formsCalcDataChange, CalcValidateChange, formsCalcRangeInputChange, formsCalcPropsChange,\r\n formsDropleadDataChange, DropleadValidateChange, DropleadListChange } = propertySlice.actions\r\n\r\nexport default propertySlice.reducer","import React, { useEffect } from \"react\";\r\nimport { COMPARE_STORE_CONTEXT } from \"./CompareStore\";\r\nimport classnames from \"classnames/bind\";\r\nimport { useObservableState } from \"./UseObservableState\";\r\n\r\nexport const CompareButton = (prop) => {\r\n const compareStore = React.useContext(COMPARE_STORE_CONTEXT);\r\n const isCompare = useObservableState(\r\n compareStore.isExistCompareProperty(prop)\r\n );\r\n\r\n function onAddCompareProperty() {\r\n compareStore.addCompareProperty(prop);\r\n }\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport const CompareButtonWithText = (prop) => {\r\n const compareStore = React.useContext(COMPARE_STORE_CONTEXT);\r\n const isCompare = useObservableState(\r\n compareStore.isExistCompareProperty(prop)\r\n );\r\n\r\n function onAddCompareProperty() {\r\n compareStore.addCompareProperty(prop);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n เปรียบเทียบ{isCompare && \"อยู่\"}\r\n
    \r\n \r\n );\r\n};\r\n","import React, { useState } from \"react\";\r\nimport { gotoSearchPage, areEqualObjValue } from \"./Common\";\r\nimport {\r\n SelectList,\r\n IonRange,\r\n RangeInput,\r\n CounterInput,\r\n CheckBoxIonInput,\r\n CheckBoxCustomInput,\r\n} from \"./Component\";\r\n\r\nimport Config from \"config\";\r\n\r\nconst priceFilter = Config.priceFilter;\r\nconst provinceFilter = Config.provinceFilter;\r\nconst propertyTypeFilter = Config.propertyTypeFilter;\r\n\r\n// axios.defaults.headers.common['Authorization'] = store.getState().Token;\r\n//process.env.API_ROOT_URL\r\n\r\nexport const DeskTopSearch = React.memo((props) => {\r\n const searchFilter = props;\r\n const searchDataChange = props.searchDataChange;\r\n const IonRangeDataChange = props.IonRangeDataChange;\r\n const RangeInputDataChange = props.RangeInputDataChange;\r\n const OnRadioCheck = props.OnRadioCheck;\r\n const GoToSearch = props.GoToSearch;\r\n const ClearSearch = props.ClearSearch;\r\n const OnInputChange = props.OnInputChange;\r\n const hideDesktop = props.hideDesktop;\r\n\r\n const renderAssetTypesCheckBox = (item, index) => {\r\n if (item[0] !== \"fieldName\" && item[0] !== \"value\") {\r\n const fieldName = item[0];\r\n const data = item[1];\r\n // console.log('item', fieldName, data,item[1]);\r\n // console.log(\"asset-type-m\" + index)\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n };\r\n\r\n // console.log(\"Desktop Search render\")\r\n\r\n return (\r\n
    \r\n
    \r\n

    ทรัพย์มือสองทำเลดี ทั่วไทย

    \r\n
    \r\n
    \r\n OnInputChange(\"keyword\", e.target.value)}\r\n onKeyPress={(e) => e.key === \"Enter\" && GoToSearch()}\r\n />\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n

    ค้นหาอย่างละเอียด

    \r\n
    \r\n
    \r\n
    \r\n {/*
    \r\n \r\n
    \r\n
    \r\n \r\n
    */}\r\n {Object.entries(searchFilter.assetTypes).map((item, index) =>\r\n renderAssetTypesCheckBox(item, index)\r\n )}\r\n
    \r\n

    ประเภททรัพย์

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

    ทำเลที่ตั้ง

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

    ช่วงราคา (บาท)

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

    เนื้อที่ (ตร.ว.)

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

    พื้นที่ใช้สอย (ตร.ม.)

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

    ห้องนอน

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

    ห้องน้ำ

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

    สถานีใกล้เคียง BTS/MRT

    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n}, areEqual);\r\n\r\nfunction areEqual(prevProps, nextProps) {\r\n return areEqualObjValue(prevProps, nextProps);\r\n}\r\n\r\nexport const MobileSearch = React.memo((props) => {\r\n const searchFilter = props;\r\n const searchDataChange = props.searchDataChange;\r\n const IonRangeDataChange = props.IonRangeDataChange;\r\n const RangeInputDataChange = props.RangeInputDataChange;\r\n const OnRadioCheck = props.OnRadioCheck;\r\n const GoToSearch = props.GoToSearch;\r\n const ClearSearch = props.ClearSearch;\r\n const OnInputChange = props.OnInputChange;\r\n\r\n const renderCheckBox = (item, index) => {\r\n if (item[0] !== \"fieldName\" && item[0] !== \"value\") {\r\n const fieldName = item[0];\r\n const data = item[1];\r\n // console.log('item', fieldName, data,item[1]);\r\n // console.log(\"property-type-m\" + index)\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n };\r\n\r\n const renderAssetTypesCheckBox = (item, index) => {\r\n if (item[0] !== \"fieldName\" && item[0] !== \"value\") {\r\n const fieldName = item[0];\r\n const data = item[1];\r\n // console.log('item', fieldName, data,item[1]);\r\n // console.log(\"asset-type-m\" + index)\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n };\r\n\r\n // console.log(\"mobileSearch render\")\r\n\r\n return (\r\n
    \r\n
    \r\n

    \r\n ค้นหาอย่างละเอียด\r\n

    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n OnInputChange(\"keyword\", e.target.value)}\r\n onKeyPress={(e) => e.key === \"Enter\" && GoToSearch()}\r\n />\r\n
    \r\n
    \r\n {Object.entries(searchFilter.assetTypes).map((item, index) =>\r\n renderAssetTypesCheckBox(item, index)\r\n )}\r\n
    \r\n
    \r\n

    ทำเลที่ตั้ง

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

    ประเภททรัพย์

    \r\n
    \r\n
    \r\n {Object.entries(searchFilter.propertyType).map((item, index) =>\r\n renderCheckBox(item, index)\r\n )}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    ช่วงราคา (บาท)

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

    เนื้อที่ (ตร.ว.)

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

    พื้นที่ใช้สอย (ตร.ม.)

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

    ห้องนอน

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

    ห้องน้ำ

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

    สถานีใกล้เคียง BTS/MRT

    \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n}, areEqual);\r\n\r\nexport const TabSearch = (props) => {\r\n const hideDesktop = props.hideDesktop;\r\n\r\n const priceTab = (priceFilter) => {\r\n priceFilter = priceFilter.map((x, index) => {\r\n const M = 1000000;\r\n const begin = x.start ? 0 : x.price * M;\r\n const end = x.start ? x.price * M : x.end ? 0 : x.price2 * M;\r\n const range = begin + (end === 0 ? \"\" : \",\" + end);\r\n\r\n return (\r\n \r\n );\r\n });\r\n\r\n return priceFilter;\r\n };\r\n\r\n const provinceTab = (provinceFilter) => {\r\n provinceFilter = provinceFilter.map((x, index) => {\r\n return (\r\n \r\n );\r\n });\r\n\r\n return provinceFilter;\r\n };\r\n\r\n const propertyTypeTab = (propertyTypeFilter) => {\r\n propertyTypeFilter = propertyTypeFilter.map((x, index) => {\r\n if (x.propertyTypeCode != \"19\") {\r\n return (\r\n \r\n );\r\n }\r\n });\r\n\r\n return propertyTypeFilter;\r\n };\r\n\r\n return (\r\n \r\n
    \r\n
      \r\n
    • \r\n \r\n \r\n ประเภททรัพย์\r\n \r\n
    • \r\n
    • \r\n \r\n \r\n พื้นที่ยอดนิยม\r\n \r\n
    • \r\n
    • \r\n \r\n \r\n ช่วงราคา\r\n \r\n
    • \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    {propertyTypeTab(propertyTypeFilter)}
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    {provinceTab(provinceFilter)}
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    {priceTab(priceFilter)}
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const PopUpSearch = React.memo((props) => {\r\n //Popup Addanve search\r\n const searchFilter = props;\r\n const OnInputChange = props.OnInputChange;\r\n const searchDataChange = props.searchDataChange;\r\n const IonRangeDataChange = props.IonRangeDataChange;\r\n const RangeInputDataChange = props.RangeInputDataChange;\r\n const OnRadioCheck = props.OnRadioCheck;\r\n const GoToSearch = props.GoToSearch;\r\n const ClearSearch = props.ClearSearch;\r\n\r\n const [rangeMin, setRangeMin] = useState(\"\");\r\n const [rangeMax, setRangeMax] = useState(\"\");\r\n const [areaMin, setAreaMin] = useState(\"\");\r\n const [areaMax, setAreaMax] = useState(\"\");\r\n const [useableAreaMin, setUseableAreaMin] = useState(\"\");\r\n const [useableAreaMax, setUseableAreaMax] = useState(\"\");\r\n\r\n// const [bedroom, setBedroom] = useState(\"\");\r\n// const [bathroom, setBathroom] = useState(\"\");\r\n\r\n const handleRadioChange = (type, value) => {\r\n if (type === \"bedroom\") {\r\n // setBedroom(value);\r\n OnInputChange(\"bedroom\", value)\r\n } else if (type === \"bathroom\") {\r\n // setBathroom(value);\r\n OnInputChange(\"bathroom\", value)\r\n }\r\n // Call any other function or logic you want here\r\n };\r\n\r\n const minMaxString = (min, max) => {\r\n console.log(min, max);\r\n if (!min && !max) {\r\n return \"\";\r\n } else if (!min) {\r\n return `0,${max}`;\r\n } else if (!max) {\r\n return min;\r\n } else {\r\n return `${min},${max}`;\r\n }\r\n };\r\n\r\n const onRangeChange = (field, value) => {\r\n if (field == \"min\") {\r\n setRangeMin(value);\r\n OnInputChange(\"rangeField\", minMaxString(value, rangeMax));\r\n } else {\r\n setRangeMax(value);\r\n OnInputChange(\"rangeField\", minMaxString(rangeMin, value));\r\n }\r\n };\r\n\r\n const onAreaChange = (field, value) => {\r\n if (field == \"min\") {\r\n setAreaMin(value);\r\n OnInputChange(\"areaField\", minMaxString(value, areaMax));\r\n } else {\r\n setAreaMax(value);\r\n OnInputChange(\"areaField\", minMaxString(areaMin, value));\r\n }\r\n };\r\n\r\n const onUseableAreaChange = (field, value) => {\r\n if (field == \"min\") {\r\n setUseableAreaMin(value);\r\n OnInputChange(\"useableAreaField\", minMaxString(value, useableAreaMax));\r\n } else {\r\n setUseableAreaMax(value);\r\n OnInputChange(\"useableAreaField\", minMaxString(useableAreaMin, value));\r\n }\r\n };\r\n\r\n const handleClearSearch = () => {\r\n setRangeMin(\"\");\r\n setRangeMax(\"\");\r\n setAreaMin(\"\");\r\n setAreaMax(\"\");\r\n setUseableAreaMin(\"\");\r\n setUseableAreaMax(\"\");\r\n ClearSearch();\r\n };\r\n\r\n const renderCheckBox = (item, index) => {\r\n if (item[0] !== \"fieldName\" && item[0] !== \"value\") {\r\n const fieldName = item[0];\r\n const data = item[1];\r\n // console.log('item', fieldName, data,item[1]);\r\n // console.log(\"property-type-m\" + index)\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n };\r\n\r\n const renderAssetTypesCheckBox = (item, index) => {\r\n if (item[0] !== \"fieldName\" && item[0] !== \"value\") {\r\n const fieldName = item[0];\r\n const data = item[1];\r\n // console.log('item', fieldName, data,item[1]);\r\n // console.log(\"asset-type-m\" + index)\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n

    ค้นหาอย่างละเอียด

    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n OnInputChange(\"keyword\", e.target.value)}\r\n onKeyPress={(e) => e.key === \"Enter\" && GoToSearch()}\r\n />\r\n \r\n
    \r\n
    \r\n {Object.entries(searchFilter.assetTypes).map((item, index) =>\r\n renderAssetTypesCheckBox(item, index)\r\n )}\r\n
    \r\n
    \r\n

    ทำเลที่ตั้ง

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

    ประเภททรัพย์

    \r\n
    \r\n
    \r\n {Object.entries(searchFilter.propertyType).map((item, index) =>\r\n renderCheckBox(item, index)\r\n )}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    ช่วงราคา

    \r\n
    \r\n onRangeChange(\"min\", e.target.value)}\r\n />\r\n -\r\n onRangeChange(\"max\", e.target.value)}\r\n />\r\n
    \r\n
    \r\n
    \r\n

    เนื้อที่

    \r\n
    \r\n onAreaChange(\"min\", e.target.value)}\r\n />\r\n -\r\n onAreaChange(\"max\", e.target.value)}\r\n />\r\n
    \r\n
    \r\n
    \r\n

    พื้นที่ใช้สอย

    \r\n
    \r\n onUseableAreaChange(\"min\", e.target.value)}\r\n />\r\n -\r\n onUseableAreaChange(\"max\", e.target.value)}\r\n />\r\n
    \r\n
    \r\n
    \r\n

    ห้องนอน

    \r\n
    \r\n
    \r\n handleRadioChange(\"bedroom\", \"1\")}\r\n checked={searchFilter.bedroom.value === \"1\"}\r\n />\r\n \r\n
    \r\n
    \r\n handleRadioChange(\"bedroom\", \"2\")}\r\n checked={searchFilter.bedroom.value === \"2\"}\r\n />\r\n \r\n
    \r\n
    \r\n handleRadioChange(\"bedroom\", \"3\")}\r\n checked={searchFilter.bedroom.value === \"3\"}\r\n />\r\n \r\n
    \r\n
    \r\n handleRadioChange(\"bedroom\", \"4\")}\r\n checked={searchFilter.bedroom.value === \"4\"}\r\n />\r\n \r\n
    \r\n
    \r\n handleRadioChange(\"bedroom\", \"5\")}\r\n checked={searchFilter.bedroom.value === \"5\"}\r\n />\r\n \r\n
    \r\n
    \r\n handleRadioChange(\"bedroom\", \"\")}\r\n checked={searchFilter.bedroom.value === \"\"}\r\n />\r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n

    ห้องน้ำ

    \r\n
    \r\n
    \r\n handleRadioChange(\"bathroom\", \"1\")}\r\n checked={searchFilter.bathroom.value === \"1\"}\r\n />\r\n \r\n
    \r\n
    \r\n handleRadioChange(\"bathroom\", \"2\")}\r\n checked={searchFilter.bathroom.value === \"2\"}\r\n />\r\n \r\n
    \r\n
    \r\n handleRadioChange(\"bathroom\", \"3\")}\r\n checked={searchFilter.bathroom.value === \"3\"}\r\n />\r\n \r\n
    \r\n
    \r\n handleRadioChange(\"bathroom\", \"4\")}\r\n checked={searchFilter.bathroom.value === \"4\"}\r\n />\r\n \r\n
    \r\n
    \r\n handleRadioChange(\"bathroom\", \"5\")}\r\n checked={searchFilter.bathroom.value === \"5\"}\r\n />\r\n \r\n
    \r\n
    \r\n handleRadioChange(\"bathroom\", \"\")}\r\n checked={searchFilter.bathroom.value === \"\"}\r\n />\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n}, areEqual);\r\n","import React, { useEffect } from \"react\";\r\nimport Config from \"config\";\r\n\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\n\r\nimport { DeskTopSearch, MobileSearch, TabSearch, PopUpSearch } from \"./SearchHeader\";\r\nimport {\r\n searchDataChange,\r\n searchIonRangeChange,\r\n searchListChange,\r\n updateIonRange,\r\n CheckBoxChange,\r\n ClearSearch,\r\n} from \"../stores/propertySlice\";\r\nimport {\r\n gotoSearchPage,\r\n getApiDataAsync,\r\n areEqualObjValue,\r\n valueRangeMaxMin,\r\n commonSearchDataChange,\r\n} from \"./Common\";\r\nimport province from \"province\";\r\n\r\nconst pagesLink = Config.pagesLink;\r\nconst $ = window.$;\r\n\r\nexport const HeaderNav = (props) => {\r\n const Body = (props) => {\r\n let searchBtn;\r\n if (false && props.searchBtn) {\r\n searchBtn = (\r\n
    \r\n {/* \r\n */}\r\n\r\n \r\n \r\n \r\n
    \r\n );\r\n useEffect(() => {\r\n $(\".open-search\").on(\"click\", function () {\r\n $(\".close-search\").removeClass(\"d-none\");\r\n $(\".open-search\").addClass(\"d-none\");\r\n $(\"#search-wrapper\").removeClass(\"d-none\");\r\n $(\"#property-tab-search\").removeClass(\"d-none\");\r\n // var galleryContainerPos = document.querySelector(\".gallery-container\").getBoundingClientRect().bottom;\r\n // if (galleryContainerPos <= 0) {\r\n // $(\"#header-placeholder\").height($(\"#header\").height());\r\n // }\r\n $(\"#header\").addClass(\"fixed\");\r\n // $(\"#icw\").append(\r\n // '
    '\r\n // );\r\n $(\"body\").css({\r\n height: \"100%\",\r\n overflow: \"hidden\",\r\n position: \"relative\",\r\n touchAction: \"none\",\r\n \"-ms-touch-action\": \"none\",\r\n });\r\n });\r\n\r\n $(\".close-search\").on(\"click\", function () {\r\n var scrollPos = $(window).scrollTop();\r\n $(\".close-search\").addClass(\"d-none\");\r\n $(\".open-search\").removeClass(\"d-none\");\r\n $(\"#search-wrapper\").addClass(\"d-none\");\r\n $(\"#property-tab-search\").addClass(\"d-none\");\r\n\r\n if (scrollPos <= 0) {\r\n $(\"#header\").removeClass(\"fixed\");\r\n }\r\n $(\"#more-filter-desktop\").height(0);\r\n $(\"#header-placeholder\").height(0);\r\n $(\".more-filter-btn.close\").css({ display: \"\" });\r\n $(\".more-filter-btn.desktop\").css({ display: \"\" });\r\n $(\"#backdrop\").remove();\r\n $(\"body\").css({\r\n height: \"auto\",\r\n overflow: \"auto\",\r\n position: \"initial\",\r\n touchAction: \"auto\",\r\n \"-ms-touch-action\": \"auto\",\r\n });\r\n $(\"#icw #header\").css({\r\n height: \"\",\r\n overflow: \"\",\r\n });\r\n });\r\n }, []);\r\n } else {\r\n searchBtn = (\r\n
    \r\n \r\n \"Search\"/\r\n \r\n {/* \r\n */}\r\n \r\n
    \r\n );\r\n // useEffect(() => {\r\n // $(\".open-search\").on(\"click\", function () {\r\n // $(\".search-section\").removeClass(\"d-none\");\r\n\r\n // // $(\"#header-placeholder\").height($(\"#header\").height());\r\n // $(\"#inner-header-placeholder\").height(0);\r\n // $(\"#inner-header\").removeClass(\"fixed\");\r\n // $(\"#header\").addClass(\"fixed\");\r\n // $(\".open-search\").addClass(\"d-none\");\r\n // $(\".close-search\").removeClass(\"d-none\");\r\n\r\n // // $(\"#icw\").append(\r\n // // '
    '\r\n // // );\r\n // $(\"body\").css({\r\n // height: \"100%\",\r\n // overflow: \"hidden\",\r\n // position: \"relative\",\r\n // touchAction: \"none\",\r\n // \"-ms-touch-action\": \"none\",\r\n // });\r\n // });\r\n\r\n // $(\".close-search\").on(\"click\", function () {\r\n // $(\".search-section\").addClass(\"d-none\")\r\n\r\n // $(\"#inner-header-placeholder\").height($(\"#inner-header\").height());\r\n // // $(\"#header-placeholder\").height(0);\r\n // $(\"#inner-header\").addClass(\"fixed\");\r\n // $(\"#header\").removeClass(\"fixed\");\r\n // $(\".open-search\").removeClass(\"d-none\");\r\n // $(\".close-search\").addClass(\"d-none\");\r\n\r\n // $(\"#backdrop\").remove();\r\n // $(\"body\").css({\r\n // height: \"auto\",\r\n // overflow: \"auto\",\r\n // position: \"initial\",\r\n // touchAction: \"auto\",\r\n // \"-ms-touch-action\": \"auto\",\r\n // });\r\n\r\n // // Close more filter on desktop\r\n // if (window.innerWidth >= 1025) {\r\n // $(\"#icw #header\").css({\r\n // backgroundImage: \"\",\r\n // // padding: 0,\r\n // height: \"\",\r\n // overflow: \"hidden\",\r\n // });\r\n\r\n // $(\"#more-filter-desktop\").animate({ height: 0 });\r\n // $(\".more-filter-btn.close\").css({ display: \"\" });\r\n // $(\".more-filter-btn.desktop\").css({ display: \"\" });\r\n // }\r\n // });\r\n // }, []);\r\n }\r\n\r\n useEffect(() => {\r\n $('link[href*=\"/_catalogs/masterpage/KWeb2016/assets/css/style-en.css\"]').attr('disabled', 'disabled');\r\n }, []);\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
      \r\n
    • \r\n \r\n สินเชื่อเพื่อที่อยู่อาศัย\r\n \r\n \r\n
    • \r\n
    • \r\n \r\n สินเชื่อเพื่อลงทุนในสินทรัพย์ถาวร\r\n \r\n \r\n
    • \r\n
    \r\n \r\n {/*
  • \r\n สินเชื่อบ้านมือสอง\r\n
  • */}\r\n
  • \r\n คำถามที่พบบ่อย\r\n
  • \r\n \r\n \r\n {searchBtn}\r\n \r\n );\r\n };\r\n\r\n useEffect(() => {\r\n //hamburger menu\r\n document.querySelectorAll(\"#inner-header .logo-wrap a\").forEach(function (item) {\r\n item.addEventListener(\"click\", function (e) {\r\n dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"header\",\r\n event_action: \"click\",\r\n event_label: e.target.alt,\r\n });\r\n });\r\n });\r\n\r\n //header menu\r\n document.querySelectorAll(\"#inner-header .header-center a\").forEach(function (item) {\r\n item.addEventListener(\"click\", function (e) {\r\n dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"header\",\r\n event_action: \"click\",\r\n event_label: e.target.innerText,\r\n });\r\n });\r\n });\r\n });\r\n\r\n if (props.wrap) {\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport const MobileNav = () => {\r\n useEffect(() => {\r\n //ทราบจำนวนคลิกในส่วน header\r\n document.querySelectorAll(\"#mobile-menu > div.offcanvas-body > ul\").forEach(function (item) {\r\n item.addEventListener(\"click\", function (e) {\r\n window.dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"header\",\r\n event_action: \"click\",\r\n event_label: e.target.innerText,\r\n });\r\n });\r\n });\r\n }, []);\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
      \r\n
    • \r\n \r\n สินเชื่อเพื่อที่อยู่อาศัย\r\n \r\n
    • \r\n
    • \r\n \r\n สินเชื่อเพื่อลงทุนในสินทรัพย์ถาวร\r\n \r\n
    • \r\n
    \r\n \r\n {/*
  • \r\n สินเชื่อบ้านมือสอง\r\n
  • */}\r\n
  • \r\n คำถามที่พบบ่อย\r\n
  • \r\n
  • \r\n \r\n {\" \"}\r\n หน้าหลัก{\" \"}\r\n \r\n
  • \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport const HeaderWithSearch = (props) => {\r\n const [searchFilter] = useSelector((state) => [state.property.searchFilter]);\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n );\r\n};\r\n\r\nconst Header = React.memo((props) => {\r\n const searchFilter = props;\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n getApiDataAsync({\r\n urlPath: \"/RequestStations\",\r\n })\r\n .then((data) => {\r\n var list = Array.from(data, (x) => {\r\n return {\r\n text: x.StationNameTH,\r\n value: x.StationID,\r\n title: x.PlaceType,\r\n location: { Latitude: x.Latitude, Longitude: x.Longitude },\r\n };\r\n });\r\n\r\n list = [...list].sort(function (a, b) {\r\n return a.text.localeCompare(b.text);\r\n });\r\n\r\n dispatch(searchListChange({ field: \"station\", value: list }));\r\n })\r\n .catch(function (error) {\r\n console.log(error);\r\n // alertErrorAsync(error);\r\n })\r\n .then(() => {\r\n dispatch(searchListChange({ field: \"province\", value: province }));\r\n });\r\n\r\n //Tagging\r\n PDT_Header();\r\n }, []);\r\n\r\n function OnSearchDataChange(payload) {\r\n commonSearchDataChange(dispatch, payload, searchFilter, searchDataChange, OnsearchListChange);\r\n // const field = payload.field;\r\n // if (field === \"province\") {\r\n // const list = searchFilter[field].option.find(x => x.value == payload.value)\r\n\r\n // OnsearchListChange({ field: \"district\", value: list.child })\r\n // OnsearchListChange({ field: \"subDistrict\", value: [] })\r\n // } else if (field === \"district\") {\r\n // const list = searchFilter[field].option.find(x => x.value == payload.value)\r\n\r\n // OnsearchListChange({ field: \"subDistrict\", value: list.child })\r\n // }\r\n // dispatch(searchDataChange(payload))\r\n }\r\n\r\n function OnsearchListChange(payload) {\r\n dispatch(searchListChange(payload));\r\n }\r\n\r\n function OnInputChange(fieldName, value) {\r\n // const value = e.target.value\r\n dispatch(searchDataChange({ field: fieldName, value: value }));\r\n }\r\n\r\n function OnIonRangeDataChange(fieldName, from, to) {\r\n const payload = valueRangeMaxMin(fieldName, from, to);\r\n console.log(fieldName, payload.value);\r\n dispatch(searchIonRangeChange(payload));\r\n }\r\n\r\n function OnRangeInputDataChange(fieldName, from, to) {\r\n const payload = valueRangeMaxMin(fieldName, from, to);\r\n console.log(fieldName, payload.value);\r\n dispatch(searchIonRangeChange(payload));\r\n dispatch(updateIonRange({ fieldName }));\r\n }\r\n\r\n function OnRadioCheck(fieldName, value, group) {\r\n console.log(fieldName, value, group);\r\n dispatch(CheckBoxChange({ fieldName, value, group }));\r\n }\r\n\r\n function GoToSearch() {\r\n console.log(\"search\", isExpand());\r\n\r\n var url = \"\";\r\n window.dataLayer = window.dataLayer || [];\r\n\r\n if (isExpand()) {\r\n url = gotoSearchPage(searchFilter);\r\n var search_text = searchFilter.keyword.value;\r\n\r\n var search_location = [\r\n searchFilter.province.value,\r\n searchFilter.district.value,\r\n searchFilter.subDistrict.value,\r\n ]\r\n .filter((x) => x)\r\n .join(\",\");\r\n\r\n var search_filter_1 = [\r\n searchFilter.propertyType.value,\r\n searchFilter.rangePrice.value,\r\n searchFilter.areaRange.value,\r\n searchFilter.useableAreaRange.value,\r\n searchFilter.bedroom.value,\r\n searchFilter.bathroom.value,\r\n searchFilter.station.value,\r\n ]\r\n .filter((x) => x)\r\n .join(\",\");\r\n\r\n var search_filter_2 = searchFilter.assetTypes.value;\r\n window.dataLayer.push({\r\n event: \"submitSearch\",\r\n eventCategory: \"search\",\r\n eventAction: \"submit_filters_NPA\",\r\n eventLabel: `ค้นหาทรัพย์มือสองทำเลดีทั่วไทย`, //`ค้นหาทรัพย์มือสองทำเลดีทั่วไทย_${url}`, //หน้าที่ค้นหา\r\n dimension49: `${search_text}`, //คำค้นหา\r\n dimension7: `${search_location}`, //จังหวัด,อำเภอ,ตำบล\r\n dimension50: `${search_filter_1}`, //ประเภททรัพย์,ช่วงราคา,เนื้อที่,พื้นที่ใช้สอย,ห้องนอน,ห้องน้ำ,สถานีใกล้เคียง\r\n dimension51: `${search_filter_2}`, //ทรัพย์โปรโมชั่น,ทรัพย์ฝากขาย\r\n });\r\n } else {\r\n url = gotoSearchPage({ keyword: searchFilter.keyword.value });\r\n window.dataLayer.push({\r\n event: \"submitSearch\",\r\n eventCategory: \"search\",\r\n eventAction: \"submit_filters_NPA\",\r\n eventLabel: `ค้นหาทรัพย์มือสองทำเลดีทั่วไทย`, //`ค้นหาทรัพย์มือสองทำเลดีทั่วไทย_${url}`, //หน้าที่ค้นหา\r\n dimension49: `${searchFilter.keyword.value}`, //คำค้นหา\r\n dimension7: \"\", //จังหวัด,อำเภอ,ตำบล\r\n dimension50: \"\", //ประเภททรัพย์,ช่วงราคา,เนื้อที่,พื้นที่ใช้สอย,ห้องนอน,ห้องน้ำ,สถานีใกล้เคียง\r\n dimension51: \"\", //ทรัพย์โปรโมชั่น,ทรัพย์ฝากขาย\r\n });\r\n }\r\n\r\n console.log(url);\r\n window.open(url, \"_self\");\r\n }\r\n\r\n function OnClearSearch() {\r\n console.log(\"Clear Filter\");\r\n window.dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"NPA-MAIN-2022\",\r\n event_action: \"event_click\",\r\n event_label: \"ล้างการค้นหา\",\r\n });\r\n dispatch(ClearSearch());\r\n }\r\n\r\n function isExpand() {\r\n return (\r\n $(\"#more-filter-desktop\").css(\"height\") != \"0px\" || $(\"#more-filter-mobile\").hasClass(\"show\")\r\n );\r\n }\r\n\r\n console.log(\"Header Render\");\r\n\r\n return (\r\n <>\r\n
    \r\n
    \r\n \r\n
    \r\n {/* < DeskTopSearch hideDesktop={props.hideDesktop} {...searchFilter} searchDataChange={OnSearchDataChange} IonRangeDataChange={OnIonRangeDataChange} RangeInputDataChange={OnRangeInputDataChange} OnRadioCheck={OnRadioCheck} GoToSearch={GoToSearch} ClearSearch={OnClearSearch} OnInputChange={OnInputChange} /> */}\r\n
    \r\n {/* */}\r\n
    \r\n \r\n \r\n {/* */}\r\n \r\n );\r\n}, areEqualObjValue);\r\n\r\nfunction PDT_Header() {\r\n window.dataLayer = window.dataLayer || [];\r\n //advance search filter\r\n document\r\n .querySelectorAll(\".more-filter-btn.mobile,.more-filter-btn.desktop\")\r\n .forEach(function (item) {\r\n item.addEventListener(\"click\", function (e) {\r\n window.dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"search_filter\",\r\n event_action: \"event_click\",\r\n event_label: \"เลือกวิธีการค้นหาขั้นสูง\",\r\n });\r\n });\r\n });\r\n\r\n //clear advanced filter\r\n document\r\n .querySelectorAll(\"#more-filter-desktop > div > div.row.mt-3 > div > div > button.clear-data\")\r\n .forEach(function (item) {\r\n item.addEventListener(\"click\", function (e) {\r\n window.dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"NPAhome2022\",\r\n event_action: \"event_click\",\r\n event_label: \"ล้างการค้นหา\",\r\n });\r\n });\r\n });\r\n\r\n //correct filter tab content ถ้าไม่หน่วงเวลา ช่วงราคาจะไม่ขึ้น\r\n document.querySelectorAll(\"#property-tab-search .property-nav-wrap a\").forEach(function (item) {\r\n item.addEventListener(\"click\", function (e) {\r\n setTimeout(\r\n window.dataLayer.push({\r\n event: \"track_event\",\r\n event_category: \"Tab_content\",\r\n event_action: \"click\",\r\n event_label: e.target.innerText,\r\n }),\r\n 3000\r\n );\r\n });\r\n });\r\n\r\n //correct property filter selected\r\n document\r\n .querySelectorAll(\r\n \"#assets-type-tabs .swiper-slide a,#assets-type-tabs2 .swiper-slide a,#assets-type-tabs3 .swiper-slide a\"\r\n )\r\n .forEach(function (item) {\r\n item.addEventListener(\"click\", function (e) {\r\n window.dataLayer.push({\r\n event: \"track_event\",\r\n event_category: document.querySelector(\"#property-tab-search .nav-item .nav-link.active\")\r\n .innerText,\r\n event_action: \"click\",\r\n event_label: e.target.innerText.replace(/\\s/g, \"\"),\r\n });\r\n });\r\n });\r\n}\r\n","import Config from \"config\";\r\nimport React from \"react\";\r\nimport { addCommas, getPropertyType } from \"../common/Common\";\r\nimport { COMPARE_STORE_CONTEXT } from \"./CompareStore\";\r\nimport \"./Comparision.css\";\r\nimport { useObservableState } from \"./UseObservableState\";\r\nconst { map } = rxjs.operators;\r\n\r\nconst pagesLink = Config.pagesLink;\r\nconst mediaURLPrefix = Config.mediaURLPrefix;\r\nconst defaultThumbnailURL = Config.defaultThumbnailURL;\r\n\r\nfunction getPropertyName(property) {\r\n if (Object.keys(property).length === 0) return \"\";\r\n\r\n let propertyName = \"\";\r\n\r\n if (property.VillageTH && property.VillageTH !== \"-\") {\r\n propertyName = property.VillageTH;\r\n if (propertyName.length > 46) {\r\n propertyName = propertyName.slice(0, 50) + \"...\";\r\n }\r\n } else {\r\n propertyName = `${getPropertyType(property)} ${property.ProvinceName}`;\r\n }\r\n\r\n return propertyName;\r\n}\r\n\r\nfunction getPropertyImage(property) {\r\n const propertyMediaes = property?.PropertyMediaes?.[0];\r\n return `${mediaURLPrefix}${propertyMediaes?.MediaPath}`;\r\n}\r\n\r\nexport const Comparision = () => {\r\n const compareStore = React.useContext(COMPARE_STORE_CONTEXT);\r\n const comparePropertyLength = useObservableState(\r\n compareStore.comparePropertyLength$\r\n );\r\n\r\n function onRemoveAllCompareProperty() {\r\n compareStore.removeAllCompareProperty();\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n

    เปรียบเทียบทรัพย์

    \r\n \r\n ({comparePropertyLength}/5)\r\n \r\n
    \r\n \r\n กรุณาเลือกอย่างน้อย 2 รายการ เพื่อทำการเปรียบเทียบ\r\n \r\n
    \r\n
    \r\n \r\n \r\n เปรียบเทียบ\r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n เปรียบเทียบ\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nconst AllCardCompare = () => {\r\n const compareStore = React.useContext(COMPARE_STORE_CONTEXT);\r\n const comparePropertyList = useObservableState(\r\n compareStore.getComparePropertyList\r\n );\r\n\r\n return (\r\n
    \r\n
    \r\n {comparePropertyList?.map((item) => (\r\n \r\n ))}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nconst GenerateCard = (prop) => {\r\n const compareStore = React.useContext(COMPARE_STORE_CONTEXT);\r\n\r\n const propertyName = getPropertyName(prop);\r\n const propertyImage = getPropertyImage(prop);\r\n\r\n function onRemoveCompareProperty() {\r\n compareStore.removeCompareProperty(prop);\r\n }\r\n\r\n return Object.keys(prop).length === 0 ? (\r\n \r\n
    \r\n \r\n
    \r\n
    เพิ่มทรัพย์
    \r\n
    \r\n ) : (\r\n
    \r\n
    \r\n {\r\n currentTarget.onerror = null; // prevents looping\r\n currentTarget.src = defaultThumbnailURL;\r\n }}\r\n alt={propertyName}\r\n />\r\n
    \r\n
    \r\n
    \r\n
    \r\n {\r\n currentTarget.onerror = null; // prevents looping\r\n currentTarget.src = defaultThumbnailURL;\r\n }}\r\n alt={propertyName}\r\n />\r\n
    \r\n
    \r\n
    {propertyName}
    \r\n
    \r\n \r\n

    {`${prop.AmphurName} ${prop.ProvinceName}`}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n {addCommas(\r\n prop.PromotionPrice ? prop.PromotionPrice : prop.SellPrice\r\n )}\r\n \r\n บาท\r\n
    \r\n {prop.PromotionPrice && (\r\n
    {addCommas(prop.SellPrice)}
    \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n","import classNames from \"classnames/bind\";\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { COMPARE_STORE_CONTEXT } from \"./CompareStore\";\r\nimport { Comparision } from \"./Comparision\";\r\nimport { useObservableState } from \"./UseObservableState\";\r\nimport \"./FloatingCompareButton.css\";\r\n\r\nexport const FloatingCompareButton = () => {\r\n const compareStore = React.useContext(COMPARE_STORE_CONTEXT);\r\n const comparePropertyLength = useObservableState(\r\n compareStore.comparePropertyLength$\r\n );\r\n\r\n window.setCompareProperty = setCompareGlobal;\r\n\r\n function setCompareGlobal(prop) {\r\n compareStore.addCompareProperty(prop)\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
    \r\n

    {comparePropertyLength}

    \r\n \r\n
    \r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// ReactDOM.render(\r\n// ,\r\n// document.getElementById(\"react-app-floating-compare-button\")\r\n// );\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { getCookie } from \"../common/Common\";\r\nimport Config from \"config\";\r\nimport { FloatingCompareButton } from \"../Compare/FloatingCompareButton\";\r\nimport { setLikeProperty } from \"../common/Common\";\r\n\r\nconst pagesLink = Config.pagesLink;\r\n\r\nconst $ = window.$;\r\n\r\nexport const LoginFooter = (props) => {\r\n const [likeCount, setLikeCount] = useState(0);\r\n\r\n if (props.favoritePropertyValue === undefined) {\r\n useEffect(() => {\r\n setInterval(() => {\r\n var count = getCookie(\"favoriteProperty\")\r\n .split(\",\")\r\n .filter((x) => x).length;\r\n if (count != likeCount) {\r\n setLikeCount(count);\r\n }\r\n }, 1000);\r\n }, []);\r\n }\r\n\r\n function favClick() {\r\n if (props.favClick) {\r\n props.favClick();\r\n } else {\r\n goToUrl(\"/th/propertyforsale/pages/favorite.aspx\");\r\n // goToUrl(pagesLink.search + \"?Tab=favoriteProperty\");\r\n }\r\n }\r\n\r\n function loginClick() {\r\n goToUrl(pagesLink.login);\r\n }\r\n\r\n function recentlyClick() {\r\n if (props.recentlyClick) {\r\n props.recentlyClick();\r\n } else {\r\n goToUrl(pagesLink.search + \"?Tab=recentlyviewedProperty\");\r\n }\r\n }\r\n\r\n function goToUrl(url) {\r\n window.open(url, \"_self\");\r\n }\r\n\r\n window.setLikeProperty = tempFunction;\r\n\r\n function tempFunction(a, b) {\r\n setLikeProperty(a, b);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {props.favoritePropertyValue !== undefined ? (\r\n
    \r\n
    \r\n {/*
    \r\n \r\n {props.favoritePropertyValue.split(\",\").filter((x) => x).length !== 0 && (\r\n \r\n {props.favoritePropertyValue.split(\",\").filter((x) => x).length}\r\n \r\n )}\r\n ทรัพย์ถูกใจ\r\n {props.favoritePropertyValue.split(\",\").filter((x) => x).length !== 0 && (\r\n \r\n {props.favoritePropertyValue.split(\",\").filter((x) => x).length}\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n ตั้งค่าทรัพย์ตรงใจ\r\n
    \r\n
    \r\n \r\n ดูล่าสุด\r\n
    */}\r\n \r\n
    \r\n \r\n หน้าหลัก\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n {props.favoritePropertyValue.split(\",\").filter((x) => x).length !== 0 && (\r\n \r\n {props.favoritePropertyValue.split(\",\").filter((x) => x).length}\r\n \r\n )}\r\n ทรัพย์ถูกใจ\r\n {props.favoritePropertyValue.split(\",\").filter((x) => x).length !== 0 && (\r\n \r\n {props.favoritePropertyValue.split(\",\").filter((x) => x).length}\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n โปรโมชัน\r\n
    \r\n
    \r\n
    \r\n
    \r\n ) : (\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n หน้าหลัก\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n {likeCount !== 0 && {likeCount}}\r\n ทรัพย์ถูกใจ\r\n {likeCount !== 0 && {likeCount}}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n โปรโมชัน\r\n
    \r\n
    \r\n {/*
    \r\n \r\n ตั้งค่าทรัพย์ตรงใจ\r\n
    \r\n
    \r\n \r\n {likeCount !== 0 && {likeCount}}\r\n ทรัพย์ถูกใจ\r\n {likeCount !== 0 && {likeCount}}\r\n
    \r\n
    \r\n \r\n ดูล่าสุด\r\n
    */}\r\n
    \r\n
    \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst InfoFooter = () => {\r\n const PropertyforsaleLinkComponent = () => {\r\n return (\r\n \r\n บ้านมือสอง\r\n \r\n );\r\n };\r\n\r\n const HouseLinkComponent = () => {\r\n return (\r\n \r\n บ้านเดี่ยว\r\n \r\n );\r\n };\r\n const TownhouseLinkComponent = () => {\r\n return (\r\n \r\n ทาวน์เฮ้าส์\r\n \r\n );\r\n };\r\n const CondominiumLinkComponent = () => {\r\n return (\r\n \r\n คอนโดมิเนียม\r\n \r\n );\r\n };\r\n const CommercialBuildingLinkComponent = () => {\r\n return (\r\n \r\n อาคารพาณิชย์\r\n \r\n );\r\n };\r\n const LandLinkComponent = () => {\r\n return (\r\n \r\n ที่ดิน\r\n \r\n );\r\n };\r\n\r\n const AllLinkComponent = (props) => {\r\n return (\r\n <>\r\n {props.showHomePage && } {\" \"}\r\n {\" \"}\r\n และ {\" \"}\r\n \r\n );\r\n };\r\n if (window.location.pathname.indexOf(\"/th/propertyforsale/search\") != -1) {\r\n return (\r\n
    \r\n
    \r\n

    ค้นหาทรัพย์ขายทอดตลาด บ้านหลุดจำนองราคาพิเศษ

    \r\n

    \r\n ค้นหาทรัพย์ที่ถูกใจได้ง่ายๆ ทรัพย์รอการขายกสิกรไทยที่คัดสรรทรัพย์ขายทอดตลาดจากทั่วประเทศ\r\n คัด คุ้ม ครบ เช่น \r\n เพื่อตอบโจทย์ทุกความต้องการของคุณ\r\n

    \r\n
    \r\n
    \r\n );\r\n } else if (window.location.pathname.indexOf(\"/th/propertyforsale/promotion\") != -1) {\r\n return (\r\n
    \r\n
    \r\n

    โปรโมชันทรัพย์สินรอการขาย ธนาคารกสิกรไทย

    \r\n

    \r\n เลือกหาทรัพย์ที่ถูกใจ ในราคาพิเศษแบบ คัด คุ้ม ครบ กับโปรโมชันทรัพย์สินรอการขายจาก\r\n ธนาคารกสิกรไทย เช่น \r\n เพื่อตอบโจทย์ทุกความต้องการของคุณ\r\n

    \r\n
    \r\n
    \r\n );\r\n }\r\n return (\r\n
    \r\n {/*
    */}\r\n

    ทรัพย์สินรอการขาย ทรัพย์ธนาคารกสิกรไทย

    \r\n

    \r\n รวมทรัพย์รอการขายยอดนิยม ทรัพย์ธนาคารราคาพิเศษ เช่น \r\n จากทั่วประเทศ คัดสรรบ้านมือสองตอบโจทย์ทุกความต้องการ ไม่ว่าจะเพื่ออยู่อาศัยหรือการลงทุน\r\n

    \r\n {/*
    */}\r\n
    \r\n );\r\n};\r\n","var api = require(\"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../node_modules/css-loader/dist/cjs.js!./Comparision.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".wrap-detail-card {\\r\\n overflow: hidden !important;\\r\\n}\\r\\n\\r\\n.wrap-title {\\r\\n white-space: nowrap !important;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://src/Compare/Comparision.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,2BAA2B;AAC7B;;AAEA;EACE,8BAA8B;AAChC\",\"sourcesContent\":[\".wrap-detail-card {\\r\\n overflow: hidden !important;\\r\\n}\\r\\n\\r\\n.wrap-title {\\r\\n white-space: nowrap !important;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var api = require(\"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../node_modules/css-loader/dist/cjs.js!./FloatingCompareButton.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","// Imports\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(true);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#comparision .container .wrap-img img {\\r\\n height: 100%;\\r\\n width: 100%;\\r\\n\\r\\n object-fit: cover;\\r\\n}\\r\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://src/Compare/FloatingCompareButton.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,YAAY;EACZ,WAAW;;EAEX,iBAAiB;AACnB\",\"sourcesContent\":[\"#comparision .container .wrap-img img {\\r\\n height: 100%;\\r\\n width: 100%;\\r\\n\\r\\n object-fit: cover;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = configs;","import React from \"react\";\r\nimport { addSearchUrlParameter } from \"../common/Common\";\r\nimport classnames from \"classnames/bind\";\r\nimport Config from \"config\";\r\nimport { useEffect } from \"react\";\r\nimport { CompareButton } from \"../Compare/Common\";\r\nimport { prepareDataForProopertyBox } from \"../common/PropertyBox\";\r\n\r\nconst defaultThumbnailURL = Config.defaultThumbnailURL;\r\n\r\nconst PropertyBox = (\r\n property,\r\n OnLikeCheck,\r\n listName,\r\n showLike,\r\n searchProperty,\r\n hasMore\r\n) => {\r\n function onClickProperty(e) {\r\n e.preventDefault();\r\n\r\n addSearchUrlParameter(\r\n {\r\n PropertyID: property.PropertyID,\r\n CurrentPageIndex: hasMore.CurrentPageIndex,\r\n Ordering: hasMore.Ordering,\r\n Tab: listName,\r\n },\r\n searchProperty\r\n );\r\n\r\n window.location.href = propertyDetailURL;\r\n }\r\n\r\n var {\r\n propertyDetailURL,\r\n thumbnailURL,\r\n location,\r\n propertyName,\r\n tag,\r\n PromotionPrice,\r\n Price,\r\n areaHtml,\r\n bedRoomHtml,\r\n propertyTypeHtml,\r\n PropertyIDFormat,\r\n IsPartner,\r\n } = prepareDataForProopertyBox(property, { isBedPTag: true, atBath: false });\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {IsPartner && (\r\n
    \r\n \"Logo\r\n
    \r\n )}\r\n {\r\n currentTarget.onerror = null; // prevents looping\r\n currentTarget.src = defaultThumbnailURL;\r\n }}\r\n alt={propertyName}\r\n />\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {IsPartner && (\r\n
    \r\n \r\n ทรัพย์ผู้ขาย\r\n
    \r\n )}\r\n {property.PropertyID?.slice(2, 4) === \"66\" && (\r\n
    \r\n  \r\n ทรัพย์ฝากขาย\r\n
    \r\n )}\r\n {property.IsNew && (\r\n
    \r\n  \r\n New\r\n
    \r\n )}\r\n {property.IsHot && (\r\n
    \r\n  \r\n Hot\r\n
    \r\n )}\r\n {property.PromotionName && (\r\n
    \r\n  \r\n Promotion\r\n
    \r\n )}\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n

    {propertyName}

    \r\n \r\n {showLike && (\r\n OnLikeCheck(e, property, listName)}\r\n >\r\n
    \r\n \r\n )}\r\n
    \r\n
    \r\n {location && }\r\n

    {location ? location :  }

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

    {propertyTypeHtml}

    \r\n
    {bedRoomHtml}
    \r\n
    \r\n
    \r\n

    รหัส {PropertyIDFormat}

    \r\n
    {areaHtml}
    \r\n
    \r\n
    \r\n
    \r\n
    {tag}
    \r\n
    \r\n {PromotionPrice}\r\n {Price}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport const PropertyListMain = (props) => {\r\n useEffect(() => {\r\n const params = new URLSearchParams(window.location.search);\r\n const paramsObj = Object.fromEntries(params.entries());\r\n\r\n jQuery(() => {\r\n $(`[data-property-id=${paramsObj.PropertyID}]`)[0]?.scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"start\",\r\n });\r\n });\r\n }, []);\r\n\r\n const ReaderChild = (\r\n list,\r\n OnLikeCheck,\r\n listName,\r\n showLike,\r\n searchProperty,\r\n hasMore\r\n ) => {\r\n list = list.map((property) => {\r\n return PropertyBox(\r\n property,\r\n OnLikeCheck,\r\n listName,\r\n showLike,\r\n searchProperty,\r\n hasMore\r\n );\r\n });\r\n return list;\r\n };\r\n return ReaderChild(\r\n props.list,\r\n props.OnLikeCheck,\r\n props.fieldName,\r\n props.showLike,\r\n props.searchProperty,\r\n props.hasMore\r\n );\r\n};\r\n\r\nexport const PropertyPageResult = (props) => {\r\n if (!props.list || props.list.length === 0) {\r\n return <>;\r\n }\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n
    \r\n {props.hasMore && (\r\n
    \r\n props.loadMore(props.fieldName, props.hasMore)}\r\n className={classnames([\r\n \"load-more-btn\",\r\n \"mousePointer\",\r\n { \"d-none\": props.isLoading },\r\n ])}\r\n >\r\n โหลดเพิ่มเติม\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n )}\r\n \r\n );\r\n};\r\n"],"sourceRoot":""}