xtablo-source/apps/main/src/components/TabloDiscussionSection.tsx
Arthur Belleville b7a6798cad
fix(chat): normalize REST messages, full-width layout, and UI cleanup
- Normalize snake_case REST API responses to camelCase in useChat so
  messages are correctly attributed after page reload
- Remove max-w-3xl from chat-ui messages and composer for full-width
- Remove discussion header/border so chat fills the tablo section
- Remove plan badge pills from settings page header
- Use org logo in NavigationBar avatar instead of first-letter fallback
- Persist plan announcement in localStorage instead of sessionStorage

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:10:12 +02:00

50 lines
1.3 KiB
TypeScript

import { UserTablo } from "@xtablo/shared/types/tablos.types";
import { useEffect } from "react";
import { useChat } from "../hooks/useChat";
import { useTabloMembers } from "../hooks/tablos";
import { useUser } from "../providers/UserStoreProvider";
import { ChatMessages } from "./ChatMessages";
interface TabloDiscussionSectionProps {
tablo: UserTablo;
isAdmin: boolean;
}
export const TabloDiscussionSection = ({ tablo }: TabloDiscussionSectionProps) => {
const user = useUser();
const {
messages,
sendMessage,
sendTyping,
typingUsers,
loadMoreMessages,
hasMoreMessages,
markAsRead,
} = useChat(tablo.id);
const { data: members = [] } = useTabloMembers(tablo.id);
// Mark as read when opening the discussion
useEffect(() => {
if (messages.length > 0) {
markAsRead();
}
}, [messages.length, markAsRead]);
return (
<div className="flex flex-col h-full overflow-hidden">
<div className="flex-1 overflow-hidden min-h-0">
<ChatMessages
messages={messages}
currentUserId={user.id}
members={members}
typingUsers={typingUsers}
hasMoreMessages={hasMoreMessages}
onLoadMore={loadMoreMessages}
onSend={sendMessage}
onTyping={sendTyping}
/>
</div>
</div>
);
};