diff --git a/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py b/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py
index bbf36b7..0403b57 100644
--- a/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py
+++ b/pkgs/clan-cli/clan_cli/webui/routers/endpoints.py
@@ -168,6 +168,14 @@ def get_entity_by_roles(
return entity
+@router.get("/api/v1/entity_by_role", response_model=List[Entity], tags=[Tags.entities])
+def get_entity_by_role(
+ role: Role, db: Session = Depends(sql_db.get_db)
+) -> List[sql_models.Entity]:
+ entity = sql_crud.get_entity_by_role(db, roles=[role])
+ return entity
+
+
@router.get("/api/v1/entities", response_model=List[Entity], tags=[Tags.entities])
def get_all_entities(
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
diff --git a/pkgs/clan-cli/tests/test_db_api.py b/pkgs/clan-cli/tests/test_db_api.py
index 1c88810..eb50c9b 100644
--- a/pkgs/clan-cli/tests/test_db_api.py
+++ b/pkgs/clan-cli/tests/test_db_api.py
@@ -40,7 +40,7 @@ def test_health(api_client: ApiClient) -> None:
def create_entities(num: int = 5, role: str = "entity") -> list[EntityCreate]:
res = []
- for i in range(num):
+ for i in range(1, num + 1):
en = EntityCreate(
did=f"did:sov:test:12{i}",
name=f"C{i}",
@@ -125,8 +125,7 @@ random.seed(77)
def create_eventmessages(num: int = 4) -> list[EventmessageCreate]:
res = []
starttime = int(time.time())
- for idx in range(num):
- i2 = idx + 1
+ for i2 in range(1, num + 1):
group_id = i2 % 5 + random.getrandbits(6) + 1
em_req_send = EventmessageCreate(
timestamp=starttime + i2 * 10,
diff --git a/pkgs/ui/src/app/client/[name]/page.tsx b/pkgs/ui/src/app/client/[name]/page.tsx
deleted file mode 100644
index 1068f34..0000000
--- a/pkgs/ui/src/app/client/[name]/page.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import Client from "@/app/client/client";
-import { menuEntityEntries } from "@/components/sidebar";
-
-export const dynamic = "error";
-export const dynamicParams = false;
-/*
-The generateStaticParams function can be used in combination with dynamic route segments
-to statically generate routes at build time instead of on-demand at request time.
-During next dev, generateStaticParams will be called when you navigate to a route.
-During next build, generateStaticParams runs before the corresponding Layouts or Pages are generated.
-https://nextjs.org/docs/app/api-reference/functions/generate-static-params
-*/
-export function generateStaticParams() {
- return menuEntityEntries.map((entry) => ({
- name: entry.label,
- }));
-}
-
-export default function Page({ params }: { params: { name: string } }) {
- return ;
-}
diff --git a/pkgs/ui/src/app/client/client.tsx b/pkgs/ui/src/app/client/client.tsx
index 8871887..2be8284 100644
--- a/pkgs/ui/src/app/client/client.tsx
+++ b/pkgs/ui/src/app/client/client.tsx
@@ -26,6 +26,7 @@ import useGetEntityByNameOrDid from "@/components/hooks/useGetEntityByNameOrDid"
import { useGetAllServices } from "@/api/services/services";
import axios from "axios";
import CloseIcon from "@mui/icons-material/Close";
+import { useSearchParams } from "next/navigation";
interface SnackMessage {
message: string;
@@ -105,8 +106,10 @@ const AttachButton = ({
);
};
-export default function Client({ params }: { params: { name: string } }) {
- const { name } = params;
+export default function Client() {
+ const searchParams = useSearchParams();
+ console.log("params: ", searchParams);
+ const name = searchParams.get("name") ?? "";
const { entity: entity } = useGetEntityByNameOrDid(name);
const {
diff --git a/pkgs/ui/src/app/client/page.tsx b/pkgs/ui/src/app/client/page.tsx
new file mode 100644
index 0000000..5377c57
--- /dev/null
+++ b/pkgs/ui/src/app/client/page.tsx
@@ -0,0 +1,5 @@
+import Client from "@/app/client/client";
+
+export default function Page() {
+ return ;
+}
diff --git a/pkgs/ui/src/components/sidebar/index.tsx b/pkgs/ui/src/components/sidebar/index.tsx
index b2b7f25..69ac216 100644
--- a/pkgs/ui/src/components/sidebar/index.tsx
+++ b/pkgs/ui/src/components/sidebar/index.tsx
@@ -9,7 +9,8 @@ import {
Tooltip,
useMediaQuery,
} from "@mui/material";
-import { useGetAllEntities } from "@/api/entities/entities";
+import { useGetEntityByRole } from "@/api/entities/entities";
+import { Role } from "@/api/model/role";
import Image from "next/image";
import React, { ReactNode } from "react";
@@ -34,8 +35,6 @@ type MenuEntry = {
subMenuEntries?: MenuEntry[];
};
-export let menuEntityEntries: MenuEntry[] = [];
-
export const menuEntries: MenuEntry[] = [
{
icon: ,
@@ -72,7 +71,9 @@ interface SidebarProps {
}
export function Sidebar(props: SidebarProps) {
- const { data: entityData } = useGetAllEntities();
+ const { data: entityData } = useGetEntityByRole({
+ role: Role.service_prosumer,
+ });
const { show, onClose } = props;
const [activeMenuItem, setActiveMenuItem] = React.useState(
typeof window !== "undefined" ? window.location.pathname : "",
@@ -89,19 +90,22 @@ export function Sidebar(props: SidebarProps) {
setCollapseMenuOpen(!collapseMenuOpen);
};
- React.useEffect(() => {
+ const menuEntityEntries: MenuEntry[] = React.useMemo(() => {
if (entityData) {
- menuEntityEntries = Array.isArray(entityData.data)
- ? entityData.data
- .filter((entity) => entity.name !== "AP" && entity.name !== "DLG")
- .map((entity) => ({
- icon: ,
- label: entity.name,
- to: `/client/${entity.name}`,
- disabled: false,
- }))
+ return Array.isArray(entityData.data)
+ ? entityData.data.map((entity) => ({
+ icon: ,
+ label: entity.name,
+ to: entity.name,
+ disabled: false,
+ }))
: [];
+ } else {
+ return [];
}
+ }, [entityData]);
+
+ React.useEffect(() => {
if (isSmallerScreen) {
setCollapseMenuOpen(false);
} else {
@@ -203,30 +207,35 @@ export function Sidebar(props: SidebarProps) {
>
{menuEntityEntries?.map((menuEntry, idx) => (
- handleMenuItemClick(menuEntry.to)}
+
- handleMenuItemClick(menuEntry.to)}
>
- {menuEntry.icon}
-
-
-
+
+ {menuEntry.icon}
+
+
+
+
))}