diff --git a/web/src/components/ChatInfoPanel.tsx b/web/src/components/ChatInfoPanel.tsx
index d649e0e..0a54b10 100644
--- a/web/src/components/ChatInfoPanel.tsx
+++ b/web/src/components/ChatInfoPanel.tsx
@@ -61,9 +61,20 @@ export function ChatInfoPanel({ chatId, open, onClose }: Props) {
}
return members.find((m) => m.user_id === me?.id)?.role;
}, [chat?.my_role, members, me?.id]);
+ const myRoleNormalized = useMemo(() => {
+ if (!myRole) {
+ return null;
+ }
+ const role = String(myRole).toLowerCase();
+ if (role === "owner" || role === "admin" || role === "member") {
+ return role;
+ }
+ return null;
+ }, [myRole]);
const isGroupLike = chat?.type === "group" || chat?.type === "channel";
const showMembersSection = Boolean(chat && isGroupLike && !chat.is_saved);
- const canManageMembers = Boolean(isGroupLike && (myRole === "owner" || myRole === "admin"));
+ const canManageMembers = Boolean(isGroupLike && (myRoleNormalized === "owner" || myRoleNormalized === "admin"));
+ const canEditTitle = Boolean(isGroupLike && (myRoleNormalized === "owner" || myRoleNormalized === "admin"));
const photoAttachments = useMemo(() => attachments.filter((item) => item.file_type.startsWith("image/")).sort((a, b) => b.id - a.id), [attachments]);
const videoAttachments = useMemo(() => attachments.filter((item) => item.file_type.startsWith("video/")).sort((a, b) => b.id - a.id), [attachments]);
const voiceAttachments = useMemo(() => attachments.filter((item) => item.message_type === "voice").sort((a, b) => b.id - a.id), [attachments]);
@@ -259,7 +270,7 @@ export function ChatInfoPanel({ chatId, open, onClose }: Props) {
{muted ? "Chat notifications are muted." : "Chat notifications are enabled."}
- {isGroupLike ? (
+ {isGroupLike && canEditTitle ? (
<>
Title
event.stopPropagation()}
>
- {myRole === "owner" && memberCtx.member.role === "member" ? (
+ {myRoleNormalized === "owner" && memberCtx.member.role === "member" ? (
) : null}
- {myRole === "owner" && memberCtx.member.role === "admin" ? (
+ {myRoleNormalized === "owner" && memberCtx.member.role === "admin" ? (
) : null}
- {myRole === "owner" && memberCtx.member.role !== "owner" ? (
+ {myRoleNormalized === "owner" && memberCtx.member.role !== "owner" ? (
) : null}
- {(myRole === "owner" || (myRole === "admin" && memberCtx.member.role === "member")) ? (
+ {(myRoleNormalized === "owner" || (myRoleNormalized === "admin" && memberCtx.member.role === "member")) ? (