Message Inbox
deso-ui/message-inboxFreeBlock
A complete chat interface for messaging between users.
Install it
npx shadcn@latest add https://ui.deso.com/r/message-inbox.jsonSource
1'use client';23import React, { useRef, useEffect } from 'react';4import { MessageChatList, Message } from './message-chat-list';5import { cn } from '@/lib/utils/deso';6import { MessageInboxItem } from './message-inbox-item';7import { UserSearch } from './user-search';8import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';9import { Badge } from '@/components/ui/badge';10import { Editor, EditorSubmitData } from './editor';1112export interface ChatUser {13 publicKey: string;14 username?: string;15}1617export interface MessageInboxSidebarItem {18 publicKey: string;19 lastMessage: string;20 lastTimestamp: string | Date;21 unreadCount?: number;22}2324export interface MessageInboxProps {25 users: ChatUser[];26 currentUserPublicKey: string;27 messages: Message[];28 onSendMessage?: (message: string) => void;29 selectedUserPublicKey: string;30 onSelectUser?: (publicKey: string) => void;31 className?: string;32 primaryItems: MessageInboxSidebarItem[];33 requestItems?: MessageInboxSidebarItem[];34 onMarkAsRead?: (publicKey: string) => void;35 onArchive?: (publicKey: string) => void;36}3738export function MessageInbox({39 users,40 currentUserPublicKey,41 messages,42 onSendMessage,43 selectedUserPublicKey,44 onSelectUser,45 className,46 primaryItems,47 requestItems = [],48 onMarkAsRead,49 onArchive,50}: MessageInboxProps) {51 const messagesContainerRef = useRef<HTMLDivElement>(null);5253 // Always scroll to bottom when messages change54 useEffect(() => {55 const container = messagesContainerRef.current;56 if (container) {57 container.scrollTop = container.scrollHeight;58 }59 }, [messages]);6061 const handleSendMessage = (data: EditorSubmitData) => {62 if (data.postText.trim()) {63 onSendMessage?.(data.postText);64 }65 };6667 return (68 <div className={cn('flex border border-border rounded-lg overflow-hidden h-[90vh] bg-background', className)}>69 {/* Sidebar */}70 <aside className="w-80 border-r border-border bg-muted/30 flex flex-col">71 <div className="p-4 border-b border-border">72 <h2 className="text-xl font-bold mb-4">Messages</h2>73 {onSelectUser && <UserSearch onSelectUser={onSelectUser} />}74 </div>75 <Tabs76 defaultValue="primary"77 className="flex-1 flex flex-col overflow-y-hidden gap-0"78 >79 <TabsList className="h-12 p-2 w-full rounded-none border-b border-border bg-accent -mb-[1px]">80// … truncated
What it pulls in
Other registry items
Files it writes
More from deso-ui
All 47 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Action Menuaction-menu | deso-ui | Blocks | Free | no deps | |
| Confirmation Dialogconfirmation-dialog | deso-ui | Blocks | Free | no deps | |
| Copy Buttoncopy-button | deso-ui | Blocks | Free | no deps | |
| Editoreditor | deso-ui | Blocks | Free | no deps | |
| Editor Emoji Pickereditor-emoji-picker | deso-ui | Blocks | Free | no deps | |
| Editor Markdowneditor-markdown | deso-ui | Blocks | Free | no deps | |
| Editor Uploadeditor-upload | deso-ui | Blocks | Free | no deps | |
| Feed Listfeed-list | deso-ui | Blocks | Free | no deps |
