Merge remote-tracking branch 'origin/v3-refactor' into v3

This commit is contained in:
Jerald-Golden-B 2025-06-10 11:36:13 +05:30
commit 12d667543c
26 changed files with 412 additions and 279 deletions

View File

@ -14,9 +14,9 @@ const Analysis: React.FC = () => {
const AnalysisPresets: AnalysisPresetsType = {
"Throughput time": [
{ type: "default", inputs: { label: "Cycle time", activeOption: "s" } },
{ type: "default", inputs: { label: "machines / lines", activeOption: "item" } },
{ type: "default", inputs: { label: "Machine uptime", activeOption: "%" } },
// { type: "default", inputs: { label: "Cycle time", activeOption: "s" } },
// { type: "default", inputs: { label: "machines / lines", activeOption: "item" } },
// { type: "default", inputs: { label: "Machine uptime", activeOption: "%" } },
],
"Production capacity": [
{ type: "default", inputs: { label: "Shift length", activeOption: "hr" } },

View File

@ -9,6 +9,7 @@ import {
usezoneTarget,
} from "../../../../store/builder/store";
import { zoneCameraUpdate } from "../../../../services/visulization/zone/zoneCameraUpdation";
import { useParams } from "react-router-dom";
const ZoneProperties: React.FC = () => {
const { Edit, setEdit } = useEditPosition();
@ -16,6 +17,7 @@ const ZoneProperties: React.FC = () => {
const { zonePosition, setZonePosition } = usezonePosition();
const { zoneTarget, setZoneTarget } = usezoneTarget();
const { zones, setZones } = useZones();
const { projectId } = useParams()
useEffect(() => {
setZonePosition(selectedZone.zoneViewPortPosition);
@ -33,7 +35,8 @@ const ZoneProperties: React.FC = () => {
viewPortCenter: zoneTarget,
};
let response = await zoneCameraUpdate(zonesdata, organization);
let response = await zoneCameraUpdate(zonesdata, organization,projectId);
console.log('response: ', response);
if (response.message === "updated successfully") {
setEdit(false);
} else {
@ -56,7 +59,8 @@ const ZoneProperties: React.FC = () => {
zoneName: newName,
};
// Call your API to update the zone
let response = await zoneCameraUpdate(zonesdata, organization);
let response = await zoneCameraUpdate(zonesdata, organization,projectId);
console.log('response: ', response);
// console.log("response: ", response);
if (response.message === "updated successfully") {
setZones((prevZones: any[]) =>

View File

@ -8,6 +8,7 @@ import { useWidgetStore } from "../../../../../store/useWidgetStore";
import axios from "axios";
import RenameInput from "../../../../ui/inputs/RenameInput";
import { useParams } from "react-router-dom";
import { useSocketStore } from "../../../../../store/builder/store";
type Props = {};
@ -26,6 +27,7 @@ const BarChartInput = (props: Props) => {
const organization = email?.split("@")[1]?.split(".")[0];
const [isLoading, setLoading] = useState<boolean>(true);
const { projectId } = useParams();
const { visualizationSocket } = useSocketStore();
useEffect(() => {
@ -92,6 +94,25 @@ const BarChartInput = (props: Props) => {
inputDuration: any,
inputName: any
) => {
// const userId = localStorage.getItem("userId");
// let newWidget = {
// id: selectedChartId.id,
// panel: selectedChartId.panel,
// widgetName: inputName,
// Data: {
// measurements: inputMeasurement,
// duration: inputDuration,
// }
// }
// const adding3dWidget = {
// organization: organization,
// widget: newWidget,
// zoneUuid: selectedZone.zoneUuid,
// projectId, userId
// };
// if (visualizationSocket) {
// visualizationSocket.emit("v1:viz-3D-widget:add", adding3dWidget);
// }
try {
const response = await axios.post(
`http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/widget/save`,

View File

@ -124,6 +124,7 @@ import { useWidgetStore } from "../../../../../store/useWidgetStore";
import axios from "axios";
import RenameInput from "../../../../ui/inputs/RenameInput";
import { useParams } from "react-router-dom";
import { useSocketStore } from "../../../../../store/builder/store";
type Props = {};
@ -142,6 +143,7 @@ const LineGrapInput = (props: Props) => {
const organization = email?.split("@")[1]?.split(".")[0];
const [isLoading, setLoading] = useState<boolean>(true);
const { projectId } = useParams();
const { visualizationSocket } = useSocketStore();
useEffect(() => {
const fetchZoneData = async () => {
@ -207,6 +209,25 @@ const LineGrapInput = (props: Props) => {
inputDuration: any,
inputName: any
) => {
// const userId = localStorage.getItem("userId");
// let newWidget = {
// id: selectedChartId.id,
// panel: selectedChartId.panel,
// widgetName: inputName,
// Data: {
// measurements: inputMeasurement,
// duration: inputDuration,
// }
// }
// const adding3dWidget = {
// organization: organization,
// widget: newWidget,
// zoneUuid: selectedZone.zoneUuid,
// projectId, userId
// };
// if (visualizationSocket) {
// visualizationSocket.emit("v1:viz-3D-widget:add", adding3dWidget);
// }
try {
const response = await axios.post(
`http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/widget/save`,

View File

@ -8,6 +8,7 @@ import { useWidgetStore } from "../../../../../store/useWidgetStore";
import axios from "axios";
import RenameInput from "../../../../ui/inputs/RenameInput";
import { useParams } from "react-router-dom";
import { useSocketStore } from "../../../../../store/builder/store";
type Props = {};
@ -26,6 +27,7 @@ const PieChartInput = (props: Props) => {
const organization = email?.split("@")[1]?.split(".")[0];
const [isLoading, setLoading] = useState<boolean>(true);
const { projectId } = useParams();
const { visualizationSocket } = useSocketStore();
useEffect(() => {
@ -92,6 +94,26 @@ const PieChartInput = (props: Props) => {
inputDuration: any,
inputName: any
) => {
// const userId = localStorage.getItem("userId");
// let newWidget = {
// id: selectedChartId.id,
// panel: selectedChartId.panel,
// widgetName: inputName,
// Data: {
// measurements: inputMeasurement,
// duration: inputDuration,
// },
// }
// const adding3dWidget = {
// organization: organization,
// widget: newWidget,
// zoneUuid: selectedZone.zoneUuid,
// projectId, userId
// };
// if (visualizationSocket) {
// visualizationSocket.emit("v1:viz-3D-widget:add", adding3dWidget);
// }
try {
const response = await axios.post(
`http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/widget/save`,

View File

@ -8,6 +8,7 @@ import { useWidgetStore } from "../../../../../store/useWidgetStore";
import axios from "axios";
import RenameInput from "../../../../ui/inputs/RenameInput";
import { useParams } from "react-router-dom";
import { useSocketStore } from "../../../../../store/builder/store";
type Props = {};
@ -26,6 +27,7 @@ const Progress1Input = (props: Props) => {
const organization = email?.split("@")[1]?.split(".")[0];
const [isLoading, setLoading] = useState<boolean>(true);
const { projectId } = useParams();
const { visualizationSocket } = useSocketStore();
useEffect(() => {
@ -92,6 +94,25 @@ const Progress1Input = (props: Props) => {
inputDuration: any,
inputName: any
) => {
// const userId = localStorage.getItem("userId");
// let newWidget = {
// id: selectedChartId.id,
// panel: selectedChartId.panel,
// widgetName: inputName,
// Data: {
// measurements: inputMeasurement,
// duration: inputDuration,
// },
// }
// const adding3dWidget = {
// organization: organization,
// widget: newWidget,
// zoneUuid: selectedZone.zoneUuid,
// projectId, userId
// };
// if (visualizationSocket) {
// visualizationSocket.emit("v1:viz-3D-widget:add", adding3dWidget);
// }
try {
const response = await axios.post(
`http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/widget/save`,

View File

@ -8,6 +8,7 @@ import { useWidgetStore } from "../../../../../store/useWidgetStore";
import axios from "axios";
import RenameInput from "../../../../ui/inputs/RenameInput";
import { useParams } from "react-router-dom";
import { useSocketStore } from "../../../../../store/builder/store";
type Props = {};
@ -26,6 +27,7 @@ const Progress2Input = (props: Props) => {
const organization = email?.split("@")[1]?.split(".")[0];
const [isLoading, setLoading] = useState<boolean>(true);
const { projectId } = useParams();
const { visualizationSocket } = useSocketStore();
useEffect(() => {
@ -92,6 +94,25 @@ const Progress2Input = (props: Props) => {
inputDuration: any,
inputName: any
) => {
// const userId = localStorage.getItem("userId");
// let newWidget = {
// id: selectedChartId.id,
// panel: selectedChartId.panel,
// widgetName: inputName,
// Data: {
// measurements: inputMeasurement,
// duration: inputDuration,
// }
// }
// const adding3dWidget = {
// organization: organization,
// widget: newWidget,
// zoneUuid: selectedZone.zoneUuid,
// projectId, userId
// };
// if (visualizationSocket) {
// visualizationSocket.emit("v1:viz-3D-widget:add", adding3dWidget);
// }
try {
const response = await axios.post(
`http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/widget/save`,

View File

@ -91,7 +91,8 @@ const ThroughputSummary: React.FC = () => {
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
if (productionCapacityData >= 0) {
// console.log('productionCapacityData > 0: ', productionCapacityData > 0);
if (productionCapacityData > 0) {
setIsLoading(false);
console.log("productionCapacityData: ", productionCapacityData);
} else {
@ -100,7 +101,8 @@ const ThroughputSummary: React.FC = () => {
}, [productionCapacityData]);
return (
<div className="production analysis-card">
<>
{!isLoading && <div className="production analysis-card">
<div className="production-wrapper analysis-card-wrapper">
<div className="card-header">
<div className="header">
@ -184,7 +186,8 @@ const ThroughputSummary: React.FC = () => {
<SkeletonUI type={"default"} />
)}
</div>
</div>
</div>}
</>
);
};

View File

@ -83,16 +83,22 @@ const ROISummary = ({
const [isLoading, setIsLoading] = useState(false);
const { roiSummary } = useROISummaryData();
useEffect(() => {
if (roiSummary && typeof roiSummary === "object") {
setIsLoading(false); // Data loaded
if (roiSummary.productName) {
// If productName is set, assume data is loaded
setIsLoading(false);
} else {
setIsLoading(true); // Show skeleton while loading
// If productName is empty, assume still loading
setIsLoading(true);
}
}, [roiSummary]);
return (
<div className="roiSummary-container analysis-card">
<>
{
!isLoading && <div className="roiSummary-container analysis-card">
<div className="roiSummary-wrapper analysis-card-wrapper">
<div className="card-header">
<div className="header">
@ -238,7 +244,8 @@ const ROISummary = ({
// <div> No Data</div>
)}
</div>
</div>
</div>}
</>
);
};

View File

@ -30,18 +30,24 @@ const ProductionCapacity = ({
const [isLoading, setIsLoading] = useState(false);
useEffect(() => {
if (throughputData >= 0) {
console.log('typeof throughputData:', typeof throughputData);
console.log('throughputData > 0: ', throughputData > 0);
if (throughputData > 0) {
// console.log('machineActiveTime: ', machineActiveTime);
// console.log('materialCycleTime: ', materialCycleTime);
// console.log('throughputData: ', throughputData);
// console.log('productionCapacityData: ', productionCapacityData);
setIsLoading(false);
} else {
setIsLoading(true);
}
}, [throughputData])
return (
<div className="throughtputSummary-container analysis-card">
<>
{!isLoading && <div className="throughtputSummary-container analysis-card">
<div className="throughtputSummary-wrapper analysis-card-wrapper">
<div className="card-header">
<div className="header">
@ -95,7 +101,8 @@ const ProductionCapacity = ({
<SkeletonUI type={"default"} />
)}
</div>
</div>
</div>}
</>
);
};

View File

@ -125,7 +125,8 @@ const List: React.FC<ListProps> = ({ items = [], remove }) => {
zoneName: newName,
};
const response = await zoneCameraUpdate(zonesdata, organization);
const response = await zoneCameraUpdate(zonesdata, organization,projectId);
console.log('response: ', response);
if (response.message === "updated successfully") {
setSelectedZone((prev) => ({ ...prev, zoneName: newName }));

View File

@ -165,7 +165,7 @@ const SimulationPlayer: React.FC = () => {
<div className="icon">
<HourlySimulationIcon />
</div>
<div className="label">Hourly Simulation</div>
<div className="label">ThroughPut Data</div>
</div>
<div className="progress-wrapper">
<div

View File

@ -45,7 +45,7 @@ function deletePoint(
userId
}
console.log('data: ', data);
// console.log('data: ', data);
socket.emit('v1:Line:delete:point', data);
////////// Update onlyFloorlines.current to remove references to the deleted point //////////

View File

@ -82,7 +82,7 @@ const ZoneGroup: React.FC = () => {
const organization = email.split("@")[1].split(".")[0];
const data = await getZonesApi(organization, projectId);
console.log('data: ', data);
// console.log('data: ', data);
if (data.length > 0) {
const fetchedZones = data.map((zone: any) => ({

View File

@ -144,6 +144,7 @@ const CamModelsGroup = () => {
});
socket.on("v1:camera:Response:update", (data: any) => {
// console.log('data: ', data);
if (
!groupRef.current ||
socket.id === data.socketId ||

View File

@ -84,6 +84,7 @@ export default function SocketResponses({
});
socket.on("v1:camera:Response:update", (data: any) => {
console.log('dataCamera: ', data);
//
});
@ -172,7 +173,7 @@ export default function SocketResponses({
});
socket.on("v1:Line:response:update", (data: any) => {
console.log('data: ', data);
// console.log('data: ', data);
if (socket.id === data.socketId) {
return;
}
@ -214,7 +215,7 @@ export default function SocketResponses({
});
socket.on("v1:Line:response:delete", (data: any) => {
console.log('data: ', data);
// console.log('data: ', data);
if (socket.id === data.socketId) {
return;
}
@ -337,7 +338,7 @@ export default function SocketResponses({
});
socket.on("v1:Line:response:delete:layer", async (data: any) => {
console.log('data: ', data);
// console.log('data: ', data);
if (socket.id === data.socketId) {
return;
}
@ -669,7 +670,7 @@ export default function SocketResponses({
const organization = email!.split("@")[1].split(".")[0];
socket.on("v1:Line:response:create", async (data: any) => {
console.log('data: ', data);
// console.log('data: ', data);
//
if (socket.id === data.socketId) {
return;
@ -788,7 +789,7 @@ export default function SocketResponses({
const organization = email!.split("@")[1].split(".")[0];
socket.on("v1:zone:response:updates", (data: any) => {
console.log('data: ', data);
// console.log('data: ', data);
if (socket.id === data.socketId) {
return;
}
@ -834,7 +835,7 @@ export default function SocketResponses({
});
socket.on("v1:zone:response:delete", (data: any) => {
console.log('data: ', data);
// console.log('data: ', data);
if (socket.id === data.socketId) {
return;
}

View File

@ -22,6 +22,7 @@ export default function updateCamPosition(
socketId: socket.id,
projectId
};
// console.log('CameracamData: ', camData);
socket.emit("v1:Camera:set", camData);
localStorage.setItem("cameraPosition", JSON.stringify(position));
localStorage.setItem("controlTarget", JSON.stringify(new THREE.Vector3(target.x, 0, target.z)));

View File

@ -67,6 +67,7 @@ export default function Controls() {
socketId: socket.id,
projectId
};
// console.log('CameracamData: ', camData);
socket.emit('v1:Camera:set', camData)
setResetCamera(false);

View File

@ -363,6 +363,7 @@ const CopyPasteControls = ({
projectId
};
// console.log('data: ', data);
socket.emit("v1:model-asset:add", data);
obj.userData = {
@ -418,6 +419,7 @@ const CopyPasteControls = ({
userId
};
// console.log('data: ', data);
socket.emit("v1:model-asset:add", data);
const asset: Asset = {

View File

@ -338,6 +338,7 @@ const DuplicationControls = ({
userId
};
// console.log('data: ', data);
socket.emit("v1:model-asset:add", data);
const asset: Asset = {
@ -387,6 +388,7 @@ const DuplicationControls = ({
projectId
};
// console.log('data: ', data);/
socket.emit("v1:model-asset:add", data);
const asset: Asset = {

View File

@ -314,6 +314,7 @@ function MoveControls({
userId
};
// console.log('data: ', data);
socket.emit("v1:model-asset:add", data);
AssetGroup.current.add(obj);

View File

@ -273,6 +273,7 @@ function RotateControls({
userId
};
// console.log('data: ', data);
socket.emit("v1:model-asset:add", data);
AssetGroup.current.add(obj);

View File

@ -134,6 +134,7 @@ export default function TransformControl() {
projectId
};
// console.log('data: ', data);
socket.emit("v1:model-asset:add", data);
}
}

View File

@ -361,10 +361,7 @@ export default function Dropped3dWidgets() {
}
}, [rightSelect, rightClickSelected]);
function isPointInPolygon(
point: [number, number],
polygon: Array<[number, number]>
): boolean {
function isPointInPolygon(point: [number, number], polygon: Array<[number, number]>): boolean {
const [x, z] = point;
let inside = false;
@ -434,8 +431,6 @@ export default function Dropped3dWidgets() {
}
}
};
const handleMouseMove = (event: MouseEvent) => {
if (!rightClickSelected || !rightSelect) return;
const selectedzoneUuid = Object.keys(zoneWidgetData).find(

View File

@ -31,7 +31,6 @@ export const setEnvironment = async (
renderDistance,
limitDistance,
projectId
}),
}
);

View File

@ -1,17 +1,17 @@
let url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}`;
// let url_Backend_dwinzo = `http://192.168.0.102:5000`;
export const zoneCameraUpdate = async (zonesdata: {}, organization: string) => {
export const zoneCameraUpdate = async (zoneData: {}, organization: string, projectId?: string) => {
try {
const response = await fetch(`${url_Backend_dwinzo}/api/V1/zones`, {
method: "POST",
headers: {
Authorization: "Bearer <access_token>",
Authorization: "Bearer <access_token>", // Replace with actual token
"Content-Type": "application/json",
token: localStorage.getItem("token") || "",
refresh_token: localStorage.getItem("refreshToken") || "",
},
body: JSON.stringify({ zonesdata, organization }),
body: JSON.stringify({ zoneData,projectId }),
});
if (!response.ok) {