import React, { useState, useEffect } from "react"; import useChartStore from "../../../../../store/visualization/useChartStore"; import { useWidgetStore } from "../../../../../store/useWidgetStore"; import axios from "axios"; import io from "socket.io-client"; import {CartIcon,DocumentIcon,GlobeIcon,WalletIcon,} from "../../../../../components/icons/3dChartIcons"; import { getUserData } from "../../../../../functions/getUserData"; import { useParams } from "react-router-dom"; import { getFloatingWidgetInput } from "../../../../../services/visulization/zone/getFloatingWidgetInput"; import { useVersionContext } from "../../../../builder/version/versionContext"; const TotalCardComponent = ({ object }: any) => { const [progress, setProgress] = useState(0); const [measurements, setmeasurements] = useState({}); const [duration, setDuration] = useState("1h"); const [name, setName] = useState(object.header ? object.header : ""); const { userName, userId, organization, email } = getUserData(); const { header, flotingDuration, flotingMeasurements } = useChartStore(); const { selectedChartId } = useWidgetStore(); const { projectId } = useParams() const { selectedVersionStore } = useVersionContext(); const { selectedVersion } = selectedVersionStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; useEffect(() => { if (!iotApiUrl || !measurements || Object.keys(measurements).length === 0) return; const socket = io(`http://${iotApiUrl}`); const inputData = { measurements, duration, interval: 1000, }; const startStream = () => { socket.emit("lastInput", inputData); }; socket.on("connect", startStream); socket.on("lastOutput", (response) => { const responseData = response.input1; if (typeof responseData === "number") { setProgress(responseData); } }); return () => { socket.off("lastOutput"); socket.emit("stop_stream"); // Stop streaming when component unmounts socket.disconnect(); }; }, [measurements, duration, iotApiUrl]); const fetchSavedInputes = async () => { if (object?.id !== "") { let response = await getFloatingWidgetInput(object?.id, organization,projectId,selectedVersion?.versionId||"") if (response) { setmeasurements(response.Data.Datastructure.measurements); setDuration(response.Data.Datastructure.duration); setName(response.Data.header); } } }; useEffect(() => { fetchSavedInputes(); }, []); useEffect(() => { if (selectedChartId?.id === object?.id) { fetchSavedInputes(); } }, [header, flotingDuration, flotingMeasurements]); const mapIcon = (iconName: string) => { switch (iconName) { case "WalletIcon": return ; case "GlobeIcon": return ; case "DocumentIcon": return ; case "CartIcon": return ; default: return ; } }; return ( <>
{name}
{progress}
{object.per}
{mapIcon(object.iconName)}
); }; export default TotalCardComponent;