This commit is contained in:
omkieit 2024-09-28 14:21:29 +05:30
parent d54bcdb9c5
commit 8b49882f18
6 changed files with 86 additions and 62 deletions

View File

@ -113,13 +113,40 @@ export const updatePropertyById = async (req, res) => {
// };
// controllers/propertyController.js
// export const getProperties = async (req, res) => {
// try {
// const { page = 1, limit = 10 } = req.query;
// const skip = (page - 1) * limit;
// const totalProperties = await PropertyModal.countDocuments();
// const properties = await PropertyModal.find()
// .sort({ createdAt: -1 })
// .skip(skip)
// .limit(parseInt(limit));
// res.status(200).json({
// success: true,
// data: properties,
// totalPages: Math.ceil(totalProperties / limit),
// currentPage: parseInt(page), // Include the currentPage in the response
// });
// } catch (err) {
// res.status(500).json({ success: false, message: 'Server error' });
// }
// };
export const getProperties = async (req, res) => {
try {
const { page = 1, limit = 10 } = req.query;
const { page = 1, limit = 10, keyword = "" } = req.query;
const skip = (page - 1) * limit;
const totalProperties = await PropertyModal.countDocuments();
const properties = await PropertyModal.find()
// Use a filter to match the keyword if provided
const keywordFilter = keyword
? { address: { $regex: keyword, $options: "i" } }
: {};
const totalProperties = await PropertyModal.countDocuments(keywordFilter);
const properties = await PropertyModal.find(keywordFilter)
.sort({ createdAt: -1 })
.skip(skip)
.limit(parseInt(limit));
@ -128,7 +155,7 @@ export const getProperties = async (req, res) => {
success: true,
data: properties,
totalPages: Math.ceil(totalProperties / limit),
currentPage: parseInt(page), // Include the currentPage in the response
currentPage: parseInt(page),
});
} catch (err) {
res.status(500).json({ success: false, message: 'Server error' });
@ -137,3 +164,4 @@ export const getProperties = async (req, res) => {

File diff suppressed because one or more lines are too long

View File

@ -45,7 +45,7 @@
<script type="module" crossorigin src="/assets/index-DJmr6ji6.js"></script>
<script type="module" crossorigin src="/assets/index-BsVOnNCb.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DepkKhoc.css">
</head>

View File

@ -11,7 +11,6 @@ const EditProperty = () => {
const [formData, setFormData] = useState({
propertyType: "",
title: "",
yearBuild: "",
totalSqft: "",
});
@ -24,7 +23,6 @@ const EditProperty = () => {
if (selectedProperty) {
setFormData({
propertyType: selectedProperty.propertyType,
title: selectedProperty.title,
yearBuild: selectedProperty.yearBuild,
totalSqft: selectedProperty.totalSqft,
});
@ -62,23 +60,6 @@ const EditProperty = () => {
</select>
</div>
<div className="col-12">
<div className="form-floating mb-3">
<input
type="text"
className="form-control"
name="title"
value={formData.title}
onChange={handleChange}
placeholder="Property title"
required
/>
<label htmlFor="title" className="form-label">
Property Title
</label>
</div>
</div>
<div className="col-12">
<div className="form-floating mb-3">
<input

View File

@ -20,9 +20,15 @@ const SearchProperties = () => {
const limit = 10; // Number of results per page
// Dispatch getProperties to load properties on page change
useEffect(() => {
dispatch(getProperties({ page, limit }));
}, [dispatch, page]);
// useEffect(() => {
// dispatch(getProperties({ page, limit }));
// }, [dispatch, page]);
// Dispatch getProperties to load properties on page or keyword change
useEffect(() => {
dispatch(getProperties({ page, limit, keyword }));
}, [dispatch, page, keyword]);
// Filter properties based on the keyword entered
useEffect(() => {
@ -45,10 +51,16 @@ const SearchProperties = () => {
e.preventDefault();
};
// const handlePageChange = (newPage) => {
// setPage(newPage); // Update the current page when user clicks pagination
// };
const handlePageChange = (newPage) => {
setPage(newPage); // Update the current page when user clicks pagination
setPage(newPage);
dispatch(getProperties({ page: newPage, limit, keyword })); // Pass the keyword when changing page
};
return (
<>
<Navbar />
@ -109,25 +121,19 @@ const SearchProperties = () => {
filteredProperties.map((property) => (
<tr key={property.id}>
<td>
{property.images && property.images[0] ? (
<img
src={property.images[0].file || profilepic}
alt="Property Thumbnail"
style={{ width: "100px", height: "auto" }}
/>
) : (
<img
src={profilepic}
alt="Default Property Thumbnail"
style={{ width: "100px", height: "auto" }}
/>
)}
{property.images && property.images[0] ? (
<img
src={property.images[0].file || profilepic}
alt="Property Thumbnail"
style={{ width: "100px", height: "auto" }}
/>
) : (
<img
src={profilepic}
alt="Default Property Thumbnail"
style={{ width: "100px", height: "auto" }}
/>
)}
</td>
<td>
<div className="widget-26-job-title">

View File

@ -69,6 +69,14 @@ export const updateProperty = createAsyncThunk(
// return response.data;
// });
// export const getProperties = createAsyncThunk(
// 'properties/getProperties',
// async ({ page, limit, keyword = "" }) => {
// const response = await axios.get(`${import.meta.env.VITE_REACT_APP_SECRET}/properties?page=${page}&limit=${limit}&keyword=${keyword}`);
// return response.data;
// }
// );
export const getProperties = createAsyncThunk(
'properties/getProperties',
async ({ page, limit, keyword = "" }) => {
@ -77,6 +85,7 @@ export const getProperties = createAsyncThunk(
}
);
const propertySlice = createSlice({
name: "property",
initialState: {