58 lines
2.6 KiB
JavaScript
58 lines
2.6 KiB
JavaScript
import { BuildingTypeKeys, PropertyStatusKeys, extractCity } from "../enums";
|
|
export function mapApiProperty(t, item, index) {
|
|
const info = item.propertyInformation || {};
|
|
const dailyPrice = item.dailyRent ?? 0;
|
|
const monthlyPrice = item.monthlyRent ?? 0;
|
|
const salePrice = item.price ?? 0;
|
|
const isRentListing = Boolean(item.dailyRent != null || item.monthlyRent != null);
|
|
const price = isRentListing ? dailyPrice || monthlyPrice || 0 : salePrice;
|
|
const priceUnit = isRentListing ? (monthlyPrice ? "monthly" : "daily") : "sale";
|
|
const propType = BuildingTypeKeys[info.buildingType] ?? BuildingTypeKeys[item.type] ?? (item.type || "apartment");
|
|
const status = PropertyStatusKeys[info.status] ?? PropertyStatusKeys[item.status] ?? "available";
|
|
const features = [];
|
|
if (item.isSmokeAllow) features.push(t("smoke-allowed"));
|
|
if (item.isVisitorAllow) features.push(t("visitors-allowed"));
|
|
if (item.specializedFor) features.push(t("specialized"));
|
|
if (info.numberOfBedRooms) features.push(`${info.numberOfBedRooms} ${t("rooms")}`);
|
|
if (info.numberOfBathRooms) features.push(`${info.numberOfBathRooms} ${t("bathrooms")}`);
|
|
|
|
const apiBase = typeof window !== "undefined" ? process.env.NEXT_PUBLIC_API_URL || "https://45.93.137.91.nip.io/api" : "";
|
|
const rawImages = Array.isArray(info.images) ? info.images : [];
|
|
const images = rawImages.length > 0 ? rawImages.map((img) => (img.startsWith("http") ? img : `${apiBase}${img.startsWith("/") ? "" : "/Pictures/"}${img}`)) : ["/property-placeholder.jpg"];
|
|
const ownerSource = info.ownerType == null && item.ownerType == null ? "all" : [info.ownerType, item.ownerType].find((value) => value != null) === 1 ? "agency" : "owner";
|
|
return {
|
|
id: item.id ?? index + 1,
|
|
title: info.address || t("propertyWithId", { id: item.id || index + 1 }),
|
|
description: info.description || "",
|
|
type: propType,
|
|
price: price,
|
|
priceUSD: price,
|
|
priceUnit,
|
|
listingType: isRentListing ? "rent" : "sale",
|
|
location: {
|
|
city: extractCity(info.address) || "damascus",
|
|
district: info.address || "",
|
|
address: info.address || "",
|
|
lat: parseFloat(info.cordsX) || 0,
|
|
lng: parseFloat(info.cordsY) || 0,
|
|
},
|
|
bedrooms: info.numberOfBedRooms || 0,
|
|
bathrooms: info.numberOfBathRooms || 0,
|
|
area: info.space || 0,
|
|
features,
|
|
images,
|
|
status,
|
|
rating: item.rating || 4.5,
|
|
isNew: false,
|
|
allowedIdentities: ["syrian", "passport"],
|
|
priceDisplay: {
|
|
daily: dailyPrice,
|
|
monthly: monthlyPrice,
|
|
sale: salePrice,
|
|
},
|
|
ownerSource,
|
|
bookings: [],
|
|
_raw: item,
|
|
};
|
|
}
|