Add kitchen/laundry/barbecue amenities
This commit is contained in:
parent
460efb9616
commit
35f2551c6b
9 changed files with 106 additions and 0 deletions
|
|
@ -100,6 +100,10 @@ export async function GET(req: Request) {
|
||||||
petsAllowed: listing.petsAllowed,
|
petsAllowed: listing.petsAllowed,
|
||||||
byTheLake: listing.byTheLake,
|
byTheLake: listing.byTheLake,
|
||||||
hasAirConditioning: listing.hasAirConditioning,
|
hasAirConditioning: listing.hasAirConditioning,
|
||||||
|
hasKitchen: listing.hasKitchen,
|
||||||
|
hasDishwasher: listing.hasDishwasher,
|
||||||
|
hasWashingMachine: listing.hasWashingMachine,
|
||||||
|
hasBarbecue: listing.hasBarbecue,
|
||||||
evCharging: listing.evCharging,
|
evCharging: listing.evCharging,
|
||||||
maxGuests: listing.maxGuests,
|
maxGuests: listing.maxGuests,
|
||||||
bedrooms: listing.bedrooms,
|
bedrooms: listing.bedrooms,
|
||||||
|
|
@ -230,6 +234,10 @@ export async function POST(req: Request) {
|
||||||
petsAllowed: Boolean(body.petsAllowed),
|
petsAllowed: Boolean(body.petsAllowed),
|
||||||
byTheLake: Boolean(body.byTheLake),
|
byTheLake: Boolean(body.byTheLake),
|
||||||
hasAirConditioning: Boolean(body.hasAirConditioning),
|
hasAirConditioning: Boolean(body.hasAirConditioning),
|
||||||
|
hasKitchen: Boolean(body.hasKitchen),
|
||||||
|
hasDishwasher: Boolean(body.hasDishwasher),
|
||||||
|
hasWashingMachine: Boolean(body.hasWashingMachine),
|
||||||
|
hasBarbecue: Boolean(body.hasBarbecue),
|
||||||
evCharging: normalizeEvCharging(body.evCharging),
|
evCharging: normalizeEvCharging(body.evCharging),
|
||||||
priceHintPerNightEuros,
|
priceHintPerNightEuros,
|
||||||
contactName,
|
contactName,
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,10 @@ const amenityIcons: Record<string, string> = {
|
||||||
lake: '🌊',
|
lake: '🌊',
|
||||||
ac: '❄️',
|
ac: '❄️',
|
||||||
ev: '⚡',
|
ev: '⚡',
|
||||||
|
kitchen: '🍽️',
|
||||||
|
dishwasher: '🧼',
|
||||||
|
washer: '🧺',
|
||||||
|
barbecue: '🍖',
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function generateMetadata({ params }: ListingPageProps): Promise<Metadata> {
|
export async function generateMetadata({ params }: ListingPageProps): Promise<Metadata> {
|
||||||
|
|
@ -52,6 +56,10 @@ export default async function ListingPage({ params }: ListingPageProps) {
|
||||||
listing.hasAirConditioning ? { icon: amenityIcons.ac, label: t('amenityAirConditioning') } : null,
|
listing.hasAirConditioning ? { icon: amenityIcons.ac, label: t('amenityAirConditioning') } : null,
|
||||||
listing.evCharging === 'FREE' ? { icon: amenityIcons.ev, label: t('amenityEvFree') } : null,
|
listing.evCharging === 'FREE' ? { icon: amenityIcons.ev, label: t('amenityEvFree') } : null,
|
||||||
listing.evCharging === 'PAID' ? { icon: amenityIcons.ev, label: t('amenityEvPaid') } : null,
|
listing.evCharging === 'PAID' ? { icon: amenityIcons.ev, label: t('amenityEvPaid') } : null,
|
||||||
|
listing.hasKitchen ? { icon: amenityIcons.kitchen, label: t('amenityKitchen') } : null,
|
||||||
|
listing.hasDishwasher ? { icon: amenityIcons.dishwasher, label: t('amenityDishwasher') } : null,
|
||||||
|
listing.hasWashingMachine ? { icon: amenityIcons.washer, label: t('amenityWashingMachine') } : null,
|
||||||
|
listing.hasBarbecue ? { icon: amenityIcons.barbecue, label: t('amenityBarbecue') } : null,
|
||||||
].filter(Boolean) as { icon: string; label: string }[];
|
].filter(Boolean) as { icon: string; label: string }[];
|
||||||
const addressLine = `${listing.streetAddress ? `${listing.streetAddress}, ` : ''}${listing.city}, ${listing.region}, ${listing.country}`;
|
const addressLine = `${listing.streetAddress ? `${listing.streetAddress}, ` : ''}${listing.city}, ${listing.region}, ${listing.country}`;
|
||||||
const capacityLine = `${t('capacityGuests', { count: listing.maxGuests })} · ${t('capacityBedrooms', { count: listing.bedrooms })} · ${t('capacityBeds', { count: listing.beds })} · ${t('capacityBathrooms', { count: listing.bathrooms })}`;
|
const capacityLine = `${t('capacityGuests', { count: listing.maxGuests })} · ${t('capacityBedrooms', { count: listing.bedrooms })} · ${t('capacityBeds', { count: listing.beds })} · ${t('capacityBathrooms', { count: listing.bathrooms })}`;
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,10 @@ export default function NewListingPage() {
|
||||||
const [petsAllowed, setPetsAllowed] = useState(false);
|
const [petsAllowed, setPetsAllowed] = useState(false);
|
||||||
const [byTheLake, setByTheLake] = useState(false);
|
const [byTheLake, setByTheLake] = useState(false);
|
||||||
const [hasAirConditioning, setHasAirConditioning] = useState(false);
|
const [hasAirConditioning, setHasAirConditioning] = useState(false);
|
||||||
|
const [hasKitchen, setHasKitchen] = useState(true);
|
||||||
|
const [hasDishwasher, setHasDishwasher] = useState(false);
|
||||||
|
const [hasWashingMachine, setHasWashingMachine] = useState(false);
|
||||||
|
const [hasBarbecue, setHasBarbecue] = useState(false);
|
||||||
const [evCharging, setEvCharging] = useState<'NONE' | 'FREE' | 'PAID'>('NONE');
|
const [evCharging, setEvCharging] = useState<'NONE' | 'FREE' | 'PAID'>('NONE');
|
||||||
const [selectedImages, setSelectedImages] = useState<SelectedImage[]>([]);
|
const [selectedImages, setSelectedImages] = useState<SelectedImage[]>([]);
|
||||||
const [coverImageIndex, setCoverImageIndex] = useState(1);
|
const [coverImageIndex, setCoverImageIndex] = useState(1);
|
||||||
|
|
@ -111,6 +115,10 @@ export default function NewListingPage() {
|
||||||
{ key: 'pets', label: t('amenityPets'), icon: '🐾', checked: petsAllowed, toggle: setPetsAllowed },
|
{ key: 'pets', label: t('amenityPets'), icon: '🐾', checked: petsAllowed, toggle: setPetsAllowed },
|
||||||
{ key: 'lake', label: t('amenityLake'), icon: '🌊', checked: byTheLake, toggle: setByTheLake },
|
{ key: 'lake', label: t('amenityLake'), icon: '🌊', checked: byTheLake, toggle: setByTheLake },
|
||||||
{ key: 'ac', label: t('amenityAirConditioning'), icon: '❄️', checked: hasAirConditioning, toggle: setHasAirConditioning },
|
{ key: 'ac', label: t('amenityAirConditioning'), icon: '❄️', checked: hasAirConditioning, toggle: setHasAirConditioning },
|
||||||
|
{ key: 'kitchen', label: t('amenityKitchen'), icon: '🍽️', checked: hasKitchen, toggle: setHasKitchen },
|
||||||
|
{ key: 'dishwasher', label: t('amenityDishwasher'), icon: '🧼', checked: hasDishwasher, toggle: setHasDishwasher },
|
||||||
|
{ key: 'washer', label: t('amenityWashingMachine'), icon: '🧺', checked: hasWashingMachine, toggle: setHasWashingMachine },
|
||||||
|
{ key: 'barbecue', label: t('amenityBarbecue'), icon: '🍖', checked: hasBarbecue, toggle: setHasBarbecue },
|
||||||
];
|
];
|
||||||
|
|
||||||
function parseImages(): ImageInput[] {
|
function parseImages(): ImageInput[] {
|
||||||
|
|
@ -162,6 +170,10 @@ export default function NewListingPage() {
|
||||||
petsAllowed,
|
petsAllowed,
|
||||||
byTheLake,
|
byTheLake,
|
||||||
hasAirConditioning,
|
hasAirConditioning,
|
||||||
|
hasKitchen,
|
||||||
|
hasDishwasher,
|
||||||
|
hasWashingMachine,
|
||||||
|
hasBarbecue,
|
||||||
evCharging,
|
evCharging,
|
||||||
coverImageIndex,
|
coverImageIndex,
|
||||||
images: parseImages(),
|
images: parseImages(),
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,10 @@ type ListingResult = {
|
||||||
petsAllowed: boolean;
|
petsAllowed: boolean;
|
||||||
byTheLake: boolean;
|
byTheLake: boolean;
|
||||||
hasAirConditioning: boolean;
|
hasAirConditioning: boolean;
|
||||||
|
hasKitchen: boolean;
|
||||||
|
hasDishwasher: boolean;
|
||||||
|
hasWashingMachine: boolean;
|
||||||
|
hasBarbecue: boolean;
|
||||||
evCharging: 'NONE' | 'FREE' | 'PAID';
|
evCharging: 'NONE' | 'FREE' | 'PAID';
|
||||||
maxGuests: number;
|
maxGuests: number;
|
||||||
bedrooms: number;
|
bedrooms: number;
|
||||||
|
|
@ -394,6 +398,10 @@ export default function ListingsIndexPage() {
|
||||||
{l.evCharging === 'FREE' ? <span className="badge">{t('amenityEvFree')}</span> : null}
|
{l.evCharging === 'FREE' ? <span className="badge">{t('amenityEvFree')}</span> : null}
|
||||||
{l.evCharging === 'PAID' ? <span className="badge">{t('amenityEvPaid')}</span> : null}
|
{l.evCharging === 'PAID' ? <span className="badge">{t('amenityEvPaid')}</span> : null}
|
||||||
{l.hasAirConditioning ? <span className="badge">{t('amenityAirConditioning')}</span> : null}
|
{l.hasAirConditioning ? <span className="badge">{t('amenityAirConditioning')}</span> : null}
|
||||||
|
{l.hasKitchen ? <span className="badge">{t('amenityKitchen')}</span> : null}
|
||||||
|
{l.hasDishwasher ? <span className="badge">{t('amenityDishwasher')}</span> : null}
|
||||||
|
{l.hasWashingMachine ? <span className="badge">{t('amenityWashingMachine')}</span> : null}
|
||||||
|
{l.hasBarbecue ? <span className="badge">{t('amenityBarbecue')}</span> : null}
|
||||||
{l.hasSauna ? <span className="badge">{t('amenitySauna')}</span> : null}
|
{l.hasSauna ? <span className="badge">{t('amenitySauna')}</span> : null}
|
||||||
{l.hasWifi ? <span className="badge">{t('amenityWifi')}</span> : null}
|
{l.hasWifi ? <span className="badge">{t('amenityWifi')}</span> : null}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,10 @@ const allMessages = {
|
||||||
amenityPets: 'Pets allowed',
|
amenityPets: 'Pets allowed',
|
||||||
amenityLake: 'By the lake',
|
amenityLake: 'By the lake',
|
||||||
amenityAirConditioning: 'Air conditioning',
|
amenityAirConditioning: 'Air conditioning',
|
||||||
|
amenityKitchen: 'Kitchen',
|
||||||
|
amenityDishwasher: 'Dishwasher',
|
||||||
|
amenityWashingMachine: 'Washing machine',
|
||||||
|
amenityBarbecue: 'Barbecue grill',
|
||||||
amenityEvFree: 'EV charging (free)',
|
amenityEvFree: 'EV charging (free)',
|
||||||
amenityEvPaid: 'EV charging (paid)',
|
amenityEvPaid: 'EV charging (paid)',
|
||||||
evChargingLabel: 'EV charging',
|
evChargingLabel: 'EV charging',
|
||||||
|
|
@ -370,6 +374,10 @@ const allMessages = {
|
||||||
amenityPets: 'Lemmikit sallittu',
|
amenityPets: 'Lemmikit sallittu',
|
||||||
amenityLake: 'Järven rannalla',
|
amenityLake: 'Järven rannalla',
|
||||||
amenityAirConditioning: 'Ilmastointi',
|
amenityAirConditioning: 'Ilmastointi',
|
||||||
|
amenityKitchen: 'Keittiö',
|
||||||
|
amenityDishwasher: 'Astianpesukone',
|
||||||
|
amenityWashingMachine: 'Pyykinpesukone',
|
||||||
|
amenityBarbecue: 'Grilli',
|
||||||
amenityEvFree: 'Sähköauton lataus (ilmainen)',
|
amenityEvFree: 'Sähköauton lataus (ilmainen)',
|
||||||
amenityEvPaid: 'Sähköauton lataus (maksullinen)',
|
amenityEvPaid: 'Sähköauton lataus (maksullinen)',
|
||||||
evChargingLabel: 'Sähköauton lataus',
|
evChargingLabel: 'Sähköauton lataus',
|
||||||
|
|
|
||||||
5
prisma/migrations/20250210_more_amenities/migration.sql
Normal file
5
prisma/migrations/20250210_more_amenities/migration.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE "Listing"
|
||||||
|
ADD COLUMN "hasKitchen" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
ADD COLUMN "hasDishwasher" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
ADD COLUMN "hasWashingMachine" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
ADD COLUMN "hasBarbecue" BOOLEAN NOT NULL DEFAULT false;
|
||||||
|
|
@ -30,6 +30,11 @@ CREATE TABLE "Listing" (
|
||||||
"hasSauna" BOOLEAN NOT NULL DEFAULT false,
|
"hasSauna" BOOLEAN NOT NULL DEFAULT false,
|
||||||
"hasFireplace" BOOLEAN NOT NULL DEFAULT false,
|
"hasFireplace" BOOLEAN NOT NULL DEFAULT false,
|
||||||
"hasWifi" BOOLEAN NOT NULL DEFAULT false,
|
"hasWifi" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
"hasAirConditioning" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
"hasKitchen" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
"hasDishwasher" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
"hasWashingMachine" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
"hasBarbecue" BOOLEAN NOT NULL DEFAULT false,
|
||||||
"petsAllowed" BOOLEAN NOT NULL DEFAULT false,
|
"petsAllowed" BOOLEAN NOT NULL DEFAULT false,
|
||||||
"byTheLake" BOOLEAN NOT NULL DEFAULT false,
|
"byTheLake" BOOLEAN NOT NULL DEFAULT false,
|
||||||
"priceHintPerNightEuros" INTEGER,
|
"priceHintPerNightEuros" INTEGER,
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,10 @@ model Listing {
|
||||||
petsAllowed Boolean @default(false)
|
petsAllowed Boolean @default(false)
|
||||||
byTheLake Boolean @default(false)
|
byTheLake Boolean @default(false)
|
||||||
hasAirConditioning Boolean @default(false)
|
hasAirConditioning Boolean @default(false)
|
||||||
|
hasKitchen Boolean @default(false)
|
||||||
|
hasDishwasher Boolean @default(false)
|
||||||
|
hasWashingMachine Boolean @default(false)
|
||||||
|
hasBarbecue Boolean @default(false)
|
||||||
evCharging EvCharging @default(NONE)
|
evCharging EvCharging @default(NONE)
|
||||||
priceHintPerNightEuros Int?
|
priceHintPerNightEuros Int?
|
||||||
contactName String
|
contactName String
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,10 @@ async function main() {
|
||||||
hasFireplace: true,
|
hasFireplace: true,
|
||||||
hasWifi: true,
|
hasWifi: true,
|
||||||
hasAirConditioning: false,
|
hasAirConditioning: false,
|
||||||
|
hasKitchen: true,
|
||||||
|
hasDishwasher: false,
|
||||||
|
hasWashingMachine: false,
|
||||||
|
hasBarbecue: false,
|
||||||
petsAllowed: false,
|
petsAllowed: false,
|
||||||
byTheLake: true,
|
byTheLake: true,
|
||||||
evCharging: 'FREE',
|
evCharging: 'FREE',
|
||||||
|
|
@ -193,6 +197,10 @@ async function main() {
|
||||||
hasFireplace: false,
|
hasFireplace: false,
|
||||||
hasWifi: true,
|
hasWifi: true,
|
||||||
hasAirConditioning: true,
|
hasAirConditioning: true,
|
||||||
|
hasKitchen: true,
|
||||||
|
hasDishwasher: false,
|
||||||
|
hasWashingMachine: false,
|
||||||
|
hasBarbecue: false,
|
||||||
petsAllowed: false,
|
petsAllowed: false,
|
||||||
byTheLake: false,
|
byTheLake: false,
|
||||||
evCharging: 'PAID',
|
evCharging: 'PAID',
|
||||||
|
|
@ -231,6 +239,10 @@ async function main() {
|
||||||
hasFireplace: false,
|
hasFireplace: false,
|
||||||
hasWifi: true,
|
hasWifi: true,
|
||||||
hasAirConditioning: false,
|
hasAirConditioning: false,
|
||||||
|
hasKitchen: true,
|
||||||
|
hasDishwasher: false,
|
||||||
|
hasWashingMachine: false,
|
||||||
|
hasBarbecue: false,
|
||||||
petsAllowed: true,
|
petsAllowed: true,
|
||||||
byTheLake: false,
|
byTheLake: false,
|
||||||
evCharging: 'NONE',
|
evCharging: 'NONE',
|
||||||
|
|
@ -268,6 +280,10 @@ async function main() {
|
||||||
hasFireplace: true,
|
hasFireplace: true,
|
||||||
hasWifi: true,
|
hasWifi: true,
|
||||||
hasAirConditioning: false,
|
hasAirConditioning: false,
|
||||||
|
hasKitchen: true,
|
||||||
|
hasDishwasher: false,
|
||||||
|
hasWashingMachine: false,
|
||||||
|
hasBarbecue: false,
|
||||||
petsAllowed: false,
|
petsAllowed: false,
|
||||||
byTheLake: true,
|
byTheLake: true,
|
||||||
evCharging: 'FREE',
|
evCharging: 'FREE',
|
||||||
|
|
@ -305,6 +321,10 @@ async function main() {
|
||||||
hasFireplace: false,
|
hasFireplace: false,
|
||||||
hasWifi: true,
|
hasWifi: true,
|
||||||
hasAirConditioning: true,
|
hasAirConditioning: true,
|
||||||
|
hasKitchen: true,
|
||||||
|
hasDishwasher: false,
|
||||||
|
hasWashingMachine: false,
|
||||||
|
hasBarbecue: false,
|
||||||
petsAllowed: false,
|
petsAllowed: false,
|
||||||
byTheLake: false,
|
byTheLake: false,
|
||||||
evCharging: 'NONE',
|
evCharging: 'NONE',
|
||||||
|
|
@ -340,6 +360,10 @@ async function main() {
|
||||||
hasFireplace: true,
|
hasFireplace: true,
|
||||||
hasWifi: true,
|
hasWifi: true,
|
||||||
hasAirConditioning: false,
|
hasAirConditioning: false,
|
||||||
|
hasKitchen: true,
|
||||||
|
hasDishwasher: false,
|
||||||
|
hasWashingMachine: false,
|
||||||
|
hasBarbecue: false,
|
||||||
petsAllowed: true,
|
petsAllowed: true,
|
||||||
byTheLake: true,
|
byTheLake: true,
|
||||||
evCharging: 'PAID',
|
evCharging: 'PAID',
|
||||||
|
|
@ -375,6 +399,10 @@ async function main() {
|
||||||
hasFireplace: false,
|
hasFireplace: false,
|
||||||
hasWifi: true,
|
hasWifi: true,
|
||||||
hasAirConditioning: false,
|
hasAirConditioning: false,
|
||||||
|
hasKitchen: true,
|
||||||
|
hasDishwasher: false,
|
||||||
|
hasWashingMachine: false,
|
||||||
|
hasBarbecue: false,
|
||||||
petsAllowed: false,
|
petsAllowed: false,
|
||||||
byTheLake: true,
|
byTheLake: true,
|
||||||
evCharging: 'FREE',
|
evCharging: 'FREE',
|
||||||
|
|
@ -410,6 +438,10 @@ async function main() {
|
||||||
hasFireplace: true,
|
hasFireplace: true,
|
||||||
hasWifi: true,
|
hasWifi: true,
|
||||||
hasAirConditioning: false,
|
hasAirConditioning: false,
|
||||||
|
hasKitchen: true,
|
||||||
|
hasDishwasher: false,
|
||||||
|
hasWashingMachine: false,
|
||||||
|
hasBarbecue: false,
|
||||||
petsAllowed: false,
|
petsAllowed: false,
|
||||||
byTheLake: false,
|
byTheLake: false,
|
||||||
evCharging: 'NONE',
|
evCharging: 'NONE',
|
||||||
|
|
@ -445,6 +477,10 @@ async function main() {
|
||||||
hasFireplace: false,
|
hasFireplace: false,
|
||||||
hasWifi: true,
|
hasWifi: true,
|
||||||
hasAirConditioning: true,
|
hasAirConditioning: true,
|
||||||
|
hasKitchen: true,
|
||||||
|
hasDishwasher: false,
|
||||||
|
hasWashingMachine: false,
|
||||||
|
hasBarbecue: false,
|
||||||
petsAllowed: false,
|
petsAllowed: false,
|
||||||
byTheLake: false,
|
byTheLake: false,
|
||||||
evCharging: 'FREE',
|
evCharging: 'FREE',
|
||||||
|
|
@ -480,6 +516,10 @@ async function main() {
|
||||||
hasFireplace: false,
|
hasFireplace: false,
|
||||||
hasWifi: true,
|
hasWifi: true,
|
||||||
hasAirConditioning: false,
|
hasAirConditioning: false,
|
||||||
|
hasKitchen: true,
|
||||||
|
hasDishwasher: false,
|
||||||
|
hasWashingMachine: false,
|
||||||
|
hasBarbecue: false,
|
||||||
petsAllowed: false,
|
petsAllowed: false,
|
||||||
byTheLake: true,
|
byTheLake: true,
|
||||||
evCharging: 'PAID',
|
evCharging: 'PAID',
|
||||||
|
|
@ -525,6 +565,10 @@ async function main() {
|
||||||
hasFireplace: item.hasFireplace,
|
hasFireplace: item.hasFireplace,
|
||||||
hasWifi: item.hasWifi,
|
hasWifi: item.hasWifi,
|
||||||
hasAirConditioning: item.hasAirConditioning,
|
hasAirConditioning: item.hasAirConditioning,
|
||||||
|
hasKitchen: item.hasKitchen ?? false,
|
||||||
|
hasDishwasher: item.hasDishwasher ?? false,
|
||||||
|
hasWashingMachine: item.hasWashingMachine ?? false,
|
||||||
|
hasBarbecue: item.hasBarbecue ?? false,
|
||||||
petsAllowed: item.petsAllowed,
|
petsAllowed: item.petsAllowed,
|
||||||
byTheLake: item.byTheLake,
|
byTheLake: item.byTheLake,
|
||||||
evCharging: item.evCharging,
|
evCharging: item.evCharging,
|
||||||
|
|
@ -568,6 +612,10 @@ async function main() {
|
||||||
hasFireplace: item.hasFireplace,
|
hasFireplace: item.hasFireplace,
|
||||||
hasWifi: item.hasWifi,
|
hasWifi: item.hasWifi,
|
||||||
hasAirConditioning: item.hasAirConditioning,
|
hasAirConditioning: item.hasAirConditioning,
|
||||||
|
hasKitchen: item.hasKitchen ?? false,
|
||||||
|
hasDishwasher: item.hasDishwasher ?? false,
|
||||||
|
hasWashingMachine: item.hasWashingMachine ?? false,
|
||||||
|
hasBarbecue: item.hasBarbecue ?? false,
|
||||||
petsAllowed: item.petsAllowed,
|
petsAllowed: item.petsAllowed,
|
||||||
byTheLake: item.byTheLake,
|
byTheLake: item.byTheLake,
|
||||||
evCharging: item.evCharging,
|
evCharging: item.evCharging,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue