From 2e40b3a6cde685491812f298f482582cffa20f6d Mon Sep 17 00:00:00 2001 From: Lanskikh Date: Mon, 2 Mar 2026 19:02:43 +0500 Subject: [PATCH] Add new popup images for Downtown, Dubai Marina, and Marasi Drive; update existing images for better quality. Remove TestPage route from main.tsx and introduce UnitSlider component for enhanced unit display functionality. --- public/images/map/markers/popups/downtown.png | Bin 2772 -> 7539 bytes .../map/markers/popups/downtown_old.png | Bin 0 -> 2772 bytes .../map/markers/popups/dubai-marina.png | Bin 3138 -> 7863 bytes .../map/markers/popups/dubai-marina_old.png | Bin 0 -> 3138 bytes public/images/map/markers/popups/hq.png | Bin 3051 -> 8722 bytes .../map/markers/popups/marasi-drive.png | Bin 2906 -> 7461 bytes .../map/markers/popups/marasi-drive_old.png | Bin 0 -> 2906 bytes src/components/AboutHQ.tsx | 12 +- src/components/FloorPlanMarasiDriveEast.tsx | 3 + .../FloorPlanMarasiDriveWestLower.tsx | 3 + .../FloorPlanMarasiDriveWestUpper.tsx | 3 + src/components/Marker.tsx | 2 +- src/components/OnFloorMask.tsx | 46 ++- src/components/PopupContainer.tsx | 9 +- src/components/SearchFilters.tsx | 4 +- src/components/SequenceSlider.tsx | 13 +- src/components/UnitTypeCard.tsx | 6 +- src/components/UnitTypeImageWithMarkers.tsx | 16 +- .../{UnitSlider.tsx => _UnitSlider.tsx} | 0 .../floor-plans/AmenitiesFloorView.tsx | 8 +- .../floor-plans/GenericFloorPlan.tsx | 77 +++- src/components/ui/Button.tsx | 7 +- src/data/brochures.ts | 2 +- src/data/complex-config.ts | 2 +- src/data/floor-plan-config.ts | 1 + src/data/markers.ts | 12 +- src/data/projects.ts | 15 +- src/main.tsx | 5 - src/pages/UnitPage.tsx | 384 ++++++++++-------- 29 files changed, 375 insertions(+), 255 deletions(-) create mode 100644 public/images/map/markers/popups/downtown_old.png create mode 100644 public/images/map/markers/popups/dubai-marina_old.png create mode 100644 public/images/map/markers/popups/marasi-drive_old.png rename src/components/{UnitSlider.tsx => _UnitSlider.tsx} (100%) diff --git a/public/images/map/markers/popups/downtown.png b/public/images/map/markers/popups/downtown.png index d79b0f61eaae9bb1f446742f1bf509a0104497fc..d53ff47f9ec9e361fe94b3441686b049ffdd8d12 100644 GIT binary patch literal 7539 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 BUVi`p literal 2772 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 O1}Mp?%T`KT2LBInYv|el literal 3138 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 I68eGv2mZ6h1ONa4 delta 3031 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 ZJ_0H&2X-9kv?Krk002ovPDHLkV1i)Vzm5O^ diff --git a/public/images/map/markers/popups/marasi-drive.png b/public/images/map/markers/popups/marasi-drive.png index 925bde369c3634859cb33486dd111e90ee90a1c7..f4c76a25947909e5855e3089822e18e9127762c8 100644 GIT binary patch literal 7461 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

- {`Rove Home HQ — - Work looks different - here`} + {`HQ by Rove instead — + Work looks different + here`}

@@ -55,7 +55,7 @@ export default function AboutHQ() { {`Welcome to the office you actually want to show up for`} -

+

HQ by Rove was born out of a question: what if the office could feel alive again? Now, the first ever hospitality-branded office building in Dubai is here to answer it. Starting in Marasi Bay @@ -82,7 +82,7 @@ export default function AboutHQ() { More than an office,{" "}
a lifestyle. -

+

{`Living rooms became boardrooms, kitchens became creative hubs. But as the world returned, the office didn’t keep up. HQ by Rove is the answer - an office with a living touch.`} @@ -274,7 +274,7 @@ export default function AboutHQ() {

-

+

{`Work looks different here`}

diff --git a/src/components/FloorPlanMarasiDriveEast.tsx b/src/components/FloorPlanMarasiDriveEast.tsx index 2802f74..fa3c528 100644 --- a/src/components/FloorPlanMarasiDriveEast.tsx +++ b/src/components/FloorPlanMarasiDriveEast.tsx @@ -6,12 +6,14 @@ interface FloorPlanMarasiDriveEastProps { selectedFloor: string | null; unitsOnFloor: Unit[]; chosenUnit?: Unit; + isUnitPage?: boolean; } function FloorPlanMarasiDriveEast({ selectedFloor, unitsOnFloor, chosenUnit, + isUnitPage, }: FloorPlanMarasiDriveEastProps) { return ( diff --git a/src/components/FloorPlanMarasiDriveWestLower.tsx b/src/components/FloorPlanMarasiDriveWestLower.tsx index 85170d7..79d0e9c 100644 --- a/src/components/FloorPlanMarasiDriveWestLower.tsx +++ b/src/components/FloorPlanMarasiDriveWestLower.tsx @@ -6,12 +6,14 @@ interface FloorPlanMarasiDriveWestLowerProps { selectedFloor: string | null; unitsOnFloor: Unit[]; chosenUnit?: Unit; + isUnitPage?: boolean; } function FloorPlanMarasiDriveWestLower({ selectedFloor, unitsOnFloor, chosenUnit, + isUnitPage, }: FloorPlanMarasiDriveWestLowerProps) { return ( diff --git a/src/components/FloorPlanMarasiDriveWestUpper.tsx b/src/components/FloorPlanMarasiDriveWestUpper.tsx index add5453..789219a 100644 --- a/src/components/FloorPlanMarasiDriveWestUpper.tsx +++ b/src/components/FloorPlanMarasiDriveWestUpper.tsx @@ -6,12 +6,14 @@ interface FloorPlanMarasiDriveWestUpperProps { selectedFloor: string | null; unitsOnFloor: Unit[]; chosenUnit?: Unit; + isUnitPage?: boolean; } function FloorPlanMarasiDriveWestUpper({ unitsOnFloor, selectedFloor, chosenUnit, + isUnitPage, }: FloorPlanMarasiDriveWestUpperProps) { return ( diff --git a/src/components/Marker.tsx b/src/components/Marker.tsx index b0e0432..0c15c04 100644 --- a/src/components/Marker.tsx +++ b/src/components/Marker.tsx @@ -64,7 +64,7 @@ function Marker({ />

diff --git a/src/components/OnFloorMask.tsx b/src/components/OnFloorMask.tsx index 0716bb8..6f3032d 100644 --- a/src/components/OnFloorMask.tsx +++ b/src/components/OnFloorMask.tsx @@ -1,16 +1,50 @@ +import { useQuery } from "@tanstack/react-query"; +import { api } from "../api/ky"; import { Unit } from "../types/IUnit"; import GenericFloorPlan from "./floor-plans/GenericFloorPlan"; import { getFloorPlanConfigForUnit } from "../data/floor-plan-config"; import { getSlugFromProjectName } from "../data/complex-config"; +import { ComplexName } from "../types/ComplexName"; + +// ─── Helpers ───────────────────────────────────────────── + +function getFloorParam(complexName: ComplexName, unit: Unit): string { + if (complexName === "dubai-marina" && (unit.floor === 39 || unit.floor === 40)) + return "39"; + if (complexName === "dubai-marina" && (unit.floor === 41 || unit.floor === 42)) + return "41"; + if (complexName === "hq" && (unit.floor === 29 || unit.floor === 30)) + return "29"; + return unit.floor.toString(); +} // ─── Component ─────────────────────────────────────────── function OnFloorMask({ unit }: { unit: Unit }) { const complexName = getSlugFromProjectName(unit.project); - if (!complexName) return null; + const config = complexName + ? getFloorPlanConfigForUnit(complexName, unit) + : null; + const floorParam = complexName ? getFloorParam(complexName, unit) : ""; - const config = getFloorPlanConfigForUnit(complexName, unit); - if (!config) return null; + const { data: unitsOnFloor } = useQuery({ + queryKey: ["units-on-floor", complexName, floorParam, unit.wing], + queryFn: () => + api + .get( + `units/on-floor?project=${complexName}&floor=${floorParam}${ + complexName === "marasi-drive" && unit.wing + ? `&wing=${unit.wing}` + : "" + }` + ) + .json(), + enabled: !!complexName && !!config, + }); + + if (!complexName || !config) return null; + + const units = unitsOnFloor ?? [unit]; // Marasi Drive uses component-based rendering (inline SVG) if (config.component) { @@ -18,8 +52,9 @@ function OnFloorMask({ unit }: { unit: Unit }) { return ( ); } @@ -34,8 +69,9 @@ function OnFloorMask({ unit }: { unit: Unit }) { getMaskKey={config.getMaskKey} filterUnits={config.filterUnits} selectedFloor={unit.floor.toString()} - unitsOnFloor={[unit]} + unitsOnFloor={units} chosenUnit={unit} + isUnitPage wing={config.wing} /> ); diff --git a/src/components/PopupContainer.tsx b/src/components/PopupContainer.tsx index 3e2987c..5dfeb2b 100644 --- a/src/components/PopupContainer.tsx +++ b/src/components/PopupContainer.tsx @@ -61,13 +61,14 @@ function PopupContainer() {
diff --git a/src/components/SearchFilters.tsx b/src/components/SearchFilters.tsx index aa240cf..809b264 100644 --- a/src/components/SearchFilters.tsx +++ b/src/components/SearchFilters.tsx @@ -173,7 +173,7 @@ function SearchFilters({ )}
-

+

{inModal ? "Filters" : "Search"}

@@ -372,7 +372,7 @@ function SearchFilters({
-

Filters

+

Filters

- ROVE Home{" "} {markers.find((marker) => marker.name === complexName)?.title}

diff --git a/src/components/UnitTypeCard.tsx b/src/components/UnitTypeCard.tsx index 09630ea..2fca05d 100644 --- a/src/components/UnitTypeCard.tsx +++ b/src/components/UnitTypeCard.tsx @@ -25,7 +25,11 @@ function UnitTypeCard({ project, type }: { project: Project; type: UnitType }) {
diff --git a/src/components/UnitTypeImageWithMarkers.tsx b/src/components/UnitTypeImageWithMarkers.tsx index 971ef42..559320c 100644 --- a/src/components/UnitTypeImageWithMarkers.tsx +++ b/src/components/UnitTypeImageWithMarkers.tsx @@ -60,24 +60,28 @@ function UnitTypeImageWithMarkers({ }} /> {filteredLegend.map((item, index) => { - const coords = unitTypeVariant?.endsWith("left") ? item.left : item.right; + const coords = unitTypeVariant?.endsWith("left") + ? item.left + : item.right; return ( setHoveredIndex(index)} onMouseLeave={() => setHoveredIndex(null)} /> ); })} {filteredLegend.map((item, index) => { - const coords = unitTypeVariant?.endsWith("left") ? item.left : item.right; + const coords = unitTypeVariant?.endsWith("left") + ? item.left + : item.right; return (
-

{floor.displayName}

+

{floor.displayName}

setModal()} > + Play Video )}
@@ -94,7 +94,7 @@ function AmenitiesFloorView({ floor }: AmenitiesFloorViewProps) { {hasIndoorOutdoorSplit && indoorAmenities.length > 0 && (
-

Indoor Amenities

+

Indoor Amenities

{indoorAmenities.map((amenity, index) => ( @@ -108,7 +108,7 @@ function AmenitiesFloorView({ floor }: AmenitiesFloorViewProps) { )}
-

+

{hasIndoorOutdoorSplit ? "Outdoor Amenities" : "Amenities"}

string; /** Optional unit filter (e.g. filterDuplicateUnits for combinable layouts) */ @@ -40,6 +43,7 @@ function GenericFloorPlan({ selectedFloor, unitsOnFloor, chosenUnit, + isUnitPage = false, getMaskKey = defaultGetMaskKey, filterUnits, wing, @@ -61,8 +65,16 @@ function GenericFloorPlan({ {...svgProps} > {/* Background: either an image or custom inline SVG */} - {imagePath && } - {children} + {imagePath && ( + + )} + {children ? ( + {children} + ) : null} {/* Unit overlays */} {units.map((unit) => { @@ -76,6 +88,8 @@ function GenericFloorPlan({ key={unit.unitNo} complexName={complexName} wing={wing} + chosenUnit={chosenUnit} + isUnitPage={isUnitPage} selectedUnit={selectedUnit} onSelect={setSelectedUnit} formattedUnitType={maskData.formattedUnitType} @@ -104,6 +118,8 @@ function GenericFloorPlanUnit({ formattedUnitType, onSelect, selectedUnit, + chosenUnit, + isUnitPage = false, }: { complexName: ComplexName; wing?: "East" | "West"; @@ -114,18 +130,23 @@ function GenericFloorPlanUnit({ formattedUnitType: string; selectedUnit: Unit | null; onSelect: (unit: Unit | null) => void; + chosenUnit?: Unit | null; + isUnitPage?: boolean; }) { + const navigate = useNavigate(); const { setPopup, setSide, setPosition } = usePopupStore(); - function handleClick(unit: Unit) { - window.open(`/complex/${complexName}/${unit.unitNo}`, "_blank"); + const isOtherUnit = + isUnitPage && chosenUnit && unit.unitNo !== chosenUnit.unitNo; + + function handleClick(u: Unit) { + setPopup(null); + navigate(`/complex/${complexName}/${u.unitNo}`); } function handleMouseEnter() { if (floor === null) return; - setSide("top"); - if (!selectedUnit) setPopup( @@ -157,18 +181,35 @@ function GenericFloorPlanUnit({ !isMobile && !selectedUnit && handleClick(unit)} - onMouseEnter={!isMobile ? handleMouseEnter : undefined} - onMouseLeave={() => !isMobile && setPopup(null)} - onTouchStart={(e) => { - onSelect(unit); - setPosition({ x: e.touches[0].clientX, y: e.touches[0].clientY }); - handleMouseEnter(); - }} + onClick={ + !isUnitPage && !isMobile && !selectedUnit + ? () => handleClick(unit) + : undefined + } + onMouseEnter={ + !isUnitPage && !isMobile ? handleMouseEnter : undefined + } + onMouseLeave={!isUnitPage && !isMobile ? () => setPopup(null) : undefined} + onTouchStart={ + !isUnitPage + ? (e) => { + onSelect(unit); + setPosition({ x: e.touches[0].clientX, y: e.touches[0].clientY }); + handleMouseEnter(); + } + : undefined + } className={clsx( - "fill-transparent hover:fill-[#00BED7] opacity-40 isolate cursor-pointer transition-colors", - selectedUnit?.unitNo === unit.unitNo && - "!fill-[#00BED7] opacity-40 cursor-default" + "isolate transition-colors", + isUnitPage + ? isOtherUnit + ? "fill-[#9CA3AF] opacity-50 pointer-events-none" + : "fill-[#00BED7] opacity-40" + : clsx( + "fill-transparent hover:fill-[#00BED7] opacity-40 cursor-pointer", + selectedUnit?.unitNo === unit.unitNo && + "!fill-[#00BED7] opacity-40 cursor-default" + ) )} d={d} /> diff --git a/src/components/ui/Button.tsx b/src/components/ui/Button.tsx index 99e9e59..70ed8d4 100644 --- a/src/components/ui/Button.tsx +++ b/src/components/ui/Button.tsx @@ -3,7 +3,7 @@ import { clsx } from "clsx"; interface ButtonProps extends React.ButtonHTMLAttributes { children: React.ReactNode; - variant?: "link" | "primary" | "secondary" | "tertiary" | "cta"; + variant?: "link" | "primary" | "secondary" | "tertiary" | "cta" | "fab"; className?: string; size?: "small" | "medium" | "large"; onlyIcon?: boolean; @@ -50,6 +50,11 @@ function Button({ "bg-white hover:!bg-white hover:bg-opacity-80 text-[#0D1922]/70 disabled:!bg-[#0D1922] disabled:!bg-opacity-[8%] disabled:text-[#0D1922]/40", variant === "tertiary" && "text-xs leading-[135%] text-[#0D1922]/70 !px-0 hover:!text-[#0D1922] disabled:!bg-transparent", + variant === "fab" && + "bg-[#0D192266] hover:bg-[#0D192299] active:bg-[#00BED7] disabled:bg-[#0D192214] disabled:text-[#0D192214] text-white backdrop-blur-md rounded-full", + variant === "fab" && onlyIcon + ? "active:!bg-[#0D192299] active:!text-[#00BED7]" + : "", roundedFull ? "rounded-full" : "2xl:rounded-[0.833vw] rounded-xl", className )} diff --git a/src/data/brochures.ts b/src/data/brochures.ts index c047d73..ac9805a 100644 --- a/src/data/brochures.ts +++ b/src/data/brochures.ts @@ -101,7 +101,7 @@ export const projectBrochures: ProjectBrochures[] = [ ], }, { - projectTitle: "Rove Home HQ", + projectTitle: "HQ by Rove", brochures: [ { title: "Main Brochure", diff --git a/src/data/complex-config.ts b/src/data/complex-config.ts index 1e8d2a5..feb5e8b 100644 --- a/src/data/complex-config.ts +++ b/src/data/complex-config.ts @@ -38,7 +38,7 @@ const complexConfigs: Record = { }, hq: { slug: "hq", - projectName: "Rove Home HQ", + projectName: "HQ by Rove", floors: hqFloors, hasWings: false, hasCombinable: false, diff --git a/src/data/floor-plan-config.ts b/src/data/floor-plan-config.ts index 5d3ceb0..7432feb 100644 --- a/src/data/floor-plan-config.ts +++ b/src/data/floor-plan-config.ts @@ -48,6 +48,7 @@ export interface FloorPlanLayoutConfig { selectedFloor: string | null; unitsOnFloor: Unit[]; chosenUnit?: Unit; + isUnitPage?: boolean; }>; /** Wing designation for Marasi Drive popups */ wing?: "East" | "West"; diff --git a/src/data/markers.ts b/src/data/markers.ts index 8ce1970..042cc61 100644 --- a/src/data/markers.ts +++ b/src/data/markers.ts @@ -7,7 +7,7 @@ export const markers: IMarker[] = [ x: "54.2%", y: "50.6%", popupPosition: "left", - title: "Downtown", + title: "Rove Home Downtown", disabled: true, }, { @@ -16,7 +16,7 @@ export const markers: IMarker[] = [ x: "55.6%", y: "52.5%", popupPosition: "right", - title: "Marasi Drive", + title: "Rove Home Marasi Drive", numberOfUnits: 809, }, { @@ -25,16 +25,16 @@ export const markers: IMarker[] = [ x: "35.35%", y: "71.6%", popupPosition: "right", - title: "Dubai Marina", + title: "Rove Home Dubai Marina", numberOfUnits: 958, }, { - id:4 , + id: 4, name: "hq", x: "57%", y: "48%", popupPosition: "right", - title: "HQ", + title: "HQ by Rove", numberOfUnits: 1000, - } + }, ]; diff --git a/src/data/projects.ts b/src/data/projects.ts index e73a392..d52164a 100644 --- a/src/data/projects.ts +++ b/src/data/projects.ts @@ -1989,14 +1989,14 @@ export const projects: Project[] = [ ], }, { - title: "Rove Home HQ", + title: "HQ by Rove", slug: "hq", img: "/images/search/rove_home_hq.png", buildingType: "commercial", hasSides: false, types: [ { - name: "Studio", + name: "Studio office", slug: "studio", floors: "Ground Floor", area: "TBD Sqft", @@ -2054,7 +2054,7 @@ export const projects: Project[] = [ tourAvailable: false, }, { - name: "Simplex Edge", + name: "Simplex Edge office", slug: "simplex-edge", floors: "Ground Floor", area: "TBD Sqft", @@ -2108,12 +2108,11 @@ export const projects: Project[] = [ left: { x: 115, y: 185 }, right: { x: 115, y: 185 }, }, - ], tourAvailable: false, }, { - name: "Loft Edge", + name: "Loft Edge office", slug: "loft-edge", floors: "Ground Floor & Mezzanine", area: "TBD Sqft", @@ -2263,7 +2262,7 @@ export const projects: Project[] = [ tourAvailable: false, }, { - name: "Penthouse Loft", + name: "Penthouse Loft office", slug: "penthouse-loft", floors: "Upper Floors", area: "TBD Sqft", @@ -2327,7 +2326,7 @@ export const projects: Project[] = [ }, { name: "Powder room", - left: { x: 430, y: 536}, + left: { x: 430, y: 536 }, right: { x: 430, y: 536 }, floor: "lower", }, @@ -2407,7 +2406,7 @@ export const projects: Project[] = [ tourAvailable: false, }, { - name: "Presidential Loft", + name: "Presidential Loft office", slug: "presidential-loft", floors: "Upper Floors", area: "TBD Sqft", diff --git a/src/main.tsx b/src/main.tsx index ded2b88..56a6e21 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -20,7 +20,6 @@ import LayoutWithoutFooter from "./layout/LayoutWithoutFooter.tsx"; import { queryClient } from "./lib/queryClient.ts"; import AboutComplexPage from "./pages/AboutComplexPage.tsx"; import UnitTypeItemPage from "./pages/UnitTypeItemPage.tsx"; -import TestPage from "./pages/TestPage.tsx"; import UnitPage from "./pages/UnitPage.tsx"; import PopupContainer from "./components/PopupContainer.tsx"; import VirtualTourPage from "./pages/VirtualTourPage.tsx"; @@ -80,10 +79,6 @@ const route = createBrowserRouter([ }, ], }, - { - path: "/test", - element: , - }, ]); createRoot(document.getElementById("root")!).render( diff --git a/src/pages/UnitPage.tsx b/src/pages/UnitPage.tsx index 2c2ddbf..0b2854c 100644 --- a/src/pages/UnitPage.tsx +++ b/src/pages/UnitPage.tsx @@ -1,3 +1,4 @@ +import { useEffect } from "react"; import { useQuery } from "@tanstack/react-query"; import { useParams } from "react-router"; import { api } from "../api/ky"; @@ -42,6 +43,17 @@ function UnitPage() { const { setModal } = useModalStore(); + const displayUnitType = unit + ? formattedUnitTypes.get(unit.unitType) || unit.unitType + : "Rove Home"; + + useEffect(() => { + document.title = displayUnitType; + return () => { + document.title = "Rove Home"; + }; + }, [displayUnitType]); + if (!unit) return null; function handleShare() { @@ -51,151 +63,167 @@ function UnitPage() { }); } - if (!unit) return
Loading...
; - const unitType = projects .find((project) => project.slug === unit.projectSlug) ?.types.find((type) => type.slug === unit.unitTypeVariantSlug); return ( - - - {unit.unitTypeVariantSlug} - - -
- - {unit.isLoft ? ( - <> - - - - - - - - ) : ( - +
+
+ + {unit.isLoft ? ( + <> + - )} - - - - - - {innerWidth >= 768 ? ( - - + - ) : ( - unitType?.interiors.map((interior, index) => ( - - + ) : ( + + + + )} + + + + + + {innerWidth >= 768 ? ( + + + + ) : ( + unitType?.interiors.map((interior, index) => ( + + + + )) + )} + + {unit.projectSlug === "hq" && + [ + "loft-edge", + "penthouse-loft", + "presidential-loft", + "studio", + ].includes(unit.unitTypeVariantSlug) && ( + + )} +
+
+
+
+
+

+ {formattedUnitTypes.get(unit.unitType) || unit.unitType} +

+
+

{unit.project}

+
+ {unit.wing && ( + <> +

{unit.wing}

-

{unit.unitNo}

-
-
-
-
- - + + )} +

Floor {unit.floor}

+
+

{unit.unitNo}

-
- {unitType?.video && ( - - )} -
-
-

Total Area

-

{unit.squareFt.toFixed(2)} Sqft

-
- {/*
+
+
+ + +
+
+
+ {unitType?.video && ( + + )} +
+
+

Total Area

+

{unit.squareFt.toFixed(2)} Sqft

+
+ {/*

Suite Area

{unit.suitsArea.toFixed(2)} Sqft

@@ -205,7 +233,7 @@ function UnitPage() { {unit.balconyArea.toFixed(2)} Sqft

*/} - {/*
+ {/*

Status

{unit.projectSlug === "dubai-marina" && @@ -215,20 +243,20 @@ function UnitPage() { unit.state.slice(1).replace(/_/g, " ")}

*/} -
-

Parking Space

-

{unit.noOfParkingSpace}

-
-
- {/*

{`AED ${Intl.NumberFormat( +

+

Parking Space

+

{unit.noOfParkingSpace}

+
+
+ {/*

{`AED ${Intl.NumberFormat( "ar-AE", { currency: "AED", minimumFractionDigits: 0, } ).format(unit.salesPrice)}`}

*/} -
- {/*
+
+ {/*
*/} -
- {projects - .find((project) => project.slug === params.complexName) - ?.types.find((type) => type.slug === unit.unitTypeVariantSlug) - ?.tourAvailable && ( - - )} - {/* + )} + {/* */} - {/* videos for hq units */} - {unit.projectSlug === "hq" && - [ - "loft-edge", - "penthouse-loft", - "presidential-loft", - "studio", - ].includes(unit.unitTypeVariantSlug) && ( - - )} -
-
+ {/* videos for hq units */} + {/* {unit.projectSlug === "hq" && + [ + "loft-edge", + "penthouse-loft", + "presidential-loft", + "studio", + ].includes(unit.unitTypeVariantSlug) && ( + + )} */}
- - +
+
); }