refactor: improve zone and asset handler structure and update context usage
This commit is contained in:
@@ -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,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user