Files
Dwinzo_Demo/app/src/components/layout/sidebarRight/visualization/IotInputCards/PieChartInput.tsx
Gomathi9520 3ab5c6ee6a Refactor 3D Widget Input Handling and Cleanup
- Removed commented-out code related to adding 3D widgets from BarChartInput, LineGrapInput, PieChartInput, Progress1Input, Progress2Input components.
- Updated widget input fetching logic in Widget2InputCard3D, Widget3InputCard3D, and Widget4InputCard3D to include projectId and versionId.
- Enhanced error handling and logging in add3dWidget and get3dWidgetInput services.
- Cleaned up console logs and unnecessary comments across various components for better readability.
- Ensured consistent handling of widget data structure in ProductionCapacity, ReturnOfInvestment, StateWorking, and Throughput components.
2025-06-25 11:11:23 +05:30

200 lines
6.2 KiB
TypeScript

import React, { useEffect, useState } from "react";
import MultiLevelDropdown from "../../../../ui/inputs/MultiLevelDropDown";
import { AddIcon } from "../../../../icons/ExportCommonIcons";
import RegularDropDown from "../../../../ui/inputs/RegularDropDown";
import useChartStore from "../../../../../store/visualization/useChartStore";
import { useSelectedZoneStore } from "../../../../../store/visualization/useZoneStore";
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";
import { getUserData } from "../../../../../functions/getUserData";
import { addingWidgets } from "../../../../../services/visulization/zone/addWidgets";
import { useVersionContext } from "../../../../../modules/builder/version/versionContext";
import { getWidgetInputData } from "../../../../../services/visulization/zone/getWidgetInputData";
type Props = {};
const PieChartInput = (props: Props) => {
const [widgetName, setWidgetName] = useState("Widget");
const { setMeasurements, updateDuration, updateName } = useChartStore();
const [duration, setDuration] = useState("1h");
const [dropDowndata, setDropDownData] = useState({});
const [selections, setSelections] = useState<
Record<string, { name: string; fields: string }>
>({});
const { selectedZone } = useSelectedZoneStore();
const { selectedChartId } = useWidgetStore();
const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL;
const { userName, userId, organization, email } = getUserData();
const [isLoading, setLoading] = useState<boolean>(true);
const { projectId } = useParams();
const { visualizationSocket } = useSocketStore();
const { selectedVersionStore } = useVersionContext();
const { selectedVersion } = selectedVersionStore();
useEffect(() => {
const fetchZoneData = async () => {
try {
setLoading(true);
const response = await axios.get(`http://${iotApiUrl}/floatinput`);
if (response.status === 200) {
//
setDropDownData(response.data);
setLoading(false);
} else {
}
} catch (error) {
echo.error("Failed to fetch zone data");
}
};
fetchZoneData();
}, []);
useEffect(() => {
const fetchSavedInputes = async () => {
if (selectedChartId.id !== "") {
let response = await getWidgetInputData(selectedChartId.id, selectedZone.zoneUuid, projectId, selectedVersion?.versionId || "")
if (response) {
setSelections(response.Datastructure.measurements);
setDuration(response.Datastructure.duration);
setWidgetName(response.widgetName);
}
}
};
fetchSavedInputes();
}, [selectedChartId.id]);
// Sync Zustand state when component mounts
useEffect(() => {
setMeasurements(selections);
updateDuration(duration);
updateName(widgetName);
}, [selections, duration, widgetName]);
const sendInputes = async (
inputMeasurement: any,
inputDuration: any,
inputName: any
) => {
// const userId = localStorage.getItem("userId");
let newWidget = {
id: selectedChartId.id,
panel: selectedChartId.panel,
widgetName: inputName,
Data: {
measurements: inputMeasurement,
duration: inputDuration,
},
}
let response = await addingWidgets(selectedZone.zoneUuid, organization, newWidget, projectId, selectedVersion?.versionId || "");
if (response.message === "Widget updated successfully") {
return true;
} else {
return false;
}
};
const handleSelect = async (
inputKey: string,
selectedData: { name: string; fields: string } | null
) => {
// async() => {
const newSelections = { ...selections };
if (selectedData === null) {
delete newSelections[inputKey];
} else {
newSelections[inputKey] = selectedData;
}
// setMeasurements(newSelections); // Update Zustand store
//
if (await sendInputes(newSelections, duration, widgetName)) {
setSelections(newSelections);
}
// sendInputes(newSelections, duration); // Send data to server
// return newSelections;
// };
};
const handleSelectDuration = async (option: string) => {
if (await sendInputes(selections, option, widgetName)) {
setDuration(option);
}
// setDuration(option);
};
const handleNameChange = async (name: any) => {
if (await sendInputes(selections, duration, name)) {
setWidgetName(name);
}
};
return (
<>
<div className="inputs-wrapper">
<div className="datas">
<div className="datas__label">Title</div>
<RenameInput
value={widgetName || selectedChartId?.title}
onRename={handleNameChange}
/>
</div>
{[...Array(2)].map((_, index) => {
const inputKey = `input${index + 1}`;
return (
<div key={index} className="datas">
<div className="datas__label">Input {index + 1}</div>
<div className="datas__class">
<MultiLevelDropdown
data={dropDowndata}
onSelect={(selectedData) =>
handleSelect(inputKey, selectedData)
}
onUnselect={() => handleSelect(inputKey, null)}
selectedValue={selections[inputKey]} // Load from Zustand
isLoading={isLoading}
allSelections={selections}
/>
<div className="icon">
<AddIcon />
</div>
</div>
</div>
);
})}
</div>
<div>
<div className="datas">
<div className="datas__label">Duration</div>
<div className="datas__class">
<RegularDropDown
header={duration}
options={["1h", "2h", "12h"]}
onSelect={handleSelectDuration}
search={false}
/>
</div>
</div>
</div>
</>
);
};
export default PieChartInput;