code refactor
This commit is contained in:
@@ -99,7 +99,7 @@ const Outline: React.FC = () => {
|
|||||||
</section> */}
|
</section> */}
|
||||||
<section className="outline-section overflow">
|
<section className="outline-section overflow">
|
||||||
{/* <DropDownList value="Buildings" items={buildingsList} isOpen={isBuildingsOpen} onToggle={() => setIsBuildingsOpen((prev) => !prev)} showKebabMenu={false} showAddIcon={false} /> */}
|
{/* <DropDownList value="Buildings" items={buildingsList} isOpen={isBuildingsOpen} onToggle={() => setIsBuildingsOpen((prev) => !prev)} showKebabMenu={false} showAddIcon={false} /> */}
|
||||||
<DropDownList header="Zones" type="Zones" items={sceneAssetsDataList} isDefaultOpen={true} showKebabMenu={false} showAddIcon={false} />
|
<DropDownList header="Zones" items={sceneAssetsDataList} isDefaultOpen={true} showKebabMenu={false} showAddIcon={false} />
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import List from "./OutlineList/ListNew";
|
|||||||
|
|
||||||
interface DropDownListProps {
|
interface DropDownListProps {
|
||||||
header?: string;
|
header?: string;
|
||||||
type?: "Zones" | "Assets";
|
|
||||||
items?: { id: string; name: string }[];
|
items?: { id: string; name: string }[];
|
||||||
showFocusIcon?: boolean;
|
showFocusIcon?: boolean;
|
||||||
onFocusClick?: () => void;
|
onFocusClick?: () => void;
|
||||||
@@ -21,7 +20,6 @@ interface DropDownListProps {
|
|||||||
const DropDownList: React.FC<DropDownListProps> = ({
|
const DropDownList: React.FC<DropDownListProps> = ({
|
||||||
header = "Dropdown",
|
header = "Dropdown",
|
||||||
items = [],
|
items = [],
|
||||||
type = "Assets",
|
|
||||||
showFocusIcon = false,
|
showFocusIcon = false,
|
||||||
onFocusClick,
|
onFocusClick,
|
||||||
showAddIcon = true,
|
showAddIcon = true,
|
||||||
|
|||||||
@@ -28,11 +28,7 @@ const KebabMenuList: React.FC<KebabMenuListProps> = ({ items, onSelect }) => {
|
|||||||
{isOpen && (
|
{isOpen && (
|
||||||
<div className="menu-list">
|
<div className="menu-list">
|
||||||
{items.map((item, index) => (
|
{items.map((item, index) => (
|
||||||
<div
|
<div key={index} className="menu-item" onClick={() => handleItemClick(item)}>
|
||||||
key={index}
|
|
||||||
className="menu-item"
|
|
||||||
onClick={() => handleItemClick(item)}
|
|
||||||
>
|
|
||||||
{item}
|
{item}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -6,10 +6,7 @@ interface KebabMenuListMultiSelectProps {
|
|||||||
onSelectionChange?: (selectedItems: string[]) => void; // Callback for selected items
|
onSelectionChange?: (selectedItems: string[]) => void; // Callback for selected items
|
||||||
}
|
}
|
||||||
|
|
||||||
const KebabMenuListMultiSelect: React.FC<KebabMenuListMultiSelectProps> = ({
|
const KebabMenuListMultiSelect: React.FC<KebabMenuListMultiSelectProps> = ({ items, onSelectionChange }) => {
|
||||||
items,
|
|
||||||
onSelectionChange,
|
|
||||||
}) => {
|
|
||||||
const [isOpen, setIsOpen] = useState(false);
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
const [selectedItems, setSelectedItems] = useState<string[]>([]);
|
const [selectedItems, setSelectedItems] = useState<string[]>([]);
|
||||||
const menuRef = useRef<HTMLDivElement>(null); // Ref to track the container
|
const menuRef = useRef<HTMLDivElement>(null); // Ref to track the container
|
||||||
@@ -55,21 +52,9 @@ const KebabMenuListMultiSelect: React.FC<KebabMenuListMultiSelectProps> = ({
|
|||||||
{isOpen && (
|
{isOpen && (
|
||||||
<div className="menu-list">
|
<div className="menu-list">
|
||||||
{items.map((item) => (
|
{items.map((item) => (
|
||||||
<div
|
<div key={item.id} className={`menu-item ${selectedItems.includes(item.id) ? "selected" : ""}`} onClick={() => handleItemToggle(item.id)}>
|
||||||
key={item.id}
|
<input type="checkbox" checked={selectedItems.includes(item.id)} onChange={() => handleItemToggle(item.id)} />
|
||||||
className={`menu-item ${
|
<div className="icon-container">{selectedItems.includes(item.id) && <TickIcon />}</div>
|
||||||
selectedItems.includes(item.id) ? "selected" : ""
|
|
||||||
}`}
|
|
||||||
onClick={() => handleItemToggle(item.id)}
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
checked={selectedItems.includes(item.id)}
|
|
||||||
onChange={() => handleItemToggle(item.id)}
|
|
||||||
/>
|
|
||||||
<div className="icon-container">
|
|
||||||
{selectedItems.includes(item.id) && <TickIcon />}
|
|
||||||
</div>
|
|
||||||
{item.name}
|
{item.name}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|||||||
57
app/src/types/uiTypes.d.ts
vendored
57
app/src/types/uiTypes.d.ts
vendored
@@ -78,3 +78,60 @@ interface Tutorial {
|
|||||||
thumbnail?: string;
|
thumbnail?: string;
|
||||||
createdAt: string;
|
createdAt: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Base interface for all list items
|
||||||
|
interface BaseListItem {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
type: "zone" | "asset" | "wall" | "floor" | "point" | "decal";
|
||||||
|
isLocked?: boolean;
|
||||||
|
isVisible?: boolean;
|
||||||
|
isActive?: boolean;
|
||||||
|
canEdit?: boolean;
|
||||||
|
children?: ListItem[]; // For nested relationships
|
||||||
|
metadata?: {
|
||||||
|
position?: [number, number, number];
|
||||||
|
rotation?: [number, number, number];
|
||||||
|
scale?: [number, number, number];
|
||||||
|
color?: string;
|
||||||
|
height?: number;
|
||||||
|
thickness?: number;
|
||||||
|
// ... other type-specific properties
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extended interfaces for specific types
|
||||||
|
interface ZoneListItem extends BaseListItem {
|
||||||
|
type: "zone";
|
||||||
|
metadata: {
|
||||||
|
zoneHeight: number;
|
||||||
|
zoneColor: string;
|
||||||
|
viewPortPosition: [number, number, number];
|
||||||
|
viewPortTarget: [number, number, number];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AssetListItem extends BaseListItem {
|
||||||
|
type: "asset";
|
||||||
|
metadata: {
|
||||||
|
modelUuid: string;
|
||||||
|
position: [number, number, number];
|
||||||
|
rotation: [number, number, number];
|
||||||
|
scale: [number, number, number];
|
||||||
|
isCollidable: boolean;
|
||||||
|
opacity: number;
|
||||||
|
animations?: string[];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface WallListItem extends BaseListItem {
|
||||||
|
type: "wall";
|
||||||
|
metadata: {
|
||||||
|
wallThickness: number;
|
||||||
|
wallHeight: number;
|
||||||
|
outsideMaterial: string;
|
||||||
|
insideMaterial: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
type ListItem = ZoneListItem | AssetListItem | WallListItem | BaseListItem;
|
||||||
|
|||||||
Reference in New Issue
Block a user