From fcd67f4528c6e0527b9ae6d866c4004b70b9bc77 Mon Sep 17 00:00:00 2001 From: Poovizhi99 Date: Fri, 13 Jun 2025 17:11:28 +0530 Subject: [PATCH] Refactor user data retrieval across visualization components - Replaced direct localStorage access for email and organization with a centralized getUserData function in LineGraphComponent, PieGraphComponent, PolarAreaGraphComponent, ProgressCard1, ProgressCard2, Dropped3dWidgets, ProductionCapacity, ReturnOfInvestment, StateWorking, Throughput, and various floating widgets. - Improved code readability and maintainability by consolidating user data extraction logic. - Ensured consistent user data handling across multiple components to reduce redundancy. --- .../components/Dashboard/DashboardCard.tsx | 2 +- .../components/Dashboard/DashboardHome.tsx | 2 +- .../Dashboard/DashboardProjects.tsx | 4 +- .../components/Dashboard/DashboardTrash.tsx | 2 +- app/src/components/Dashboard/SidePannel.tsx | 2 +- .../Dashboard/socket/projectSocketRes.dev.tsx | 2 +- .../components/layout/scenes/MainScene.tsx | 4 +- .../components/layout/sidebarRight/Header.tsx | 5 +- .../properties/GlobalProperties.tsx | 28 +- .../properties/ZoneProperties.tsx | 8 +- .../versionHisory/VersionHistory.tsx | 5 +- .../IotInputCards/BarChartInput.tsx | 6 +- .../FleetEfficiencyInputComponent.tsx | 8 +- .../IotInputCards/FlotingWidgetInput.tsx | 6 +- .../IotInputCards/LineGrapInput.tsx | 6 +- .../IotInputCards/PieChartInput.tsx | 6 +- .../IotInputCards/Progress1Input.tsx | 6 +- .../IotInputCards/Progress2Input.tsx | 6 +- .../WarehouseThroughputInputComponent.tsx | 6 +- .../IotInputCards/Widget2InputCard3D.tsx | 6 +- .../IotInputCards/Widget3InputCard3D.tsx | 6 +- .../IotInputCards/Widget4InputCard3D.tsx | 6 +- .../templates/CollaborationPopup.tsx | 5 +- app/src/components/templates/LoadingPage.tsx | 21 +- app/src/components/ui/FileMenu.tsx | 21 +- app/src/components/ui/list/List.tsx | 10 +- app/src/components/ui/menu/menu.tsx | 5 +- .../Dashboard => }/functions/getUserData.ts | 0 .../IntialLoad/loadInitialWallItems.ts | 185 ++-- app/src/modules/builder/asset/assetsGroup.tsx | 5 +- .../builder/asset/functions/addAssetModel.ts | 860 ++++++++++-------- .../builder/asset/models/model/model.tsx | 8 +- app/src/modules/builder/builder.tsx | 4 +- app/src/modules/builder/dfx/LoadBlueprint.tsx | 7 +- .../dragControlDeclaration.ts | 148 +-- .../geomentries/floors/drawOnlyFloor.ts | 396 ++++---- .../builder/geomentries/layers/deleteLayer.ts | 157 ++-- .../builder/geomentries/lines/deleteLine.ts | 138 ++- .../lines/distanceText/distanceText.tsx | 7 +- .../builder/geomentries/lines/drawWall.ts | 343 ++++--- .../builder/geomentries/lines/splitLine.ts | 207 +++-- .../builder/geomentries/points/deletePoint.ts | 88 +- .../builder/geomentries/walls/addWallItems.ts | 265 +++--- .../geomentries/walls/deleteWallItems.ts | 88 +- .../modules/builder/groups/floorPlanGroup.tsx | 5 +- .../modules/builder/groups/wallItemsGroup.tsx | 7 +- app/src/modules/builder/groups/wallsMesh.tsx | 6 +- app/src/modules/builder/groups/zoneGroup.tsx | 19 +- .../collaboration/camera/collabCams.tsx | 6 +- .../socket/socketResponses.dev.tsx | 11 +- app/src/modules/scene/camera/switchView.tsx | 6 +- .../scene/camera/updateCameraPosition.ts | 51 +- app/src/modules/scene/controls/controls.tsx | 12 +- .../selectionControls/copyPasteControls.tsx | 14 +- .../selectionControls/duplicationControls.tsx | 10 +- .../selectionControls/moveControls.tsx | 5 +- .../selectionControls/rotateControls.tsx | 6 +- .../selectionControls/selectionControls.tsx | 7 +- .../transformControls/transformControls.tsx | 6 +- app/src/modules/scene/scene.tsx | 2 +- .../visualization/RealTimeVisulization.tsx | 5 +- .../functions/handleSaveTemplate.ts | 16 +- .../visualization/functions/handleUiDrop.ts | 19 +- .../visualization/template/Templates.tsx | 22 +- .../widgets/2d/DraggableWidget.tsx | 31 +- .../widgets/2d/charts/BarGraphComponent.tsx | 4 +- .../2d/charts/DoughnutGraphComponent.tsx | 72 +- .../widgets/2d/charts/LineGraphComponent.tsx | 6 +- .../widgets/2d/charts/PieGraphComponent.tsx | 6 +- .../2d/charts/PolarAreaGraphComponent.tsx | 6 +- .../widgets/2d/charts/ProgressCard1.tsx | 4 +- .../widgets/2d/charts/ProgressCard2.tsx | 4 +- .../widgets/3d/Dropped3dWidget.tsx | 21 +- .../widgets/3d/cards/ProductionCapacity.tsx | 6 +- .../widgets/3d/cards/ReturnOfInvestment.tsx | 15 +- .../widgets/3d/cards/StateWorking.tsx | 21 +- .../widgets/3d/cards/Throughput.tsx | 8 +- .../floating/DroppedFloatingWidgets.tsx | 64 +- .../cards/FleetEfficiencyComponent.tsx | 4 +- .../floating/cards/TotalCardComponent.tsx | 7 +- .../cards/WarehouseThroughputComponent.tsx | 4 +- .../widgets/panel/AddButtons.tsx | 22 +- .../visualization/widgets/panel/Panel.tsx | 9 +- .../visualization/zone/DisplayZone.tsx | 13 +- app/src/pages/Dashboard.tsx | 2 +- app/src/pages/Project.tsx | 27 +- app/src/pages/UserAuth.tsx | 14 +- .../visualization/useDroppedObjectsStore.ts | 32 +- 88 files changed, 1954 insertions(+), 1783 deletions(-) rename app/src/{components/Dashboard => }/functions/getUserData.ts (100%) diff --git a/app/src/components/Dashboard/DashboardCard.tsx b/app/src/components/Dashboard/DashboardCard.tsx index 1a532b9..ef04785 100644 --- a/app/src/components/Dashboard/DashboardCard.tsx +++ b/app/src/components/Dashboard/DashboardCard.tsx @@ -1,7 +1,7 @@ import React, { useState, useRef, useEffect } from "react"; import img from "../../assets/image/image.png"; import { useNavigate } from "react-router-dom"; -import { getUserData } from "./functions/getUserData"; +import { getUserData } from "../../functions/getUserData"; import { useLoadingProgress, useProjectName, useSocketStore } from "../../store/builder/store"; import { viewProject } from "../../services/dashboard/viewProject"; import OuterClick from "../../utils/outerClick"; diff --git a/app/src/components/Dashboard/DashboardHome.tsx b/app/src/components/Dashboard/DashboardHome.tsx index 2dc271b..5da1cdf 100644 --- a/app/src/components/Dashboard/DashboardHome.tsx +++ b/app/src/components/Dashboard/DashboardHome.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react"; import DashboardCard from "./DashboardCard"; import DashboardNavBar from "./DashboardNavBar"; import MarketPlaceBanner from "./MarketPlaceBanner"; -import { getUserData } from "./functions/getUserData"; +import { getUserData } from "../../functions/getUserData"; import { useSocketStore } from "../../store/builder/store"; import { recentlyViewed } from "../../services/dashboard/recentlyViewed"; import { searchProject } from "../../services/dashboard/searchProjects"; diff --git a/app/src/components/Dashboard/DashboardProjects.tsx b/app/src/components/Dashboard/DashboardProjects.tsx index e931328..e27d12a 100644 --- a/app/src/components/Dashboard/DashboardProjects.tsx +++ b/app/src/components/Dashboard/DashboardProjects.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from "react"; import DashboardNavBar from "./DashboardNavBar"; import DashboardCard from "./DashboardCard"; -import { getUserData } from "./functions/getUserData"; +import { getUserData } from "../../functions/getUserData"; import { useSocketStore } from "../../store/builder/store"; import { getAllProjects } from "../../services/dashboard/getAllProjects"; import { searchProject } from "../../services/dashboard/searchProjects"; @@ -65,7 +65,7 @@ const DashboardProjects: React.FC = () => { // console.log('deletedProject: ', deletedProject); const deleteProjects = { projectId, - organization: organization, + organization, userId, }; diff --git a/app/src/components/Dashboard/DashboardTrash.tsx b/app/src/components/Dashboard/DashboardTrash.tsx index e1329fc..667c3a0 100644 --- a/app/src/components/Dashboard/DashboardTrash.tsx +++ b/app/src/components/Dashboard/DashboardTrash.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from "react"; import DashboardCard from "./DashboardCard"; import DashboardNavBar from "./DashboardNavBar"; -import { getUserData } from "./functions/getUserData"; +import { getUserData } from "../../functions/getUserData"; import { trashSearchProject } from "../../services/dashboard/trashSearchProject"; import { restoreTrash } from "../../services/dashboard/restoreTrash"; import { getTrash } from "../../services/dashboard/getTrash"; diff --git a/app/src/components/Dashboard/SidePannel.tsx b/app/src/components/Dashboard/SidePannel.tsx index 5ffce6d..2ec0432 100644 --- a/app/src/components/Dashboard/SidePannel.tsx +++ b/app/src/components/Dashboard/SidePannel.tsx @@ -12,7 +12,7 @@ import { useNavigate } from "react-router-dom"; import darkThemeImage from "../../assets/image/darkThemeProject.png"; import lightThemeImage from "../../assets/image/lightThemeProject.png"; import { SettingsIcon, TrashIcon } from "../icons/ExportCommonIcons"; -import { getUserData } from "./functions/getUserData"; +import { getUserData } from "../../functions/getUserData"; import { useLoadingProgress, useSocketStore } from "../../store/builder/store"; import { createProject } from "../../services/dashboard/createProject"; diff --git a/app/src/components/Dashboard/socket/projectSocketRes.dev.tsx b/app/src/components/Dashboard/socket/projectSocketRes.dev.tsx index e19a957..16bdf5e 100644 --- a/app/src/components/Dashboard/socket/projectSocketRes.dev.tsx +++ b/app/src/components/Dashboard/socket/projectSocketRes.dev.tsx @@ -1,7 +1,7 @@ import React, { useEffect } from 'react'; import { useSocketStore } from '../../../store/builder/store'; -import { getUserData } from '../functions/getUserData'; +import { getUserData } from '../../../functions/getUserData'; import { getAllProjects } from '../../../services/dashboard/getAllProjects'; import { recentlyViewed } from '../../../services/dashboard/recentlyViewed'; diff --git a/app/src/components/layout/scenes/MainScene.tsx b/app/src/components/layout/scenes/MainScene.tsx index 67dc35a..482a9ff 100644 --- a/app/src/components/layout/scenes/MainScene.tsx +++ b/app/src/components/layout/scenes/MainScene.tsx @@ -36,6 +36,7 @@ import RenameTooltip from "../../ui/features/RenameTooltip"; import { setFloorItemApi } from "../../../services/factoryBuilder/assest/floorAsset/setFloorItemApi"; import { useAssetsStore } from "../../../store/builder/useAssetStore"; import { useParams } from "react-router-dom"; +import { getUserData } from "../../../functions/getUserData"; function MainScene() { const { products } = useProductStore(); @@ -57,6 +58,7 @@ function MainScene() { const { setName } = useAssetsStore(); const { projectId } = useParams() const { isRenameMode, setIsRenameMode } = useRenameModeStore(); + const { userName, userId, organization, email } = getUserData(); useEffect(() => { if (activeModule !== 'simulation') { @@ -73,8 +75,6 @@ function MainScene() { }; const handleObjectRename = async (newName: string) => { if (!projectId) return - const email = localStorage.getItem("email") ?? ""; - const organization = email?.split("@")[1]?.split(".")[0]; let response = await setFloorItemApi( organization, selectedFloorItem.userData.modelUuid, diff --git a/app/src/components/layout/sidebarRight/Header.tsx b/app/src/components/layout/sidebarRight/Header.tsx index 3d6ffe4..a7ab35a 100644 --- a/app/src/components/layout/sidebarRight/Header.tsx +++ b/app/src/components/layout/sidebarRight/Header.tsx @@ -8,10 +8,11 @@ import { useSelectedUserStore } from "../../../store/collaboration/useCollabStor import { useToggleStore } from "../../../store/useUIToggleStore"; import { ToggleSidebarIcon } from "../../icons/HeaderIcons"; import useModuleStore from "../../../store/useModuleStore"; +import { getUserData } from "../../../functions/getUserData"; const Header: React.FC = () => { const { activeUsers } = useActiveUsers(); - const userName = localStorage.getItem("userName") ?? "Anonymous"; + const { userName } = getUserData(); const { toggleUILeft, toggleUIRight, setToggleUI } = useToggleStore(); const { activeModule } = useModuleStore(); @@ -113,7 +114,7 @@ const Header: React.FC = () => { ))}
-
{userName[0]}
+
{userName}
diff --git a/app/src/components/layout/sidebarRight/properties/GlobalProperties.tsx b/app/src/components/layout/sidebarRight/properties/GlobalProperties.tsx index b07192c..c075f52 100644 --- a/app/src/components/layout/sidebarRight/properties/GlobalProperties.tsx +++ b/app/src/components/layout/sidebarRight/properties/GlobalProperties.tsx @@ -20,6 +20,7 @@ import { import { setEnvironment } from "../../../../services/factoryBuilder/environment/setEnvironment"; import * as CONSTANTS from "../../../../types/world/worldConstants"; import { useParams } from "react-router-dom"; +import { getUserData } from "../../../../functions/getUserData"; const GlobalProperties: React.FC = () => { const { toggleView, setToggleView } = useToggleView(); const { selectedWallItem, setSelectedWallItem } = useSelectedWallItem(); @@ -38,14 +39,13 @@ const GlobalProperties: React.FC = () => { const [limitGridDistance, setLimitGridDistance] = useState(false); const [gridDistance, setGridDistance] = useState(3); const { projectId } = useParams(); + const { email, userId, organization } = getUserData(); const optimizeScene = async (value: any) => { - const email = localStorage.getItem("email"); - const organization = email?.split("@")[1]?.split(".")[0] || "defaultOrg"; setEnvironment( organization, - localStorage.getItem("userId")!, + userId, wallVisibility, roofVisibility, shadows, @@ -58,13 +58,11 @@ const GlobalProperties: React.FC = () => { }; const limitRenderDistance = async () => { - const email = localStorage.getItem("email"); - const organization = email?.split("@")[1]?.split(".")[0] || "defaultOrg"; if (limitDistance) { setEnvironment( organization, - localStorage.getItem("userId")!, + userId, wallVisibility, roofVisibility, shadows, @@ -76,7 +74,7 @@ const GlobalProperties: React.FC = () => { } else { setEnvironment( organization, - localStorage.getItem("userId")!, + userId, wallVisibility, roofVisibility, shadows, @@ -104,13 +102,11 @@ const GlobalProperties: React.FC = () => { } const updatedDist = async (value: number) => { - const email = localStorage.getItem("email"); - const organization = email?.split("@")[1]?.split(".")[0] || "defaultOrg"; setRenderDistance(value); // setDistance(value); const data = await setEnvironment( organization, - localStorage.getItem("userId")!, + userId, wallVisibility, roofVisibility, shadows, @@ -122,13 +118,11 @@ const GlobalProperties: React.FC = () => { // Function to toggle roof visibility const changeRoofVisibility = async () => { - const email = localStorage.getItem("email"); - const organization = email!.split("@")[1].split(".")[0]; //using REST const data = await setEnvironment( organization, - localStorage.getItem("userId")!, + userId, wallVisibility, !roofVisibility, shadows, @@ -153,12 +147,10 @@ const GlobalProperties: React.FC = () => { }; // Function to toggle wall visibility const changeWallVisibility = async () => { - const email = localStorage.getItem("email"); - const organization = email!.split("@")[1].split(".")[0]; //using REST const data = await setEnvironment( organization, - localStorage.getItem("userId")!, + userId, !wallVisibility, roofVisibility, shadows, @@ -182,12 +174,10 @@ const GlobalProperties: React.FC = () => { }; const shadowVisibility = async () => { - const email = localStorage.getItem("email"); - const organization = email!.split("@")[1].split(".")[0]; //using REST const data = await setEnvironment( organization, - localStorage.getItem("userId")!, + userId, wallVisibility, roofVisibility, !shadows, diff --git a/app/src/components/layout/sidebarRight/properties/ZoneProperties.tsx b/app/src/components/layout/sidebarRight/properties/ZoneProperties.tsx index fa244fd..b4a37ec 100644 --- a/app/src/components/layout/sidebarRight/properties/ZoneProperties.tsx +++ b/app/src/components/layout/sidebarRight/properties/ZoneProperties.tsx @@ -10,6 +10,7 @@ import { } from "../../../../store/builder/store"; import { zoneCameraUpdate } from "../../../../services/visulization/zone/zoneCameraUpdation"; import { useParams } from "react-router-dom"; +import { getUserData } from "../../../../functions/getUserData"; const ZoneProperties: React.FC = () => { const { Edit, setEdit } = useEditPosition(); @@ -17,7 +18,8 @@ const ZoneProperties: React.FC = () => { const { zonePosition, setZonePosition } = usezonePosition(); const { zoneTarget, setZoneTarget } = usezoneTarget(); const { zones, setZones } = useZones(); - const { projectId } = useParams() + const { projectId } = useParams(); + const { userName, userId, organization, email } = getUserData(); useEffect(() => { setZonePosition(selectedZone.zoneViewPortPosition); @@ -26,8 +28,6 @@ const ZoneProperties: React.FC = () => { async function handleSetView() { try { - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; let zonesdata = { zoneUuid: selectedZone.zoneUuid, @@ -52,8 +52,6 @@ const ZoneProperties: React.FC = () => { } async function handleZoneNameChange(newName: string) { - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; const zonesdata = { zoneUuid: selectedZone.zoneUuid, zoneName: newName, diff --git a/app/src/components/layout/sidebarRight/versionHisory/VersionHistory.tsx b/app/src/components/layout/sidebarRight/versionHisory/VersionHistory.tsx index cc11c57..a15f990 100644 --- a/app/src/components/layout/sidebarRight/versionHisory/VersionHistory.tsx +++ b/app/src/components/layout/sidebarRight/versionHisory/VersionHistory.tsx @@ -9,9 +9,10 @@ import { import RenameInput from "../../../ui/inputs/RenameInput"; import { useVersionStore } from "../../../../store/builder/store"; import { generateUniqueId } from "../../../../functions/generateUniqueId"; +import { getUserData } from "../../../../functions/getUserData"; const VersionHistory = () => { - const userName = localStorage.getItem("userName") ?? "Anonymous"; + const { userName, userId, organization, email } = getUserData(); const { versions, addVersion, setVersions, updateVersion } = useVersionStore(); const [selectedVersion, setSelectedVersion] = useState( @@ -28,7 +29,7 @@ const VersionHistory = () => { month: "long", day: "2-digit", }), - savedBy: userName, + savedBy: userName ?? "Anonymous", }; const newVersions = [newVersion, ...versions]; diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/BarChartInput.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/BarChartInput.tsx index 4e2ff22..26424c5 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/BarChartInput.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/BarChartInput.tsx @@ -9,6 +9,7 @@ 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"; type Props = {}; @@ -23,8 +24,7 @@ const BarChartInput = (props: Props) => { const { selectedZone } = useSelectedZoneStore(); const { selectedChartId } = useWidgetStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); const { projectId } = useParams(); const { visualizationSocket } = useSocketStore(); @@ -125,7 +125,7 @@ const BarChartInput = (props: Props) => { }, }, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/FleetEfficiencyInputComponent.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/FleetEfficiencyInputComponent.tsx index 9ebf11d..2940406 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/FleetEfficiencyInputComponent.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/FleetEfficiencyInputComponent.tsx @@ -7,6 +7,7 @@ import { useSelectedZoneStore } from "../../../../../store/visualization/useZone import { useWidgetStore } from "../../../../../store/useWidgetStore"; import axios from "axios"; import RenameInput from "../../../../ui/inputs/RenameInput"; +import { getUserData } from "../../../../../functions/getUserData"; type Props = {}; @@ -22,11 +23,10 @@ const FleetEfficiencyInputComponent = (props: Props) => { const { selectedZone } = useSelectedZoneStore(); const { selectedChartId } = useWidgetStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); - const isSelected = () => {}; + const isSelected = () => { }; useEffect(() => { const fetchZoneData = async () => { @@ -89,7 +89,7 @@ const FleetEfficiencyInputComponent = (props: Props) => { const response = await axios.post( `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/floatWidget/save`, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/FlotingWidgetInput.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/FlotingWidgetInput.tsx index 58a6093..6d670dd 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/FlotingWidgetInput.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/FlotingWidgetInput.tsx @@ -7,6 +7,7 @@ import { useSelectedZoneStore } from "../../../../../store/visualization/useZone import { useWidgetStore } from "../../../../../store/useWidgetStore"; import axios from "axios"; import RenameInput from "../../../../ui/inputs/RenameInput"; +import { getUserData } from "../../../../../functions/getUserData"; type Props = {}; @@ -22,8 +23,7 @@ const FlotingWidgetInput = (props: Props) => { const { selectedZone } = useSelectedZoneStore(); const { selectedChartId } = useWidgetStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); useEffect(() => { @@ -88,7 +88,7 @@ const FlotingWidgetInput = (props: Props) => { const response = await axios.post( `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/floatWidget/save`, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/LineGrapInput.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/LineGrapInput.tsx index be67fcd..8834cbc 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/LineGrapInput.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/LineGrapInput.tsx @@ -125,6 +125,7 @@ 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"; type Props = {}; @@ -139,8 +140,7 @@ const LineGrapInput = (props: Props) => { const { selectedZone } = useSelectedZoneStore(); const { selectedChartId } = useWidgetStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); const { projectId } = useParams(); const { visualizationSocket } = useSocketStore(); @@ -240,7 +240,7 @@ const LineGrapInput = (props: Props) => { }, }, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/PieChartInput.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/PieChartInput.tsx index 875baa2..5a673a2 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/PieChartInput.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/PieChartInput.tsx @@ -9,6 +9,7 @@ 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"; type Props = {}; @@ -23,8 +24,7 @@ const PieChartInput = (props: Props) => { const { selectedZone } = useSelectedZoneStore(); const { selectedChartId } = useWidgetStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); const { projectId } = useParams(); const { visualizationSocket } = useSocketStore(); @@ -126,7 +126,7 @@ const PieChartInput = (props: Props) => { }, }, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/Progress1Input.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/Progress1Input.tsx index 1f4832e..cbfe39c 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/Progress1Input.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/Progress1Input.tsx @@ -9,6 +9,7 @@ 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"; type Props = {}; @@ -23,8 +24,7 @@ const Progress1Input = (props: Props) => { const { selectedZone } = useSelectedZoneStore(); const { selectedChartId } = useWidgetStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); const { projectId } = useParams(); const { visualizationSocket } = useSocketStore(); @@ -125,7 +125,7 @@ const Progress1Input = (props: Props) => { }, }, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/Progress2Input.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/Progress2Input.tsx index 06a4282..9edfd6a 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/Progress2Input.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/Progress2Input.tsx @@ -9,6 +9,7 @@ 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"; type Props = {}; @@ -23,8 +24,7 @@ const Progress2Input = (props: Props) => { const { selectedZone } = useSelectedZoneStore(); const { selectedChartId } = useWidgetStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); const { projectId } = useParams(); const { visualizationSocket } = useSocketStore(); @@ -125,7 +125,7 @@ const Progress2Input = (props: Props) => { }, }, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/WarehouseThroughputInputComponent.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/WarehouseThroughputInputComponent.tsx index d069b0f..b77cd93 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/WarehouseThroughputInputComponent.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/WarehouseThroughputInputComponent.tsx @@ -7,6 +7,7 @@ import { useSelectedZoneStore } from "../../../../../store/visualization/useZone import { useWidgetStore } from "../../../../../store/useWidgetStore"; import axios from "axios"; import RenameInput from "../../../../ui/inputs/RenameInput"; +import { getUserData } from "../../../../../functions/getUserData"; type Props = {}; @@ -22,8 +23,7 @@ const WarehouseThroughputInputComponent = (props: Props) => { const { selectedZone } = useSelectedZoneStore(); const { selectedChartId } = useWidgetStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); useEffect(() => { @@ -86,7 +86,7 @@ const WarehouseThroughputInputComponent = (props: Props) => { const response = await axios.post( `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/floatWidget/save`, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget2InputCard3D.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget2InputCard3D.tsx index 02c76bb..1461c8d 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget2InputCard3D.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget2InputCard3D.tsx @@ -7,6 +7,7 @@ import { useSelectedZoneStore } from "../../../../../store/visualization/useZone import { useWidgetStore } from "../../../../../store/useWidgetStore"; import axios from "axios"; import RenameInput from "../../../../ui/inputs/RenameInput"; +import { getUserData } from "../../../../../functions/getUserData"; type Props = {}; @@ -21,8 +22,7 @@ const Widget2InputCard3D = (props: Props) => { >({}); const { selectedZone } = useSelectedZoneStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); useEffect(() => { @@ -85,7 +85,7 @@ const Widget2InputCard3D = (props: Props) => { const response = await axios.post( `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/widget3d/save`, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget3InputCard3D.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget3InputCard3D.tsx index ebe1718..59339b8 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget3InputCard3D.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget3InputCard3D.tsx @@ -7,6 +7,7 @@ import { useSelectedZoneStore } from "../../../../../store/visualization/useZone import { useWidgetStore } from "../../../../../store/useWidgetStore"; import axios from "axios"; import RenameInput from "../../../../ui/inputs/RenameInput"; +import { getUserData } from "../../../../../functions/getUserData"; const Widget3InputCard3D = () => { const { selectedChartId } = useWidgetStore(); @@ -19,8 +20,7 @@ const Widget3InputCard3D = () => { >({}); const { selectedZone } = useSelectedZoneStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); useEffect(() => { @@ -82,7 +82,7 @@ const Widget3InputCard3D = () => { const response = await axios.post( `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/widget3d/save`, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget4InputCard3D.tsx b/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget4InputCard3D.tsx index 4a60b70..dcaad11 100644 --- a/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget4InputCard3D.tsx +++ b/app/src/components/layout/sidebarRight/visualization/IotInputCards/Widget4InputCard3D.tsx @@ -7,6 +7,7 @@ import { useSelectedZoneStore } from "../../../../../store/visualization/useZone import { useWidgetStore } from "../../../../../store/useWidgetStore"; import axios from "axios"; import RenameInput from "../../../../ui/inputs/RenameInput"; +import { getUserData } from "../../../../../functions/getUserData"; type Props = {}; @@ -21,8 +22,7 @@ const Widget4InputCard3D = (props: Props) => { >({}); const { selectedZone } = useSelectedZoneStore(); const iotApiUrl = process.env.REACT_APP_IOT_SOCKET_SERVER_URL; - const email = localStorage.getItem("email") || ""; - const organization = email?.split("@")[1]?.split(".")[0]; + const { userName, userId, organization, email } = getUserData(); const [isLoading, setLoading] = useState(true); useEffect(() => { @@ -85,7 +85,7 @@ const Widget4InputCard3D = (props: Props) => { const response = await axios.post( `http://${process.env.REACT_APP_SERVER_REST_API_BASE_URL}/api/V1/widget3d/save`, { - organization: organization, + organization, zoneUuid: selectedZone.zoneUuid, widget: { id: selectedChartId.id, diff --git a/app/src/components/templates/CollaborationPopup.tsx b/app/src/components/templates/CollaborationPopup.tsx index 9e35427..60332b9 100644 --- a/app/src/components/templates/CollaborationPopup.tsx +++ b/app/src/components/templates/CollaborationPopup.tsx @@ -6,6 +6,7 @@ import RegularDropDown from "../ui/inputs/RegularDropDown"; import { access } from "fs"; import MultiEmailInvite from "../ui/inputs/MultiEmailInvite"; import { useActiveUsers } from "../../store/builder/store"; +import { getUserData } from "../../functions/getUserData"; interface UserListTemplateProps { user: User; @@ -59,10 +60,10 @@ const CollaborationPopup: React.FC = ({ setUserManagement, }) => { const { activeUsers } = useActiveUsers(); + const { userName } = getUserData(); useEffect(() => { console.log("activeUsers: ", activeUsers); }, [activeUsers]); - const userName = localStorage.getItem("userName") || "Anonymous"; const users = [ { name: "Alice Johnson", @@ -140,7 +141,7 @@ const CollaborationPopup: React.FC = ({
-
{userName[0].toUpperCase()}
+
{userName && userName[0].toUpperCase()}
{userName}
you
diff --git a/app/src/components/templates/LoadingPage.tsx b/app/src/components/templates/LoadingPage.tsx index 7e25c51..6855808 100644 --- a/app/src/components/templates/LoadingPage.tsx +++ b/app/src/components/templates/LoadingPage.tsx @@ -5,6 +5,7 @@ import { useParams } from "react-router-dom"; import { useProjectName } from "../../store/builder/store"; import { getAllProjects } from "../../services/dashboard/getAllProjects"; import { useComparisonProduct } from "../../store/simulation/useSimulationStore"; +import { getUserData } from "../../functions/getUserData"; interface LoadingPageProps { progress: number; // Expect progress as a percentage (0-100) @@ -14,32 +15,23 @@ const LoadingPage: React.FC = ({ progress }) => { const { projectName, setProjectName } = useProjectName(); const { projectId } = useParams(); const { comparisonProduct } = useComparisonProduct(); + const { userId, organization, email } = getUserData(); const validatedProgress = Math.min(100, Math.max(0, progress)); const generateThumbnail = async () => { - const email = localStorage.getItem("email"); - const userId = localStorage.getItem("userId"); try { if (!email || !userId) { console.error("User data not found in localStorage"); return; } - const emailParts = email.split("@"); - if (emailParts.length < 2) { - console.error("Invalid email format"); - return; - } - - const domainParts = emailParts[1].split("."); - const Organization = domainParts[0]; - const projects = await getAllProjects(userId, Organization); + const projects = await getAllProjects(userId, organization); const filterProject = projects?.Projects.find( (val: any) => val.projectUuid === projectId || val._id === projectId ); setProjectName(filterProject.projectName); - } catch {} + } catch { } }; useEffect(() => { generateThumbnail(); @@ -47,9 +39,8 @@ const LoadingPage: React.FC = ({ progress }) => { return (
{projectName}
diff --git a/app/src/components/ui/FileMenu.tsx b/app/src/components/ui/FileMenu.tsx index 32078b9..fecf742 100644 --- a/app/src/components/ui/FileMenu.tsx +++ b/app/src/components/ui/FileMenu.tsx @@ -7,6 +7,7 @@ import { useProjectName, useSocketStore } from "../../store/builder/store"; import { useParams } from "react-router-dom"; import { getAllProjects } from "../../services/dashboard/getAllProjects"; import { updateProject } from "../../services/dashboard/updateProject"; +import { getUserData } from "../../functions/getUserData"; const FileMenu: React.FC = () => { const [openMenu, setOpenMenu] = useState(false); @@ -15,6 +16,7 @@ const FileMenu: React.FC = () => { const { projectName, setProjectName } = useProjectName(); const { dashBoardSocket } = useSocketStore(); const { projectId } = useParams(); + const { userId, organization, email } = getUserData(); const handleClick = () => { if (clickTimeout) return; @@ -58,31 +60,20 @@ const FileMenu: React.FC = () => { if (!projectId) return // localStorage.setItem("projectName", newName); try { - const email = localStorage.getItem("email"); - const userId = localStorage.getItem("userId"); if (!email || !userId) { return; } - - const emailParts = email.split("@"); - if (emailParts.length < 2) { - - return; - } - - const domainParts = emailParts[1].split("."); - const Organization = domainParts[0]; const projects = await getAllProjects( - userId, Organization + userId, organization ); console.log('projects: ', projects); let projectUuid = projects.Projects.find((val: any) => val.projectUuid === projectId || val._id === projectId) const updateProjects = { projectId: projectUuid, - organization: Organization, + organization, userId, projectName, thumbnail: undefined @@ -101,12 +92,12 @@ const FileMenu: React.FC = () => { const updatedProjectName = await updateProject( projectId, userId, - Organization, + organization, undefined, projectName ); // - } catch (error) {} + } catch (error) { } }; return (