Feat: Pin & Unpin chats across app (sidebar + history) #261
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.
Overview
Adds pin/unpin for chats, shows a dedicated “Pinned” section in the sidebar and drawer history, and keeps pinned chats ordered by most recently pinned. Pinned chats are excluded from date-based groups.
Changes made
Database
pinned boolean DEFAULT false NOT NULL
pinned_at timestamptz NULL
API
POST /api/toggle-chat-pin
{ chatId: string, pinned: boolean }
pinned
andpinned_at
accordingly; does not bumpupdated_at
UI
sidebar-item-menu.tsx
: Pin/Unpin item (usestogglePinned
), icons fromlucide-react
app-sidebar.tsx
: New “Pinned” section above grouped lists; usespinnedChats
(or a localuseMemo
if not exposed)history/utils.ts
:groupChatsByDate
skips pinned to avoid duplicatesdrawer-history.tsx
: Pin/Unpin button in each row; “Pinned” section above groups; date showsupdated_at || created_at
Behavior
pinned_at DESC
)updated_at
bucketsupdated_at
updated_at
for unpinned itemsMigration
Manual testing
Notes
Previews
In Sidebar:
sidebar.mp4
In Command & Drawer history:
command+drawer.mp4