Skip to content

Feat/message page#333

Merged
motirebuma merged 9 commits intomainfrom
feat/message-page
Apr 21, 2026
Merged

Feat/message page#333
motirebuma merged 9 commits intomainfrom
feat/message-page

Conversation

@motirebuma
Copy link
Copy Markdown
Collaborator

  • Refine the message section UI making it cleaner and more visually appealing.
  • Implement the Chats, Groups, and Buddies features so that their functionality matches the behavior in the monorepo version, ensuring consistency in how they work and interact
  • fuctionality add buddy, accept, reject buddy functionality in the message section
  • chat functionality with friend is implemented
  • discussion group functionality on the message section fixed
  • Enhance the navbar UI to make it more visually appealing, clean, and modern.

Copilot AI review requested due to automatic review settings April 21, 2026 17:32
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
quotevote Ready Ready Preview, Comment Apr 21, 2026 5:59pm

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR modernizes the dashboard navbar and messaging UI, and brings chat/buddy behaviors (staged DMs, unread/read handling, roster interactions) closer to the monorepo implementation.

Changes:

  • Introduces staged (not-yet-persisted) DM rooms and updates store typing to support them.
  • Adds read/unread support plumbing (GraphQL readBy, mark-as-read mutation, unread badges/toasts) and refines multiple chat components’ UI.
  • Reworks the dashboard navbar (desktop/mobile) and centralizes Explore search via a new navbar search component.

Reviewed changes

Copilot reviewed 25 out of 25 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
quotevote-frontend/src/types/store.ts Extends selectedRoom typing to support staged rooms.
quotevote-frontend/src/types/chat.ts Adds StagedChatRoom type for composing new DMs pre-first-message.
quotevote-frontend/src/store/useAppStore.ts Updates store action typing for staged room selection.
quotevote-frontend/src/graphql/queries.ts Expands buddy/roster/message fields (name, readBy).
quotevote-frontend/src/graphql/mutations.ts Adds mark-as-read mutation (READ_MESSAGES).
quotevote-frontend/src/components/ui/sheet.tsx Removes default close button from SheetContent.
quotevote-frontend/src/components/Notifications/MobileDrawer.tsx Adds optional header and changes dismissal interactions.
quotevote-frontend/src/components/Navbars/NavSearch.tsx New debounced navbar search that syncs q with Explore route.
quotevote-frontend/src/components/Chat/UserSearchResults.tsx Adds roster-aware buddy status + accept flow in user search results.
quotevote-frontend/src/components/Chat/PresenceIcon.tsx Updates presence color styling.
quotevote-frontend/src/components/Chat/MessageSend.tsx Adds staged-room handling improvement and UI refresh of message composer.
quotevote-frontend/src/components/Chat/MessageItemList.tsx Adds mark-as-read loop and simplifies subscription refetch handling.
quotevote-frontend/src/components/Chat/MessageItem.tsx UI refinements + read indicator styling.
quotevote-frontend/src/components/Chat/MessageBox.tsx Renders compose view for staged rooms and refreshes layout styling.
quotevote-frontend/src/components/Chat/ChatTabs.tsx Updates chat tab styling to new theme colors.
quotevote-frontend/src/components/Chat/ChatSearchInput.tsx Updates search input styling to new theme colors.
quotevote-frontend/src/components/Chat/ChatMenu.tsx Adds unread badge + toast notifications for incoming messages.
quotevote-frontend/src/components/Chat/ChatList.tsx Adjusts selection logic for staged-vs-string room IDs and UI polish.
quotevote-frontend/src/components/Chat/ChatContent.tsx Adds close control and updates header styling.
quotevote-frontend/src/components/Chat/AddBuddyDialog.tsx Styling updates and button theming.
quotevote-frontend/src/components/BuddyList/BuddyListWithPresence.tsx Refines pending-request filtering and status styling.
quotevote-frontend/src/components/BuddyList/BuddyItemList.tsx Stages new DM room when no existing room is found.
quotevote-frontend/src/app/globals.css Reorganizes :focus-visible styling into Tailwind base layer.
quotevote-frontend/src/app/dashboard/layout.tsx Major navbar redesign + unread badges for notifications/messages.
quotevote-frontend/src/app/dashboard/explore/ExploreContent.tsx Removes in-page search UI and relies on q param driven search/filtering.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +40 to +54
if (!debouncedQuery && !inputValue) return;

if (isExplorePage) {
const params = new URLSearchParams(searchParams.toString());
if (debouncedQuery) {
params.set('q', debouncedQuery);
} else {
params.delete('q');
}
router.replace(`/dashboard/explore?${params.toString()}`);
} else if (debouncedQuery) {
router.push(`/dashboard/explore?q=${encodeURIComponent(debouncedQuery)}`);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [debouncedQuery]);
Comment on lines +254 to 263
<Link href="/dashboard/notifications" className="outline-none" aria-label="Notifications">
<IconBtn
label={unreadCount > 0 ? `Notifications (${unreadCount} unread)` : 'Notifications'}
badge={unreadCount}
badgeColor="red"
active={isActive('/dashboard/notifications')}
>
<Bell className="size-5" fill={isActive('/dashboard/notifications') ? 'currentColor' : 'none'} />
</IconBtn>
</Link>
Comment on lines +376 to +384
<Link href="/dashboard/notifications" className="outline-none">
<IconBtn
label="Notifications"
badge={unreadCount}
badgeColor="red"
active={isActive('/dashboard/notifications')}
>
<Bell className="size-5" fill={isActive('/dashboard/notifications') ? 'currentColor' : 'none'} />
</IconBtn>
Comment on lines 30 to +36
<Sheet open={open} onOpenChange={onClose}>
<SheetContent side={anchor} className="w-full max-w-[400px] sm:w-[400px] p-0 flex flex-col">
<SheetHeader className="px-4 py-3 border-b border-[var(--color-gray-light)]">
<div className="flex items-center gap-2">
<Button
variant="ghost"
size="sm"
onClick={onClose}
className="p-2"
aria-label="Back"
>
<ArrowLeft className="w-5 h-5" />
</Button>
<SheetTitle className="text-lg font-semibold text-[var(--color-text-primary)]">
{title}
</SheetTitle>
</div>
</SheetHeader>
<SheetContent
side={anchor}
className="w-full max-w-[400px] sm:w-[400px] p-0 flex flex-col"
onInteractOutside={(e) => e.preventDefault()}
onEscapeKeyDown={(e) => e.preventDefault()}
>
variables: { messageRoomId },
skip: !messageRoomId,
// Poll every 3 seconds to keep read-related data reasonably fresh
pollInterval: messageRoomId ? 3000 : 0,
@motirebuma motirebuma merged commit 05f13fb into main Apr 21, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants