Files
Dwinzo_Demo/app/src/modules/scene/controls/assetControls/groupControls.tsx

100 lines
4.2 KiB
TypeScript

import * as THREE from "three";
import { useEffect } from "react";
import { useParams } from "react-router-dom";
import { useSceneContext } from "../../sceneContext";
import { useSocketStore } from "../../../../store/socket/useSocketStore";
import { useContextActionStore } from "../../../../store/builder/store";
import { getUserData } from "../../../../functions/getUserData";
import useAssetResponseHandler from "../../../collaboration/responseHandler/useAssetResponseHandler";
import useCallBackOnKey from "../../../../utils/hooks/useCallBackOnKey";
import generateUniqueAssetGroupName from "../../../builder/asset/functions/generateUniqueAssetGroupName";
import { setAssetsApi } from "../../../../services/factoryBuilder/asset/floorAsset/setAssetsApi";
import { getAssetGroupsApi } from "../../../../services/factoryBuilder/group/assetGroup/getAssetGroupsApi";
import { createAssetGroupApi } from "../../../../services/factoryBuilder/group/assetGroup/createAssetGroupApi";
function GroupControls() {
const { projectId } = useParams();
const { builderSocket } = useSocketStore();
const { assetStore, undoRedo3DStore, versionStore, assetGroupStore } = useSceneContext();
const { assetGroups, addGroup, setGroups, buildHierarchy } = assetGroupStore();
const { push3D } = undoRedo3DStore();
const { assets, selectedAssets, pastedObjects, duplicatedObjects, movedObjects, rotatedObjects, getSelectedAssetUuids } = assetStore();
const { updateAssetInScene, removeAssetFromScene } = useAssetResponseHandler();
const { contextAction, setContextAction } = useContextActionStore();
const { selectedVersion } = versionStore();
const { userId, organization } = getUserData();
useEffect(() => {
if (!projectId || !selectedVersion) return;
// getAssetGroupsApi(projectId, selectedVersion.versionId).then((data) => {
// if (data && data.length > 0) {
// setGroups(data);
// }
// });
}, [projectId, selectedVersion]);
useEffect(() => {
const hierarchy = buildHierarchy(assets, assetGroups);
// console.log("assetGroups: ", assetGroups);
// console.log("hierarchy: ", hierarchy);
}, [assetGroups, assets]);
useEffect(() => {
if (contextAction === "groupAsset") {
setContextAction(null);
groupSelection();
}
}, [contextAction, projectId, selectedVersion]);
const groupSelection = () => {
const assetUuids: string[] = getSelectedAssetUuids();
if (assetUuids.length > 0 && projectId && selectedVersion) {
const groupName = generateUniqueAssetGroupName({ baseName: "Group", existingGroups: assetGroups });
const assetGroup: AssetGroup = {
groupName,
groupUuid: THREE.MathUtils.generateUUID(),
isVisible: true,
isLocked: false,
isExpanded: true,
children: assetUuids.map((assetUuid) => {
return { type: "Asset", childrenUuid: assetUuid };
}),
};
// createAssetGroupApi({
// projectId,
// versionId: selectedVersion.versionId,
// groupUuid: assetGroup.groupUuid,
// groupName: assetGroup.groupName,
// isVisible: assetGroup.isVisible,
// isExpanded: assetGroup.isExpanded,
// isLocked: assetGroup.isLocked,
// children: assetGroup.children,
// }).then((data) => {
// console.log("data: ", data);
// });
addGroup(assetGroup);
}
};
useCallBackOnKey(
() => {
if (selectedAssets.length > 0 && pastedObjects.length === 0 && duplicatedObjects.length === 0 && movedObjects.length === 0 && rotatedObjects.length === 0) {
groupSelection();
}
},
"Ctrl+G",
{ dependencies: [pastedObjects, duplicatedObjects, movedObjects, rotatedObjects, selectedAssets, selectedVersion, builderSocket, projectId, userId, organization], noRepeat: true }
);
useCallBackOnKey(() => {}, "Alt+G", { dependencies: [], noRepeat: true });
return null;
}
export default GroupControls;