nestiq-component-library 1.1.91 → 1.1.93
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/images/{card-arrow-left.28090aba4b4f2006.svg → card-arrow-left.55343410142dad3f.svg} +4 -4
- package/dist/assets/images/{card-arrow-right.c60af4cbbd49f3aa.svg → card-arrow-right.60b3bf0e34c1800d.svg} +4 -4
- package/dist/assets/images/{imooly.890e3dd01ea33574.svg → imooly.b46514ac970e6052.svg} +7 -7
- package/dist/assets/images/{more.1e158adc48fbb406.svg → more.ce14789c8d37e327.svg} +12 -12
- package/dist/index.es.js +10 -10
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/rollup.config.mjs +36 -36
- package/src/assets/images/card-arrow-left.svg +4 -4
- package/src/assets/images/card-arrow-right.svg +4 -4
- package/src/assets/images/imooly.svg +7 -7
- package/src/assets/images/more.svg +12 -12
- package/src/components/FloorPlanPopup/FloorPlanPopup.css +3 -3
- package/src/components/FloorPlanPopup/FloorPlanPopup.tsx +83 -83
- package/src/components/ImageListPopup/ImageListPopup.css +83 -83
- package/src/components/ImageListPopup/ImageListPopup.tsx +141 -141
- package/src/components/MessagePopup/MessagePopUp.tsx +156 -156
- package/src/components/NewPropertyCard/NewPropertyCard.css +370 -372
- package/src/components/NewPropertyCard/NewPropertyCard.tsx +280 -280
- package/src/components/Popup/Popup.tsx +29 -29
- package/src/components/ToastWrapper/ToastWrapper.tsx +25 -25
- package/src/models/message.model.ts +7 -7
- package/dist/assets/images/Icon_rightArrow.svg +0 -3
- package/dist/assets/images/LayersIcon.svg +0 -5
- package/dist/assets/images/blackarrow-Right.svg +0 -3
- package/dist/assets/images/blckarrow-Left.svg +0 -3
- package/dist/assets/images/chevron-left.svg +0 -3
- package/dist/assets/images/default-property.jpg +0 -0
- package/dist/assets/images/heartIcon.svg +0 -3
- package/dist/assets/images/icon-close-white.webp +0 -0
- package/dist/assets/images/icon_close 2.e41bb9a4db48e048.png +0 -0
- package/dist/assets/images/icon_close_2.png +0 -0
- package/dist/assets/images/icon_gallery.svg +0 -4
- package/dist/assets/images/icon_map.svg +0 -10
- package/dist/assets/images/icon_share_1.svg +0 -3
- package/dist/assets/images/layer_icon.svg +0 -5
- package/dist/assets/images/locationIcon.0af399c78e0cdc20.svg +0 -4
- package/dist/assets/images/locationIcon.svg +0 -4
- package/dist/assets/images/locationIconBlack.svg +0 -4
- package/dist/assets/images/no-image-icon.png +0 -0
- package/dist/components/Button/Button.js +0 -6
- package/dist/components/ImageListPopup/ImageListPopup.js +0 -26
- package/dist/components/MessagePopup/ErrorPopup.d.ts +0 -7
- package/dist/components/Popup/Popup.js +0 -12
- package/dist/components/SharePopup/PopUp.d.ts +0 -7
|
@@ -1,280 +1,280 @@
|
|
|
1
|
-
import React, { useRef, useState } from "react";
|
|
2
|
-
// import { FormattedMessage } from "react-intl";
|
|
3
|
-
import locationIcon from "../../assets/images/locationIcon.svg";
|
|
4
|
-
import "../NewPropertyCard/NewPropertyCard.css";
|
|
5
|
-
import noImageIcon from "../../assets/Images/default-property.jpg";
|
|
6
|
-
import { formatPrice } from "../../functions/util";
|
|
7
|
-
import shareIcon from "../../assets/Images/icon_share_1.svg";
|
|
8
|
-
import moreIcon from "../../assets/Images/more.svg";
|
|
9
|
-
import arrowLeft from "../../assets/Images/card-arrow-left.svg";
|
|
10
|
-
import arrowRight from "../../assets/Images/card-arrow-right.svg";
|
|
11
|
-
import iconLayers from "../../assets/Images/layer_icon.svg";
|
|
12
|
-
import FloorPlanPopup from "../FloorPlanPopup/FloorPlanPopup";
|
|
13
|
-
// import MessagePopUp from "../MessagePopup/MessagePopUp";
|
|
14
|
-
import SharePopup from "../SharePopup/SharePopup";
|
|
15
|
-
import { MessageModel } from "../../models/message.model";
|
|
16
|
-
import immooly from "../../assets/images/imooly.svg";
|
|
17
|
-
|
|
18
|
-
interface PopupProps {
|
|
19
|
-
property: {
|
|
20
|
-
city: string;
|
|
21
|
-
historicalProtection: boolean;
|
|
22
|
-
basement: boolean;
|
|
23
|
-
balcony: boolean;
|
|
24
|
-
terrace: boolean;
|
|
25
|
-
guestBathroom: boolean;
|
|
26
|
-
bathrooms: string;
|
|
27
|
-
usableArea: string;
|
|
28
|
-
id: string;
|
|
29
|
-
rooms: string;
|
|
30
|
-
constructedArea: string;
|
|
31
|
-
title: string;
|
|
32
|
-
evaluation?: {
|
|
33
|
-
askingPrice: number;
|
|
34
|
-
};
|
|
35
|
-
expose: {
|
|
36
|
-
title: string;
|
|
37
|
-
};
|
|
38
|
-
pictures: { contentUrl: string }[];
|
|
39
|
-
};
|
|
40
|
-
baseUrl: string;
|
|
41
|
-
userData: {
|
|
42
|
-
firstname: string;
|
|
43
|
-
lastname: string;
|
|
44
|
-
};
|
|
45
|
-
themesList: any;
|
|
46
|
-
floorPlanUrl: string;
|
|
47
|
-
// onMessagePopupSubmitClick: (formValues: MessageModel) => void;
|
|
48
|
-
messageOnClick: () => void;
|
|
49
|
-
onclickSuccess: () => void;
|
|
50
|
-
onClick: () => void;
|
|
51
|
-
}
|
|
52
|
-
export default function PropertyCard(props: PopupProps) {
|
|
53
|
-
const [liked, setLiked] = useState(false);
|
|
54
|
-
const [mainImage, setMainImage] = useState<string | null>(null);
|
|
55
|
-
const [currentImageIndex, setCurrentImageIndex] = useState(0);
|
|
56
|
-
const imageListRef = useRef<HTMLDivElement>(null);
|
|
57
|
-
const [floorPlan, setFloorPlan] = useState(false);
|
|
58
|
-
const [messagePopUp, setMessagPopUp] = useState(false);
|
|
59
|
-
const [sharePopUp, setSharePopUp] = useState(false);
|
|
60
|
-
|
|
61
|
-
const pictureUrls =
|
|
62
|
-
props.property?.pictures?.length > 0
|
|
63
|
-
? props.property.pictures.map(
|
|
64
|
-
(picture) => `${props.baseUrl}${picture.contentUrl}`,
|
|
65
|
-
)
|
|
66
|
-
: [noImageIcon];
|
|
67
|
-
|
|
68
|
-
// setPictureUrls(pictureUrls);
|
|
69
|
-
const handleLike = () => {
|
|
70
|
-
setLiked(!liked);
|
|
71
|
-
};
|
|
72
|
-
const floorPlanOnClick = () => {
|
|
73
|
-
if (props.floorPlanUrl) {
|
|
74
|
-
setFloorPlan(true);
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
const handleMessagPopUp = () => {
|
|
78
|
-
// setMessagPopUp(true);
|
|
79
|
-
props.messageOnClick();
|
|
80
|
-
};
|
|
81
|
-
const handleSharePopUp = () => {
|
|
82
|
-
setSharePopUp(true);
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
const handleArrowClickInMainImage = (direction: string) => {
|
|
86
|
-
if (!props.property || pictureUrls.length === 0) return;
|
|
87
|
-
|
|
88
|
-
let newIndex = currentImageIndex;
|
|
89
|
-
if (direction === "left") {
|
|
90
|
-
newIndex =
|
|
91
|
-
(currentImageIndex - 1 + pictureUrls.length) % pictureUrls.length;
|
|
92
|
-
} else if (direction === "right") {
|
|
93
|
-
newIndex = (currentImageIndex + 1) % pictureUrls.length;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
setCurrentImageIndex(newIndex);
|
|
97
|
-
setMainImage(pictureUrls[newIndex]);
|
|
98
|
-
|
|
99
|
-
// Ensure the ref exists before calling scrollTo
|
|
100
|
-
if (imageListRef.current) {
|
|
101
|
-
imageListRef.current.scrollTo({
|
|
102
|
-
left: newIndex * 150,
|
|
103
|
-
behavior: "smooth",
|
|
104
|
-
});
|
|
105
|
-
} else {
|
|
106
|
-
console.warn("imageListRef is not set");
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
return (
|
|
111
|
-
<div className="d-flex flex-row card">
|
|
112
|
-
<div className="d-flex flex-column col-md-6
|
|
113
|
-
<div
|
|
114
|
-
key={props.property.id}
|
|
115
|
-
className="card-bod position-relative cardStyles h-100
|
|
116
|
-
style={{
|
|
117
|
-
backgroundImage: `url(${mainImage || pictureUrls[0]})`,
|
|
118
|
-
backgroundSize: "cover",
|
|
119
|
-
backgroundPosition: "center",
|
|
120
|
-
}}
|
|
121
|
-
>
|
|
122
|
-
<div className="d-flex flex-row justify-content-between gap-5">
|
|
123
|
-
<div
|
|
124
|
-
className="d-flex ms-2"
|
|
125
|
-
style={{ position: "absolute", left: "0" }}
|
|
126
|
-
onClick={() => handleArrowClickInMainImage("left")}
|
|
127
|
-
role="button"
|
|
128
|
-
>
|
|
129
|
-
<img src={arrowLeft} />
|
|
130
|
-
</div>
|
|
131
|
-
<div></div>
|
|
132
|
-
<div
|
|
133
|
-
className="d-flex me-2"
|
|
134
|
-
onClick={() => handleArrowClickInMainImage("right")}
|
|
135
|
-
role="button"
|
|
136
|
-
>
|
|
137
|
-
<img
|
|
138
|
-
src={arrowRight}
|
|
139
|
-
style={{ position: "absolute", right: "5px" }}
|
|
140
|
-
/>
|
|
141
|
-
</div>
|
|
142
|
-
</div>
|
|
143
|
-
<div
|
|
144
|
-
className="d-flex flex-row align-self-end justify-item-start justify-content-between align-item-start gap-1 mb-2 ms-4"
|
|
145
|
-
style={{ position: "absolute", left: "0" }}
|
|
146
|
-
>
|
|
147
|
-
<div className="cardTag">{`${currentImageIndex + 1}/${
|
|
148
|
-
pictureUrls.length
|
|
149
|
-
}`}</div>
|
|
150
|
-
<div
|
|
151
|
-
className="Grundriss kontact-button-text "
|
|
152
|
-
role="button"
|
|
153
|
-
onClick={floorPlanOnClick}
|
|
154
|
-
>
|
|
155
|
-
<img src={iconLayers} className="" style={{ width: "18px" }} />{" "}
|
|
156
|
-
Grundriss
|
|
157
|
-
</div>
|
|
158
|
-
</div>
|
|
159
|
-
</div>
|
|
160
|
-
</div>
|
|
161
|
-
<div className="d-flex flex-column listing-compacts col-md-6
|
|
162
|
-
<div className="d-flex align-self-end justify-content-end gap-2">
|
|
163
|
-
<img
|
|
164
|
-
src={shareIcon}
|
|
165
|
-
alt="Location Icon"
|
|
166
|
-
className="w-50 "
|
|
167
|
-
onClick={handleSharePopUp}
|
|
168
|
-
/>
|
|
169
|
-
<img src={moreIcon} alt="Location Icon" className="" />
|
|
170
|
-
</div>
|
|
171
|
-
<div>
|
|
172
|
-
<span className="propertyTitle align-items-start ">
|
|
173
|
-
{props.property.expose?.title}
|
|
174
|
-
</span>
|
|
175
|
-
</div>
|
|
176
|
-
<div>
|
|
177
|
-
{" "}
|
|
178
|
-
<div className="d-flex ">
|
|
179
|
-
<img src={locationIcon} alt="Location Icon" className="Vector" />
|
|
180
|
-
<span className="locationTexts ">
|
|
181
|
-
{props.property.city || "N/A"}
|
|
182
|
-
</span>
|
|
183
|
-
</div>
|
|
184
|
-
</div>
|
|
185
|
-
<div className="d-flex flex-row gap-3 col-6 col-lg-8 justify-content-between ">
|
|
186
|
-
<span className="value col-lg-3 col-md-4 col-sm-6 ">
|
|
187
|
-
{formatPrice(props.property?.evaluation?.askingPrice ?? 0)} €
|
|
188
|
-
<br />
|
|
189
|
-
<span className="details">Kaufpreis</span>
|
|
190
|
-
</span>
|
|
191
|
-
<span className="text-dark value col-lg-4 col-md-4 col-sm-6 text-truncate ">
|
|
192
|
-
{+props.property.rooms}
|
|
193
|
-
<br />
|
|
194
|
-
<span className="details">
|
|
195
|
-
{" "}
|
|
196
|
-
<span>Zimmer</span>
|
|
197
|
-
</span>
|
|
198
|
-
</span>
|
|
199
|
-
<span className="text-dark value col-lg-3 col-md-3 col-sm-4 text-truncate ">
|
|
200
|
-
{+props.property.bathrooms}
|
|
201
|
-
<br />
|
|
202
|
-
<span className="details">
|
|
203
|
-
<span>Bad</span>
|
|
204
|
-
</span>
|
|
205
|
-
</span>
|
|
206
|
-
<span className="text-dark value col-lg-4 col-md-5 col-sm-7 ">
|
|
207
|
-
{props.property.usableArea} m²
|
|
208
|
-
<br />
|
|
209
|
-
<span className="details">
|
|
210
|
-
<span>Wohnfläche</span>
|
|
211
|
-
</span>
|
|
212
|
-
</span>
|
|
213
|
-
</div>
|
|
214
|
-
<div className="labelTopClass d-flex top-0 start-0 col-sm-5 col-lg-8 ">
|
|
215
|
-
<div className=" align-items-center d-flex flex-row gap-3">
|
|
216
|
-
{props.property.historicalProtection && (
|
|
217
|
-
<label className="thirdLabels justify-content-center align-items-center">
|
|
218
|
-
<span className="layersText ">{"Denkmalschutz"}</span>
|
|
219
|
-
</label>
|
|
220
|
-
)}
|
|
221
|
-
|
|
222
|
-
{props.property.basement && (
|
|
223
|
-
<label className="secondLabel justify-content-center align-items-center">
|
|
224
|
-
<span className="layersText ">{"Keller"}</span>
|
|
225
|
-
</label>
|
|
226
|
-
)}
|
|
227
|
-
{props.property.balcony && (
|
|
228
|
-
<label className="secondLabel justify-content-center align-items-center">
|
|
229
|
-
<span className="layersText ">{"Balkon"}</span>
|
|
230
|
-
</label>
|
|
231
|
-
)}
|
|
232
|
-
{props.property.terrace && (
|
|
233
|
-
<label className="thirdLabels justify-content-center align-items-center ">
|
|
234
|
-
<span className="layersText">{"Terrace"}</span>
|
|
235
|
-
</label>
|
|
236
|
-
)}
|
|
237
|
-
{props.property.guestBathroom && (
|
|
238
|
-
<label className="col-1 thirdLabels justify-content-center align-items-center ">
|
|
239
|
-
<span className="layersText ">{"Gäste-WC"}</span>
|
|
240
|
-
</label>
|
|
241
|
-
)}
|
|
242
|
-
</div>
|
|
243
|
-
</div>
|
|
244
|
-
<div className="Frame-136 d-flex flex-row">
|
|
245
|
-
<div className="d-flex flex-column flex-lg-row col-4 justify-content-between ">
|
|
246
|
-
<img src={immooly} alt="Logo" className="immooly" />
|
|
247
|
-
</div>
|
|
248
|
-
<div className="d-flex flex-column flex-lg-row justify-content-between">
|
|
249
|
-
<span className="d-flex col-5">
|
|
250
|
-
Herr Florian Gauss Immogart UGh
|
|
251
|
-
</span>
|
|
252
|
-
<button
|
|
253
|
-
className="kontactbutton text-light "
|
|
254
|
-
onClick={handleMessagPopUp}
|
|
255
|
-
role="button"
|
|
256
|
-
>
|
|
257
|
-
<span className="kontact-button-text">Kontakt aufnehmen </span>
|
|
258
|
-
</button>
|
|
259
|
-
</div>
|
|
260
|
-
</div>
|
|
261
|
-
</div>
|
|
262
|
-
{floorPlan && (
|
|
263
|
-
<FloorPlanPopup
|
|
264
|
-
contentUrl={props.floorPlanUrl}
|
|
265
|
-
onCloseClick={() => setFloorPlan(false)}
|
|
266
|
-
/>
|
|
267
|
-
)}
|
|
268
|
-
{/* {messagePopUp && (
|
|
269
|
-
<MessagePopUp
|
|
270
|
-
onCloseClick={() => setMessagPopUp(false)}
|
|
271
|
-
sellerFirstName={props.userData?.firstname}
|
|
272
|
-
sellerLastName={props.userData?.lastname}
|
|
273
|
-
themesList={props.themesList}
|
|
274
|
-
onSubmit={props.onMessagePopupSubmitClick}
|
|
275
|
-
/>
|
|
276
|
-
)} */}
|
|
277
|
-
{sharePopUp && <SharePopup onClick={() => setSharePopUp(false)} />}
|
|
278
|
-
</div>
|
|
279
|
-
);
|
|
280
|
-
}
|
|
1
|
+
import React, { useRef, useState } from "react";
|
|
2
|
+
// import { FormattedMessage } from "react-intl";
|
|
3
|
+
import locationIcon from "../../assets/images/locationIcon.svg";
|
|
4
|
+
import "../NewPropertyCard/NewPropertyCard.css";
|
|
5
|
+
import noImageIcon from "../../assets/Images/default-property.jpg";
|
|
6
|
+
import { formatPrice } from "../../functions/util";
|
|
7
|
+
import shareIcon from "../../assets/Images/icon_share_1.svg";
|
|
8
|
+
import moreIcon from "../../assets/Images/more.svg";
|
|
9
|
+
import arrowLeft from "../../assets/Images/card-arrow-left.svg";
|
|
10
|
+
import arrowRight from "../../assets/Images/card-arrow-right.svg";
|
|
11
|
+
import iconLayers from "../../assets/Images/layer_icon.svg";
|
|
12
|
+
import FloorPlanPopup from "../FloorPlanPopup/FloorPlanPopup";
|
|
13
|
+
// import MessagePopUp from "../MessagePopup/MessagePopUp";
|
|
14
|
+
import SharePopup from "../SharePopup/SharePopup";
|
|
15
|
+
import { MessageModel } from "../../models/message.model";
|
|
16
|
+
import immooly from "../../assets/images/imooly.svg";
|
|
17
|
+
|
|
18
|
+
interface PopupProps {
|
|
19
|
+
property: {
|
|
20
|
+
city: string;
|
|
21
|
+
historicalProtection: boolean;
|
|
22
|
+
basement: boolean;
|
|
23
|
+
balcony: boolean;
|
|
24
|
+
terrace: boolean;
|
|
25
|
+
guestBathroom: boolean;
|
|
26
|
+
bathrooms: string;
|
|
27
|
+
usableArea: string;
|
|
28
|
+
id: string;
|
|
29
|
+
rooms: string;
|
|
30
|
+
constructedArea: string;
|
|
31
|
+
title: string;
|
|
32
|
+
evaluation?: {
|
|
33
|
+
askingPrice: number;
|
|
34
|
+
};
|
|
35
|
+
expose: {
|
|
36
|
+
title: string;
|
|
37
|
+
};
|
|
38
|
+
pictures: { contentUrl: string }[];
|
|
39
|
+
};
|
|
40
|
+
baseUrl: string;
|
|
41
|
+
userData: {
|
|
42
|
+
firstname: string;
|
|
43
|
+
lastname: string;
|
|
44
|
+
};
|
|
45
|
+
themesList: any;
|
|
46
|
+
floorPlanUrl: string;
|
|
47
|
+
// onMessagePopupSubmitClick: (formValues: MessageModel) => void;
|
|
48
|
+
messageOnClick: () => void;
|
|
49
|
+
onclickSuccess: () => void;
|
|
50
|
+
onClick: () => void;
|
|
51
|
+
}
|
|
52
|
+
export default function PropertyCard(props: PopupProps) {
|
|
53
|
+
const [liked, setLiked] = useState(false);
|
|
54
|
+
const [mainImage, setMainImage] = useState<string | null>(null);
|
|
55
|
+
const [currentImageIndex, setCurrentImageIndex] = useState(0);
|
|
56
|
+
const imageListRef = useRef<HTMLDivElement>(null);
|
|
57
|
+
const [floorPlan, setFloorPlan] = useState(false);
|
|
58
|
+
const [messagePopUp, setMessagPopUp] = useState(false);
|
|
59
|
+
const [sharePopUp, setSharePopUp] = useState(false);
|
|
60
|
+
|
|
61
|
+
const pictureUrls =
|
|
62
|
+
props.property?.pictures?.length > 0
|
|
63
|
+
? props.property.pictures.map(
|
|
64
|
+
(picture) => `${props.baseUrl}${picture.contentUrl}`,
|
|
65
|
+
)
|
|
66
|
+
: [noImageIcon];
|
|
67
|
+
|
|
68
|
+
// setPictureUrls(pictureUrls);
|
|
69
|
+
const handleLike = () => {
|
|
70
|
+
setLiked(!liked);
|
|
71
|
+
};
|
|
72
|
+
const floorPlanOnClick = () => {
|
|
73
|
+
if (props.floorPlanUrl) {
|
|
74
|
+
setFloorPlan(true);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const handleMessagPopUp = () => {
|
|
78
|
+
// setMessagPopUp(true);
|
|
79
|
+
props.messageOnClick();
|
|
80
|
+
};
|
|
81
|
+
const handleSharePopUp = () => {
|
|
82
|
+
setSharePopUp(true);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const handleArrowClickInMainImage = (direction: string) => {
|
|
86
|
+
if (!props.property || pictureUrls.length === 0) return;
|
|
87
|
+
|
|
88
|
+
let newIndex = currentImageIndex;
|
|
89
|
+
if (direction === "left") {
|
|
90
|
+
newIndex =
|
|
91
|
+
(currentImageIndex - 1 + pictureUrls.length) % pictureUrls.length;
|
|
92
|
+
} else if (direction === "right") {
|
|
93
|
+
newIndex = (currentImageIndex + 1) % pictureUrls.length;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
setCurrentImageIndex(newIndex);
|
|
97
|
+
setMainImage(pictureUrls[newIndex]);
|
|
98
|
+
|
|
99
|
+
// Ensure the ref exists before calling scrollTo
|
|
100
|
+
if (imageListRef.current) {
|
|
101
|
+
imageListRef.current.scrollTo({
|
|
102
|
+
left: newIndex * 150,
|
|
103
|
+
behavior: "smooth",
|
|
104
|
+
});
|
|
105
|
+
} else {
|
|
106
|
+
console.warn("imageListRef is not set");
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
return (
|
|
111
|
+
<div className="d-flex flex-row property-card">
|
|
112
|
+
<div className="d-flex flex-column col-md-6" onClick={props.onClick}>
|
|
113
|
+
<div
|
|
114
|
+
key={props.property.id}
|
|
115
|
+
className="card-bod position-relative cardStyles h-100 w-100"
|
|
116
|
+
style={{
|
|
117
|
+
backgroundImage: `url(${mainImage || pictureUrls[0]})`,
|
|
118
|
+
backgroundSize: "cover",
|
|
119
|
+
backgroundPosition: "center",
|
|
120
|
+
}}
|
|
121
|
+
>
|
|
122
|
+
<div className="d-flex flex-row justify-content-between gap-5">
|
|
123
|
+
<div
|
|
124
|
+
className="d-flex ms-2"
|
|
125
|
+
style={{ position: "absolute", left: "0" }}
|
|
126
|
+
onClick={() => handleArrowClickInMainImage("left")}
|
|
127
|
+
role="button"
|
|
128
|
+
>
|
|
129
|
+
<img src={arrowLeft} />
|
|
130
|
+
</div>
|
|
131
|
+
<div></div>
|
|
132
|
+
<div
|
|
133
|
+
className="d-flex me-2"
|
|
134
|
+
onClick={() => handleArrowClickInMainImage("right")}
|
|
135
|
+
role="button"
|
|
136
|
+
>
|
|
137
|
+
<img
|
|
138
|
+
src={arrowRight}
|
|
139
|
+
style={{ position: "absolute", right: "5px" }}
|
|
140
|
+
/>
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
<div
|
|
144
|
+
className="d-flex flex-row align-self-end justify-item-start justify-content-between align-item-start gap-1 mb-2 ms-4"
|
|
145
|
+
style={{ position: "absolute", left: "0" }}
|
|
146
|
+
>
|
|
147
|
+
<div className="cardTag">{`${currentImageIndex + 1}/${
|
|
148
|
+
pictureUrls.length
|
|
149
|
+
}`}</div>
|
|
150
|
+
<div
|
|
151
|
+
className="Grundriss kontact-button-text "
|
|
152
|
+
role="button"
|
|
153
|
+
onClick={floorPlanOnClick}
|
|
154
|
+
>
|
|
155
|
+
<img src={iconLayers} className="" style={{ width: "18px" }} />{" "}
|
|
156
|
+
Grundriss
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
<div className="d-flex flex-column listing-compacts col-md-6">
|
|
162
|
+
<div className="d-flex align-self-end justify-content-end gap-2">
|
|
163
|
+
<img
|
|
164
|
+
src={shareIcon}
|
|
165
|
+
alt="Location Icon"
|
|
166
|
+
className="w-50 "
|
|
167
|
+
onClick={handleSharePopUp}
|
|
168
|
+
/>
|
|
169
|
+
<img src={moreIcon} alt="Location Icon" className="" />
|
|
170
|
+
</div>
|
|
171
|
+
<div>
|
|
172
|
+
<span className="propertyTitle align-items-start ">
|
|
173
|
+
{props.property.expose?.title}
|
|
174
|
+
</span>
|
|
175
|
+
</div>
|
|
176
|
+
<div>
|
|
177
|
+
{" "}
|
|
178
|
+
<div className="d-flex ">
|
|
179
|
+
<img src={locationIcon} alt="Location Icon" className="Vector" />
|
|
180
|
+
<span className="locationTexts ">
|
|
181
|
+
{props.property.city || "N/A"}
|
|
182
|
+
</span>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
<div className="d-flex flex-row gap-3 col-6 col-lg-8 justify-content-between ">
|
|
186
|
+
<span className="value col-lg-3 col-md-4 col-sm-6 ">
|
|
187
|
+
{formatPrice(props.property?.evaluation?.askingPrice ?? 0)} €
|
|
188
|
+
<br />
|
|
189
|
+
<span className="details">Kaufpreis</span>
|
|
190
|
+
</span>
|
|
191
|
+
<span className="text-dark value col-lg-4 col-md-4 col-sm-6 text-truncate ">
|
|
192
|
+
{+props.property.rooms}
|
|
193
|
+
<br />
|
|
194
|
+
<span className="details">
|
|
195
|
+
{" "}
|
|
196
|
+
<span>Zimmer</span>
|
|
197
|
+
</span>
|
|
198
|
+
</span>
|
|
199
|
+
<span className="text-dark value col-lg-3 col-md-3 col-sm-4 text-truncate ">
|
|
200
|
+
{+props.property.bathrooms}
|
|
201
|
+
<br />
|
|
202
|
+
<span className="details">
|
|
203
|
+
<span>Bad</span>
|
|
204
|
+
</span>
|
|
205
|
+
</span>
|
|
206
|
+
<span className="text-dark value col-lg-4 col-md-5 col-sm-7 ">
|
|
207
|
+
{props.property.usableArea} m²
|
|
208
|
+
<br />
|
|
209
|
+
<span className="details">
|
|
210
|
+
<span>Wohnfläche</span>
|
|
211
|
+
</span>
|
|
212
|
+
</span>
|
|
213
|
+
</div>
|
|
214
|
+
<div className="labelTopClass d-flex top-0 start-0 col-sm-5 col-lg-8 ">
|
|
215
|
+
<div className=" align-items-center d-flex flex-row gap-3">
|
|
216
|
+
{props.property.historicalProtection && (
|
|
217
|
+
<label className="thirdLabels justify-content-center align-items-center">
|
|
218
|
+
<span className="layersText ">{"Denkmalschutz"}</span>
|
|
219
|
+
</label>
|
|
220
|
+
)}
|
|
221
|
+
|
|
222
|
+
{props.property.basement && (
|
|
223
|
+
<label className="secondLabel justify-content-center align-items-center">
|
|
224
|
+
<span className="layersText ">{"Keller"}</span>
|
|
225
|
+
</label>
|
|
226
|
+
)}
|
|
227
|
+
{props.property.balcony && (
|
|
228
|
+
<label className="secondLabel justify-content-center align-items-center">
|
|
229
|
+
<span className="layersText ">{"Balkon"}</span>
|
|
230
|
+
</label>
|
|
231
|
+
)}
|
|
232
|
+
{props.property.terrace && (
|
|
233
|
+
<label className="thirdLabels justify-content-center align-items-center ">
|
|
234
|
+
<span className="layersText">{"Terrace"}</span>
|
|
235
|
+
</label>
|
|
236
|
+
)}
|
|
237
|
+
{props.property.guestBathroom && (
|
|
238
|
+
<label className="col-1 thirdLabels justify-content-center align-items-center ">
|
|
239
|
+
<span className="layersText ">{"Gäste-WC"}</span>
|
|
240
|
+
</label>
|
|
241
|
+
)}
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
244
|
+
<div className="Frame-136 d-flex flex-row">
|
|
245
|
+
<div className="d-flex flex-column flex-lg-row col-4 justify-content-between ">
|
|
246
|
+
<img src={immooly} alt="Logo" className="immooly" />
|
|
247
|
+
</div>
|
|
248
|
+
<div className="d-flex flex-column flex-lg-row justify-content-between">
|
|
249
|
+
<span className="d-flex col-5">
|
|
250
|
+
Herr Florian Gauss Immogart UGh
|
|
251
|
+
</span>
|
|
252
|
+
<button
|
|
253
|
+
className="kontactbutton text-light "
|
|
254
|
+
onClick={handleMessagPopUp}
|
|
255
|
+
role="button"
|
|
256
|
+
>
|
|
257
|
+
<span className="kontact-button-text">Kontakt aufnehmen </span>
|
|
258
|
+
</button>
|
|
259
|
+
</div>
|
|
260
|
+
</div>
|
|
261
|
+
</div>
|
|
262
|
+
{floorPlan && (
|
|
263
|
+
<FloorPlanPopup
|
|
264
|
+
contentUrl={props.floorPlanUrl}
|
|
265
|
+
onCloseClick={() => setFloorPlan(false)}
|
|
266
|
+
/>
|
|
267
|
+
)}
|
|
268
|
+
{/* {messagePopUp && (
|
|
269
|
+
<MessagePopUp
|
|
270
|
+
onCloseClick={() => setMessagPopUp(false)}
|
|
271
|
+
sellerFirstName={props.userData?.firstname}
|
|
272
|
+
sellerLastName={props.userData?.lastname}
|
|
273
|
+
themesList={props.themesList}
|
|
274
|
+
onSubmit={props.onMessagePopupSubmitClick}
|
|
275
|
+
/>
|
|
276
|
+
)} */}
|
|
277
|
+
{sharePopUp && <SharePopup onClick={() => setSharePopUp(false)} />}
|
|
278
|
+
</div>
|
|
279
|
+
);
|
|
280
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import closeIcon from "../../assets/images/icon_close_2.png";
|
|
3
|
-
import "./Popup.css";
|
|
4
|
-
import "../../styles/common.css";
|
|
5
|
-
|
|
6
|
-
interface PopupProps {
|
|
7
|
-
children: React.ReactNode;
|
|
8
|
-
onCloseClick: () => void;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const Popup: React.FC<PopupProps> = ({ onCloseClick, children }) => {
|
|
12
|
-
return (
|
|
13
|
-
<div className="popup-overlay">
|
|
14
|
-
<div className="shareSection col-12 d-flex position-relative flex-column mx-auto justify-content-center col-5 col-lg-6 d-flex gap-4">
|
|
15
|
-
<div className="end-0 top-0 position-absolute ">
|
|
16
|
-
<img
|
|
17
|
-
src={closeIcon}
|
|
18
|
-
alt="close"
|
|
19
|
-
className="closeIcon me-2"
|
|
20
|
-
onClick={onCloseClick}
|
|
21
|
-
/>
|
|
22
|
-
</div>
|
|
23
|
-
{children}
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
);
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export default Popup;
|
|
1
|
+
import React from "react";
|
|
2
|
+
import closeIcon from "../../assets/images/icon_close_2.png";
|
|
3
|
+
import "./Popup.css";
|
|
4
|
+
import "../../styles/common.css";
|
|
5
|
+
|
|
6
|
+
interface PopupProps {
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
onCloseClick: () => void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const Popup: React.FC<PopupProps> = ({ onCloseClick, children }) => {
|
|
12
|
+
return (
|
|
13
|
+
<div className="popup-overlay">
|
|
14
|
+
<div className="shareSection col-12 d-flex position-relative flex-column mx-auto justify-content-center col-5 col-lg-6 d-flex gap-4">
|
|
15
|
+
<div className="end-0 top-0 position-absolute ">
|
|
16
|
+
<img
|
|
17
|
+
src={closeIcon}
|
|
18
|
+
alt="close"
|
|
19
|
+
className="closeIcon me-2"
|
|
20
|
+
onClick={onCloseClick}
|
|
21
|
+
/>
|
|
22
|
+
</div>
|
|
23
|
+
{children}
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export default Popup;
|