diff --git a/backend/models/brain_entity.py b/backend/models/brain_entity.py index 0ce458079647..f98e0b87d7b2 100644 --- a/backend/models/brain_entity.py +++ b/backend/models/brain_entity.py @@ -32,3 +32,4 @@ class MinimalBrainEntity(BaseModel): id: UUID name: str rights: RoleEnum + status: str diff --git a/backend/models/databases/supabase/brains.py b/backend/models/databases/supabase/brains.py index 26773d3d6142..32af7249a4e0 100644 --- a/backend/models/databases/supabase/brains.py +++ b/backend/models/databases/supabase/brains.py @@ -58,7 +58,7 @@ def create_brain(self, brain: CreateBrainProperties): def get_user_brains(self, user_id) -> list[MinimalBrainEntity]: response = ( self.db.from_("brains_users") - .select("id:brain_id, rights, brains (id: brain_id, name)") + .select("id:brain_id, rights, brains (id: brain_id, name, status)") .filter("user_id", "eq", user_id) .execute() ) @@ -69,6 +69,7 @@ def get_user_brains(self, user_id) -> list[MinimalBrainEntity]: id=item["brains"]["id"], name=item["brains"]["name"], rights=item["rights"], + status=item["brains"]["status"], ) ) user_brains[-1].rights = item["rights"] @@ -77,7 +78,7 @@ def get_user_brains(self, user_id) -> list[MinimalBrainEntity]: def get_brain_for_user(self, user_id, brain_id) -> MinimalBrainEntity | None: response = ( self.db.from_("brains_users") - .select("id:brain_id, rights, brains (id: brain_id, name)") + .select("id:brain_id, rights, brains (id: brain_id, status, name)") .filter("user_id", "eq", user_id) .filter("brain_id", "eq", brain_id) .execute() @@ -90,6 +91,7 @@ def get_brain_for_user(self, user_id, brain_id) -> MinimalBrainEntity | None: id=brain_data["brains"]["id"], name=brain_data["brains"]["name"], rights=brain_data["rights"], + status=brain_data["brains"]["status"], ) def get_brain_details(self, brain_id): diff --git a/backend/repository/brain/get_user_brains.py b/backend/repository/brain/get_user_brains.py index f2a637c5e898..e5d8d7568e21 100644 --- a/backend/repository/brain/get_user_brains.py +++ b/backend/repository/brain/get_user_brains.py @@ -1,9 +1,10 @@ from uuid import UUID -from models import BrainEntity, get_supabase_db +from models import get_supabase_db +from models.brain_entity import MinimalBrainEntity -def get_user_brains(user_id: UUID) -> list[BrainEntity]: +def get_user_brains(user_id: UUID) -> list[MinimalBrainEntity]: supabase_db = get_supabase_db() results = supabase_db.get_user_brains(user_id) # type: ignore diff --git a/backend/routes/brain_routes.py b/backend/routes/brain_routes.py index 104bcb5f1afc..24d7dc374938 100644 --- a/backend/routes/brain_routes.py +++ b/backend/routes/brain_routes.py @@ -21,6 +21,7 @@ update_brain_by_id, ) from repository.prompt import delete_prompt_by_id, get_prompt_by_id + from routes.authorizations.brain_authorization import has_brain_authorization from routes.authorizations.types import RoleEnum @@ -31,7 +32,9 @@ # get all brains @brain_router.get("/brains/", dependencies=[Depends(AuthBearer())], tags=["Brain"]) -async def brain_endpoint(current_user: UserIdentity = Depends(get_current_user)): +async def brain_endpoint( + current_user: UserIdentity = Depends(get_current_user), +): """ Retrieve all brains for the current user. diff --git a/frontend/app/brains-management/[brainId]/components/BrainListItem/BrainListItem.tsx b/frontend/app/brains-management/[brainId]/components/BrainListItem/BrainListItem.tsx index 77cda2eea6c2..60d2494e22cf 100644 --- a/frontend/app/brains-management/[brainId]/components/BrainListItem/BrainListItem.tsx +++ b/frontend/app/brains-management/[brainId]/components/BrainListItem/BrainListItem.tsx @@ -1,17 +1,19 @@ import Link from "next/link"; +import { useTranslation } from "react-i18next"; import { FaBrain } from "react-icons/fa"; +import { Chip } from "@/lib/components/ui/Chip"; import { MinimalBrainForUser } from "@/lib/context/BrainProvider/types"; import { cn } from "@/lib/utils"; import { useBrainListItem } from "./hooks/useBrainListItem"; -interface BrainsListItemProps { +type BrainsListItemProps = { brain: MinimalBrainForUser; -} - +}; export const BrainListItem = ({ brain }: BrainsListItemProps): JSX.Element => { const { selected } = useBrainListItem(brain); + const { t } = useTranslation("brain"); return (
{ href={`/brains-management/${brain.id}`} key={brain.id} > -
- -

{brain.name}

+
+
+ +

{brain.name}

+
+ {brain.status === "public" && ( + {t("public_brain_label")} + )}
); diff --git a/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/BrainManagementTabs.tsx b/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/BrainManagementTabs.tsx index 34e12572e114..9f3bc287410d 100644 --- a/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/BrainManagementTabs.tsx +++ b/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/BrainManagementTabs.tsx @@ -17,8 +17,11 @@ export const BrainManagementTabs = (): JSX.Element => { handleDeleteBrain, isDeleteModalOpen, setIsDeleteModalOpen, + brain, } = useBrainManagementTabs(); + const isPubliclyAccessible = brain?.status === "public"; + if (brainId === undefined) { return
; } @@ -38,21 +41,25 @@ export const BrainManagementTabs = (): JSX.Element => { value="settings" onChange={setSelectedTab} /> - - + {!isPubliclyAccessible && ( + <> + + + + )} -
+
@@ -66,6 +73,7 @@ export const BrainManagementTabs = (): JSX.Element => {
- )} +
+ {isPubliclyAccessible && ( + + {t("brain:public_brain_label")} + + )} + {isDefaultBrain ? ( +
+ {t("defaultBrain", { ns: "brain" })} +
+ ) : ( + + )} +