@@ -84,287 +77,20 @@ function FloorsPage() {
isOpen={!!selectedFloor}
onClose={() => setSelectedFloor(null)}
>
- {complexName === "dubai-marina" && (
- <>
- {selectedFloor === "Rooftop" &&
}
- {selectedFloor === "Ground Level" &&
}
- {selectedFloor === "Podium Level" &&
}
- {!!parseInt(selectedFloor!) && (
-
setPopup(null)}
- >
-
-
{selectedFloor} floor
-
- item.floor === parseInt(selectedFloor!),
- )?.others.totalUnits || 0
- } Apartments`}
- />
-
-
-
-
-
-
-
- {selectedFloor !== "39-40" && selectedFloor !== "41-42" && (
-
-
-
-
- )}
-
- !isMobile && setPosition({ x: e.clientX, y: e.clientY })
- }
- >
- {selectedFloor && unitsOnFloor && (
- <>
- {+selectedFloor >= 7 && +selectedFloor < 39 && (
- <>
- {!isCombinable ? (
-
- ) : (
-
- )}
- >
- )}
- {selectedFloor === "39-40" && (
-
- )}
- {selectedFloor === "41-42" && (
-
- )}
- >
- )}
-
-
-
- )}
- >
+ {currentFloor && (
+
)}
- {complexName === "marasi-drive" && (
- <>
- {selectedFloor === "Rooftop" &&
}
- {selectedFloor === "Ground Level" &&
}
- {selectedFloor === "Podium Level" &&
}
- {selectedFloor === "Sky Garden" &&
}
- {selectedFloor && !!parseInt(selectedFloor.split(" ").at(-1)!) && (
-
setPopup(null)}
- >
-
-
- {selectedFloor.split(" ").at(-1)} floor
-
-
-
- item.floor ===
- parseInt(selectedFloor.split(" ").at(-1)!),
- )?.East?.totalUnits || 0) +
- (floorsData?.find(
- (item) =>
- item.floor ===
- parseInt(selectedFloor.split(" ").at(-1)!),
- )?.West?.totalUnits || 0)
- } Apartments`}
- />
- {/* */}
-
-
-
-
-
-
-
- !isMobile && setPosition({ x: e.clientX, y: e.clientY })
- }
- >
- {unitsOnFloor && selectedFloor.split(" ")[0] === "East" && (
-
- )}
- {selectedFloor.split(" ")[0] === "West" && unitsOnFloor && (
- <>
- {+selectedFloor.split(" ")[1] < 24 ? (
-
- ) : (
-
- )}
- >
- )}
-
-
- )}
- >
+ {!currentFloor && complexName === "hq" && <>HQ>}
+ {!currentFloor && selectedFloor && (
+
Floor not found: {selectedFloor}
)}
- {complexName === "hq" && <>HQ>}
);
diff --git a/src/types/Floor.ts b/src/types/Floor.ts
new file mode 100644
index 0000000..0a1b029
--- /dev/null
+++ b/src/types/Floor.ts
@@ -0,0 +1,36 @@
+// Базовый интерфейс для всех этажей
+export interface BaseFloorData {
+ id: string;
+ name: string; // "1", "Rooftop", "Ground Level" и т.д.
+ displayName: string; // "1st Floor", "Rooftop"
+}
+
+// Жилой этаж с квартирами и SVG масками
+export interface ResidentialFloorData extends BaseFloorData {
+ type: 'residential';
+ floorNumber: number;
+ wing?: 'East' | 'West'; // для Marasi Drive
+}
+
+// Этаж с удобствами
+export interface AmenitiesFloorData extends BaseFloorData {
+ type: 'amenities';
+ amenitiesCount: {
+ total: number;
+ indoor?: number;
+ outdoor?: number;
+ };
+ amenitiesList: {
+ icon: string; // название компонента иконки
+ title: string;
+ }[];
+ images: {
+ main: string; // основное изображение (exterior)
+ interior?: string; // для переключения вида
+ content: string[]; // изображения для слайдера/галереи
+ };
+ video?: string; // путь к видео
+}
+
+// Discriminated union
+export type FloorData = ResidentialFloorData | AmenitiesFloorData;
diff --git a/src/types/Project.ts b/src/types/Project.ts
index dd66aeb..bc589ca 100644
--- a/src/types/Project.ts
+++ b/src/types/Project.ts
@@ -1,4 +1,5 @@
import UnitType from "./UnitType";
+import { FloorData } from "./Floor";
export default interface Project {
title: string;
@@ -7,6 +8,7 @@ export default interface Project {
buildingType: "residential" | "commercial";
types: UnitType[];
amenitiesFloors: AmenitiesFloor[];
+ floors?: FloorData[]; // New centralized floor data structure
}
export interface AmenitiesFloor {