diff --git a/app/src/components/layout/sidebarLeft/Outline.tsx b/app/src/components/layout/sidebarLeft/Outline.tsx index cb148d2..f755e04 100644 --- a/app/src/components/layout/sidebarLeft/Outline.tsx +++ b/app/src/components/layout/sidebarLeft/Outline.tsx @@ -96,25 +96,10 @@ const Outline: React.FC = () => { ) : (
{/*
- setIsLayersOpen((prev) => !prev)} - showKebabMenu={false} - showFocusIcon={true} - remove - /> -
*/} + setIsLayersOpen((prev) => !prev)} showKebabMenu={false} showFocusIcon={true} remove /> + */}
- {/* setIsBuildingsOpen((prev) => !prev)} - showKebabMenu={false} - showAddIcon={false} - /> */} + {/* setIsBuildingsOpen((prev) => !prev)} showKebabMenu={false} showAddIcon={false} /> */} setIsZonesOpen((prev) => !prev)} showKebabMenu={false} showAddIcon={false} />
diff --git a/app/src/components/ui/list/DropDownList.tsx b/app/src/components/ui/list/DropDownList.tsx index ba5acdd..b6bef8a 100644 --- a/app/src/components/ui/list/DropDownList.tsx +++ b/app/src/components/ui/list/DropDownList.tsx @@ -4,70 +4,65 @@ import KebabMenuListMultiSelect from "./KebebMenuListMultiSelect"; import List from "./OutlineList/ListNew"; interface DropDownListProps { - value?: string; - items?: { id: string; name: string }[]; - showFocusIcon?: boolean; - showAddIcon?: boolean; - showKebabMenu?: boolean; - kebabMenuItems?: { id: string; name: string }[]; - remove?: boolean; - isOpen: boolean; - onToggle: () => void; + value?: string; + items?: { id: string; name: string }[]; + showFocusIcon?: boolean; + showAddIcon?: boolean; + showKebabMenu?: boolean; + kebabMenuItems?: { id: string; name: string }[]; + remove?: boolean; + isOpen: boolean; + onToggle: () => void; } const DropDownList: React.FC = ({ - value = "Dropdown", - items = [], - showFocusIcon = false, - showAddIcon = true, - showKebabMenu = true, - kebabMenuItems = [ - { id: "Buildings", name: "Buildings" }, - { id: "Paths", name: "Paths" }, - { id: "Zones", name: "Zones" }, - ], - remove, - isOpen, - onToggle, + value = "Dropdown", + items = [], + showFocusIcon = false, + showAddIcon = true, + showKebabMenu = true, + kebabMenuItems = [ + { id: "Buildings", name: "Buildings" }, + { id: "Paths", name: "Paths" }, + { id: "Zones", name: "Zones" }, + ], + remove, + isOpen, + onToggle, }) => { - return ( -
-
-
{value}
-
- {showFocusIcon && ( -
- + return ( +
+
+
{value}
+
+ {showFocusIcon && ( +
+ +
+ )} + {showAddIcon && ( +
+ +
+ )} + {showKebabMenu && ( +
+ +
+ )} + +
- )} - {showAddIcon && ( -
- -
- )} - {showKebabMenu && ( -
- -
- )} - -
-
- {isOpen && ( -
- + {isOpen && ( +
+ +
+ )}
- )} -
- ); + ); }; export default DropDownList; diff --git a/app/src/components/ui/list/OutlineList/ListNew.tsx b/app/src/components/ui/list/OutlineList/ListNew.tsx index 674ea37..65c3e6d 100644 --- a/app/src/components/ui/list/OutlineList/ListNew.tsx +++ b/app/src/components/ui/list/OutlineList/ListNew.tsx @@ -6,44 +6,39 @@ import { useZoneAssetHandlers } from "../../../../functions/outlineHelpers/useZo import { useZonesExpansion } from "../../../../functions/outlineHelpers/useZonesExpansion"; const List: React.FC = ({ items = [], remove }) => { - const { selectedZone } = useSelectedZoneStore(); - const { zoneAssetId } = useZoneAssetId(); - const { expandedZones, toggleZoneExpansion } = useZonesExpansion(items); + const { selectedZone } = useSelectedZoneStore(); + const { zoneAssetId } = useZoneAssetId(); + const { expandedZones, toggleZoneExpansion } = useZonesExpansion(items); - const { - handleSelectZone, - handleZoneNameChange, - handleAssetClick, - handleZoneAssetName, - } = useZoneAssetHandlers(); + const { handleSelectZone, handleZoneNameChange, handleAssetClick, handleZoneAssetName } = useZoneAssetHandlers(); + + if (items.length === 0) { + return ( +
+
No items to display
+
+ ); + } - if (items.length === 0) { return ( -
-
No items to display
-
+
    + {items.map((item) => ( + + ))} +
); - } - - return ( -
    - {items.map((item) => ( - - ))} -
- ); }; export default List; diff --git a/app/src/modules/builder/floor/Instances/Instance/floorInstance.tsx b/app/src/modules/builder/floor/Instances/Instance/floorInstance.tsx index c5d2c5f..0b68c97 100644 --- a/app/src/modules/builder/floor/Instances/Instance/floorInstance.tsx +++ b/app/src/modules/builder/floor/Instances/Instance/floorInstance.tsx @@ -5,6 +5,7 @@ import { useBuilderStore } from "../../../../../store/builder/useBuilderStore"; import { useToggleView } from "../../../../../store/builder/store"; import * as Constants from "../../../../../types/world/worldConstants"; +import ExtrudePolygon from "../../../wrappers/geomentry/extrudePolygon"; import DecalInstance from "../../../Decal/decalInstance/decalInstance"; import texturePath from "../../../../../assets/textures/floor/white.png"; @@ -26,7 +27,6 @@ import material4Map from "../../../../../assets/textures/floor/tex3/metal_plate_ import material4RoughnessMap from "../../../../../assets/textures/floor/tex3/metal_plate_rough_1k.png"; import material4MetalicMap from "../../../../../assets/textures/floor/tex3/metal_plate_metal_1k.png"; import material4NormalMap from "../../../../../assets/textures/floor/tex3/metal_plate_nor_gl_1k.png"; -import ExtrudePolygon from "../../../wrappers/geomentry/extrudePolygon"; function FloorInstance({ floor }: { readonly floor: Floor }) { const { toggleView } = useToggleView(); diff --git a/app/src/modules/builder/zone/Instances/Instance/zoneInstance.tsx b/app/src/modules/builder/zone/Instances/Instance/zoneInstance.tsx index aa730c0..b453493 100644 --- a/app/src/modules/builder/zone/Instances/Instance/zoneInstance.tsx +++ b/app/src/modules/builder/zone/Instances/Instance/zoneInstance.tsx @@ -1,14 +1,37 @@ -import { Vector3 } from "three"; -import ZoneCornerReference from "./zoneCornerReference"; +import { useRef } from "react"; +import { Group, Vector3 } from "three"; +import useModuleStore from "../../../../../store/ui/useModuleStore"; +import { useToggleView } from "../../../../../store/builder/store"; +import { useBuilderStore } from "../../../../../store/builder/useBuilderStore"; import ExtrudePolygon from "../../../wrappers/geomentry/extrudePolygon"; import PlaneMaterial from "../../../wrappers/materials/planeMaterial"; import PolygonMaterial from "../../../wrappers/materials/polygonMaterial"; +import ZoneCornerReference from "./zoneCornerReference"; function ZoneInstance({ zone }: { readonly zone: Zone }) { + const { toggleView } = useToggleView(); + const { activeModule } = useModuleStore(); + const { selectedZone, setSelectedZone } = useBuilderStore(); + const groupRef = useRef(null); const zoneLayer = zone.points[0].layer; return ( - + { + if (!toggleView && activeModule === "builder") { + e.stopPropagation(); + setSelectedZone({ zoneData: zone, zoneMesh: groupRef.current }); + } + }} + onPointerMissed={() => { + if (selectedZone && selectedZone.zoneMesh?.userData.zoneUuid === zone.zoneUuid) { + setSelectedZone(null); + } + }} + > @@ -56,6 +56,11 @@ function OutlineInstances() { selection={selectedFloor?.floorMesh ? [selectedFloor.floorMesh] : null} color={CONSTANTS.outlineConfig.assetSelectColor} /> + {/* Decals */} void; // Setters - Zone - setSelectedZone: (zone: Object3D | null) => void; + setSelectedZone: (zone: { zoneMesh: Object3D | null; zoneData: Zone } | null) => void; setZoneHeight: (height: number) => void; setZoneColor: (color: string) => void; @@ -292,7 +292,7 @@ export const useBuilderStore = create()( // === Setters: Zone === - setSelectedZone: (zone: Object3D | null) => { + setSelectedZone: (zone: { zoneMesh: Object3D | null; zoneData: Zone } | null) => { set((state) => { state.selectedZone = zone; });