Skip to content

Commit

Permalink
feat(robotpage-layout): 🎉 add robotsubpages-layout with hook configra…
Browse files Browse the repository at this point in the history
…tions
  • Loading branch information
gokhangunduz committed Aug 21, 2023
1 parent beb7d28 commit 022737c
Show file tree
Hide file tree
Showing 12 changed files with 173 additions and 195 deletions.
4 changes: 2 additions & 2 deletions src/components/Header/Header.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import React, { ReactElement } from "react";
import NotificationDropdownMenu from "../NotificationDropdownMenu/NotificationDropdownMenu";
import HeaderDropdownMenu from "../HeaderDropdownMenu/HeaderDropdownMenu";
import Breadcrumb from "../Breadcrumb/Breadcrumb";
// import TimerDropdownMenu from "../TimerDropdownMenu/TimerDropdownMenu";
import NotificationDropdownMenu from "../NotificationDropdownMenu/NotificationDropdownMenu";
import Breadcrumb from "../Breadcrumb/Breadcrumb";

export default function Header(): ReactElement {
return (
Expand Down
130 changes: 60 additions & 70 deletions src/components/RobotHeader/RobotHeader.tsx
Original file line number Diff line number Diff line change
@@ -1,85 +1,75 @@
import React, { Fragment, ReactElement } from "react";
import { useParams } from "react-router-dom";
import RobotConnectionsViewer from "../RobotConnectionsViewer/RobotConnectionsViewer";
import RobotServiceButtons from "../RobotServiceButtons/RobotServiceButtons";
import RobotHeaderTabs from "../RobotHeaderTabs/RobotHeaderTabs";
import { envOnPremiseRobot } from "../../helpers/envProvider";
import RobotResource from "../RobotResource/RobotResource";
import { IoLocationOutline } from "react-icons/io5";
import { AiOutlineTeam } from "react-icons/ai";
import CardLayout from "../../layouts/CardLayout";
import ContentLoader from "react-content-loader";
import RobotResource from "../RobotResource/RobotResource";
import RobotConnectionsViewer from "../RobotConnectionsViewer/RobotConnectionsViewer";
import { envOnPremiseRobot } from "../../helpers/envProvider";
import RobotHeaderTabs from "../RobotHeaderTabs/RobotHeaderTabs";
import { AiOutlineTeam } from "react-icons/ai";
import { useParams } from "react-router-dom";
import useRobot from "../../hooks/useRobot";
import RobotServiceButtons from "../RobotServiceButtons/RobotServiceButtons";

interface IRobotHeader {
handleChangeActiveTab: any;
}

export default function RobotHeader({
handleChangeActiveTab,
}: IRobotHeader): ReactElement {
export default function RobotHeader(): ReactElement {
const { ros, responseRobot, isSettedCookie } = useRobot();
const url = useParams();

const { ros, responseRobot, isSettedCookie, activeTab } = useRobot();

return (
<CardLayout className="pt-6 px-8 !pb-0">
<Fragment>
<div className="h-28 flex items-center justify-between">
<div className="h-full flex flex-col justify-around">
<div className="flex gap-2 items-center">
<span className="text-lg font-medium">{url?.robotName}</span>
<div
className={`text-[0.64rem] capitalize font-medium px-3 py-1 rounded-lg w-fit text-layer-primary-500 bg-layer-primary-100`}
>
{responseRobot?.robotClusters?.length === 1
? `Virtual ${envOnPremiseRobot ? "Application" : "Robot"}`
: (responseRobot?.robotClusters?.length === 2 &&
`Physical ${
envOnPremiseRobot ? "Application" : "Robot"
}`) || (
<ContentLoader
speed={1}
width={64}
height={18}
backgroundColor="#f5e5ff"
foregroundColor="#fbf4ff"
>
<rect width="64" height="18" />
</ContentLoader>
)}
<div className="col-span-full">
<CardLayout className="pt-6 px-8 !pb-0">
<Fragment>
<div className="h-28 flex items-center justify-between">
<div className="h-full flex flex-col justify-around">
<div className="flex gap-2 items-center">
<span className="text-lg font-medium">{url?.robotName}</span>
<div
className={`text-[0.64rem] capitalize font-medium px-3 py-1 rounded-lg w-fit text-layer-primary-500 bg-layer-primary-100`}
>
{responseRobot?.robotClusters?.length === 1
? `Virtual ${envOnPremiseRobot ? "Application" : "Robot"}`
: (responseRobot?.robotClusters?.length === 2 &&
`Physical ${
envOnPremiseRobot ? "Application" : "Robot"
}`) || (
<ContentLoader
speed={1}
width={64}
height={18}
backgroundColor="#f5e5ff"
foregroundColor="#fbf4ff"
>
<rect width="64" height="18" />
</ContentLoader>
)}
</div>
</div>
</div>
<span className="flex gap-2 items-center">
<AiOutlineTeam size={16} />
<span className="text-xs font-light">
{url?.organizationName} Organization
<span className="flex gap-2 items-center">
<AiOutlineTeam size={16} />
<span className="text-xs font-light">
{url?.organizationName} Organization
</span>
</span>
</span>
<span className="flex gap-2 items-center">
<IoLocationOutline size={16} />
<span className="text-xs font-light">Ankara, Turkiye</span>
</span>
</div>
<div className="hidden md:flex text-xs font-medium text-layer-dark-400 gap-8">
<div className="h-full flex flex-col items-end gap-4">
<RobotServiceButtons />
<RobotConnectionsViewer
ide={isSettedCookie}
vdiURL={responseRobot?.vdiIngressEndpoint}
ros={ros}
/>
<RobotResource responseRobot={responseRobot} />
<span className="flex gap-2 items-center">
<IoLocationOutline size={16} />
<span className="text-xs font-light">Ankara, Turkiye</span>
</span>
</div>
<div className="hidden md:flex text-xs font-medium text-layer-dark-400 gap-8">
<div className="h-full flex flex-col items-end gap-4">
<RobotServiceButtons />
<RobotConnectionsViewer
ide={isSettedCookie}
vdiURL={responseRobot?.vdiIngressEndpoint}
ros={ros}
/>
<RobotResource responseRobot={responseRobot} />
</div>
</div>
</div>
</div>
<RobotHeaderTabs
responseRobot={responseRobot}
isSettedCookie={isSettedCookie}
handleChangeActiveTab={handleChangeActiveTab}
activeTab={activeTab}
/>
</Fragment>
</CardLayout>
<RobotHeaderTabs />
</Fragment>
</CardLayout>
</div>
);
}
17 changes: 4 additions & 13 deletions src/components/RobotHeaderTabs/RobotHeaderTabs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,11 @@ import { BiJoystickButton } from "react-icons/bi";
import { BsCameraVideoFill } from "react-icons/bs";
import { AiFillCode } from "react-icons/ai";
import ContentLoader from "react-content-loader";
import useRobot from "../../hooks/useRobot";

interface IRobotHeaderTabs {
responseRobot: any;
isSettedCookie: boolean | null;
handleChangeActiveTab: any;
activeTab: string;
}
export default function RobotHeaderTabs(): ReactElement {
const { responseRobot, activeTab, isSettedCookie, setActiveTab } = useRobot();

export default function RobotHeaderTabs({
responseRobot,
isSettedCookie,
handleChangeActiveTab,
activeTab,
}: IRobotHeaderTabs): ReactElement {
const tabs = [
{
name: "Overview",
Expand Down Expand Up @@ -84,7 +75,7 @@ export default function RobotHeaderTabs({
tab?.disabled ? "cursor-not-allowed" : "cursor-pointer"
} ${tab?.hidden && "!hidden"}`}
onClick={() =>
tab?.state && !tab?.disabled && handleChangeActiveTab(tab.name)
tab?.state && !tab?.disabled && setActiveTab(tab.name)
}
key={index}
>
Expand Down
4 changes: 2 additions & 2 deletions src/components/Sidebar/Sidebar.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import React, { Fragment, ReactElement } from "react";
import SidebarContentLayout from "../../layouts/SidebarContentLayout";
import { Link } from "react-router-dom";
import useMain from "../../hooks/useMain";
import PrivateSidebar from "../PrivateSidebar/PrivateSidebar";
import useMain from "../../hooks/useMain";
import { Link } from "react-router-dom";

export default function Sidebar(): ReactElement {
const { sidebarState } = useMain();
Expand Down
4 changes: 2 additions & 2 deletions src/components/Table/GeneralTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ export default function GeneralTable({
}: GeneralTableProps): ReactElement {
return (
<div
className="flex flex-col px-4 pt-4 pb-0 rounded-lg shadow-lg bg-layer-light-50 animate__animated animate__fadeIn border border-layer-light-200"
className="flex flex-col pt-4 px-4 pb-0 rounded-lg shadow-lg bg-layer-light-50 animate__animated animate__fadeIn border border-layer-light-200"
style={loading ? { backgroundColor: "rgba(0, 0, 0, 0.4)" } : {}}
>
<div className="flex px-4 pt-1 pb-8 items-center gap-3">
<div className="flex pt-1 px-4 pb-8 items-center gap-3">
<img
className="w-7"
src={`/svg/general/${type}/${type}-gray.svg`}
Expand Down
4 changes: 2 additions & 2 deletions src/contexts/RobotContext.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import React, { useEffect, createContext, useState } from "react";
import { envOnPremiseFleet, envOnPremiseRobot } from "../helpers/envProvider";
import { IrobotPages } from "../interfaces/generalInterfaces";
import useFunctions from "../hooks/useFunctions";
import useMain from "../hooks/useMain";
import { useParams } from "react-router-dom";
import { envOnPremiseFleet, envOnPremiseRobot } from "../helpers/envProvider";
import useMain from "../hooks/useMain";

export const RobotContext: any = createContext<any>(null);

Expand Down
4 changes: 2 additions & 2 deletions src/layouts/PrivateLayout.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import React, { Fragment, ReactElement, useEffect, useState } from "react";
import useWindowDimensions from "../hooks/useWindowDimensions";
import { Outlet, useLocation } from "react-router-dom";
import Header from "../components/Header/Header";
import Sidebar from "../components/Sidebar/Sidebar";
import Header from "../components/Header/Header";
import LoadingBar from "react-top-loading-bar";
import useMain from "../hooks/useMain";
import { toast } from "sonner";
import useWindowDimensions from "../hooks/useWindowDimensions";

export default function PrivateLayout(): ReactElement {
const { sidebarState, setSidebarState } = useMain();
Expand Down
77 changes: 77 additions & 0 deletions src/layouts/RobotSubPageLayout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import React, { ReactElement } from "react";
import DevelopmentSuite from "../pages/RobotPage/DevelopmentSuite/DevelopmentSuite";
import Teleoperation from "../pages/RobotPage/Teleoperation/Teleoperation";
import Visualization from "../pages/RobotPage/Visualization/Visualization";
import RemoteDesktop from "../pages/RobotPage/RemoteDesktop/RemoteDesktop";
import CodeEditor from "../components/CodeEditor/CodeEditor";
import Overview from "../pages/RobotPage/Overview/Overview";
import { envOnPremiseRobot } from "../helpers/envProvider";
import TaskManagementLayout from "./TaskManagementLayout";
import BarcodeContext from "../contexts/BarcodeContext";
import MissionContext from "../contexts/MissionContext";
import { useAppSelector } from "../hooks/redux";
import useRobot from "../hooks/useRobot";

export default function RobotSubPageLayout(): ReactElement {
const { activeTab, setActiveTab, responseRobot, isSettedCookie } = useRobot();
const { urls } = useAppSelector((state) => state.robot);
return (
<div className="col-span-full">
{(() => {
switch (activeTab) {
case "Overview":
return (
<Overview
informationWidgetAction={() => {
isSettedCookie &&
setActiveTab(
envOnPremiseRobot ? "Development Suite" : "Teleoperation"
);
}}
/>
);
case "Task Management":
return (
<MissionContext>
<BarcodeContext>
<TaskManagementLayout />
</BarcodeContext>
</MissionContext>
);
case "Visualization":
return <Visualization />;
case "Teleoperation":
return (
<Teleoperation
vdiIngressEndpoint={
urls?.vdi || responseRobot?.vdiIngressEndpoint
}
/>
);
case "Development Suite":
return (
<DevelopmentSuite
ideURL={urls?.ide || responseRobot?.ideIngressEndpoint}
vdiURL={urls?.vdi || responseRobot?.vdiIngressEndpoint}
/>
);
case "Remote Desktop":
return <RemoteDesktop />;
case "Settings":
return <div>Settings</div>;
case "Loading":
return (
<div>
<img
className="mx-auto scale-75"
src="/svg/general/loading.svg"
alt="loading"
/>
</div>
);
}
})()}
<CodeEditor />
</div>
);
}
4 changes: 2 additions & 2 deletions src/layouts/WidgetLayout.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { ReactElement } from "react";

interface WidgetLayoutProps {
interface IWidgetLayout {
icon?: ReactElement;
title: string;
subtitle?: string | ReactElement | ReactElement[];
Expand All @@ -16,7 +16,7 @@ export default function WidgetLayout({
children,
options,
className,
}: WidgetLayoutProps): ReactElement {
}: IWidgetLayout): ReactElement {
return (
<div
className="flex flex-col shadow-lg rounded-lg bg-layer-light-50 h-[21rem] animate__animated animate__fadeIn border border-layer-light-200"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,27 @@ import React, {
useMemo,
useState,
} from "react";
import {
envOnPremiseFleet,
envOnPremiseRobot,
} from "../../../helpers/envProvider";
import InformationWidget from "../../../components/InformationWidget/InformationWidget";
import NamespaceActionCells from "../../../components/ActionCells/NamespaceActionCells";
import ResourcesWidget from "../../../components/ResourcesWidget/ResourcesWidget";
import FleetActionCells from "../../../components/ActionCells/FleetActionCells";
import UsagesWidget from "../../../components/UsagesWidget/UsagesWidget";
import GeneralTable from "../../../components/Table/GeneralTable";
import DashboardLayout from "../../../layouts/DashboardLayout";
import { FaLinux, FaServer, FaUbuntu } from "react-icons/fa";
import BasicCell from "../../../components/Cells/BasicCell";
import StateCell from "../../../components/Cells/StateCell";
import { useParams } from "react-router-dom";
import InfoCell from "../../../components/Cells/InfoCell";
import Button from "../../../components/Button/Button";
import useMain from "../../../hooks/useMain";
import useFunctions from "../../../hooks/useFunctions";
import UsagesWidget from "../../../components/UsagesWidget/UsagesWidget";
import DashboardLayout from "../../../layouts/DashboardLayout";
import ResourcesWidget from "../../../components/ResourcesWidget/ResourcesWidget";
import { FaLinux, FaServer, FaUbuntu } from "react-icons/fa";
import { SiKubernetes } from "react-icons/si";
import { useParams } from "react-router-dom";
import useMain from "../../../hooks/useMain";
import { RiCpuLine } from "react-icons/ri";
import {
envOnPremiseFleet,
envOnPremiseRobot,
} from "../../../helpers/envProvider";
import NamespaceActionCells from "../../../components/ActionCells/NamespaceActionCells";

export default function CloudInstanceDashboardPage(): ReactElement {
const [responseFleets, setResponseFleets] = useState<any>(undefined);
Expand Down
10 changes: 5 additions & 5 deletions src/pages/DashboardsPage/MainDashboardPage/MainDashboardPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ import React, {
useMemo,
useState,
} from "react";
import OrganizationActionCells from "../../../components/ActionCells/OrganizationActionCells";
import InformationWidget from "../../../components/InformationWidget/InformationWidget";
import { organizationNameViewer } from "../../../functions/GeneralFunctions";
import CountWidget from "../../../components/CountWidget/CountWidget";
import GeneralTable from "../../../components/Table/GeneralTable";
import DashboardLayout from "../../../layouts/DashboardLayout";
import StateCell from "../../../components/Cells/StateCell";
import InfoCell from "../../../components/Cells/InfoCell";
import useFunctions from "../../../hooks/useFunctions";
import Button from "../../../components/Button/Button";
import useFunctions from "../../../hooks/useFunctions";
import useMain from "../../../hooks/useMain";
import { useParams } from "react-router-dom";
import OrganizationActionCells from "../../../components/ActionCells/OrganizationActionCells";
import StateCell from "../../../components/Cells/StateCell";
import DashboardLayout from "../../../layouts/DashboardLayout";
import CountWidget from "../../../components/CountWidget/CountWidget";

export default function MainDashboardPage(): ReactElement {
const [responseOrganizations, setResponseOrganizations] = useState<
Expand Down
Loading

0 comments on commit 022737c

Please sign in to comment.