Merged
Conversation
Collaborator
motirebuma
commented
Apr 21, 2026
- 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.
…pt, reject and add buddies is done
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
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, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.