🔖 feat: Conversation Bookmarks (#3344)

* feat: add tags property in Conversation model

* feat: add ConversationTag model

* feat: add the tags parameter to getConvosByPage

* feat: add API route to ConversationTag

* feat: add types of ConversationTag

* feat: add data access functions for conversation tags

* feat: add Bookmark table component

* feat: Add an action to bookmark

* feat: add Bookmark nav component

* fix: failed test

* refactor: made 'Saved' tag a constant

* feat: add new bookmark to current conversation

* chore: Add comment

* fix: delete tag from conversations when it's deleted

* fix: Update the query cache when the tag title is changed.

* chore: fix typo

* refactor: add description of rebuilding bookmarks

* chore: remove unused variables

* fix: position when adding a new bookmark

* refactor: add comment, rename a function

* refactor: add a unique constraint in ConversationTag

* chore: add localizations
This commit is contained in:
Yuichi Oneda 2024-07-29 07:45:59 -07:00 committed by GitHub
parent d4d56281e3
commit e565e0faab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
65 changed files with 3751 additions and 36 deletions

View file

@ -145,25 +145,37 @@ export const updateConversation = (
);
};
export const updateConvoFields: ConversationUpdater = (
export const updateConvoFields = (
data: ConversationData,
updatedConversation: Partial<TConversation> & Pick<TConversation, 'conversationId'>,
keepPosition = false,
): ConversationData => {
const newData = JSON.parse(JSON.stringify(data));
const { pageIndex, index } = findPageForConversation(
newData,
updatedConversation as { conversationId: string },
);
if (pageIndex !== -1 && index !== -1) {
const deleted = newData.pages[pageIndex].conversations.splice(index, 1);
const oldConversation = deleted[0] as TConversation;
const oldConversation = newData.pages[pageIndex].conversations[index] as TConversation;
newData.pages[0].conversations.unshift({
...oldConversation,
...updatedConversation,
updatedAt: new Date().toISOString(),
});
/**
* Do not change the position of the conversation if the tags are updated.
*/
if (keepPosition) {
const updatedConvo = {
...oldConversation,
...updatedConversation,
};
newData.pages[pageIndex].conversations[index] = updatedConvo;
} else {
const updatedConvo = {
...oldConversation,
...updatedConversation,
updatedAt: new Date().toISOString(),
};
newData.pages[pageIndex].conversations.splice(index, 1);
newData.pages[0].conversations.unshift(updatedConvo);
}
}
return newData;