refactor: improve zone and asset handler structure and update context usage

This commit is contained in:
2025-09-05 16:02:05 +05:30
parent 5a9785648b
commit 8afa92cbeb

View File

@@ -1,111 +1,95 @@
import { useCallback } from "react"; import { useCallback } from "react";
import { useParams } from "react-router-dom"; import { useParams } from "react-router-dom";
import { getUserData } from "../getUserData"; import { getUserData } from "../getUserData";
import { useVersionContext } from "../../modules/builder/version/versionContext";
import { getZoneData } from "../../services/visulization/zone/getZones"; import { getZoneData } from "../../services/visulization/zone/getZones";
import { zoneCameraUpdate } from "../../services/visulization/zone/zoneCameraUpdation"; import { zoneCameraUpdate } from "../../services/visulization/zone/zoneCameraUpdation";
import { setAssetsApi } from "../../services/factoryBuilder/asset/floorAsset/setAssetsApi"; import { setAssetsApi } from "../../services/factoryBuilder/asset/floorAsset/setAssetsApi";
import { useSelectedZoneStore } from "../../store/visualization/useZoneStore"; import { useSelectedZoneStore } from "../../store/visualization/useZoneStore";
import { useSubModuleStore } from "../../store/useModuleStore"; import { useSubModuleStore } from "../../store/ui/useModuleStore";
import { useSceneContext } from "../../modules/scene/sceneContext"; import { useSceneContext } from "../../modules/scene/sceneContext";
import { useZoneAssetId } from "../../store/builder/store"; import { useZoneAssetId } from "../../store/builder/store";
export const useZoneAssetHandlers = () => { export const useZoneAssetHandlers = () => {
const { projectId } = useParams(); const { projectId } = useParams();
const { organization } = getUserData(); const { organization } = getUserData();
const { selectedVersionStore } = useVersionContext();
const { selectedVersion } = selectedVersionStore();
const { selectedZone, setSelectedZone } = useSelectedZoneStore(); const { selectedZone, setSelectedZone } = useSelectedZoneStore();
const { setSubModule } = useSubModuleStore(); const { setSubModule } = useSubModuleStore();
const { zoneAssetId, setZoneAssetId } = useZoneAssetId(); const { zoneAssetId, setZoneAssetId } = useZoneAssetId();
const { assetStore, zoneStore } = useSceneContext(); const { assetStore, zoneStore, versionStore } = useSceneContext();
const { setName } = assetStore(); const { selectedVersion } = versionStore();
const { zones, setZoneName } = zoneStore(); const { setName } = assetStore();
const { zones, setZoneName } = zoneStore();
// 🔹 Zone selection // 🔹 Zone selection
const handleSelectZone = useCallback( const handleSelectZone = useCallback(
async (id: string) => { async (id: string) => {
if (selectedZone?.zoneUuid === id || id === "unassigned-zone") return; if (selectedZone?.zoneUuid === id || id === "unassigned-zone") return;
setSubModule("zoneProperties"); setSubModule("zoneProperties");
const response = await getZoneData( const response = await getZoneData(id, organization, projectId, selectedVersion?.versionId || "");
id, if (!response) return;
organization,
projectId,
selectedVersion?.versionId || ""
);
if (!response) return;
setSelectedZone({ setSelectedZone({
zoneName: response.zoneName, zoneName: response.zoneName,
activeSides: response.activeSides ?? [], activeSides: response.activeSides ?? [],
panelOrder: response.panelOrder ?? [], panelOrder: response.panelOrder ?? [],
lockedPanels: response.lockedPanels ?? [], lockedPanels: response.lockedPanels ?? [],
widgets: response.widgets ?? [], widgets: response.widgets ?? [],
zoneUuid: response.zoneUuid, zoneUuid: response.zoneUuid,
zoneViewPortTarget: response.viewPortTarget ?? [], zoneViewPortTarget: response.viewPortTarget ?? [],
zoneViewPortPosition: response.viewPortPosition ?? [], zoneViewPortPosition: response.viewPortPosition ?? [],
}); });
}, },
[organization, projectId, selectedVersion, selectedZone?.zoneUuid, setSelectedZone, setSubModule] [organization, projectId, selectedVersion, selectedZone?.zoneUuid, setSelectedZone, setSubModule]
); );
// 🔹 Zone rename // 🔹 Zone rename
const handleZoneNameChange = useCallback( const handleZoneNameChange = useCallback(
async (newName: string) => { async (newName: string) => {
const isDuplicate = zones.some( const isDuplicate = zones.some((zone: any) => zone.zoneName?.trim().toLowerCase() === newName.trim().toLowerCase() && zone.zoneUuid !== selectedZone.zoneUuid);
(zone: any) => if (isDuplicate) {
zone.zoneName?.trim().toLowerCase() === newName.trim().toLowerCase() && alert("Zone name already exists. Please choose a different name.");
zone.zoneUuid !== selectedZone.zoneUuid return;
); }
if (isDuplicate) {
alert("Zone name already exists. Please choose a different name.");
return;
}
const response = await zoneCameraUpdate( const response = await zoneCameraUpdate({ zoneUuid: selectedZone.zoneUuid, zoneName: newName }, organization, projectId, selectedVersion?.versionId || "");
{ zoneUuid: selectedZone.zoneUuid, zoneName: newName },
organization,
projectId,
selectedVersion?.versionId || ""
);
if (response.message === "zone updated") { if (response.message === "zone updated") {
setSelectedZone((prev) => ({ ...prev, zoneName: newName })); setSelectedZone((prev) => ({ ...prev, zoneName: newName }));
setZoneName(selectedZone.zoneUuid, newName); setZoneName(selectedZone.zoneUuid, newName);
} }
}, },
[organization, projectId, selectedVersion, selectedZone, setSelectedZone, setZoneName, zones] [organization, projectId, selectedVersion, selectedZone, setSelectedZone, setZoneName, zones]
); );
// 🔹 Asset selection // 🔹 Asset selection
const handleAssetClick = useCallback( const handleAssetClick = useCallback(
(asset: ListAsset) => { (asset: ListAsset) => {
setZoneAssetId(asset); setZoneAssetId(asset);
}, },
[setZoneAssetId] [setZoneAssetId]
); );
// 🔹 Asset rename // 🔹 Asset rename
const handleZoneAssetName = useCallback( const handleZoneAssetName = useCallback(
async (newName: string) => { async (newName: string) => {
if (!zoneAssetId?.id) return; if (!zoneAssetId?.id) return;
const response = await setAssetsApi({ const response = await setAssetsApi({
modelUuid: zoneAssetId.id, modelUuid: zoneAssetId.id,
modelName: newName, modelName: newName,
projectId, projectId,
versionId: selectedVersion?.versionId || "", versionId: selectedVersion?.versionId || "",
}); });
setName(zoneAssetId.id, response.modelName); setName(zoneAssetId.id, response.modelName);
}, },
[projectId, selectedVersion, setName, zoneAssetId] [projectId, selectedVersion, setName, zoneAssetId]
); );
return { return {
handleSelectZone, handleSelectZone,
handleZoneNameChange, handleZoneNameChange,
handleAssetClick, handleAssetClick,
handleZoneAssetName, handleZoneAssetName,
}; };
}; };