nestiq-component-library 1.1.56 → 1.1.58

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