Skip to content

Commit

Permalink
Merge branch 'v3' of https://github.com/itsparser/golem into VasanthMain
Browse files Browse the repository at this point in the history
  • Loading branch information
Partha authored and Partha committed Feb 5, 2025
2 parents 034ee49 + b8d10f7 commit 8c3d9b1
Show file tree
Hide file tree
Showing 6 changed files with 1,330 additions and 1,376 deletions.
2 changes: 1 addition & 1 deletion crates/app/src/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
--chart-4: 280 65% 60%;
--chart-5: 340 75% 55%;
--radius: 0.2rem;
--sidebar-background: 240 5.9% 10%;
--sidebar-background: 240 10% 3.9%;
--sidebar-foreground: 240 4.8% 95.9%;
--sidebar-primary: 224.3 76.3% 48%;
--sidebar-primary-foreground: 0 0% 100%;
Expand Down
293 changes: 143 additions & 150 deletions crates/app/src/pages/api/details/apis-layout.tsx
Original file line number Diff line number Diff line change
@@ -1,166 +1,159 @@
import { API } from "@/service";
import { useCallback, useEffect, useMemo, useState } from "react";
import { Outlet, useLocation, useNavigate, useParams } from "react-router-dom";
import {
SidebarInset,
SidebarProvider,
SidebarTrigger,
} from "@/components/ui/sidebar.tsx";
import { SidebarMenu } from "@/components/sidebar.tsx";
import { Separator } from "@/components/ui/separator.tsx";
import {API} from "@/service";
import {useCallback, useEffect, useMemo, useState} from "react";
import {Outlet, useLocation, useNavigate, useParams} from "react-router-dom";
import {SidebarInset, SidebarProvider, SidebarTrigger,} from "@/components/ui/sidebar.tsx";
import {SidebarMenu} from "@/components/sidebar.tsx";
import {Separator} from "@/components/ui/separator.tsx";
import ErrorBoundary from "@/components/errorBoundary.tsx";
import { CircleFadingPlusIcon, Home, Settings } from "lucide-react";
import {CircleFadingPlusIcon, Home, Settings} from "lucide-react";
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from "@/components/ui/breadcrumb.tsx";
import { Api } from "@/types/api.ts";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select.tsx";
import { NavRoutes } from "@/components/nav-route.tsx";
import {Api} from "@/types/api.ts";
import {Select, SelectContent, SelectItem, SelectTrigger, SelectValue,} from "@/components/ui/select.tsx";
import {NavRoutes} from "@/components/nav-route.tsx";

const MenuItems = (apiName: string, version: string) => [
{
title: "Overview",
url: `/apis/${apiName}/version/${version}`,
icon: Home,
},
{
title: "Settings",
url: `/apis/${apiName}/version/${version}/settings`,
icon: Settings,
},
{
title: "New Version",
url: `/apis/${apiName}/version/${version}/newversion`,
icon: CircleFadingPlusIcon,
},
{
title: "Overview",
url: `/apis/${apiName}/version/${version}`,
icon: Home,
},
{
title: "Settings",
url: `/apis/${apiName}/version/${version}/settings`,
icon: Settings,
},
{
title: "New Version",
url: `/apis/${apiName}/version/${version}/newversion`,
icon: CircleFadingPlusIcon,
},
];

export const ApiLayout = () => {
const { apiName, version } = useParams();
const navigate = useNavigate();
const [apiDetails, setApiDetails] = useState([] as Api[]);
const {apiName, version} = useParams();
const navigate = useNavigate();
const [apiDetails, setApiDetails] = useState([] as Api[]);

const [currentApiDetails, setCurrentApiDetails] = useState({} as Api);
const [currentMenu, setCurrentMenu] = useState("Overview");
const [currentApiDetails, setCurrentApiDetails] = useState({} as Api);
const [currentMenu, setCurrentMenu] = useState("Overview");

const basePath = useLocation().pathname.replace(
`/apis/${apiName}/version/${version}`,
""
);
const sortedVersions = useMemo(() => {
return [...apiDetails].sort((a, b) =>
b.version.localeCompare(a.version, undefined, { numeric: true })
const basePath = useLocation().pathname.replace(
`/apis/${apiName}/version/${version}`,
""
);
}, [apiDetails]);

useEffect(() => {
API.getApi(apiName!).then(async (response) => {
setApiDetails(response);
const selectedApi = response.find((api) => api.version === version);
if (selectedApi) {
setCurrentApiDetails(selectedApi);
}
});
if (location.pathname.includes("settings")) setCurrentMenu("Settings");
else if (location.pathname.includes("routes")) setCurrentMenu("Routes");
else if (location.pathname.includes("newversion"))
setCurrentMenu("New Version");
else if (location.pathname.includes("manage")) setCurrentMenu("Manage");
}, [apiName, version]);
const sortedVersions = useMemo(() => {
return [...apiDetails].sort((a, b) =>
b.version.localeCompare(a.version, undefined, {numeric: true})
);
}, [apiDetails]);

const handleNavigateHome = useCallback(() => {
navigate(`/apis/${apiName}/version/${version}`);
setCurrentMenu("Overview");
}, [navigate, apiName, version]);
useEffect(() => {
API.getApi(apiName!).then(async (response) => {
setApiDetails(response);
const selectedApi = response.find((api) => api.version === version);
if (selectedApi) {
setCurrentApiDetails(selectedApi);
}
});
if (location.pathname.includes("settings")) setCurrentMenu("Settings");
else if (location.pathname.includes("routes/add"))
setCurrentMenu("Add New Route");
else if (location.pathname.includes("routes")) setCurrentMenu("Routes");
else if (location.pathname.includes("newversion"))
setCurrentMenu("New Version");
else if (location.pathname.includes("manage")) setCurrentMenu("Manage");
}, [apiName, version]);

return (
<ErrorBoundary>
<SidebarProvider>
<SidebarMenu
menus={MenuItems(apiName!, version!)}
activeItem={currentMenu}
setActiveItem={setCurrentMenu}
title={"Worker"}
>
<NavRoutes
routes={(currentApiDetails?.routes || []).map((route) => {
return {
method: route.method,
name: route.path,
url: `/apis/${apiName}/version/${version}/routes/?path=${route.path}&method=${route.method}`,
};
})}
newRouteEndpoint={`/apis/${apiName}/version/${version}/routes/add?`}
setActiveItem={(value) => setCurrentMenu(value)}
activeItem={currentMenu}
/>
</SidebarMenu>
<SidebarInset>
<header className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12 border-b">
<div className="flex items-center gap-2 px-4">
<SidebarTrigger className="-ml-1" />
<Separator orientation="vertical" className="mr-2 h-4" />
const handleNavigateHome = useCallback(() => {
navigate(`/apis/${apiName}/version/${version}`);
setCurrentMenu("Overview");
}, [navigate, apiName, version]);

<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem className="hidden md:block cursor-pointer">
<BreadcrumbLink asChild>
<span onClick={handleNavigateHome}>{apiName}</span>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator className="hidden md:block" />
<BreadcrumbItem>
<BreadcrumbPage>{currentMenu}</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
{/*push this to right*/}
<div className={"flex items-center gap-4"}>
<div className="flex items-center gap-2">
<Select
defaultValue={version}
onValueChange={(version) => {
const selectedApi = apiDetails.find(
(api) => api.version === version
);
if (selectedApi) {
navigate(
`/apis/${apiName}/version/${version}${basePath}`
);
}
}}
return (
<ErrorBoundary>
<SidebarProvider>
<SidebarMenu
menus={MenuItems(apiName!, version!)}
activeItem={currentMenu}
setActiveItem={setCurrentMenu}
title={"Worker"}
>
<SelectTrigger>
<SelectValue>{version}</SelectValue>
</SelectTrigger>
<SelectContent>
{sortedVersions.map((api) => (
<SelectItem value={api.version} key={api.version}>
{api.version} {api.draft ? "(Draft)" : "(Published)"}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
</div>
</header>
<ErrorBoundary>
<Outlet />
</ErrorBoundary>
</SidebarInset>
</SidebarProvider>
</ErrorBoundary>
);
<NavRoutes
routes={(currentApiDetails?.routes || []).map((route) => {
return {
method: route.method,
name: route.path,
url: `/apis/${apiName}/version/${version}/routes/?path=${route.path}&method=${route.method}`,
};
})}
newRouteEndpoint={`/apis/${apiName}/version/${version}/routes/add?`}
setActiveItem={(value) => setCurrentMenu(value)}
activeItem={currentMenu}
/>
</SidebarMenu>
<SidebarInset>
<header
className="flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12 border-b">
<div className="flex items-center gap-2 px-4">
<SidebarTrigger className="-ml-1"/>
<Separator orientation="vertical" className="mr-2 h-4"/>

<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem className="hidden md:block cursor-pointer">
<BreadcrumbLink asChild>
<span onClick={handleNavigateHome}>{apiName}</span>
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator className="hidden md:block"/>
<BreadcrumbItem>
<BreadcrumbPage>{currentMenu}</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</div>
{/*push this to right*/}
<div className={"flex items-center gap-4"}>
<div className="flex items-center gap-2">
<Select
defaultValue={version}
onValueChange={(version) => {
const selectedApi = apiDetails.find(
(api) => api.version === version
);
if (selectedApi) {
navigate(
`/apis/${apiName}/version/${version}${basePath}`
);
}
}}
>
<SelectTrigger>
<SelectValue>{version}</SelectValue>
</SelectTrigger>
<SelectContent>
{sortedVersions.map((api) => (
<SelectItem value={api.version} key={api.version}>
{api.version} {api.draft ? "(Draft)" : "(Published)"}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
</div>
</header>
<ErrorBoundary>
<Outlet/>
</ErrorBoundary>
</SidebarInset>
</SidebarProvider>
</ErrorBoundary>
);
};
Loading

0 comments on commit 8c3d9b1

Please sign in to comment.