Chicago properties for sale
Lorem ipsum dolor sit, amet consectetur adipisicing elit.
Alias dolorem error atque aut, asperiores et tempore iste quaerat pariatur maxime?
-
+
diff --git a/real_estate/client/src/pages/SearchProperties.jsx b/real_estate/client/src/pages/SearchProperties.jsx
new file mode 100644
index 0000000..b0b2f78
--- /dev/null
+++ b/real_estate/client/src/pages/SearchProperties.jsx
@@ -0,0 +1,153 @@
+import { useEffect, useState } from "react"
+import { useNavigate } from "react-router-dom";
+import ListingCard from "../components/ListingCard";
+
+
+const SearchProperties = () => {
+ const navigate = useNavigate();
+ const [loading, setLoading] = useState(false);
+ const [listings, setListings] = useState([]);
+ const [sidebarSearch, setSidebarSearch] = useState({
+ searchTerm: '',
+ type: 'all',
+ parking: false,
+ offer: false,
+ furnished: false,
+ sort: 'created_at',
+ order: 'desc',
+ });
+ useEffect(() => {
+ const urlParams = new URLSearchParams(location.search);
+ const searchTermFromUrl = urlParams.get('searchTerm');
+ const typeFromUrl = urlParams.get('type');
+ const parkingFromUrl = urlParams.get('parking');
+ const furnishedFromUrl = urlParams.get('furnished');
+ const offerFromUrl = urlParams.get('offer');
+ const sortFromUrl = urlParams.get('sort');
+ const orderFromUrl = urlParams.get('order');
+ if(searchTermFromUrl || typeFromUrl || parkingFromUrl || furnishedFromUrl || offerFromUrl || sortFromUrl || orderFromUrl){
+ setSidebarSearch({
+ searchTerm: searchTermFromUrl || '',
+ type: typeFromUrl || 'all',
+ parking: parkingFromUrl === 'true' ? true : false,
+ furnished: furnishedFromUrl === 'true' ? true : false,
+ offer: offerFromUrl === 'true' ? true : false,
+ sort: sortFromUrl || 'created_at',
+ order: orderFromUrl || 'desc',
+ });
+ }
+ const fetchListings = async () => {
+ setLoading(true);
+ const searchQuery = urlParams.toString();
+ const res = await fetch(`/server/listing/get?${searchQuery}`);
+ const data = await res.json();
+ setListings(data);
+ setLoading(false);
+ };
+ fetchListings();
+
+ }, [location.search])
+
+ //Search by...
+ const handleChange = (e) => {
+ if(e.target.id === 'all' || e.target.id === 'rent' || e.target.id === 'sale'){
+ setSidebarSearch({...sidebarSearch, type: e.target.id});
+ }
+ if(e.target.id === 'searchTerm'){
+ setSidebarSearch({...sidebarSearch, searchTerm: e.target.value});
+ }
+ if(e.target.id === 'parking' || e.target.id === 'furnished' || e.target.id === 'offer'){
+ setSidebarSearch({...sidebarSearch, [e.target.id]: e.target.checked || e.target.checked === 'true' ? true : false,});
+ }
+ if(e.target.id === 'sort_order') {
+ const sort = e.target.value.split('_')[0] || 'created_at';
+ const order = e.target.value.split('_')[1] || 'desc';
+ setSidebarSearch({ ...sidebarSearch, sort, order });
+ }
+ };
+
+ //Submit form
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ const urlParams = new URLSearchParams();
+ urlParams.set('searchTerm', sidebarSearch.searchTerm);
+ urlParams.set('type', sidebarSearch.type);
+ urlParams.set('parking', sidebarSearch.parking);
+ urlParams.set('furnished', sidebarSearch.furnished);
+ urlParams.set('offer', sidebarSearch.offer);
+ urlParams.set('sort', sidebarSearch.sort);
+ urlParams.set('order', sidebarSearch.order);
+ const searchQuery = urlParams.toString();
+ navigate(`/search?${searchQuery}`);
+ };
+
+
+ return (
+